Merge "Apply Hdr transition rate only when cap is changed" into main
diff --git a/AconfigFlags.bp b/AconfigFlags.bp
index d3e80ae..fa11278 100644
--- a/AconfigFlags.bp
+++ b/AconfigFlags.bp
@@ -81,17 +81,20 @@
"com.android.input.flags-aconfig-java",
"com.android.internal.compat.flags-aconfig-java",
"com.android.internal.foldables.flags-aconfig-java",
+ "com.android.internal.os.flags-aconfig-java",
"com.android.internal.pm.pkg.component.flags-aconfig-java",
"com.android.media.flags.bettertogether-aconfig-java",
"com.android.media.flags.editing-aconfig-java",
"com.android.media.flags.performance-aconfig-java",
"com.android.media.flags.projection-aconfig-java",
"com.android.net.thread.platform.flags-aconfig-java",
+ "com.android.server.contextualsearch.flags-java",
"com.android.server.flags.services-aconfig-java",
"com.android.text.flags-aconfig-java",
"com.android.window.flags.window-aconfig-java",
"device_policy_aconfig_flags_lib",
"display_flags_lib",
+ "dropbox_flags_lib",
"framework-jobscheduler-job.flags-aconfig-java",
"framework_graphics_flags_java_lib",
"hwui_flags_java_lib",
@@ -160,6 +163,7 @@
aconfig_declarations {
name: "com.android.window.flags.window-aconfig",
package: "com.android.window.flags",
+ container: "system",
srcs: ["core/java/android/window/flags/*.aconfig"],
}
@@ -174,6 +178,7 @@
name: "android.hardware.devicestate.feature.flags-aconfig",
exportable: true,
package: "android.hardware.devicestate.feature.flags",
+ container: "system",
srcs: ["core/java/android/hardware/devicestate/feature/*.aconfig"],
}
@@ -188,6 +193,7 @@
name: "com.android.hardware.input.input-aconfig",
exportable: true,
package: "com.android.hardware.input",
+ container: "system",
srcs: ["core/java/android/hardware/input/*.aconfig"],
}
@@ -207,6 +213,7 @@
aconfig_declarations {
name: "com.android.text.flags-aconfig",
package: "com.android.text.flags",
+ container: "system",
srcs: ["core/java/android/text/flags/*.aconfig"],
}
@@ -225,6 +232,7 @@
aconfig_declarations {
name: "android.location.flags-aconfig",
package: "android.location.flags",
+ container: "system",
srcs: [
"location/java/android/location/flags/*.aconfig",
],
@@ -246,6 +254,7 @@
aconfig_declarations {
name: "android.nfc.flags-aconfig",
package: "android.nfc",
+ container: "system",
srcs: ["nfc/java/android/nfc/*.aconfig"],
}
@@ -276,6 +285,7 @@
aconfig_declarations {
name: "android.security.flags-aconfig",
package: "android.security",
+ container: "system",
srcs: ["core/java/android/security/*.aconfig"],
}
@@ -296,6 +306,7 @@
aconfig_declarations {
name: "android.app.usage.flags-aconfig",
package: "android.app.usage",
+ container: "system",
srcs: ["core/java/android/app/usage/*.aconfig"],
}
@@ -364,6 +375,20 @@
host_supported: true,
}
+// OS Internal
+aconfig_declarations {
+ name: "com.android.internal.os.flags-aconfig",
+ package: "com.android.internal.os",
+ container: "system",
+ srcs: ["core/java/com/android/internal/os/flags.aconfig"],
+}
+
+java_aconfig_library {
+ name: "com.android.internal.os.flags-aconfig-java",
+ aconfig_declarations: "com.android.internal.os.flags-aconfig",
+ defaults: ["framework-minus-apex-aconfig-java-defaults"],
+}
+
// VirtualDeviceManager
cc_aconfig_library {
name: "android.companion.virtualdevice.flags-aconfig-cc",
@@ -379,6 +404,7 @@
aconfig_declarations {
name: "android.companion.virtualdevice.flags-aconfig",
package: "android.companion.virtualdevice.flags",
+ container: "system",
srcs: ["core/java/android/companion/virtual/flags/*.aconfig"],
}
@@ -391,6 +417,7 @@
aconfig_declarations {
name: "android.companion.virtual.flags-aconfig",
package: "android.companion.virtual.flags",
+ container: "system",
srcs: ["core/java/android/companion/virtual/*.aconfig"],
}
@@ -398,6 +425,7 @@
aconfig_declarations {
name: "android.view.inputmethod.flags-aconfig",
package: "android.view.inputmethod",
+ container: "system",
srcs: ["core/java/android/view/inputmethod/flags.aconfig"],
}
@@ -411,6 +439,7 @@
aconfig_declarations {
name: "android.os.vibrator.flags-aconfig",
package: "android.os.vibrator",
+ container: "system",
srcs: ["core/java/android/os/vibrator/*.aconfig"],
}
@@ -424,6 +453,7 @@
aconfig_declarations {
name: "android.view.flags-aconfig",
package: "android.view.flags",
+ container: "system",
srcs: ["core/java/android/view/flags/*.aconfig"],
}
@@ -442,6 +472,7 @@
aconfig_declarations {
name: "android.view.accessibility.flags-aconfig",
package: "android.view.accessibility",
+ container: "system",
srcs: ["core/java/android/view/accessibility/flags/*.aconfig"],
}
@@ -461,6 +492,7 @@
name: "android.hardware.flags-aconfig",
exportable: true,
package: "android.hardware.flags",
+ container: "system",
srcs: ["core/java/android/hardware/flags/*.aconfig"],
}
@@ -474,6 +506,7 @@
aconfig_declarations {
name: "android.widget.flags-aconfig",
package: "android.widget.flags",
+ container: "system",
srcs: ["core/java/android/widget/flags/*.aconfig"],
}
@@ -493,6 +526,7 @@
aconfig_declarations {
name: "android.content.pm.flags-aconfig",
package: "android.content.pm",
+ container: "system",
srcs: ["core/java/android/content/pm/flags.aconfig"],
}
@@ -513,6 +547,7 @@
aconfig_declarations {
name: "android.content.res.flags-aconfig",
package: "android.content.res",
+ container: "system",
srcs: ["core/java/android/content/res/*.aconfig"],
}
@@ -533,6 +568,7 @@
aconfig_declarations {
name: "com.android.media.flags.bettertogether-aconfig",
package: "com.android.media.flags",
+ container: "system",
srcs: ["media/java/android/media/flags/media_better_together.aconfig"],
}
@@ -554,6 +590,7 @@
name: "com.android.media.flags.editing-aconfig",
exportable: true,
package: "com.android.media.editing.flags",
+ container: "system",
srcs: [
"media/java/android/media/flags/editing.aconfig",
],
@@ -569,6 +606,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",
],
@@ -584,6 +622,7 @@
aconfig_declarations {
name: "com.android.media.flags.performance-aconfig",
package: "com.android.media.performance.flags",
+ container: "system",
srcs: [
"media/java/android/media/flags/performance.aconfig",
],
@@ -600,6 +639,7 @@
name: "android.media.tv.flags-aconfig",
exportable: true,
package: "android.media.tv.flags",
+ container: "system",
srcs: ["media/java/android/media/tv/flags/media_tv.aconfig"],
}
@@ -614,6 +654,7 @@
name: "android.app.ondeviceintelligence-aconfig",
exportable: true,
package: "android.app.ondeviceintelligence.flags",
+ container: "system",
srcs: ["core/java/android/app/ondeviceintelligence/flags/ondevice_intelligence.aconfig"],
}
@@ -627,6 +668,7 @@
aconfig_declarations {
name: "android.permission.flags-aconfig",
package: "android.permission.flags",
+ container: "system",
srcs: ["core/java/android/permission/flags.aconfig"],
}
@@ -659,6 +701,7 @@
aconfig_declarations {
name: "android.database.sqlite-aconfig",
package: "android.database.sqlite",
+ container: "system",
srcs: ["core/java/android/database/sqlite/*.aconfig"],
}
@@ -679,6 +722,7 @@
name: "android.hardware.biometrics.flags-aconfig",
exportable: true,
package: "android.hardware.biometrics",
+ container: "system",
srcs: ["core/java/android/hardware/biometrics/flags.aconfig"],
}
@@ -730,6 +774,7 @@
aconfig_declarations {
name: "android.multiuser.flags-aconfig",
package: "android.multiuser",
+ container: "system",
srcs: ["core/java/android/content/pm/multiuser.aconfig"],
}
@@ -743,6 +788,7 @@
aconfig_declarations {
name: "android.app.flags-aconfig",
package: "android.app",
+ container: "system",
srcs: ["core/java/android/app/*.aconfig"],
}
@@ -757,6 +803,7 @@
name: "android.hardware.radio.flags-aconfig",
exportable: true,
package: "android.hardware.radio",
+ container: "system",
srcs: ["core/java/android/hardware/radio/*.aconfig"],
}
@@ -770,6 +817,7 @@
aconfig_declarations {
name: "android.credentials.flags-aconfig",
package: "android.credentials.flags",
+ container: "system",
srcs: ["core/java/android/credentials/flags.aconfig"],
exportable: true,
}
@@ -792,6 +840,7 @@
name: "android.view.contentprotection.flags-aconfig",
exportable: true,
package: "android.view.contentprotection.flags",
+ container: "system",
srcs: ["core/java/android/view/contentprotection/flags/*.aconfig"],
}
@@ -801,10 +850,25 @@
defaults: ["framework-minus-apex-aconfig-java-defaults"],
}
+// Contextual Search system service
+aconfig_declarations {
+ name: "com.android.server.contextualsearch.flags-aconfig",
+ package: "com.android.server.contextualsearch.flags",
+ container: "system",
+ srcs: ["services/contextualsearch/flags/flags.aconfig"],
+}
+
+java_aconfig_library {
+ name: "com.android.server.contextualsearch.flags-java",
+ aconfig_declarations: "com.android.server.contextualsearch.flags-aconfig",
+ defaults: ["framework-minus-apex-aconfig-java-defaults"],
+}
+
// Server Services Flags
aconfig_declarations {
name: "com.android.server.flags.services-aconfig",
package: "com.android.server.flags",
+ container: "system",
srcs: ["services/core/java/com/android/server/flags/*.aconfig"],
}
@@ -819,6 +883,7 @@
name: "android.service.appprediction.flags-aconfig",
exportable: true,
package: "android.service.appprediction.flags",
+ container: "system",
srcs: ["core/java/android/service/appprediction/flags/*.aconfig"],
}
@@ -833,6 +898,7 @@
name: "android.service.controls.flags-aconfig",
exportable: true,
package: "android.service.controls.flags",
+ container: "system",
srcs: ["core/java/android/service/controls/flags/*.aconfig"],
}
@@ -847,6 +913,7 @@
name: "android.service.voice.flags-aconfig",
exportable: true,
package: "android.service.voice.flags",
+ container: "system",
srcs: ["core/java/android/service/voice/flags/*.aconfig"],
}
@@ -860,6 +927,7 @@
aconfig_declarations {
name: "android.service.autofill.flags-aconfig",
package: "android.service.autofill",
+ container: "system",
srcs: [
"services/autofill/bugfixes.aconfig",
"services/autofill/features.aconfig",
@@ -877,6 +945,7 @@
name: "android.companion.flags-aconfig",
exportable: true,
package: "android.companion",
+ container: "system",
srcs: ["core/java/android/companion/*.aconfig"],
}
@@ -891,6 +960,7 @@
name: "android.net.platform.flags-aconfig",
exportable: true,
package: "android.net.platform.flags",
+ container: "system",
srcs: ["core/java/android/net/flags.aconfig"],
visibility: [":__subpackages__"],
}
@@ -900,6 +970,7 @@
name: "com.android.net.thread.platform.flags-aconfig",
exportable: true,
package: "com.android.net.thread.platform.flags",
+ container: "system",
srcs: ["core/java/android/net/thread/flags.aconfig"],
}
@@ -920,6 +991,7 @@
aconfig_declarations {
name: "android.media.playback.flags-aconfig",
package: "com.android.media.playback.flags",
+ container: "system",
srcs: ["media/jni/playback_flags.aconfig"],
}
@@ -938,6 +1010,7 @@
aconfig_declarations {
name: "android.net.vcn.flags-aconfig",
package: "android.net.vcn",
+ container: "system",
srcs: ["core/java/android/net/vcn/*.aconfig"],
}
@@ -951,6 +1024,7 @@
aconfig_declarations {
name: "device_policy_aconfig_flags",
package: "android.app.admin.flags",
+ container: "system",
srcs: [
"core/java/android/app/admin/flags/flags.aconfig",
],
@@ -978,6 +1052,7 @@
aconfig_declarations {
name: "android.service.chooser.flags-aconfig",
package: "android.service.chooser",
+ container: "system",
srcs: ["core/java/android/service/chooser/flags.aconfig"],
}
@@ -996,6 +1071,7 @@
aconfig_declarations {
name: "framework-jobscheduler-job.flags-aconfig",
package: "android.app.job",
+ container: "system",
exportable: true,
srcs: ["apex/jobscheduler/framework/aconfig/job.aconfig"],
}
@@ -1010,6 +1086,7 @@
aconfig_declarations {
name: "android.service.dreams.flags-aconfig",
package: "android.service.dreams",
+ container: "system",
srcs: ["core/java/android/service/dreams/flags.aconfig"],
}
@@ -1050,6 +1127,7 @@
aconfig_declarations {
name: "android.app.contextualsearch.flags-aconfig",
package: "android.app.contextualsearch.flags",
+ container: "system",
srcs: ["core/java/android/app/contextualsearch/flags.aconfig"],
}
@@ -1064,6 +1142,7 @@
name: "android.app.smartspace.flags-aconfig",
exportable: true,
package: "android.app.smartspace.flags",
+ container: "system",
srcs: ["core/java/android/app/smartspace/flags.aconfig"],
}
@@ -1084,6 +1163,7 @@
aconfig_declarations {
name: "android.view.contentcapture.flags-aconfig",
package: "android.view.contentcapture.flags",
+ container: "system",
srcs: ["core/java/android/view/contentcapture/flags/*.aconfig"],
}
@@ -1098,6 +1178,7 @@
name: "android.hardware.usb.flags-aconfig",
exportable: true,
package: "android.hardware.usb.flags",
+ container: "system",
srcs: ["core/java/android/hardware/usb/flags/*.aconfig"],
}
@@ -1118,6 +1199,7 @@
aconfig_declarations {
name: "android.tracing.flags-aconfig",
package: "android.tracing",
+ container: "system",
srcs: ["core/java/android/tracing/flags.aconfig"],
}
@@ -1136,6 +1218,7 @@
aconfig_declarations {
name: "android.appwidget.flags-aconfig",
package: "android.appwidget.flags",
+ container: "system",
srcs: ["core/java/android/appwidget/flags.aconfig"],
}
@@ -1149,6 +1232,7 @@
aconfig_declarations {
name: "android.server.app.flags-aconfig",
package: "android.server.app",
+ container: "system",
srcs: ["services/core/java/com/android/server/app/flags.aconfig"],
}
@@ -1162,6 +1246,7 @@
aconfig_declarations {
name: "android.webkit.flags-aconfig",
package: "android.webkit",
+ container: "system",
srcs: [
"core/java/android/webkit/*.aconfig",
"services/core/java/com/android/server/webkit/*.aconfig",
@@ -1179,6 +1264,7 @@
name: "android.provider.flags-aconfig",
exportable: true,
package: "android.provider",
+ container: "system",
srcs: ["core/java/android/provider/*.aconfig"],
}
@@ -1200,6 +1286,7 @@
name: "android.speech.flags-aconfig",
exportable: true,
package: "android.speech.flags",
+ container: "system",
srcs: ["core/java/android/speech/flags/*.aconfig"],
}
@@ -1221,6 +1308,7 @@
name: "android.content.flags-aconfig",
exportable: true,
package: "android.content.flags",
+ container: "system",
srcs: ["core/java/android/content/flags/flags.aconfig"],
}
@@ -1234,6 +1322,7 @@
aconfig_declarations {
name: "android.adaptiveauth.flags-aconfig",
package: "android.adaptiveauth",
+ container: "system",
srcs: ["core/java/android/adaptiveauth/*.aconfig"],
}
@@ -1248,6 +1337,7 @@
name: "android.crashrecovery.flags-aconfig",
exportable: true,
package: "android.crashrecovery.flags",
+ container: "system",
srcs: ["packages/CrashRecovery/aconfig/flags.aconfig"],
}
@@ -1275,6 +1365,7 @@
aconfig_declarations {
name: "android.net.wifi.flags-aconfig",
package: "android.net.wifi.flags",
+ container: "system",
srcs: ["wifi/*.aconfig"],
}
@@ -1294,6 +1385,7 @@
name: "android.app.wearable.flags-aconfig",
exportable: true,
package: "android.app.wearable",
+ container: "system",
srcs: ["core/java/android/app/wearable/*.aconfig"],
}
@@ -1306,6 +1398,7 @@
aconfig_declarations {
name: "com.android.internal.pm.pkg.component.flags-aconfig",
package: "com.android.internal.pm.pkg.component.flags",
+ container: "system",
srcs: ["core/java/com/android/internal/pm/pkg/component/flags/flags.aconfig"],
}
@@ -1326,6 +1419,7 @@
aconfig_declarations {
name: "android.systemserver.flags-aconfig",
package: "android.server",
+ container: "system",
srcs: ["services/java/com/android/server/flags.aconfig"],
}
@@ -1351,3 +1445,19 @@
aconfig_declarations: "backstage_power_flags",
defaults: ["framework-minus-apex-aconfig-java-defaults"],
}
+
+// Dropbox data
+aconfig_declarations {
+ name: "dropbox_flags",
+ package: "com.android.server.feature.flags",
+ container: "system",
+ srcs: [
+ "services/core/java/com/android/server/feature/dropbox_flags.aconfig",
+ ],
+}
+
+java_aconfig_library {
+ name: "dropbox_flags_lib",
+ aconfig_declarations: "dropbox_flags",
+ defaults: ["framework-minus-apex-aconfig-java-defaults"],
+}
diff --git a/apct-tests/perftests/rubidium/Android.bp b/apct-tests/perftests/rubidium/Android.bp
deleted file mode 100644
index 4f4fb11..0000000
--- a/apct-tests/perftests/rubidium/Android.bp
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright (C) 2020 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 {
- default_team: "trendy_team_input_framework",
- // See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "frameworks_base_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["frameworks_base_license"],
-}
-
-android_test {
- name: "RubidiumPerfTests",
- srcs: ["src/**/*.java"],
- min_sdk_version: "33",
- static_libs: [
- "androidx.test.rules",
- "androidx.annotation_annotation",
- "apct-perftests-utils",
- "collector-device-lib-platform",
- "compatibility-device-util-axt",
- "platform-test-annotations",
- "framework-adservices-lib",
- "adservices-service-core",
- "androidx.core_core",
- ],
- test_suites: ["device-tests"],
- data: [":perfetto_artifacts"],
- platform_apis: true,
- certificate: "platform",
-}
diff --git a/apct-tests/perftests/rubidium/AndroidManifest.xml b/apct-tests/perftests/rubidium/AndroidManifest.xml
deleted file mode 100644
index 1c6b73c..0000000
--- a/apct-tests/perftests/rubidium/AndroidManifest.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2018 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.
--->
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.android.perftests.rubidium">
-
- <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
-
- <application>
- <uses-library android:name="android.test.runner" />
- </application>
-
- <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
- android:targetPackage="com.android.perftests.rubidium"/>
-</manifest>
diff --git a/apct-tests/perftests/rubidium/AndroidTest.xml b/apct-tests/perftests/rubidium/AndroidTest.xml
deleted file mode 100644
index f538cf5..0000000
--- a/apct-tests/perftests/rubidium/AndroidTest.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2020 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 undtradefed.testtype.AndroidJUniter 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.
--->
-<configuration description="Runs RubidiumPerfTests metric instrumentation.">
- <option name="test-suite-tag" value="apct" />
- <option name="test-suite-tag" value="apct-metric-instrumentation" />
- <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
- <option name="cleanup-apks" value="true" />
- <option name="test-file-name" value="RubidiumPerfTests.apk" />
- </target_preparer>
-
- <target_preparer class="com.android.tradefed.targetprep.DeviceSetup">
- <option name="force-skip-system-props" value="true" />
- <option name="run-command" value="input keyevent KEYCODE_WAKEUP" />
- <option name="run-command" value="cmd window dismiss-keyguard" />
- <option name="run-command" value="cmd package compile -m speed com.android.perftests.rubidium" />
- </target_preparer>
-
- <!-- Needed for pushing the trace config file -->
- <target_preparer class="com.android.tradefed.targetprep.RootTargetPreparer"/>
- <target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
- <option name="push-file" key="trace_config_detailed.textproto" value="/data/misc/perfetto-traces/trace_config.textproto" />
- <!--Install the content provider automatically when we push some file in sdcard folder.-->
- <!--Needed to avoid the installation during the test suite.-->
- <option name="push-file" key="trace_config_detailed.textproto" value="/sdcard/sample.textproto" />
- </target_preparer>
-
- <!-- Needed for storing the perfetto trace files in the sdcard/test_results-->
- <option name="isolated-storage" value="false" />
-
- <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
- <option name="package" value="com.android.perftests.rubidium" />
- <option name="hidden-api-checks" value="false"/>
-
- <!-- Listener related args for collecting the traces and waiting for the device to stabilize. -->
- <option name="device-listeners" value="android.device.collectors.ProcLoadListener,android.device.collectors.PerfettoListener" />
-
- <!-- Guarantee that user defined RunListeners will be running before any of the default listeners defined in this runner. -->
- <option name="instrumentation-arg" key="newRunListenerMode" value="true" />
-
- <!-- Kill background operations -->
- <option name="instrumentation-arg" key="kill-bg" value="true" />
-
- <!-- ProcLoadListener related arguments -->
- <!-- Wait for device last minute threshold to reach 3 with 2 minute timeout before starting the test run -->
- <option name="instrumentation-arg" key="procload-collector:per_run" value="true" />
- <option name="instrumentation-arg" key="proc-loadavg-threshold" value="3" />
- <option name="instrumentation-arg" key="proc-loadavg-timeout" value="120000" />
- <option name="instrumentation-arg" key="proc-loadavg-interval" value="10000" />
-
- <!-- PerfettoListener related arguments -->
- <option name="instrumentation-arg" key="perfetto_config_text_proto" value="true" />
- <option name="instrumentation-arg" key="perfetto_config_file" value="trace_config.textproto" />
- </test>
-
- <metrics_collector class="com.android.tradefed.device.metric.FilePullerLogCollector">
- <option name="directory-keys" value="/data/local/tmp/RubidiumPerfTests" />
- <!-- Needed for pulling the collected trace config on to the host -->
- <option name="pull-pattern-keys" value="perfetto_file_path" />
- </metrics_collector>
-</configuration>
diff --git a/apct-tests/perftests/rubidium/OWNERS b/apct-tests/perftests/rubidium/OWNERS
deleted file mode 100644
index ba54a9d..0000000
--- a/apct-tests/perftests/rubidium/OWNERS
+++ /dev/null
@@ -1,3 +0,0 @@
-arunnair@google.com
-galarragas@google.com
-neilv@google.com
diff --git a/apct-tests/perftests/rubidium/assets/empty_generate_bid.js b/apct-tests/perftests/rubidium/assets/empty_generate_bid.js
deleted file mode 100644
index 38efc9e..0000000
--- a/apct-tests/perftests/rubidium/assets/empty_generate_bid.js
+++ /dev/null
@@ -1,11 +0,0 @@
-"use strict";
-
-function generateBid(ad) {
- let input = ad.metadata.input;
-
- return {
- ad: 'example',
- bid: input,
- render: ad.renderUrl
- }
-}
\ No newline at end of file
diff --git a/apct-tests/perftests/rubidium/assets/generate_bid.wasm b/apct-tests/perftests/rubidium/assets/generate_bid.wasm
deleted file mode 100644
index 5e7fe9e..0000000
--- a/apct-tests/perftests/rubidium/assets/generate_bid.wasm
+++ /dev/null
Binary files differ
diff --git a/apct-tests/perftests/rubidium/assets/generate_bid_using_wasm.js b/apct-tests/perftests/rubidium/assets/generate_bid_using_wasm.js
deleted file mode 100644
index bc50d0a..0000000
--- a/apct-tests/perftests/rubidium/assets/generate_bid_using_wasm.js
+++ /dev/null
@@ -1,24 +0,0 @@
-function generateBid(ad, wasmModule) {
- let input = ad.metadata.input;
-
- const instance = new WebAssembly.Instance(wasmModule);
-
- const memory = instance.exports.memory;
- const input_in_memory = new Float32Array(memory.buffer, 0, 200);
- for (let i = 0; i < input.length; ++i) {
- input_in_memory[i] = input[i];
- }
- const results = [
- instance.exports.nn_forward_model0(input_in_memory.length, input_in_memory),
- instance.exports.nn_forward_model1(input_in_memory.length, input_in_memory),
- instance.exports.nn_forward_model2(input_in_memory.length, input_in_memory),
- instance.exports.nn_forward_model3(input_in_memory.length, input_in_memory),
- instance.exports.nn_forward_model4(input_in_memory.length, input_in_memory),
- ];
- const bid = results.map(x => Math.max(x, 1)).reduce((x, y) => x * y);
- return {
- ad: 'example',
- bid: bid,
- render: ad.renderUrl
- }
-}
\ No newline at end of file
diff --git a/apct-tests/perftests/rubidium/assets/rubidium_bidding_logic_compiled.js b/apct-tests/perftests/rubidium/assets/rubidium_bidding_logic_compiled.js
deleted file mode 100644
index 3f853f1..0000000
--- a/apct-tests/perftests/rubidium/assets/rubidium_bidding_logic_compiled.js
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
-
- Copyright The Closure Library Authors.
- SPDX-License-Identifier: Apache-2.0
-*/
-'use strict';function ba(a){var b=0;return function(){return b<a.length?{done:!1,value:a[b++]}:{done:!0}}}var ca="function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(a==Array.prototype||a==Object.prototype)return a;a[b]=c.value;return a};
-function da(a){a=["object"==typeof globalThis&&globalThis,a,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var b=0;b<a.length;++b){var c=a[b];if(c&&c.Math==Math)return c}throw Error("Cannot find global object");}var fa=da(this);function m(a,b){if(b)a:{var c=fa;a=a.split(".");for(var d=0;d<a.length-1;d++){var f=a[d];if(!(f in c))break a;c=c[f]}a=a[a.length-1];d=c[a];b=b(d);b!=d&&null!=b&&ca(c,a,{configurable:!0,writable:!0,value:b})}}
-m("Symbol",function(a){function b(e){if(this instanceof b)throw new TypeError("Symbol is not a constructor");return new c(d+(e||"")+"_"+f++,e)}function c(e,h){this.h=e;ca(this,"description",{configurable:!0,writable:!0,value:h})}if(a)return a;c.prototype.toString=function(){return this.h};var d="jscomp_symbol_"+(1E9*Math.random()>>>0)+"_",f=0;return b});
-m("Symbol.iterator",function(a){if(a)return a;a=Symbol("Symbol.iterator");for(var b="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),c=0;c<b.length;c++){var d=fa[b[c]];"function"===typeof d&&"function"!=typeof d.prototype[a]&&ca(d.prototype,a,{configurable:!0,writable:!0,value:function(){return ia(ba(this))}})}return a});function ia(a){a={next:a};a[Symbol.iterator]=function(){return this};return a}
-function p(a){var b="undefined"!=typeof Symbol&&Symbol.iterator&&a[Symbol.iterator];return b?b.call(a):{next:ba(a)}}function ja(a){if(!(a instanceof Array)){a=p(a);for(var b,c=[];!(b=a.next()).done;)c.push(b.value);a=c}return a}var la="function"==typeof Object.create?Object.create:function(a){function b(){}b.prototype=a;return new b},ma;
-if("function"==typeof Object.setPrototypeOf)ma=Object.setPrototypeOf;else{var na;a:{var oa={a:!0},qa={};try{qa.__proto__=oa;na=qa.a;break a}catch(a){}na=!1}ma=na?function(a,b){a.__proto__=b;if(a.__proto__!==b)throw new TypeError(a+" is not extensible");return a}:null}var ra=ma;
-function q(a,b){a.prototype=la(b.prototype);a.prototype.constructor=a;if(ra)ra(a,b);else for(var c in b)if("prototype"!=c)if(Object.defineProperties){var d=Object.getOwnPropertyDescriptor(b,c);d&&Object.defineProperty(a,c,d)}else a[c]=b[c];a.Ia=b.prototype}function sa(){for(var a=Number(this),b=[],c=a;c<arguments.length;c++)b[c-a]=arguments[c];return b}function ta(a,b){return Object.prototype.hasOwnProperty.call(a,b)}
-m("WeakMap",function(a){function b(k){this.h=(g+=Math.random()+1).toString();if(k){k=p(k);for(var l;!(l=k.next()).done;)l=l.value,this.set(l[0],l[1])}}function c(){}function d(k){var l=typeof k;return"object"===l&&null!==k||"function"===l}function f(k){if(!ta(k,h)){var l=new c;ca(k,h,{value:l})}}function e(k){var l=Object[k];l&&(Object[k]=function(n){if(n instanceof c)return n;Object.isExtensible(n)&&f(n);return l(n)})}if(function(){if(!a||!Object.seal)return!1;try{var k=Object.seal({}),l=Object.seal({}),
-n=new a([[k,2],[l,3]]);if(2!=n.get(k)||3!=n.get(l))return!1;n.delete(k);n.set(l,4);return!n.has(k)&&4==n.get(l)}catch(t){return!1}}())return a;var h="$jscomp_hidden_"+Math.random();e("freeze");e("preventExtensions");e("seal");var g=0;b.prototype.set=function(k,l){if(!d(k))throw Error("Invalid WeakMap key");f(k);if(!ta(k,h))throw Error("WeakMap key fail: "+k);k[h][this.h]=l;return this};b.prototype.get=function(k){return d(k)&&ta(k,h)?k[h][this.h]:void 0};b.prototype.has=function(k){return d(k)&&ta(k,
-h)&&ta(k[h],this.h)};b.prototype.delete=function(k){return d(k)&&ta(k,h)&&ta(k[h],this.h)?delete k[h][this.h]:!1};return b});
-m("Map",function(a){function b(){var g={};return g.C=g.next=g.head=g}function c(g,k){var l=g.h;return ia(function(){if(l){for(;l.head!=g.h;)l=l.C;for(;l.next!=l.head;)return l=l.next,{done:!1,value:k(l)};l=null}return{done:!0,value:void 0}})}function d(g,k){var l=k&&typeof k;"object"==l||"function"==l?e.has(k)?l=e.get(k):(l=""+ ++h,e.set(k,l)):l="p_"+k;var n=g.u[l];if(n&&ta(g.u,l))for(g=0;g<n.length;g++){var t=n[g];if(k!==k&&t.key!==t.key||k===t.key)return{id:l,list:n,index:g,m:t}}return{id:l,list:n,
-index:-1,m:void 0}}function f(g){this.u={};this.h=b();this.size=0;if(g){g=p(g);for(var k;!(k=g.next()).done;)k=k.value,this.set(k[0],k[1])}}if(function(){if(!a||"function"!=typeof a||!a.prototype.entries||"function"!=typeof Object.seal)return!1;try{var g=Object.seal({x:4}),k=new a(p([[g,"s"]]));if("s"!=k.get(g)||1!=k.size||k.get({x:4})||k.set({x:4},"t")!=k||2!=k.size)return!1;var l=k.entries(),n=l.next();if(n.done||n.value[0]!=g||"s"!=n.value[1])return!1;n=l.next();return n.done||4!=n.value[0].x||
-"t"!=n.value[1]||!l.next().done?!1:!0}catch(t){return!1}}())return a;var e=new WeakMap;f.prototype.set=function(g,k){g=0===g?0:g;var l=d(this,g);l.list||(l.list=this.u[l.id]=[]);l.m?l.m.value=k:(l.m={next:this.h,C:this.h.C,head:this.h,key:g,value:k},l.list.push(l.m),this.h.C.next=l.m,this.h.C=l.m,this.size++);return this};f.prototype.delete=function(g){g=d(this,g);return g.m&&g.list?(g.list.splice(g.index,1),g.list.length||delete this.u[g.id],g.m.C.next=g.m.next,g.m.next.C=g.m.C,g.m.head=null,this.size--,
-!0):!1};f.prototype.clear=function(){this.u={};this.h=this.h.C=b();this.size=0};f.prototype.has=function(g){return!!d(this,g).m};f.prototype.get=function(g){return(g=d(this,g).m)&&g.value};f.prototype.entries=function(){return c(this,function(g){return[g.key,g.value]})};f.prototype.keys=function(){return c(this,function(g){return g.key})};f.prototype.values=function(){return c(this,function(g){return g.value})};f.prototype.forEach=function(g,k){for(var l=this.entries(),n;!(n=l.next()).done;)n=n.value,
-g.call(k,n[1],n[0],this)};f.prototype[Symbol.iterator]=f.prototype.entries;var h=0;return f});m("Number.isNaN",function(a){return a?a:function(b){return"number"===typeof b&&isNaN(b)}});function ua(a,b){a instanceof String&&(a+="");var c=0,d=!1,f={next:function(){if(!d&&c<a.length){var e=c++;return{value:b(e,a[e]),done:!1}}d=!0;return{done:!0,value:void 0}}};f[Symbol.iterator]=function(){return f};return f}m("Array.prototype.values",function(a){return a?a:function(){return ua(this,function(b,c){return c})}});
-m("Set",function(a){function b(c){this.h=new Map;if(c){c=p(c);for(var d;!(d=c.next()).done;)this.add(d.value)}this.size=this.h.size}if(function(){if(!a||"function"!=typeof a||!a.prototype.entries||"function"!=typeof Object.seal)return!1;try{var c=Object.seal({x:4}),d=new a(p([c]));if(!d.has(c)||1!=d.size||d.add(c)!=d||1!=d.size||d.add({x:4})!=d||2!=d.size)return!1;var f=d.entries(),e=f.next();if(e.done||e.value[0]!=c||e.value[1]!=c)return!1;e=f.next();return e.done||e.value[0]==c||4!=e.value[0].x||
-e.value[1]!=e.value[0]?!1:f.next().done}catch(h){return!1}}())return a;b.prototype.add=function(c){c=0===c?0:c;this.h.set(c,c);this.size=this.h.size;return this};b.prototype.delete=function(c){c=this.h.delete(c);this.size=this.h.size;return c};b.prototype.clear=function(){this.h.clear();this.size=0};b.prototype.has=function(c){return this.h.has(c)};b.prototype.entries=function(){return this.h.entries()};b.prototype.values=function(){return this.h.values()};b.prototype.keys=b.prototype.values;b.prototype[Symbol.iterator]=
-b.prototype.values;b.prototype.forEach=function(c,d){var f=this;this.h.forEach(function(e){return c.call(d,e,e,f)})};return b});m("globalThis",function(a){return a||fa});m("Object.is",function(a){return a?a:function(b,c){return b===c?0!==b||1/b===1/c:b!==b&&c!==c}});m("Array.prototype.includes",function(a){return a?a:function(b,c){var d=this;d instanceof String&&(d=String(d));var f=d.length;c=c||0;for(0>c&&(c=Math.max(c+f,0));c<f;c++){var e=d[c];if(e===b||Object.is(e,b))return!0}return!1}});
-m("String.prototype.includes",function(a){return a?a:function(b,c){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(b instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(b,c||0)}});m("Object.values",function(a){return a?a:function(b){var c=[],d;for(d in b)ta(b,d)&&c.push(b[d]);return c}});
-function va(a){var b=typeof a;return"object"==b&&null!=a||"function"==b};var wa={};var xa=Array.prototype.map?function(a,b){return Array.prototype.map.call(a,b,void 0)}:function(a,b){for(var c=a.length,d=Array(c),f="string"===typeof a?a.split(""):a,e=0;e<c;e++)e in f&&(d[e]=b.call(void 0,f[e],e,a));return d};var ya={},za=null;function Aa(a,b){void 0===b&&(b=0);Ba();b=ya[b];for(var c=Array(Math.floor(a.length/3)),d=b[64]||"",f=0,e=0;f<a.length-2;f+=3){var h=a[f],g=a[f+1],k=a[f+2],l=b[h>>2];h=b[(h&3)<<4|g>>4];g=b[(g&15)<<2|k>>6];k=b[k&63];c[e++]=l+h+g+k}l=0;k=d;switch(a.length-f){case 2:l=a[f+1],k=b[(l&15)<<2]||d;case 1:a=a[f],c[e]=b[a>>2]+b[(a&3)<<4|l>>4]+k+d}return c.join("")}
-function Ca(a){var b=a.length,c=3*b/4;c%3?c=Math.floor(c):-1!="=.".indexOf(a[b-1])&&(c=-1!="=.".indexOf(a[b-2])?c-2:c-1);var d=new Uint8Array(c),f=0;Da(a,function(e){d[f++]=e});return f!==c?d.subarray(0,f):d}
-function Da(a,b){function c(k){for(;d<a.length;){var l=a.charAt(d++),n=za[l];if(null!=n)return n;if(!/^[\s\xa0]*$/.test(l))throw Error("Unknown base64 encoding at char: "+l);}return k}Ba();for(var d=0;;){var f=c(-1),e=c(0),h=c(64),g=c(64);if(64===g&&-1===f)break;b(f<<2|e>>4);64!=h&&(b(e<<4&240|h>>2),64!=g&&b(h<<6&192|g))}}
-function Ba(){if(!za){za={};for(var a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),b=["+/=","+/","-_=","-_.","-_"],c=0;5>c;c++){var d=a.concat(b[c].split(""));ya[c]=d;for(var f=0;f<d.length;f++){var e=d[f];void 0===za[e]&&(za[e]=f)}}}};var Ea="undefined"!==typeof Uint8Array;function Fa(a){return null==a||Ga(a)?a:"string"===typeof a?Ca(a):null}function Ga(a){return Ea&&null!=a&&a instanceof Uint8Array}var Ha={};var Ia;function Qa(a){if(a!==Ha)throw Error("illegal external caller");}function Ra(a,b){Qa(b);this.aa=a;if(null!=a&&0===a.length)throw Error("ByteString should be constructed with non-empty values");}function Sa(){return Ia||(Ia=new Ra(null,Ha))}function Ta(a){var b=a.aa;return null==b?"":"string"===typeof b?b:a.aa=Aa(b)};var r="function"===typeof Symbol&&"symbol"===typeof Symbol()?Symbol():void 0;function u(a,b){if(r)return a[r]|=b;if(void 0!==a.A)return a.A|=b;Object.defineProperties(a,{A:{value:b,configurable:!0,writable:!0,enumerable:!1}});return b}function Ua(a,b){r?a[r]&&(a[r]&=~b):void 0!==a.A&&(a.A&=~b)}function v(a){var b;r?b=a[r]:b=a.A;return null==b?0:b}function Va(a,b){r?a[r]=b:void 0!==a.A?a.A=b:Object.defineProperties(a,{A:{value:b,configurable:!0,writable:!0,enumerable:!1}})}
-function $a(a){u(a,1);return a}function w(a){return!!(v(a)&2)}function ab(a){u(a,16);return a}function bb(a,b){Va(b,(a|0)&-51)}function cb(a,b){Va(b,(a|18)&-41)};var db={};function eb(a){return null!==a&&"object"===typeof a&&!Array.isArray(a)&&a.constructor===Object}function fb(a){a instanceof Ra&&(Qa(Ha),a=a.aa||"");return a}var gb,hb=[];Va(hb,23);gb=Object.freeze(hb);function ib(a){if(w(a.i))throw Error("Cannot mutate an immutable Message");}function jb(a){var b=a.length;(b=b?a[b-1]:void 0)&&eb(b)?b.g=1:(b={},a.push((b.g=1,b)))};function kb(a){return a}function lb(a){return a};function mb(a,b){a=a||{};b=b||{};var c={},d;for(d in a)c[d]=0;for(var f in b)c[f]=0;for(var e in c)if(!nb(a[e],b[e]))return!1;return!0}function ob(a){return a&&"object"===typeof a?a.i||a:a}
-function nb(a,b){a=fb(a);b=fb(b);a=ob(a);b=ob(b);if(a==b)return!0;if(Ea){var c=Ga(a),d=Ga(b);if(c||d){if(!c)if("string"===typeof a)a=Fa(a);else return!1;if(d)d=b;else if("string"===typeof b)d=Fa(b);else return!1;if(a.length!==d.length)return!1;for(b=0;b<a.length;b++)if(a[b]!==d[b])return!1;return!0}}if(null==a&&Array.isArray(b)&&v(b)&1&&!b.length||null==b&&Array.isArray(a)&&v(a)&1&&!a.length)return!0;if(!va(a)||!va(b))return"number"===typeof a&&isNaN(a)||"number"===typeof b&&isNaN(b)?String(a)==String(b):
-!1;if(a.constructor!=b.constructor)return!1;if(a.constructor===Array){d=a;c=a=void 0;for(var f=Math.max(d.length,b.length),e=0;e<f;e++){var h=d[e],g=b[e];h&&h.constructor==Object&&(a=h,h=void 0);g&&g.constructor==Object&&(c=g,g=void 0);if(!nb(h,g))return!1}return a||c?(a=a||{},c=c||{},mb(a,c)):!0}if(a.constructor===Object)return mb(a,b);throw Error("Invalid type in JSPB array");};var pb;function qb(a){switch(typeof a){case "number":return isFinite(a)?a:String(a);case "object":if(a)if(Array.isArray(a)){if(0!==(v(a)&128))return a=Array.prototype.slice.call(a),jb(a),a}else{if(Ga(a))return Aa(a);if(a instanceof Ra)return Ta(a)}}return a};function rb(a,b,c,d){if(null!=a){if(Array.isArray(a))a=sb(a,b,c,void 0!==d);else if(eb(a)){var f={},e;for(e in a)f[e]=rb(a[e],b,c,d);a=f}else a=b(a,d);return a}}function sb(a,b,c,d){var f=v(a);d=d?!!(f&16):void 0;a=Array.prototype.slice.call(a);for(var e=0;e<a.length;e++)a[e]=rb(a[e],b,c,d);c(f,a);return a}function tb(a){return a.Y===db?a.toJSON():qb(a)}function ub(a,b){a&128&&jb(b)};function vb(a){return a.h||(a.h=a.i[a.u+a.H]={})}function x(a,b,c){return-1===b?null:b>=a.u?a.h?a.h[b]:void 0:c&&a.h&&(c=a.h[b],null!=c)?c:a.i[b+a.H]}function wb(a,b,c,d){ib(a);return y(a,b,c,d)}function y(a,b,c,d){a.V&&(a.V=void 0);if(b>=a.u||d)return vb(a)[b]=c,a;a.i[b+a.H]=c;(c=a.h)&&b in c&&delete c[b];return a}
-function xb(a,b,c,d,f){var e=x(a,b,d);Array.isArray(e)||(e=gb);var h=v(e);h&1||$a(e);if(f)h&2||u(e,2),c&1||Object.freeze(e);else{f=!(c&2);var g=h&2;c&1||!g?f&&h&16&&!g&&Ua(e,16):(e=$a(Array.prototype.slice.call(e)),y(a,b,e,d))}return e}function yb(a,b){return xb(a,b,0,!1,w(a.i))}
-function B(a,b,c,d){var f=w(a.i),e=xb(a,b,1,d,f),h=v(e);if(!(h&4)){Object.isFrozen(e)&&(e=$a(e.slice()),y(a,b,e,d));for(var g=0,k=0;g<e.length;g++){var l=c(e[g]);null!=l&&(e[k++]=l)}k<g&&(e.length=k);u(e,5);f&&(u(e,2),Object.freeze(e))}!f&&(h&2||Object.isFrozen(e))&&(e=Array.prototype.slice.call(e),u(e,5),zb(a,b,e,d));return e}function Ub(a){return null==a?a:"string"===typeof a?a?new Ra(a,Ha):Sa():a.constructor===Ra?a:Ga(a)?a.length?new Ra(new Uint8Array(a),Ha):Sa():void 0}
-function E(a,b){a=x(a,b);return null==a?0:a}function zb(a,b,c,d){if(null==c)c=gb;else{var f=v(c);1!==(f&1)&&(Object.isFrozen(c)&&(c=Array.prototype.slice.call(c)),Va(c,f|1))}return wb(a,b,c,d)}function G(a,b,c,d){ib(a);c!==d?y(a,b,c):y(a,b,void 0,!1);return a}var Vb=Symbol(void 0);function Wb(a,b,c,d){var f=x(a,c,d);var e=!1;var h=null==f||"object"!==typeof f||(e=Array.isArray(f))||f.Y!==db?e?new b(f):void 0:f;h!==f&&null!=h&&(y(a,c,h,d),u(h.i,v(a.i)&-33));return h}
-function H(a,b,c){if(a=Wb(a,b,c,!1))b=a;else if(a=b[Vb])b=a;else{a=new b;if(wa!==wa)throw Error("requires a valid immutable API token");w(a.i)||((c=a.V)&&nb(c.i,a.i)?a=c:(c=Xb(a,!0),u(c.i,2),a=a.V=c));b=b[Vb]=a}return b}function J(a,b,c){var d=void 0===d?!1:d;b=Wb(a,b,c,d);if(null==b)return b;if(!w(a.i)){var f=Yb(b);f!==b&&(b=f,y(a,c,b,d))}return b}
-function Zb(a,b,c,d,f){a.o||(a.o={});var e=a.o[c],h=xb(a,c,3,void 0,f);if(e)f||(Object.isFrozen(e)?d||(e=Array.prototype.slice.call(e),a.o[c]=e):d&&Object.freeze(e));else{e=[];var g=!!(v(a.i)&16),k=w(h);!f&&k&&(h=$a(Array.prototype.slice.call(h)),y(a,c,h));for(var l=k,n=0;n<h.length;n++){var t=h[n];var I=b;var A=g,F=!1;F=void 0===F?!1:F;A=void 0===A?!1:A;I=Array.isArray(t)?new I(A?ab(t):t):F?new I:void 0;void 0!==I&&(l=l||w(t),e.push(I),k&&u(I.i,2))}a.o[c]=e;a=h;Object.isFrozen(a)||(b=v(a)|33,Va(a,
-l?b&-9:b|8));(f||d&&k)&&u(e,2);(f||d)&&Object.freeze(e)}return e}function K(a,b,c){var d=w(a.i);b=Zb(a,b,c,d,d);a=xb(a,c,3,void 0,d);if(!(d||v(a)&8)){for(d=0;d<b.length;d++){c=b[d];var f=Yb(c);c!==f&&(b[d]=f,a[d]=b[d].i)}u(a,8)}return b}function M(a,b,c){ib(a);null==c&&(c=void 0);return y(a,b,c)}function $b(a,b,c,d){ib(a);if(null!=c){var f=$a([]);for(var e=!1,h=0;h<c.length;h++)f[h]=c[h].i,e=e||w(f[h]);a.o||(a.o={});a.o[b]=c;c=f;e?Ua(c,8):u(c,8)}else a.o&&(a.o[b]=void 0),f=gb;return y(a,b,f,d)}
-function ac(a,b,c,d){ib(a);var f=Zb(a,c,b,!1,!1);c=null!=d?d:new c;a=xb(a,b,2,void 0,!1);f.push(c);a.push(c.i);w(c.i)&&Ua(a,8);return c}function N(a,b){return P(x(a,b),"0")}function P(a,b){return null==a?b:a}function R(a,b){a=x(a,b);return P(null==a?a:!!a,!1)}function S(a,b){a=x(a,b);return P(null==a?a:+a,0)}function T(a,b){return P(x(a,b),0)};function bc(a){var b=v(a);if(b&2)return a;a=xa(a,cc);cb(b,a);Object.freeze(a);return a}function dc(a,b,c){c=void 0===c?cb:c;if(null!=a){if(Ea&&a instanceof Uint8Array)return a.length?new Ra(new Uint8Array(a),Ha):Sa();if(Array.isArray(a)){var d=v(a);if(d&2)return a;if(b&&!(d&32)&&(d&16||0===d))return Va(a,d|2),a;a=sb(a,dc,c,!0);b=v(a);b&4&&b&2&&Object.freeze(a);return a}return a.Y===db?cc(a):a}}function cc(a){if(w(a.i))return a;a=Xb(a,!0);u(a.i,2);return a}
-function Xb(a,b){var c=a.i,d=ab([]),f=a.constructor.h;f&&d.push(f);0!==(v(c)&128)&&jb(d);b=b||w(a.i)?cb:bb;f=a.constructor;pb=d;d=new f(d);pb=void 0;a.ca&&(d.ca=a.ca.slice());f=!!(v(c)&16);for(var e=0;e<c.length;e++){var h=c[e];if(e===c.length-1&&eb(h))for(var g in h){var k=+g;if(Number.isNaN(k))vb(d)[k]=h[k];else{var l=h[g],n=a.o&&a.o[k];n?$b(d,k,bc(n),!0):wb(d,k,dc(l,f,b),!0)}}else k=e-a.H,(l=a.o&&a.o[k])?$b(d,k,bc(l),!1):wb(d,k,dc(h,f,b),!1)}return d}
-function Yb(a){if(!w(a.i))return a;var b=Xb(a,!1);b.V=a;return b};function V(a,b,c){null==a&&(a=pb);pb=void 0;var d=this.constructor.u||0,f=0<d,e=this.constructor.h,h=!1;if(null==a){a=e?[e]:[];var g=!0;Va(a,48)}else{if(!Array.isArray(a))throw Error();if(e&&e!==a[0])throw Error();var k=u(a,0),l=k;if(g=0!==(16&l))(h=0!==(32&l))||(l|=32);if(f)if(128&l)d=0;else{if(0<a.length){var n=a[a.length-1];if(eb(n)&&"g"in n){d=0;l|=128;delete n.g;var t=!0,I;for(I in n){t=!1;break}t&&a.pop()}}}else if(128&l)throw Error();k!==l&&Va(a,l)}this.H=(e?0:-1)-d;this.o=void 0;this.i=a;
-a:{e=this.i.length;d=e-1;if(e&&(e=this.i[d],eb(e))){this.h=e;this.u=d-this.H;break a}void 0!==b&&-1<b?(this.u=Math.max(b,d+1-this.H),this.h=void 0):this.u=Number.MAX_VALUE}if(!f&&this.h&&"g"in this.h)throw Error('Unexpected "g" flag in sparse object of message that is not a group type.');if(c){b=g&&!h&&!0;f=this.u;var A;for(g=0;g<c.length;g++)h=c[g],h<f?(h+=this.H,(d=a[h])?ec(d,b):a[h]=gb):(A||(A=vb(this)),(d=A[h])?ec(d,b):A[h]=gb)}}V.prototype.toJSON=function(){return sb(this.i,tb,ub)};
-function ec(a,b){if(Array.isArray(a)){var c=v(a),d=1;!b||c&2||(d|=16);(c&d)!==d&&Va(a,c|d)}}V.prototype.Y=db;V.prototype.toString=function(){return this.i.toString()};var fc=void 0;function gc(a){var b=fc;fc=void 0;if(!Array.isArray(a))throw b=b?b()+"\n":"",Error(b+String(a));return a};function hc(a){return JSON.stringify([a.map(function(b){var c={};return[(c[b.ta]=b.message.toJSON(),c)]})])};function ic(a){this.h=a}ic.prototype.sa=function(){var a=encodeURIComponent;var b=hc(sa.apply(0,arguments));for(var c=[],d=0,f=0;f<b.length;f++){var e=b.charCodeAt(f);255<e&&(c[d++]=e&255,e>>=8);c[d++]=e}b=Aa(c,3);a=a(b);this.h("https://pagead2.googlesyndication.com/pagead/ping?e=3&d="+a)};function jc(a){V.call(this,a)}q(jc,V);function kc(a){V.call(this,a)}q(kc,V);function lc(a){V.call(this,a,-1,mc)}q(lc,V);var mc=[6];function nc(a){V.call(this,a,-1,oc)}q(nc,V);var oc=[2,3,4];function pc(a){V.call(this,a,-1,qc)}q(pc,V);var qc=[2];function rc(a){V.call(this,a,-1,sc)}q(rc,V);var sc=[1,3,10,7,8];function tc(a){V.call(this,a)}q(tc,V);function uc(a){V.call(this,a,-1,vc)}q(uc,V);var vc=[3];function wc(a){V.call(this,a,-1,xc)}q(wc,V);var xc=[3];function yc(a){V.call(this,a,-1,zc)}q(yc,V);var zc=[2,3,5];function Ac(a){V.call(this,a,-1,Bc)}q(Ac,V);function Cc(a){V.call(this,a,-1,Dc)}q(Cc,V);function Ec(a){V.call(this,a,-1,Fc)}q(Ec,V);var Bc=[1,2],Dc=[3,4,9],Fc=[3,4,5,6,7];function Gc(a){V.call(this,a,-1,Hc)}q(Gc,V);var Hc=[15];function Ic(a){V.call(this,a)}q(Ic,V);function Jc(a){V.call(this,a,-1,Kc)}q(Jc,V);var Kc=[1];function Lc(a){V.call(this,a)}q(Lc,V);function Mc(a){V.call(this,a)}q(Mc,V);function Nc(a){V.call(this,a,-1,Oc)}q(Nc,V);var Oc=[9,10,11,12,13,14,15,17];function Pc(a){V.call(this,a,-1,Qc)}q(Pc,V);var Qc=[1];function Zd(a){V.call(this,a)}q(Zd,V);function $d(a){V.call(this,a,-1,ae)}q($d,V);function W(a){return J(a,be,3)}function ce(a){V.call(this,a,-1,de)}q(ce,V);function ee(a){V.call(this,a)}q(ee,V);function be(a){V.call(this,a)}q(be,V);function fe(a){V.call(this,a)}q(fe,V);function ge(a){V.call(this,a)}q(ge,V);function he(a){var b=new ge;return G(b,1,a,0)}function ie(a){V.call(this,a,-1,je)}q(ie,V);function ke(a){V.call(this,a)}q(ke,V);var ae=[2],de=[1,2,3],je=[1,3];function le(a){V.call(this,a,-1,me)}q(le,V);var me=[10];function ne(a){a.sa.apply(a,ja(sa.apply(1,arguments).map(function(b){return{ta:9,message:b}})))};function oe(a,b){return!b||0>=b?a:Math.min(a,b)}function X(a,b,c){return b?b:c?c:a?1:0}function pe(a,b){return a&&0<a.length?a:b&&0<b.length?b:[]}function qe(a){a=null==a?void 0:E(a,9);return void 0===a?!1:[61,51,52].includes(a)};function re(a,b){if(!b||0>=b)return{j:0,B:2};var c=null==a?void 0:J(a,ie,18),d,f=null==a?void 0:null==(d=W(a))?void 0:J(d,ie,11);d=null==a?void 0:J(a,fe,7);if(!c&&!f){var e;f=null==a?void 0:null==(e=W(a))?void 0:J(e,fe,4);e=X(!0,null==d?void 0:S(d,1),null==f?void 0:S(f,1));a=X(!1,null==d?void 0:S(d,2),null==f?void 0:S(f,2));c=X(!1,null==d?void 0:S(d,3),null==f?void 0:S(f,3));var h,g;d=X(!1,null==d?void 0:null==(h=J(d,ge,5))?void 0:S(h,1),null==f?void 0:null==(g=J(f,ge,5))?void 0:S(g,1));h=new fe;
-g=G(h,1,e,0);g=G(g,2,a,0);g=G(g,3,c,0);f=he(d);M(g,5,f);return{j:b*e*(1-1/(1+Math.exp(-a*(Math.log(b/1E6)-d-c)))),B:1,J:4,ba:h}}if(c||f){e=X(!1,null==c?void 0:S(c,2),null==f?void 0:S(f,2));a=pe(null==c?void 0:B(c,3,Number),null==f?void 0:B(f,3,Number));c=pe(null==c?void 0:yb(c,1),null==f?void 0:yb(f,1));h=[];g=p(c);for(f=g.next();!f.done;f=g.next())switch(f.value){case 1:h.push(1E-6*b);break;case 2:var k=f=void 0,l=null==(f=d)?void 0:null==(k=J(f,ge,5))?void 0:S(k,1);h.push("number"===typeof l?Math.exp(l):
-0)}d=se(a,h);1===d.B?(b=new ie,b=zb(b,3,a),b=zb(b,1,c),b=G(b,2,e,0),d.ba=b,b=d):b=0>=e||1<e?d:{j:b*e,B:d.B,J:9}}else b={j:0,B:3};return b}
-function se(a,b){if(0===a.length||0>a[0])return{j:0,B:5};var c=b.length;if(a.length!==1+2*(1+c))return{j:0,B:6};for(var d=c+2,f=a[1],e=a[d],h=0;h<c;h++){var g=1+h;if(0>=b[h]){if(1E-9>Math.abs(a[1+g])&&1E-9>Math.abs(a[d+g]))continue;return{j:0,B:4}}var k=Math.log(b[h]);f+=a[1+g]*k;e+=a[d+g]*k}return{j:1E9*Math.exp(-.5*(-(f+e)+Math.sqrt((f-e)*(f-e)+4*a[0]))),B:1,J:8}};function te(a,b){var c=null==a?void 0:J(a,fe,6),d,f=null==a?void 0:null==(d=W(a))?void 0:J(d,fe,3);if(!b||0>=b)return{j:0,J:1};if(1===(null==a?void 0:T(a,17)))return{j:b,J:2};var e;if(!(null==a?0:null==(e=W(a))?0:R(e,2)))return{j:.85*b,J:2};d=X(!0,null==c?void 0:S(c,4),null==f?void 0:S(f,4));e=X(!0,null==c?void 0:S(c,1),null==f?void 0:S(f,1));var h=X(!1,null==c?void 0:S(c,2),null==f?void 0:S(f,2)),g=X(!1,null==c?void 0:S(c,3),null==f?void 0:S(f,3)),k,l,n=X(!1,null==c?void 0:null==(k=J(c,ge,5))?void 0:
-S(k,1),null==f?void 0:null==(l=J(f,ge,5))?void 0:S(l,1));l=X(!1,null==c?void 0:S(c,9),null==f?void 0:S(f,9));k=new fe;var t=G(k,1,e,0);t=G(t,2,h,0);t=G(t,3,g,0);t=G(t,4,d,0);t=G(t,9,l,0);var I=he(n);M(t,5,I);t=3;d=d*b*e*(1-1/(1+Math.exp(-h*(Math.log(d*b/1E6)-n-g))));d<l*b&&(d=l*b,t=6);e=1E6*(null==a?NaN:S(a,8));var A;c=null!=(A=null==c?void 0:S(c,8))?A:0;var F;if((null==a?0:null==(F=W(a))?0:R(F,6))&&d<e&&e<b){var O;a=null!=(O=null==f?void 0:S(f,7))?O:0;d=e+a*(0===c?Math.log(b/e):(b-e)/(c-e))*1E6;
-t=7}return{j:d,J:t,ba:k}};function ue(a,b){if(!(0<B(a,2,Number).length&&B(a,2,Number).length===yb(a,3).length&&B(a,2,Number).length===B(a,4,Number).length))return 0;for(var c=0,d=0,f=1,e=p(yb(a,3)),h=e.next();!h.done;h=e.next()){var g=0;switch(h.value){case 1:g=B(a,2,Number)[d]*(b.M?Math.pow(b.M,B(a,4,Number)[d]):0);break;case 2:c=g=B(a,2,Number)[d]*(b.X?Math.pow(b.X,B(a,4,Number)[d]):0);break;case 3:g=B(a,2,Number)[d]}if(0===g)return 0;f*=g;d+=1}0<S(a,7)&&(f=Math.min(f,S(a,7)*c*1E3));return 1E6*f}
-function ve(a,b){var c=0;b&&(0<K(b,nc,7).length?c=ue(K(b,nc,7)[0],a):0<K(b,nc,8).length&&(c=ue(K(b,nc,8)[0],a)));return c};var we={Ga:0,Ca:1,xa:2,za:3,ya:4,Da:5,Ea:6,Ha:7,Ba:8,va:9,Fa:10,Aa:11,wa:12};function xe(a,b,c){if(E(a,2)!==E(b,2))return c;var d=!1;switch(E(a,2)){case 1:a:{var f,e=new Set(null!=(f=yb(a,3))?f:[]);b=p(yb(b,3));for(f=b.next();!f.done;f=b.next())if(e.has(f.value)){d=!0;break a}d=!1}break;case 0:a:{f=new Set(null!=(e=B(a,4,lb,!1))?e:[]);b=p(B(b,4,lb,!1));for(e=b.next();!e.done;e=b.next())if(f.has(e.value)){d=!0;break a}d=!1}break;case 2:b=new ye(b);d=(f=J(a,yc,5))?ze(b,f):!1;break;case 3:a:{f=new Set;e=p(B(a,9,Ub));for(d=e.next();!d.done;d=e.next())f.add(Ta(d.value));if(0===
-f.size)d=!0;else{b=p(B(b,6,Ub));for(e=b.next();!e.done;e=b.next())if(f.has(Ta(e.value))){d=!0;break a}d=!1}}break;case 4:d=Ae(a,b)}return R(a,6)?d?null:c:d?c:null}
-function Ae(a,b){a=J(a,uc,10);if(void 0===a)return!1;var c=K(b,wc,7);if(0===c.length)return!1;b=!0;c=p(c);for(var d=c.next();!d.done;d=c.next())if(d=d.value,T(d,1)===T(a,1)&&T(d,2)===T(a,2)){b&&(b=!1);var f=yb(d,3);if(0===f.length)return!1;d=!0;f=p(f);for(var e=f.next();!e.done;e=f.next()){e=e.value;var h=Math.floor(e/32),g=yb(a,3);if(!(h>=g.length||0!==(g[h]>>>e%32)%2)){d=!1;break}}if(d)return!0}return b}
-function ze(a,b){var c=E(b,1),d=K(b,tc,3),f=K(b,yc,2);switch(c){case 2:c=d.every(function(e){return Be(a,e)})&&f.every(function(e){return ze(a,e)});break;case 1:c=d.some(function(e){return Be(a,e)})||f.some(function(e){return ze(a,e)});break;default:throw Error("unexpected value "+c+"!");}return R(b,4)?!c:c}function ye(a){this.h=new Map;a=p(K(a,tc,5));for(var b=a.next();!b.done;b=a.next()){var c=b.value;b=P(x(c,1),0);c=P(x(c,2),0);var d=this.h.get(b);d||(d=new Set,this.h.set(b,d));d.add(c)}}
-function Be(a,b){var c=P(x(b,2),0);return(a=a.h.get(P(x(b,1),0)))?a.has(c):!1};function Ce(a,b){a=p((null==b?void 0:b.get(a))||[]);for(b=a.next();!b.done;b=a.next())if(b=b.value,b.count+1>b.ra)return!1;return!0};function De(a){a=a.split("!");for(var b="-1",c=0;c<a.length;c++)a[c].match(/^\dm\d+/)?c+=+a[c].substring(2):a[c].match(/^\d{2}m\d+/)?c+=+a[c].substring(3):a[c].match(/^1j\d+/)&&(b=a[c].substring(2));return b}
-function Ee(a,b){if(!a.pa)return 1;var c,d=null==(c=a.da)?void 0:c.some(function(h){var g;return null==(g=b.ga)?void 0:g.includes(h,0)}),f;c=null!=(f=b.interestGroupName)?f:void 0;if(void 0===c)return 10;f=De(c);if("-1"===f)return 11;var e;a=null==(e=a.da)?void 0:e.includes(f,0);return d&&!a?10:1};function Fe(a,b){return null==a.Z?!0:!a.Z.some(function(c){var d;return null==(d=b.ga)?void 0:d.includes(c,0)})};function Ge(a,b){return He(0,(null==a?void 0:K(a,pc,1))||[],(null==b?void 0:K(b,pc,1))||[])}function Ie(a,b){return He(1,(null==a?void 0:K(a,pc,2))||[],(null==b?void 0:K(b,pc,3))||[])}function Je(a,b){return He(1,(null==a?void 0:K(a,pc,3))||[],(null==b?void 0:K(b,pc,3))||[])}
-function He(a,b,c){var d=0,f=new Map;b=p(b);for(var e=b.next();!e.done;e=b.next())d=e.value,f.set(P(x(d,1),""),d),d=S(d,3);b=null;c=p(c);for(e=c.next();!e.done;e=c.next()){var h=e.value;d=S(h,3);if(e=f.get(P(x(h,1),""))){a:{b=a;e=B(e,2,Number);h=B(h,2,Number);if(e.length===h.length){for(var g=0,k=0;k<e.length;k++)g+=e[k]*h[k];e=g}else e=void 0;if(void 0!==e)switch(b){case 0:b=1/(1+Math.exp(-1*e));break a;case 1:b=Math.exp(e);break a}b=void 0}if(void 0!==b)return b;b=d}}var l;return null!=(l=b)?l:
-d};function Ke(a,b,c){"0"===a||c.has(a)||c.set(a,b.filter(function(d){return 0<T(d,3)}).map(function(d){var f=T(d,3);switch(E(d,1)){case 6:d=60*T(d,2);break;case 1:d=3600*T(d,2);break;case 2:d=86400*T(d,2);break;case 3:d=604800*T(d,2);break;case 4:d=2592E3*T(d,2);break;case 5:d=null;break;default:f=d=0}return{fa:d,ra:f,count:0}}))}function Le(a,b,c){if(b=c.get(b))for(b=p(b),c=b.next();!c.done;c=b.next())c=c.value,(null===c.fa||T(a,1)<=c.fa)&&c.count++};function Me(a){V.call(this,a,-1,Ne)}q(Me,V);var Ne=[1];var Oe={ad:{},bid:0,render:"",allowComponentAuction:!0};function Pe(){new Me;return function(a,b,c,d,f){return Qe(a,c,d,f)}}
-function Qe(a,b,c,d){b=b?new $d(gc(b)):void 0;var f,e;if(!b||!(K(b,ee,2).length||(null==(f=W(b))?0:R(f,1))||(null==(e=W(b))?0:R(e,5))))return Oe;f=new Jc(gc(a.userBiddingSignals));e=a.ads.map(function(g){return{renderUrl:g.renderUrl,metadata:new jc(gc(g.metadata))}});c=c[a.name]?new Pc(gc(c[a.name])):void 0;var h=d.prevWins.map(function(g){var k=new kc;k=G(k,1,g[0],0);g=new jc(gc(g[1].metadata));return M(k,2,g)});return Re(a.name,f,e,d,h,c,b)}
-function Re(a,b,c,d,f,e,h){var g=null,k=null,l=null;if(h&&(R(H(h,Zd,12),1)||R(H(h,Zd,12),2))){var n=new le;var t=G(n,2,0,0);var I=G(t,5,a,"");var A=G(I,7,!1,!1);var F=M(A,8,h);g=G(F,9,P(x(h,4),""),"");var O=globalThis.forDebuggingOnly;R(H(h,Zd,12),1)&&(k=new ic(O.reportAdAuctionWin));R(H(h,Zd,12),2)&&(l=new ic(O.reportAdAuctionLoss));if(R(H(h,Zd,12),5)){var Wa=M(g,6,b),ea=new lc;var Xa=G(ea,1,d.topWindowHostname,"");var Y=G(Xa,2,d.seller,"");var Q=G(Y,3,d.topLevelSeller,"");var We=G(Q,4,d.joinCount,
-0);var Xe=G(We,5,d.bidCount,0);var Ye=$b(Xe,6,f);var Ze=G(Ye,7,d.dataVersion,0);M(Wa,11,Ze);e&&M(g,3,e)}}var Ya=g,Rc,D={ea:null!=(Rc=null==h?void 0:W(h))?Rc:void 0,T:new Map,N:new Map,O:new Map,P:new Map,W:new Map,interestGroupName:null!=a?a:void 0,ua:E(b,2),ia:d.joinCount},ka=new Map;if(e){for(var Sc=p(K(e,Nc,1)),Ab=Sc.next();!Ab.done;Ab=Sc.next()){var L=Ab.value,$e=Se(N(L,1),N(L,2),N(L,3));ka.set($e,L);Ke(N(L,2),K(L,Lc,9),D.T);Ke(N(L,1),K(L,Lc,10),D.N);Ke(N(L,6),K(L,Lc,11),D.O);Ke(N(L,7),K(L,Lc,
-12),D.P);Ke(N(L,8),K(L,Lc,13),D.W)}for(var Tc=p(f),Bb=Tc.next();!Bb.done;Bb=Tc.next()){var Z=Bb.value;D.T&&Le(Z,N(H(Z,jc,2),2),D.T);D.N&&Le(Z,N(H(Z,jc,2),1),D.N);D.O&&Le(Z,N(H(Z,jc,2),4),D.O);D.P&&Le(Z,N(H(Z,jc,2),5),D.P);D.W&&Le(Z,N(H(Z,jc,2),6),D.W)}}var Uc=new Map;if(h)for(var Vc=p(K(h,ee,2)),Cb=Vc.next();!Cb.done;Cb=Vc.next()){var Db=Cb.value,af=Se(N(Db,1),N(Db,2),"");Uc.set(af,S(Db,3))}for(var Wc=[],Xc=p(c),Eb=Xc.next();!Eb.done;Eb=Xc.next()){var U=Eb.value,z={renderUrl:U.renderUrl,D:N(U.metadata,
-1),G:N(U.metadata,2),L:N(U.metadata,3),S:N(U.metadata,4),R:N(U.metadata,5),U:N(U.metadata,6),ja:N(U.metadata,7),ka:N(U.metadata,8),la:N(U.metadata,9),ma:N(U.metadata,10),l:0,I:0},pa=Se(z.D,z.G,z.L);z.K=Uc.get(Se(z.D,z.G,""));if(!z.K){var Yc=void 0,Zc=void 0,$c=void 0,ad=void 0;if(!(null==(Yc=h)?0:null==(Zc=W(Yc))?0:R(Zc,1))&&!(null==($c=h)?0:null==(ad=W($c))?0:R(ad,5))){Ya&&Te(Ya,z,5,1);continue}else if(!ka.get(pa)){Ya&&Te(Ya,z,6,1);continue}var bd=void 0,cd=void 0;z.v=null!=(cd=null==(bd=ka.get(pa))?
-void 0:J(bd,rc,4))?cd:void 0}var dd=void 0,ed=void 0;z.F=null!=(ed=null==(dd=ka.get(pa))?void 0:J(dd,Ac,5))?ed:void 0;var fd=void 0,gd=void 0,hd=null!=(gd=null==(fd=ka.get(pa))?void 0:K(fd,Mc,17))?gd:void 0;if(hd)for(var id=p(hd),Fb=id.next();!Fb.done;Fb=id.next()){var Ja=Fb.value;if(z.ja===N(Ja,1)&&z.ka===N(Ja,2)&&z.la===N(Ja,3)&&z.ma===N(Ja,4)){z.F||(z.F=new Ac);var Gb=J(Ja,Ac,5);if(Gb){for(var jd=p(K(Gb,Cc,1)),Hb=jd.next();!Hb.done;Hb=jd.next())ac(z.F,1,Cc,Hb.value);for(var kd=p(K(Gb,Ec,2)),Ib=
-kd.next();!Ib.done;Ib=kd.next())ac(z.F,2,Ec,Ib.value)}}}var ld=void 0,md=void 0;z.Z=null!=(md=null==(ld=ka.get(pa))?void 0:B(ld,14,kb))?md:void 0;var nd=void 0,od=void 0;z.da=null!=(od=null==(nd=ka.get(pa))?void 0:B(nd,15,kb))?od:void 0;var pd=void 0,qd=void 0;z.pa=null!=(qd=null==(pd=ka.get(pa))?void 0:R(pd,16))?qd:!1;Wc.push(z)}var Jb=null==h?void 0:J(h,Ac,5);if(Jb){for(var rd=new Map,sd=new Map,td=p(K(Jb,Cc,1)),Kb=td.next();!Kb.done;Kb=td.next()){var ud=Kb.value;rd.set(E(ud,1),ud)}for(var vd=p(K(Jb,
-Ec,2)),Lb=vd.next();!Lb.done;Lb=vd.next()){var wd=Lb.value;sd.set(E(wd,1),wd)}D.na=rd;D.oa=sd}var xd;D.ga=null!=(xd=B(b,1,kb))?xd:void 0;var ha={ads:Wc,signals:D};var Za=ha.signals;if(1!==Za.ua)var Mb=!0;else{var yd;if(null!=(yd=Za.ea)&&R(yd,8)){var zd;Mb=Za.ia<(null==(zd=Za.ea)?void 0:T(zd,9))?!1:!0}else Mb=!1}var Nb=Mb?1:8;if(1!==Nb&&null!==g)for(var Ad=p(ha.ads),Ob=Ad.next();!Ob.done;Ob=Ad.next())Te(g,Ob.value,Nb,2);var Bd=Oe,Cd=ha;if(1===Nb){for(var aa=g,Dd=null==h?void 0:W(h),Ed=[],Fd=new Map,
-Gd=p(ha.ads),Pb=Gd.next();!Pb.done;Pb=Gd.next()){var C=Pb.value,Hd=void 0;if(void 0!==Dd&&(null==(Hd=Dd)?0:R(Hd,10))&&(C.renderUrl.includes("/td/adfetch/dv3")||qe(C.v)))aa&&Te(aa,C,12,3);else{var Ka=ha.signals;if(!Ce(C.G,Ka.T)||!Ce(C.D,Ka.N)||C.S&&!Ce(C.S,Ka.O)||C.R&&!Ce(C.R,Ka.P)||C.U&&!Ce(C.U,Ka.W))aa&&Te(aa,C,3,3);else{if(C.F){var Id=ha.signals,Jd=Id.na,Kd=Id.oa,Ld=C.F;if(Jd&&Kd&&Ld)a:{for(var bf=Jd,cf=Kd,Md=Ld,Nd=p(K(Md,Cc,1)),Qb=Nd.next();!Qb.done;Qb=Nd.next()){var La=Qb.value,Ma=E(La,1),Rb=
-cf.get(Ma);if(Rb){var Na=null;if(R(La,7)){var Oa=Fd.get(Ma),Od=!0,Pd=P(x(La,8),0);if(void 0===Oa)Oa=new Map,Fd.set(Ma,Oa);else{var Sb=Oa.get(Pd);if(Sb){var Pa=Sb;break a}null===Sb&&(Od=!1)}Od&&(Na=xe(La,Rb,Ma),Oa.set(Pd,Na))}else Na=xe(La,Rb,Ma);if(Na){Pa=Na;break a}}}for(var Qd=p(K(Md,Ec,2)),Tb=Qd.next();!Tb.done;Tb=Qd.next()){var Rd=Tb.value,Sd=E(Rd,1),Td=bf.get(Sd);if(Td){var Ud=xe(Td,Rd,Sd);if(Ud){Pa=Ud;break a}}}Pa=null}else Pa=null;var Vd=Pa;if(Vd){aa&&Te(aa,C,4,3,Vd);continue}}if(Fe(C,ha.signals)){var Wd=
-Ee(C,ha.signals);1!==Wd?aa&&Te(aa,C,Wd,3):Ed.push(C)}else aa&&Te(aa,C,7,3)}}}Cd={ads:Ed,signals:ha.signals};Bd=Ue(Cd,g,h).ha}if(void 0!==h&&null!==g){if(k){var Xd=g,ef=k;G(Xd,2,1,0);ne(ef,Xd)}if(l){var Yd=g,ff=l;G(Yd,2,2,0);ne(ff,Yd)}}return Bd}
-function Te(a,b,c,d,f){a=ac(a,10,Ic);d=G(a,3,d,0);var e;var h=new Gc;h=G(h,1,b.renderUrl,"");h=G(h,2,b.D,"");h=G(h,3,b.G,"");h=G(h,4,b.L,"");h=G(h,12,b.l,0);h=G(h,13,b.I,0);var g=null!=(e=b.qa)?e:!1;e=G(h,16,g,!1);void 0!==b.S&&G(e,5,b.S,"");void 0!==b.R&&G(e,6,b.R,"");void 0!==b.U&&G(e,7,b.U,"");void 0!==b.v&&M(e,8,b.v);void 0!==b.X&&G(e,9,b.X,0);void 0!==b.M&&G(e,10,b.M,0);void 0!==b.K&&G(e,11,b.K,0);void 0!==b.F&&M(e,14,b.F);var k;b=p(null!=(k=b.Z)?k:[]);for(h=b.next();!h.done;h=b.next())k=e,h=
-h.value,ib(k),xb(k,15,2,!1,!1).push(h);M(d,1,e);void 0!==f&&G(a,5,f,0);Object.values(we).includes(c)&&G(a,2,c,0)}
-function Ue(a,b,c){for(var d=[],f=[],e=p(a.ads),h=e.next();!h.done;h=e.next())if(h=h.value,null!=h.K)h.l=h.K,h.qa=!0,d.push(h);else{var g=void 0,k=void 0;if(null==(g=c)?0:null==(k=W(g))?0:R(k,1))qe(h.v)?(g=void 0,h.M=Je(null==(g=c)?void 0:J(g,ce,1),h.v)):(g=void 0,h.X=Ge(null==(g=c)?void 0:J(g,ce,1),h.v),g=void 0,h.M=Ie(null==(g=c)?void 0:J(g,ce,1),h.v)),h.l=ve(h,h.v),h.l||(k=g=void 0,h.l=null!=(k=null==(g=h.v)?void 0:S(g,6))?k:0);else if(k=g=void 0,null==(g=c)?0:null==(k=W(g))?0:R(k,5))k=g=void 0,
-h.l=null!=(k=null==(g=h.v)?void 0:S(g,6))?k:0;k=g=void 0;if(null==(g=c)?0:null==(k=W(g))?0:R(k,7)){var l=k=g=void 0,n=void 0,t=void 0,I=void 0;if(h.D===(null==(g=c)?void 0:null==(k=J(g,ke,16))?void 0:N(k,2))&&h.G===(null==(l=c)?void 0:null==(n=J(l,ke,16))?void 0:N(n,3))&&a.signals.interestGroupName===(null==(t=c)?void 0:null==(I=J(t,ke,16))?void 0:P(x(I,1),""))){if(k=g=void 0,null==(g=c)?0:null==(k=J(g,ke,16))?0:R(k,7))l=k=g=void 0,n=null!=(l=null==(g=c)?void 0:null==(k=J(g,ke,16))?void 0:S(k,5))?
-l:0,h.l=0===n?1:n}else h.l=0}f.push(h)}d={renderUrl:"",D:"",G:"",L:"",l:0,I:0};var A,F;if((null==c?0:null==(A=W(c))?0:R(A,7))&&(null==c?0:null==(F=J(c,ke,16))?0:R(F,7)))c=a.ads.reduce(function(Y,Q){return Y.l<Q.l?Q:Y},d),c.I=c.l;else{A=a.ads.reduce(function(Y,Q){return!qe(Q.v)&&Y.l<Q.l?Q:Y},d);d=a.ads.reduce(function(Y,Q){return qe(Q.v)&&Y.l<Q.l?Q:Y},d);F=te(c,null==A?void 0:A.l);var O,Wa;F.j=oe(F.j,null==c?void 0:null==(O=W(c))?void 0:null==(Wa=J(O,fe,3))?void 0:S(Wa,6));O=re(c,null==d?void 0:d.l);
-var ea,Xa;O.j=oe(O.j,null==c?void 0:null==(ea=W(c))?void 0:null==(Xa=J(ea,fe,4))?void 0:S(Xa,6));F.j>O.j?(c=A,c.I=F.j):(c=d,c.I=O.j)}if(b)for(a=p(a.ads),h=a.next();!h.done;h=a.next())ea=h.value,Te(b,ea,Se(ea.D,ea.G,ea.L)===Se(c.D,c.G,c.L)?1:9,4);return{ha:{ad:{},bid:c.I/1E6,render:c.renderUrl,allowComponentAuction:!0},debugInfo:void 0}}function Se(a,b,c){return a.concat("+",b,"+",c)};function Ve(a,b,c,d,f){a={renderUrl:a.render_uri,metadata:a.metadata.metadata};f={owner:f.owner,name:f.name,biddingLogicUrl:"",userBiddingSignals:f.user_bidding_signals.signals,ads:[a]};a={topWindowHostname:"",seller:"",joinCount:0,bidCount:0,prevWins:[[0,a]]};b=Pe()(f,b,c.signals,d,a);c="";"string"===typeof b.render?c=b.render:(d=b.render,0<d.length&&(c=d[0]));return{status:0,ad:{render_uri:c,metadata:b.ad},bid:b.bid}};var df=globalThis;df.generateBid=function(a,b,c,d,f,e){return Ve(a,b,c,d,e)};df.generateBidIterative=function(a,b,c,d,f,e){f=(new Date).getTime();var h=[];a=p(a);for(var g=a.next();!g.done;g=a.next())g=Ve(g.value,b,c,d,e),h.push(g);return{responses:h,status:0,duration:(new Date).getTime()-f}};
diff --git a/apct-tests/perftests/rubidium/assets/rubidium_scoring_logic_compiled.js b/apct-tests/perftests/rubidium/assets/rubidium_scoring_logic_compiled.js
deleted file mode 100644
index 406a45d..0000000
--- a/apct-tests/perftests/rubidium/assets/rubidium_scoring_logic_compiled.js
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
-
- Copyright The Closure Library Authors.
- SPDX-License-Identifier: Apache-2.0
-*/
-'use strict';function aa(a){var b=0;return function(){return b<a.length?{done:!1,value:a[b++]}:{done:!0}}}var ba="function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(a==Array.prototype||a==Object.prototype)return a;a[b]=c.value;return a};
-function ca(a){a=["object"==typeof globalThis&&globalThis,a,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var b=0;b<a.length;++b){var c=a[b];if(c&&c.Math==Math)return c}throw Error("Cannot find global object");}var ea=ca(this);function n(a,b){if(b)a:{var c=ea;a=a.split(".");for(var d=0;d<a.length-1;d++){var f=a[d];if(!(f in c))break a;c=c[f]}a=a[a.length-1];d=c[a];b=b(d);b!=d&&null!=b&&ba(c,a,{configurable:!0,writable:!0,value:b})}}
-n("Symbol",function(a){function b(e){if(this instanceof b)throw new TypeError("Symbol is not a constructor");return new c(d+(e||"")+"_"+f++,e)}function c(e,g){this.h=e;ba(this,"description",{configurable:!0,writable:!0,value:g})}if(a)return a;c.prototype.toString=function(){return this.h};var d="jscomp_symbol_"+(1E9*Math.random()>>>0)+"_",f=0;return b});
-n("Symbol.iterator",function(a){if(a)return a;a=Symbol("Symbol.iterator");for(var b="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),c=0;c<b.length;c++){var d=ea[b[c]];"function"===typeof d&&"function"!=typeof d.prototype[a]&&ba(d.prototype,a,{configurable:!0,writable:!0,value:function(){return fa(aa(this))}})}return a});function fa(a){a={next:a};a[Symbol.iterator]=function(){return this};return a}
-function p(a){var b="undefined"!=typeof Symbol&&Symbol.iterator&&a[Symbol.iterator];return b?b.call(a):{next:aa(a)}}function ha(a){if(!(a instanceof Array)){a=p(a);for(var b,c=[];!(b=a.next()).done;)c.push(b.value);a=c}return a}var ia="function"==typeof Object.create?Object.create:function(a){function b(){}b.prototype=a;return new b},ja;
-if("function"==typeof Object.setPrototypeOf)ja=Object.setPrototypeOf;else{var ka;a:{var la={a:!0},ma={};try{ma.__proto__=la;ka=ma.a;break a}catch(a){}ka=!1}ja=ka?function(a,b){a.__proto__=b;if(a.__proto__!==b)throw new TypeError(a+" is not extensible");return a}:null}var na=ja;
-function r(a,b){a.prototype=ia(b.prototype);a.prototype.constructor=a;if(na)na(a,b);else for(var c in b)if("prototype"!=c)if(Object.defineProperties){var d=Object.getOwnPropertyDescriptor(b,c);d&&Object.defineProperty(a,c,d)}else a[c]=b[c];a.la=b.prototype}function oa(){for(var a=Number(this),b=[],c=a;c<arguments.length;c++)b[c-a]=arguments[c];return b}function t(a,b){return Object.prototype.hasOwnProperty.call(a,b)}
-n("WeakMap",function(a){function b(k){this.h=(h+=Math.random()+1).toString();if(k){k=p(k);for(var l;!(l=k.next()).done;)l=l.value,this.set(l[0],l[1])}}function c(){}function d(k){var l=typeof k;return"object"===l&&null!==k||"function"===l}function f(k){if(!t(k,g)){var l=new c;ba(k,g,{value:l})}}function e(k){var l=Object[k];l&&(Object[k]=function(m){if(m instanceof c)return m;Object.isExtensible(m)&&f(m);return l(m)})}if(function(){if(!a||!Object.seal)return!1;try{var k=Object.seal({}),l=Object.seal({}),
-m=new a([[k,2],[l,3]]);if(2!=m.get(k)||3!=m.get(l))return!1;m.delete(k);m.set(l,4);return!m.has(k)&&4==m.get(l)}catch(q){return!1}}())return a;var g="$jscomp_hidden_"+Math.random();e("freeze");e("preventExtensions");e("seal");var h=0;b.prototype.set=function(k,l){if(!d(k))throw Error("Invalid WeakMap key");f(k);if(!t(k,g))throw Error("WeakMap key fail: "+k);k[g][this.h]=l;return this};b.prototype.get=function(k){return d(k)&&t(k,g)?k[g][this.h]:void 0};b.prototype.has=function(k){return d(k)&&t(k,
-g)&&t(k[g],this.h)};b.prototype.delete=function(k){return d(k)&&t(k,g)&&t(k[g],this.h)?delete k[g][this.h]:!1};return b});
-n("Map",function(a){function b(){var h={};return h.v=h.next=h.head=h}function c(h,k){var l=h.h;return fa(function(){if(l){for(;l.head!=h.h;)l=l.v;for(;l.next!=l.head;)return l=l.next,{done:!1,value:k(l)};l=null}return{done:!0,value:void 0}})}function d(h,k){var l=k&&typeof k;"object"==l||"function"==l?e.has(k)?l=e.get(k):(l=""+ ++g,e.set(k,l)):l="p_"+k;var m=h.i[l];if(m&&t(h.i,l))for(h=0;h<m.length;h++){var q=m[h];if(k!==k&&q.key!==q.key||k===q.key)return{id:l,list:m,index:h,l:q}}return{id:l,list:m,
-index:-1,l:void 0}}function f(h){this.i={};this.h=b();this.size=0;if(h){h=p(h);for(var k;!(k=h.next()).done;)k=k.value,this.set(k[0],k[1])}}if(function(){if(!a||"function"!=typeof a||!a.prototype.entries||"function"!=typeof Object.seal)return!1;try{var h=Object.seal({x:4}),k=new a(p([[h,"s"]]));if("s"!=k.get(h)||1!=k.size||k.get({x:4})||k.set({x:4},"t")!=k||2!=k.size)return!1;var l=k.entries(),m=l.next();if(m.done||m.value[0]!=h||"s"!=m.value[1])return!1;m=l.next();return m.done||4!=m.value[0].x||
-"t"!=m.value[1]||!l.next().done?!1:!0}catch(q){return!1}}())return a;var e=new WeakMap;f.prototype.set=function(h,k){h=0===h?0:h;var l=d(this,h);l.list||(l.list=this.i[l.id]=[]);l.l?l.l.value=k:(l.l={next:this.h,v:this.h.v,head:this.h,key:h,value:k},l.list.push(l.l),this.h.v.next=l.l,this.h.v=l.l,this.size++);return this};f.prototype.delete=function(h){h=d(this,h);return h.l&&h.list?(h.list.splice(h.index,1),h.list.length||delete this.i[h.id],h.l.v.next=h.l.next,h.l.next.v=h.l.v,h.l.head=null,this.size--,
-!0):!1};f.prototype.clear=function(){this.i={};this.h=this.h.v=b();this.size=0};f.prototype.has=function(h){return!!d(this,h).l};f.prototype.get=function(h){return(h=d(this,h).l)&&h.value};f.prototype.entries=function(){return c(this,function(h){return[h.key,h.value]})};f.prototype.keys=function(){return c(this,function(h){return h.key})};f.prototype.values=function(){return c(this,function(h){return h.value})};f.prototype.forEach=function(h,k){for(var l=this.entries(),m;!(m=l.next()).done;)m=m.value,
-h.call(k,m[1],m[0],this)};f.prototype[Symbol.iterator]=f.prototype.entries;var g=0;return f});n("Number.isNaN",function(a){return a?a:function(b){return"number"===typeof b&&isNaN(b)}});function pa(a,b){a instanceof String&&(a+="");var c=0,d=!1,f={next:function(){if(!d&&c<a.length){var e=c++;return{value:b(e,a[e]),done:!1}}d=!0;return{done:!0,value:void 0}}};f[Symbol.iterator]=function(){return f};return f}n("Array.prototype.values",function(a){return a?a:function(){return pa(this,function(b,c){return c})}});
-n("Set",function(a){function b(c){this.h=new Map;if(c){c=p(c);for(var d;!(d=c.next()).done;)this.add(d.value)}this.size=this.h.size}if(function(){if(!a||"function"!=typeof a||!a.prototype.entries||"function"!=typeof Object.seal)return!1;try{var c=Object.seal({x:4}),d=new a(p([c]));if(!d.has(c)||1!=d.size||d.add(c)!=d||1!=d.size||d.add({x:4})!=d||2!=d.size)return!1;var f=d.entries(),e=f.next();if(e.done||e.value[0]!=c||e.value[1]!=c)return!1;e=f.next();return e.done||e.value[0]==c||4!=e.value[0].x||
-e.value[1]!=e.value[0]?!1:f.next().done}catch(g){return!1}}())return a;b.prototype.add=function(c){c=0===c?0:c;this.h.set(c,c);this.size=this.h.size;return this};b.prototype.delete=function(c){c=this.h.delete(c);this.size=this.h.size;return c};b.prototype.clear=function(){this.h.clear();this.size=0};b.prototype.has=function(c){return this.h.has(c)};b.prototype.entries=function(){return this.h.entries()};b.prototype.values=function(){return this.h.values()};b.prototype.keys=b.prototype.values;b.prototype[Symbol.iterator]=
-b.prototype.values;b.prototype.forEach=function(c,d){var f=this;this.h.forEach(function(e){return c.call(d,e,e,f)})};return b});n("globalThis",function(a){return a||ea});n("Object.values",function(a){return a?a:function(b){var c=[],d;for(d in b)t(b,d)&&c.push(b[d]);return c}});n("Object.is",function(a){return a?a:function(b,c){return b===c?0!==b||1/b===1/c:b!==b&&c!==c}});
-n("Array.prototype.includes",function(a){return a?a:function(b,c){var d=this;d instanceof String&&(d=String(d));var f=d.length;c=c||0;for(0>c&&(c=Math.max(c+f,0));c<f;c++){var e=d[c];if(e===b||Object.is(e,b))return!0}return!1}});
-n("String.prototype.includes",function(a){return a?a:function(b,c){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(b instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(b,c||0)}});function qa(a){var b=typeof a;return"object"==b&&null!=a||"function"==b};var ra={};var sa=Array.prototype.map?function(a,b){return Array.prototype.map.call(a,b,void 0)}:function(a,b){for(var c=a.length,d=Array(c),f="string"===typeof a?a.split(""):a,e=0;e<c;e++)e in f&&(d[e]=b.call(void 0,f[e],e,a));return d};var ta={},u=null;function ua(a,b){void 0===b&&(b=0);va();b=ta[b];for(var c=Array(Math.floor(a.length/3)),d=b[64]||"",f=0,e=0;f<a.length-2;f+=3){var g=a[f],h=a[f+1],k=a[f+2],l=b[g>>2];g=b[(g&3)<<4|h>>4];h=b[(h&15)<<2|k>>6];k=b[k&63];c[e++]=l+g+h+k}l=0;k=d;switch(a.length-f){case 2:l=a[f+1],k=b[(l&15)<<2]||d;case 1:a=a[f],c[e]=b[a>>2]+b[(a&3)<<4|l>>4]+k+d}return c.join("")}
-function wa(a){var b=a.length,c=3*b/4;c%3?c=Math.floor(c):-1!="=.".indexOf(a[b-1])&&(c=-1!="=.".indexOf(a[b-2])?c-2:c-1);var d=new Uint8Array(c),f=0;xa(a,function(e){d[f++]=e});return f!==c?d.subarray(0,f):d}
-function xa(a,b){function c(k){for(;d<a.length;){var l=a.charAt(d++),m=u[l];if(null!=m)return m;if(!/^[\s\xa0]*$/.test(l))throw Error("Unknown base64 encoding at char: "+l);}return k}va();for(var d=0;;){var f=c(-1),e=c(0),g=c(64),h=c(64);if(64===h&&-1===f)break;b(f<<2|e>>4);64!=g&&(b(e<<4&240|g>>2),64!=h&&b(g<<6&192|h))}}
-function va(){if(!u){u={};for(var a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),b=["+/=","+/","-_=","-_.","-_"],c=0;5>c;c++){var d=a.concat(b[c].split(""));ta[c]=d;for(var f=0;f<d.length;f++){var e=d[f];void 0===u[e]&&(u[e]=f)}}}};var ya="undefined"!==typeof Uint8Array;function za(a){return null==a||v(a)?a:"string"===typeof a?wa(a):null}function v(a){return ya&&null!=a&&a instanceof Uint8Array}var w={};var Aa;function Ba(a){if(a!==w)throw Error("illegal external caller");}function x(a,b){Ba(b);this.H=a;if(null!=a&&0===a.length)throw Error("ByteString should be constructed with non-empty values");}function Ca(){return Aa||(Aa=new x(null,w))}function Da(a){var b=a.H;return null==b?"":"string"===typeof b?b:a.H=ua(b)};var y="function"===typeof Symbol&&"symbol"===typeof Symbol()?Symbol():void 0;function z(a,b){if(y)return a[y]|=b;if(void 0!==a.u)return a.u|=b;Object.defineProperties(a,{u:{value:b,configurable:!0,writable:!0,enumerable:!1}});return b}function Ea(a,b){y?a[y]&&(a[y]&=~b):void 0!==a.u&&(a.u&=~b)}function A(a){var b;y?b=a[y]:b=a.u;return null==b?0:b}function B(a,b){y?a[y]=b:void 0!==a.u?a.u=b:Object.defineProperties(a,{u:{value:b,configurable:!0,writable:!0,enumerable:!1}})}
-function C(a){z(a,1);return a}function E(a){return!!(A(a)&2)}function Fa(a){z(a,16);return a}function Ga(a,b){B(b,(a|0)&-51)}function Ha(a,b){B(b,(a|18)&-41)};var F={};function H(a){return null!==a&&"object"===typeof a&&!Array.isArray(a)&&a.constructor===Object}var Ia;function Ja(a){a instanceof x&&(Ba(w),a=a.H||"");return a}var I,Ka=[];B(Ka,23);I=Object.freeze(Ka);function J(a){if(E(a.j))throw Error("Cannot mutate an immutable Message");}function La(a){var b=a.length;(b=b?a[b-1]:void 0)&&H(b)?b.g=1:(b={},a.push((b.g=1,b)))};function Ma(a){return a}function Na(a){return a};function Oa(a,b){a=a||{};b=b||{};var c={},d;for(d in a)c[d]=0;for(var f in b)c[f]=0;for(var e in c)if(!Pa(a[e],b[e]))return!1;return!0}function Qa(a){return a&&"object"===typeof a?a.j||a:a}
-function Pa(a,b){a=Ja(a);b=Ja(b);a=Qa(a);b=Qa(b);if(a==b)return!0;if(ya){var c=v(a),d=v(b);if(c||d){if(!c)if("string"===typeof a)a=za(a);else return!1;if(d)d=b;else if("string"===typeof b)d=za(b);else return!1;if(a.length!==d.length)return!1;for(b=0;b<a.length;b++)if(a[b]!==d[b])return!1;return!0}}if(null==a&&Array.isArray(b)&&A(b)&1&&!b.length||null==b&&Array.isArray(a)&&A(a)&1&&!a.length)return!0;if(!qa(a)||!qa(b))return"number"===typeof a&&isNaN(a)||"number"===typeof b&&isNaN(b)?String(a)==String(b):
-!1;if(a.constructor!=b.constructor)return!1;if(a.constructor===Array){d=a;c=a=void 0;for(var f=Math.max(d.length,b.length),e=0;e<f;e++){var g=d[e],h=b[e];g&&g.constructor==Object&&(a=g,g=void 0);h&&h.constructor==Object&&(c=h,h=void 0);if(!Pa(g,h))return!1}return a||c?(a=a||{},c=c||{},Oa(a,c)):!0}if(a.constructor===Object)return Oa(a,b);throw Error("Invalid type in JSPB array");};var K;function Ra(a){switch(typeof a){case "number":return isFinite(a)?a:String(a);case "object":if(a)if(Array.isArray(a)){if(0!==(A(a)&128))return a=Array.prototype.slice.call(a),La(a),a}else{if(v(a))return ua(a);if(a instanceof x)return Da(a)}}return a};function Sa(a,b,c,d){if(null!=a){if(Array.isArray(a))a=Ta(a,b,c,void 0!==d);else if(H(a)){var f={},e;for(e in a)f[e]=Sa(a[e],b,c,d);a=f}else a=b(a,d);return a}}function Ta(a,b,c,d){var f=A(a);d=d?!!(f&16):void 0;a=Array.prototype.slice.call(a);for(var e=0;e<a.length;e++)a[e]=Sa(a[e],b,c,d);c(f,a);return a}function Ua(a){return a.F===F?a.toJSON():Ra(a)}function Va(a){if(!a)return a;if("object"===typeof a){if(v(a))return new Uint8Array(a);if(a.F===F)return Wa(a)}return a}
-function Xa(a,b){a&128&&La(b)};function Ya(a){return a.h||(a.h=a.j[a.i+a.A]={})}function L(a,b,c){return-1===b?null:b>=a.i?a.h?a.h[b]:void 0:c&&a.h&&(c=a.h[b],null!=c)?c:a.j[b+a.A]}function M(a,b,c,d){a.o&&(a.o=void 0);if(b>=a.i||d)return Ya(a)[b]=c,a;a.j[b+a.A]=c;(c=a.h)&&b in c&&delete c[b];return a}
-function Za(a,b,c,d,f){var e=L(a,b,d);Array.isArray(e)||(e=I);var g=A(e);g&1||C(e);if(f)g&2||z(e,2),c&1||Object.freeze(e);else{f=!(c&2);var h=g&2;c&1||!h?f&&g&16&&!h&&Ea(e,16):(e=C(Array.prototype.slice.call(e)),M(a,b,e,d))}return e}function O(a,b){return Za(a,b,0,!1,E(a.j))}
-function P(a,b,c,d){var f=E(a.j),e=Za(a,b,1,d,f),g=A(e);if(!(g&4)){Object.isFrozen(e)&&(e=C(e.slice()),M(a,b,e,d));for(var h=0,k=0;h<e.length;h++){var l=c(e[h]);null!=l&&(e[k++]=l)}k<h&&(e.length=k);z(e,5);f&&(z(e,2),Object.freeze(e))}!f&&(g&2||Object.isFrozen(e))&&(e=Array.prototype.slice.call(e),z(e,5),c=e,null==c?c=I:(f=A(c),1!==(f&1)&&(Object.isFrozen(c)&&(c=Array.prototype.slice.call(c)),B(c,f|1))),J(a),M(a,b,c,d));return e}
-function $a(a){return null==a?a:"string"===typeof a?a?new x(a,w):Ca():a.constructor===x?a:v(a)?a.length?new x(new Uint8Array(a),w):Ca():void 0}function Q(a,b){a=L(a,b);return null==a?0:a}function R(a,b,c,d){J(a);c!==d?M(a,b,c):M(a,b,void 0,!1);return a}var ab=Symbol(void 0);function bb(a,b,c,d){var f=L(a,c,d);var e=!1;var g=null==f||"object"!==typeof f||(e=Array.isArray(f))||f.F!==F?e?new b(f):void 0:f;g!==f&&null!=g&&(M(a,c,g,d),z(g.j,A(a.j)&-33));return g}
-function S(a,b,c){if(a=bb(a,b,c,!1))b=a;else if(a=b[ab])b=a;else{a=new b;if(ra!==ra)throw Error("requires a valid immutable API token");E(a.j)||((c=a.o)&&Pa(c.j,a.j)?a=c:(c=cb(a,!0),z(c.j,2),a=a.o=c));b=b[ab]=a}return b}function T(a,b,c){var d=void 0===d?!1:d;b=bb(a,b,c,d);if(null==b)return b;if(!E(a.j)){var f=db(b);f!==b&&(b=f,M(a,c,b,d))}return b}
-function eb(a,b,c,d,f,e){a.m||(a.m={});var g=a.m[c],h=Za(a,c,3,d,e);if(g)e||(Object.isFrozen(g)?f||(g=Array.prototype.slice.call(g),a.m[c]=g):f&&Object.freeze(g));else{g=[];var k=!!(A(a.j)&16),l=E(h);!e&&l&&(h=C(Array.prototype.slice.call(h)),M(a,c,h,d));d=l;for(var m=0;m<h.length;m++){var q=h[m];var G=b;var D=k,N=!1;N=void 0===N?!1:N;D=void 0===D?!1:D;G=Array.isArray(q)?new G(D?Fa(q):q):N?new G:void 0;void 0!==G&&(d=d||E(q),g.push(G),l&&z(G.j,2))}a.m[c]=g;a=h;Object.isFrozen(a)||(b=A(a)|33,B(a,d?
-b&-9:b|8));(e||f&&l)&&z(g,2);(e||f)&&Object.freeze(g)}return g}function U(a,b,c,d){var f=E(a.j);b=eb(a,b,c,d,f,f);a=Za(a,c,3,d,f);if(!(f||A(a)&8)){for(f=0;f<b.length;f++)c=b[f],d=db(c),c!==d&&(b[f]=d,a[f]=b[f].j);z(a,8)}return b}function fb(a,b,c){J(a);null==c&&(c=void 0);return M(a,b,c)}function gb(a,b,c,d){J(a);if(null!=c){var f=C([]);for(var e=!1,g=0;g<c.length;g++)f[g]=c[g].j,e=e||E(f[g]);a.m||(a.m={});a.m[b]=c;c=f;e?Ea(c,8):z(c,8)}else a.m&&(a.m[b]=void 0),f=I;M(a,b,f,d)}
-function V(a,b){return null==a?b:a}function W(a,b){a=L(a,b);return V(null==a?a:!!a,!1)};function hb(a){var b=A(a);if(b&2)return a;a=sa(a,ib);Ha(b,a);Object.freeze(a);return a}function jb(a,b,c){c=void 0===c?Ha:c;if(null!=a){if(ya&&a instanceof Uint8Array)return a.length?new x(new Uint8Array(a),w):Ca();if(Array.isArray(a)){var d=A(a);if(d&2)return a;if(b&&!(d&32)&&(d&16||0===d))return B(a,d|2),a;a=Ta(a,jb,c,!0);b=A(a);b&4&&b&2&&Object.freeze(a);return a}return a.F===F?ib(a):a}}function ib(a){if(E(a.j))return a;a=cb(a,!0);z(a.j,2);return a}
-function cb(a,b){var c=a.j,d=Fa([]),f=a.constructor.h;f&&d.push(f);0!==(A(c)&128)&&La(d);b=b||E(a.j)?Ha:Ga;f=a.constructor;K=d;d=new f(d);K=void 0;a.C&&(d.C=a.C.slice());f=!!(A(c)&16);for(var e=0;e<c.length;e++){var g=c[e];if(e===c.length-1&&H(g))for(var h in g){var k=+h;if(Number.isNaN(k))Ya(d)[k]=g[k];else{var l=g[h],m=a.m&&a.m[k];m?gb(d,k,hb(m),!0):(l=jb(l,f,b),J(d),M(d,k,l,!0))}}else k=e-a.A,(l=a.m&&a.m[k])?gb(d,k,hb(l),!1):(g=jb(g,f,b),J(d),M(d,k,g,!1))}return d}
-function db(a){if(!E(a.j))return a;var b=cb(a,!1);b.o=a;return b};function X(a,b,c){null==a&&(a=K);K=void 0;var d=this.constructor.i||0,f=0<d,e=this.constructor.h,g=!1;if(null==a){a=e?[e]:[];var h=!0;B(a,48)}else{if(!Array.isArray(a))throw Error();if(e&&e!==a[0])throw Error();var k=z(a,0),l=k;if(h=0!==(16&l))(g=0!==(32&l))||(l|=32);if(f)if(128&l)d=0;else{if(0<a.length){var m=a[a.length-1];if(H(m)&&"g"in m){d=0;l|=128;delete m.g;var q=!0,G;for(G in m){q=!1;break}q&&a.pop()}}}else if(128&l)throw Error();k!==l&&B(a,l)}this.A=(e?0:-1)-d;this.m=void 0;this.j=a;a:{e=
-this.j.length;d=e-1;if(e&&(e=this.j[d],H(e))){this.h=e;this.i=d-this.A;break a}void 0!==b&&-1<b?(this.i=Math.max(b,d+1-this.A),this.h=void 0):this.i=Number.MAX_VALUE}if(!f&&this.h&&"g"in this.h)throw Error('Unexpected "g" flag in sparse object of message that is not a group type.');if(c){b=h&&!g&&!0;f=this.i;var D;for(h=0;h<c.length;h++)g=c[h],g<f?(g+=this.A,(d=a[g])?kb(d,b):a[g]=I):(D||(D=Ya(this)),(d=D[g])?kb(d,b):D[g]=I)}}X.prototype.toJSON=function(){var a=this.j;return Ia?a:Ta(a,Ua,Xa)};
-function Wa(a){var b=Ta(a.j,Va,Ga);Fa(b);K=b;b=new a.constructor(b);K=void 0;lb(b,a);return b}function kb(a,b){if(Array.isArray(a)){var c=A(a),d=1;!b||c&2||(d|=16);(c&d)!==d&&B(a,c|d)}}X.prototype.F=F;X.prototype.toString=function(){return this.j.toString()};function mb(a,b){return Ra(b)}
-function lb(a,b){b.C&&(a.C=b.C.slice());var c=b.m;if(c){var d=b.h,f;for(f in c)if(b=c[f]){var e=!(!d||!d[f]),g=+f;if(Array.isArray(b)){if(b.length)for(e=U(a,b[0].constructor,g,e),g=0;g<Math.min(e.length,b.length);g++)lb(e[g],b[g])}else throw a=typeof b,Error("unexpected object: type: "+("object"!=a?a:b?Array.isArray(b)?"array":a:"null")+": "+b);}}};var nb=void 0;function ob(a){var b=nb;nb=void 0;if(!Array.isArray(a))throw b=b?b()+"\n":"",Error(b+String(a));return a};function pb(a){return JSON.stringify([a.map(function(b){var c={};return[(c[b.L]=b.message.toJSON(),c)]})])};function qb(a){this.h=a}qb.prototype.K=function(){var a=encodeURIComponent;var b=pb(oa.apply(0,arguments));for(var c=[],d=0,f=0;f<b.length;f++){var e=b.charCodeAt(f);255<e&&(c[d++]=e&255,e>>=8);c[d++]=e}b=ua(c,3);a=a(b);this.h("https://pagead2.googlesyndication.com/pagead/ping?e=3&d="+a)};function rb(a){X.call(this,a)}r(rb,X);function sb(a){X.call(this,a,-1,tb)}r(sb,X);var tb=[3];function ub(a){X.call(this,a,-1,vb)}r(ub,X);var vb=[3];function wb(a){X.call(this,a,-1,xb)}r(wb,X);var xb=[2,3,5];function yb(a){X.call(this,a,-1,zb)}r(yb,X);function Ab(a){X.call(this,a,-1,Bb)}r(Ab,X);function Cb(a){X.call(this,a,-1,Db)}r(Cb,X);var zb=[1,2],Bb=[3,4,9],Db=[3,4,5,6,7];function Y(a){X.call(this,a)}r(Y,X);function Eb(a){X.call(this,a,-1,Fb)}r(Eb,X);var Fb=[1,2,3];function Gb(a){X.call(this,a,-1,Hb)}r(Gb,X);var Hb=[1];function Ib(a){X.call(this,a,-1,Jb)}r(Ib,X);var Jb=[1];function Kb(a){X.call(this,a,-1,Lb)}r(Kb,X);var Lb=[1];function Mb(a){X.call(this,a,-1,Nb)}r(Mb,X);var Nb=[1];function Z(a){X.call(this,a)}r(Z,X);function Ob(a){X.call(this,a,-1,Pb)}r(Ob,X);function Qb(a){X.call(this,a)}r(Qb,X);var Pb=[1];function Rb(a){X.call(this,a)}r(Rb,X);function Sb(a){X.call(this,a)}r(Sb,X);function Tb(a){X.call(this,a)}r(Tb,X);function Ub(a){X.call(this,a)}r(Ub,X);function Vb(a){X.call(this,a,-1,Wb)}r(Vb,X);var Wb=[1];function Xb(a){X.call(this,a,-1,Yb)}r(Xb,X);var Yb=[1,2];function Zb(a){X.call(this,a,-1,$b)}r(Zb,X);var $b=[1];function ac(a){X.call(this,a,-1,bc)}r(ac,X);var bc=[2,3,6,10];function cc(a){X.call(this,a)}r(cc,X);function dc(a,b){return R(a,1,b,"")}function ec(a,b){return fb(a,2,b)};var fc={ja:0,V:1,X:2,ca:3,Z:4,Y:5,aa:6,ba:7,da:8,ea:12,U:9,N:10,W:11};var gc={ka:0,ha:1,S:2,T:3,fa:4,M:5,ia:6,ga:7,P:8,O:9,R:10};function hc(a){X.call(this,a,-1,ic)}r(hc,X);function jc(a,b){fb(a,8,b)}function kc(a){X.call(this,a,-1,lc)}r(kc,X);function mc(a,b){return R(a,2,b,"")}function nc(a,b){return R(a,3,b,"")}var ic=[9],lc=[6];function oc(a){a.K.apply(a,ha(oa.apply(1,arguments).map(function(b){return{L:10,message:b}})))};function pc(a){X.call(this,a,-1,qc)}r(pc,X);var qc=[1];function rc(a,b,c){if(Q(a,2)!==Q(b,2))return c;var d=!1;switch(Q(a,2)){case 1:a:{var f,e=new Set(null!=(f=O(a,3))?f:[]);b=p(O(b,3));for(f=b.next();!f.done;f=b.next())if(e.has(f.value)){d=!0;break a}d=!1}break;case 0:a:{f=new Set(null!=(e=P(a,4,Na,!1))?e:[]);b=p(P(b,4,Na,!1));for(e=b.next();!e.done;e=b.next())if(f.has(e.value)){d=!0;break a}d=!1}break;case 2:b=new sc(b);d=(f=T(a,wb,5))?tc(b,f):!1;break;case 3:a:{f=new Set;e=p(P(a,9,$a));for(d=e.next();!d.done;d=e.next())f.add(Da(d.value));if(0===f.size)d=
-!0;else{b=p(P(b,6,$a));for(e=b.next();!e.done;e=b.next())if(f.has(Da(e.value))){d=!0;break a}d=!1}}break;case 4:d=uc(a,b)}return W(a,6)?d?null:c:d?c:null}
-function uc(a,b){a=T(a,sb,10);if(void 0===a)return!1;var c=U(b,ub,7);if(0===c.length)return!1;b=!0;c=p(c);for(var d=c.next();!d.done;d=c.next())if(d=d.value,V(L(d,1),0)===V(L(a,1),0)&&V(L(d,2),0)===V(L(a,2),0)){b&&(b=!1);var f=O(d,3);if(0===f.length)return!1;d=!0;f=p(f);for(var e=f.next();!e.done;e=f.next()){e=e.value;var g=Math.floor(e/32),h=O(a,3);if(!(g>=h.length||0!==(h[g]>>>e%32)%2)){d=!1;break}}if(d)return!0}return b}
-function tc(a,b){var c=Q(b,1),d=U(b,rb,3),f=U(b,wb,2);switch(c){case 2:c=d.every(function(e){return vc(a,e)})&&f.every(function(e){return tc(a,e)});break;case 1:c=d.some(function(e){return vc(a,e)})||f.some(function(e){return tc(a,e)});break;default:throw Error("unexpected value "+c+"!");}return W(b,4)?!c:c}function sc(a){this.h=new Map;a=p(U(a,rb,5));for(var b=a.next();!b.done;b=a.next()){var c=b.value;b=V(L(c,1),0);c=V(L(c,2),0);var d=this.h.get(b);d||(d=new Set,this.h.set(b,d));d.add(c)}}
-function vc(a,b){var c=V(L(b,2),0);return(a=a.h.get(V(L(b,1),0)))?a.has(c):!1};function wc(a,b){switch(a){case 2:return 187;case 3:return 138;case 4:return xc(b);case 5:return 80;case 6:return 7;case 7:return 2;case 8:return 7;default:return 4}}function xc(a){switch(a){case 2:return 12;case 3:return 14;case 4:return 15;case 5:return 219;case 6:return 82;case 7:return 80;case 8:return 71;case 9:return 16;default:return 4}};function yc(a){return"https://googleads.g.doubleclick.net"===a||"https://td.doubleclick.net"===a};function zc(a,b,c,d,f){this.J=a;this.postRevshareBidCpmUsdMicros=b;this.sellerSignals=c;this.h=d;this.D=f;this.o=new Map;if(W(S(c,Y,12),1)||W(S(c,Y,12),2))a=new hc,this.i=R(a,7,V(L(this.sellerSignals,2),""),"")}zc.prototype.reject=function(a,b){b=void 0===b?0:b;var c,d,f,e,g={ru:null!=(f=null==(c=this.h)?void 0:c.renderUrl)?f:"",igo:null!=(e=null==(d=this.h)?void 0:d.interestGroupOwner)?e:"",s:a,r:b};Ac(this,a,b);return{desirability:0,postRevshareBidCpmUsdMicros:0,debugInfo:this.D?g:void 0,debugEventMessage:this.debugEventMessage}};
-zc.prototype.accept=function(){var a,b,c,d,f={ru:null!=(c=null==(a=this.h)?void 0:a.renderUrl)?c:"",igo:null!=(d=null==(b=this.h)?void 0:b.interestGroupOwner)?d:"",s:1,r:1};Ac(this,1,1);return{desirability:this.postRevshareBidCpmUsdMicros,postRevshareBidCpmUsdMicros:this.postRevshareBidCpmUsdMicros,debugInfo:this.D?f:void 0,debugEventMessage:this.debugEventMessage}};
-function Ac(a,b,c){if(void 0!==a.i){var d=nc(mc(new kc,a.h.interestGroupOwner),a.h.renderUrl);yc(a.h.interestGroupOwner)||R(d,8,a.J,0);fb(a.i,4,d);W(S(a.sellerSignals,Y,12),5)&&(jc(fb(a.i,11,a.sellerSignals),ec(dc(new cc,a.h.renderUrl),a.I)),a.o.forEach(function(h,k){var l;null!=(l=a.i)&&(k=ec(dc(new cc,k),h),J(l),h=eb(l,cc,9,void 0,!1,!1),k=null!=k?k:new cc,l=Za(l,9,2,void 0,!1),h.push(k),l.push(k.j),E(k.j)&&Ea(l,8))}));if(Object.values(gc).includes(b)){var f;null!=(f=a.i)&&R(f,6,b,0)}if(Object.values(fc).includes(c)){var e;
-null!=(e=a.i)&&R(e,5,c,0)}if(1!==b||1!==c){var g;null!=(g=a.i)&&R(g,10,wc(b,c),0)}}}ea.Object.defineProperties(zc.prototype,{debugEventMessage:{configurable:!0,enumerable:!0,get:function(){var a;return null==(a=this.i)?void 0:Wa(a)}}});function Bc(a){var b;this.i=null!=(b=null==a?void 0:V(L(a,4),0))?b:0}Bc.prototype.h=function(a){if(!this.i)return 1;var b;return(null==(b=T(a,Vb,9))?0:O(b,1).includes(this.i))?2:1};function Cc(a,b){return 0===a.size?!1:void 0===b||0===b.length?!0:b.some(function(c){return a.has(c)})}function Dc(a){a=S(S(a,Z,2),Eb,1);this.i=new Set(O(a,1));this.o=W(a,4);this.D=W(a,5)}Dc.prototype.h=function(a){var b;if(Cc(this.i,null==(b=T(a,Xb,1))?void 0:O(b,1)))return 4;a=T(a,Xb,1);return!this.D||a&&!W(a,4)?!this.o||a&&!W(a,3)?1:3:4};function Ec(a){this.i=W(S(S(a,Z,2),Gb,3),2);this.o=new Set(O(S(S(a,Z,2),Gb,3),1))}Ec.prototype.h=function(a){var b=this;return this.i?1:void 0===bb(a,Zb,7,!1)||O(T(a,Zb,7),1).every(function(c){return b.o.has(c)})?1:5};function Fc(a){var b,c,d;this.i=new Set(null!=(d=null==a?void 0:null==(b=T(a,Z,2))?void 0:null==(c=T(b,Ib,4))?void 0:P(c,1,Na,!1))?d:[])}Fc.prototype.h=function(a){var b=this;return 0===this.i.size?1:0===P(a,10,Na,!1).length||P(a,10,Na,!1).some(function(c){return!b.i.has(c)})?6:1};function Gc(a){var b,c;this.i=null!=(c=null==a?void 0:null==(b=T(a,Ob,3))?void 0:U(b,Qb,1))?c:[]}Gc.prototype.h=function(a,b){if(null==b)return 7;if(0===this.i.length)return 1;a=p(this.i);for(var c=a.next();!c.done;c=a.next())if(c=c.value,null!=V(L(c,2),0)&&b<V(L(c,2),0))return 7;return 1};function Hc(a){var b,c,d;this.i=new Set(null!=(d=null==a?void 0:null==(b=T(a,Z,2))?void 0:null==(c=T(b,Kb,2))?void 0:P(c,1,Ma))?d:[])}Hc.prototype.h=function(a){var b=this;return 0!==this.i.size&&P(a,6,Ma).some(function(c){return b.i.has(c)})?8:1};function Ic(a){a=S(S(a,Z,2),Mb,5);this.i=W(a,2);this.o=new Set(O(a,1))}Ic.prototype.h=function(a){var b=this;return this.i?1:O(S(a,Zb,7),1).every(function(c){return b.o.has(c)})?1:9};function Jc(){new pc;return function(a,b,c,d,f){a=new Sb(ob(c.sellerSignals));b=Kc(b,a,d,f,W(a,8)||W(a,22));W(a,8)&&b.debugInfo&&console.log(b.debugInfo);if(W(a,22)&&b.debugInfo){d=b.debugInfo.s;c=b.debugInfo.r;var e,g,h={renderUrl:null!=(e=null==f?void 0:f.renderUrl)?e:"",interestGroupOwner:null!=(g=null==f?void 0:f.interestGroupOwner)?g:"",accepted:!0};if(1!==d||1!==c)h.accepted=!1,h.externalBidStatus=wc(d,c);console.log("Logging debug info of scoreAd().\n",h)}b.debugEventMessage&&(e=b.debugEventMessage,
-g=globalThis.forDebuggingOnly,W(S(a,Y,12),1)&&g.reportAdAuctionWin&&Lc(a,e,g.reportAdAuctionWin,1),W(S(a,Y,12),2)&&g.reportAdAuctionLoss&&Lc(a,e,g.reportAdAuctionLoss,2));return f.topLevelSeller?{desirability:b.desirability,bid:b.postRevshareBidCpmUsdMicros?b.postRevshareBidCpmUsdMicros/1E6:void 0,allowComponentAuction:!0}:{desirability:b.desirability,allowComponentAuction:!0}}}
-function Lc(a,b,c,d){R(b,2,d,0);d=T(b,kc,4);if(W(a,23)&&d&&!yc(V(L(d,2),""))){a=encodeURIComponent;a:{Ia=!0;try{var f=JSON.stringify(b.toJSON(),mb);break a}finally{Ia=!1}f=void 0}c("https://googleads.g.doubleclick.net/td/rdl?tdr="+a(f))}else oc(new qb(c),b)}
-function Mc(a,b){var c,d=null==(c=a.sellerSignals)?void 0:T(c,yb,3),f=null==b?void 0:T(b,yb,11);if(d&&f){c=new Map;for(var e=new Map,g=p(U(d,Ab,1)),h=g.next();!h.done;h=g.next())h=h.value,c.set(Q(h,1),h);d=p(U(d,Cb,2));for(g=d.next();!g.done;g=d.next())g=g.value,e.set(Q(g,1),g);d=new Map;if(g=c&&e&&f)a:{g=p(U(f,Ab,1));for(h=g.next();!h.done;h=g.next()){h=h.value;var k=Q(h,1),l=e.get(k);if(l){var m=null;if(W(h,7)){var q=d.get(k),G=!0,D=V(L(h,8),0);if(void 0===q)q=new Map,d.set(k,q);else{var N=q.get(D);
-if(N){g=N;break a}null===N&&(G=!1)}G&&(m=rc(h,l,k),q.set(D,m))}else m=rc(h,l,k);if(m){g=m;break a}}}f=p(U(f,Cb,2));for(e=f.next();!e.done;e=f.next())if(e=e.value,d=Q(e,1),g=c.get(d))if(e=rc(g,e,d)){g=e;break a}g=null}if(g)return{G:2,B:0}}a:{c=a.postRevshareBidCpmUsdMicros;var da;a=null!=(da=T(a.sellerSignals,Rb,1))?da:new Rb;da=p([new Bc(a),new Dc(a),new Ec(a),new Fc(a),new Gc(a),new Hc(a),new Ic(a)]);for(a=da.next();!a.done;a=da.next())if(a=a.value.h(b,c),1!==a){b=a;break a}b=1}return 1!==b?{G:4,
-B:b}:{G:0,B:1}}
-function Kc(a,b,c,d,f){var e=!!d.componentSeller,g=1E6*a,h=S(S(b,Tb,5),Ub,1);h=L(h,1);h=g*(V(null==h?h:+h,0)||1);a=new zc(a,h,b,d,f);if(d.topLevelSeller&&"https://pubads.g.doubleclick.net"!==d.topLevelSeller)return a.reject(9);var k;f=BigInt((null==(k=T(b,Tb,5))?void 0:V(L(k,2),"0"))||0);if(h<f)return a.reject(5);var l;b=BigInt((null==(l=T(b,Tb,5))?void 0:V(L(l,3),"0"))||0);if(0<b&&g>b)return a.reject(3);if(e)return a.accept();if(!d.renderUrl)return a.reject(7,11);e=null==c?void 0:c.renderUrl;if(null==
-e||!e[d.renderUrl])return a.reject(6,10);var m;e=new ac(ob(null!=(m=null==e?void 0:e[d.renderUrl])?m:[]));a.I=e;m=Mc(a,a.I);if(1!==m.B)return a.reject(m.G,m.B);var q;if(null==(q=d.adComponents)?0:q.length){q=!1;d=p(d.adComponents);for(m=d.next();!m.done;m=d.next())if(m=m.value,l=g=e=void 0,b=null!=(l=null==(e=c)?void 0:null==(g=e.adComponentRenderUrls)?void 0:g[m])?l:[],e=ob(b),e.length&&(q=!0,e=new ac(e),a.o.set(m,e),e=Mc(a,e),1!==e.B))return c=a.reject(e.G,e.B),c.debugInfo&&(c.debugInfo.acru=m),
-c;if(!q)return a.reject(8,12)}return a.accept()};function Nc(a,b,c,d,f){var e=a.metadata.metadata;c={seller:c.seller,decisionLogicUrl:c.decision_logic_uri,trustedScoringSignalsUrl:c.trusted_scoring_signal_uri,interestGroupBuyers:c.custom_audience_buyers,auctionSignals:f,sellerExperimentGroupId:void 0,sellerSignals:d.signals,perBuyerSignals:c.per_buyer_signals};a={topWindowHostname:"",interestGroupOwner:"",renderUrl:a.render_uri,biddingDurationMsec:0};b=Jc()(e,b,c,f,a);return{status:0,score:"number"===typeof b?b:b.desirability}};var Oc=globalThis;Oc.scoreAd=function(a,b,c,d,f){return Nc(a,b,c,d,f)};Oc.scoreAdIterative=function(a,b,c,d){var f=[],e=(new Date).getTime();a=p(a);for(var g=a.next();!g.done;g=a.next())g=g.value,g=Nc(g.ad,g.bid,b,c,d),f.push(g);return{responses:f,status:0,duration:(new Date).getTime()-e}};
diff --git a/apct-tests/perftests/rubidium/assets/turtledove_generate_bid.js b/apct-tests/perftests/rubidium/assets/turtledove_generate_bid.js
deleted file mode 100644
index 38d30ac..0000000
--- a/apct-tests/perftests/rubidium/assets/turtledove_generate_bid.js
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- Copyright The Closure Library Authors.
- SPDX-License-Identifier: Apache-2.0
-
- See cl/451090252 for how to generate this file.
-*/
-var n,aa=function(a){var b=0;return function(){return b<a.length?{done:!1,value:a[b++]}:{done:!0}}},ba="function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(a==Array.prototype||a==Object.prototype)return a;a[b]=c.value;return a},ca=function(a){a=["object"==typeof globalThis&&globalThis,a,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var b=0;b<a.length;++b){var c=a[b];if(c&&c.Math==Math)return c}throw Error("Cannot find global object");
-},da=ca(this),p=function(a,b){if(b)a:{var c=da;a=a.split(".");for(var d=0;d<a.length-1;d++){var e=a[d];if(!(e in c))break a;c=c[e]}a=a[a.length-1];d=c[a];b=b(d);b!=d&&null!=b&&ba(c,a,{configurable:!0,writable:!0,value:b})}};
-p("Symbol",function(a){if(a)return a;var b=function(g,f){this.ra=g;ba(this,"description",{configurable:!0,writable:!0,value:f})};b.prototype.toString=function(){return this.ra};var c="jscomp_symbol_"+(1E9*Math.random()>>>0)+"_",d=0,e=function(g){if(this instanceof e)throw new TypeError("Symbol is not a constructor");return new b(c+(g||"")+"_"+d++,g)};return e});
-p("Symbol.iterator",function(a){if(a)return a;a=Symbol("Symbol.iterator");for(var b="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),c=0;c<b.length;c++){var d=da[b[c]];"function"===typeof d&&"function"!=typeof d.prototype[a]&&ba(d.prototype,a,{configurable:!0,writable:!0,value:function(){return ea(aa(this))}})}return a});
-var ea=function(a){a={next:a};a[Symbol.iterator]=function(){return this};return a},r=function(a){var b="undefined"!=typeof Symbol&&Symbol.iterator&&a[Symbol.iterator];return b?b.call(a):{next:aa(a)}},ha="function"==typeof Object.create?Object.create:function(a){var b=function(){};b.prototype=a;return new b},ia;
-if("function"==typeof Object.setPrototypeOf)ia=Object.setPrototypeOf;else{var ja;a:{var ka={a:!0},la={};try{la.__proto__=ka;ja=la.a;break a}catch(a){}ja=!1}ia=ja?function(a,b){a.__proto__=b;if(a.__proto__!==b)throw new TypeError(a+" is not extensible");return a}:null}
-var ma=ia,t=function(a,b){a.prototype=ha(b.prototype);a.prototype.constructor=a;if(ma)ma(a,b);else for(var c in b)if("prototype"!=c)if(Object.defineProperties){var d=Object.getOwnPropertyDescriptor(b,c);d&&Object.defineProperty(a,c,d)}else a[c]=b[c];a.za=b.prototype},u=function(a,b){return Object.prototype.hasOwnProperty.call(a,b)};
-p("WeakMap",function(a){function b(){}function c(l){var k=typeof l;return"object"===k&&null!==l||"function"===k}function d(l){if(!u(l,g)){var k=new b;ba(l,g,{value:k})}}function e(l){var k=Object[l];k&&(Object[l]=function(m){if(m instanceof b)return m;Object.isExtensible(m)&&d(m);return k(m)})}if(function(){if(!a||!Object.seal)return!1;try{var l=Object.seal({}),k=Object.seal({}),m=new a([[l,2],[k,3]]);if(2!=m.get(l)||3!=m.get(k))return!1;m.delete(l);m.set(k,4);return!m.has(l)&&4==m.get(k)}catch(q){return!1}}())return a;
-var g="$jscomp_hidden_"+Math.random();e("freeze");e("preventExtensions");e("seal");var f=0,h=function(l){this.M=(f+=Math.random()+1).toString();if(l){l=r(l);for(var k;!(k=l.next()).done;)k=k.value,this.set(k[0],k[1])}};h.prototype.set=function(l,k){if(!c(l))throw Error("Invalid WeakMap key");d(l);if(!u(l,g))throw Error("WeakMap key fail: "+l);l[g][this.M]=k;return this};h.prototype.get=function(l){return c(l)&&u(l,g)?l[g][this.M]:void 0};h.prototype.has=function(l){return c(l)&&u(l,g)&&u(l[g],this.M)};
-h.prototype.delete=function(l){return c(l)&&u(l,g)&&u(l[g],this.M)?delete l[g][this.M]:!1};return h});
-p("Map",function(a){if(function(){if(!a||"function"!=typeof a||!a.prototype.entries||"function"!=typeof Object.seal)return!1;try{var h=Object.seal({x:4}),l=new a(r([[h,"s"]]));if("s"!=l.get(h)||1!=l.size||l.get({x:4})||l.set({x:4},"t")!=l||2!=l.size)return!1;var k=l.entries(),m=k.next();if(m.done||m.value[0]!=h||"s"!=m.value[1])return!1;m=k.next();return m.done||4!=m.value[0].x||"t"!=m.value[1]||!k.next().done?!1:!0}catch(q){return!1}}())return a;var b=new WeakMap,c=function(h){this.L={};this.A=g();
-this.size=0;if(h){h=r(h);for(var l;!(l=h.next()).done;)l=l.value,this.set(l[0],l[1])}};c.prototype.set=function(h,l){h=0===h?0:h;var k=d(this,h);k.list||(k.list=this.L[k.id]=[]);k.j?k.j.value=l:(k.j={next:this.A,B:this.A.B,head:this.A,key:h,value:l},k.list.push(k.j),this.A.B.next=k.j,this.A.B=k.j,this.size++);return this};c.prototype.delete=function(h){h=d(this,h);return h.j&&h.list?(h.list.splice(h.index,1),h.list.length||delete this.L[h.id],h.j.B.next=h.j.next,h.j.next.B=h.j.B,h.j.head=null,this.size--,
-!0):!1};c.prototype.clear=function(){this.L={};this.A=this.A.B=g();this.size=0};c.prototype.has=function(h){return!!d(this,h).j};c.prototype.get=function(h){return(h=d(this,h).j)&&h.value};c.prototype.entries=function(){return e(this,function(h){return[h.key,h.value]})};c.prototype.keys=function(){return e(this,function(h){return h.key})};c.prototype.values=function(){return e(this,function(h){return h.value})};c.prototype.forEach=function(h,l){for(var k=this.entries(),m;!(m=k.next()).done;)m=m.value,
-h.call(l,m[1],m[0],this)};c.prototype[Symbol.iterator]=c.prototype.entries;var d=function(h,l){var k=l&&typeof l;"object"==k||"function"==k?b.has(l)?k=b.get(l):(k=""+ ++f,b.set(l,k)):k="p_"+l;var m=h.L[k];if(m&&u(h.L,k))for(h=0;h<m.length;h++){var q=m[h];if(l!==l&&q.key!==q.key||l===q.key)return{id:k,list:m,index:h,j:q}}return{id:k,list:m,index:-1,j:void 0}},e=function(h,l){var k=h.A;return ea(function(){if(k){for(;k.head!=h.A;)k=k.B;for(;k.next!=k.head;)return k=k.next,{done:!1,value:l(k)};k=null}return{done:!0,
-value:void 0}})},g=function(){var h={};return h.B=h.next=h.head=h},f=0;return c});p("Number.isFinite",function(a){return a?a:function(b){return"number"!==typeof b?!1:!isNaN(b)&&Infinity!==b&&-Infinity!==b}});var na=function(a,b){a instanceof String&&(a+="");var c=0,d=!1,e={next:function(){if(!d&&c<a.length){var g=c++;return{value:b(g,a[g]),done:!1}}d=!0;return{done:!0,value:void 0}}};e[Symbol.iterator]=function(){return e};return e};
-p("Array.prototype.entries",function(a){return a?a:function(){return na(this,function(b,c){return[b,c]})}});p("Number.isNaN",function(a){return a?a:function(b){return"number"===typeof b&&isNaN(b)}});
-p("Set",function(a){if(function(){if(!a||"function"!=typeof a||!a.prototype.entries||"function"!=typeof Object.seal)return!1;try{var c=Object.seal({x:4}),d=new a(r([c]));if(!d.has(c)||1!=d.size||d.add(c)!=d||1!=d.size||d.add({x:4})!=d||2!=d.size)return!1;var e=d.entries(),g=e.next();if(g.done||g.value[0]!=c||g.value[1]!=c)return!1;g=e.next();return g.done||g.value[0]==c||4!=g.value[0].x||g.value[1]!=g.value[0]?!1:e.next().done}catch(f){return!1}}())return a;var b=function(c){this.m=new Map;if(c){c=
-r(c);for(var d;!(d=c.next()).done;)this.add(d.value)}this.size=this.m.size};b.prototype.add=function(c){c=0===c?0:c;this.m.set(c,c);this.size=this.m.size;return this};b.prototype.delete=function(c){c=this.m.delete(c);this.size=this.m.size;return c};b.prototype.clear=function(){this.m.clear();this.size=0};b.prototype.has=function(c){return this.m.has(c)};b.prototype.entries=function(){return this.m.entries()};b.prototype.values=function(){return this.m.values()};b.prototype.keys=b.prototype.values;
-b.prototype[Symbol.iterator]=b.prototype.values;b.prototype.forEach=function(c,d){var e=this;this.m.forEach(function(g){return c.call(d,g,g,e)})};return b});p("Array.from",function(a){return a?a:function(b,c,d){c=null!=c?c:function(h){return h};var e=[],g="undefined"!=typeof Symbol&&Symbol.iterator&&b[Symbol.iterator];if("function"==typeof g){b=g.call(b);for(var f=0;!(g=b.next()).done;)e.push(c.call(d,g.value,f++))}else for(g=b.length,f=0;f<g;f++)e.push(c.call(d,b[f],f));return e}});
-p("Object.entries",function(a){return a?a:function(b){var c=[],d;for(d in b)u(b,d)&&c.push([d,b[d]]);return c}});p("Object.is",function(a){return a?a:function(b,c){return b===c?0!==b||1/b===1/c:b!==b&&c!==c}});p("Array.prototype.includes",function(a){return a?a:function(b,c){var d=this;d instanceof String&&(d=String(d));var e=d.length;c=c||0;for(0>c&&(c=Math.max(c+e,0));c<e;c++){var g=d[c];if(g===b||Object.is(g,b))return!0}return!1}});
-p("String.prototype.includes",function(a){return a?a:function(b,c){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(b instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==(this+"").indexOf(b,c||0)}});p("Array.prototype.values",function(a){return a?a:function(){return na(this,function(b,c){return c})}});
-var oa=this||self,pa=function(a){var b=typeof a;return"object"!=b?b:a?Array.isArray(a)?"array":b:"null"},ra=function(a,b){function c(){}c.prototype=b.prototype;a.za=b.prototype;a.prototype=new c;a.prototype.constructor=a;a.Ca=function(d,e,g){for(var f=Array(arguments.length-2),h=2;h<arguments.length;h++)f[h-2]=arguments[h];return b.prototype[e].apply(d,f)}};function sa(a){if(Error.captureStackTrace)Error.captureStackTrace(this,sa);else{var b=Error().stack;b&&(this.stack=b)}a&&(this.message=String(a))}ra(sa,Error);sa.prototype.name="CustomError";function ta(a,b){a=a.split("%s");for(var c="",d=a.length-1,e=0;e<d;e++)c+=a[e]+(e<b.length?b[e]:"%s");sa.call(this,c+a[d])}ra(ta,sa);ta.prototype.name="AssertionError";function ua(a,b,c,d){var e="Assertion failed";if(c){e+=": "+c;var g=d}else a&&(e+=": "+a,g=b);throw new ta(""+e,g||[]);}
-var v=function(a,b,c){a||ua("",null,b,Array.prototype.slice.call(arguments,2));return a},va=function(a,b,c){null==a&&ua("Expected to exist: %s.",[a],b,Array.prototype.slice.call(arguments,2));return a},wa=function(a,b){throw new ta("Failure"+(a?": "+a:""),Array.prototype.slice.call(arguments,1));},w=function(a,b,c){Array.isArray(a)||ua("Expected array but got %s: %s.",[pa(a),a],b,Array.prototype.slice.call(arguments,2))},x=function(a,b,c,d){a instanceof b||ua("Expected instanceof %s but got %s.",
-[xa(b),xa(a)],c,Array.prototype.slice.call(arguments,3));return a};function xa(a){return a instanceof Function?a.displayName||a.name||"unknown type name":a instanceof Object?a.constructor.displayName||a.constructor.name||Object.prototype.toString.call(a):null===a?"null":typeof a};var ya={},za=null,Aa=function(a){var b,c=pa(a);v("array"==c||"object"==c&&"number"==typeof a.length,"encodeByteArray takes an array as a parameter");void 0===b&&(b=0);if(!za){za={};c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split("");for(var d=["+/=","+/","-_=","-_.","-_"],e=0;5>e;e++){var g=c.concat(d[e].split(""));ya[e]=g;for(var f=0;f<g.length;f++){var h=g[f],l=za[h];void 0===l?za[h]=f:v(l===f)}}}b=ya[b];c=Array(Math.floor(a.length/3));d=b[64]||"";for(e=g=0;g<a.length-2;g+=
-3){l=a[g];var k=a[g+1];h=a[g+2];f=b[l>>2];l=b[(l&3)<<4|k>>4];k=b[(k&15)<<2|h>>6];h=b[h&63];c[e++]=""+f+l+k+h}f=0;h=d;switch(a.length-g){case 2:f=a[g+1],h=b[(f&15)<<2]||d;case 1:a=a[g],c[e]=""+b[a>>2]+b[(a&3)<<4|f>>4]+h+d}return c.join("")};var Ba="undefined"!==typeof Uint8Array,Ca={};var Da,Ea=function(a){if(Ca!==Ca)throw Error("illegal external caller");this.qa=a;if(null!==a&&0===a.length)throw Error("ByteString should be constructed with non-empty values");};v(!0);var Fa={};var z="function"===typeof Symbol&&"symbol"===typeof Symbol()?Symbol("INTERNAL_ARRAY_STATE"):void 0;function Ga(a,b){Object.isFrozen(a)||(z?a[z]|=b:void 0!==a.F?a.F|=b:Object.defineProperties(a,{F:{value:b,configurable:!0,writable:!0,enumerable:!1}}))}var Ha=Object.getOwnPropertyDescriptor(Array.prototype,"wa");
-Object.defineProperties(Array.prototype,{wa:{get:function(){var a=A(this),b=[];1&a&&b.push("IS_REPEATED_FIELD");2&a&&b.push("IS_IMMUTABLE_ARRAY");4&a&&b.push("IS_API_FORMATTED");8&a&&b.push("ONLY_MUTABLE_VALUES");a=b.join(",");return Ha?Ha.get.call(this)+"|"+a:a},configurable:!0,enumerable:!1}});function A(a){w(a,"state is only maintained on arrays.");a=z?a[z]:a.F;return null==a?0:a}function B(a){w(a,"state is only maintained on arrays.");Ga(a,1);return a}
-function C(a){return Array.isArray(a)?!!(A(a)&2):!1}function Ia(a){if(!Array.isArray(a))throw Error("cannot mark non-array as immutable");Ga(a,2)}function Ja(a,b){if(!Array.isArray(a))throw Error("cannot mark non-array as mutable");b?Ga(a,8):Object.isFrozen(a)||(z?a[z]&=-9:void 0!==a.F&&(a.F&=-9))};function Ka(a){return null!==a&&"object"===typeof a&&!Array.isArray(a)&&a.constructor===Object}var La=Symbol("exempted jspb subclass"),Ma=Symbol("generated by jspb"),Na=Object.freeze(B([])),Oa=function(a){if(C(a.g))throw Error("Cannot mutate an immutable Message");},Pa="undefined"!=typeof Symbol&&"undefined"!=typeof Symbol.hasInstance;function Qa(a){return{value:a,configurable:!1,writable:!1,enumerable:!1}};function Ra(a){return a.displayName||a.name||"unknown type name"}function Sa(a,b){if(!(a instanceof b))throw Error("Expected instanceof "+Ra(b)+" but got "+(a&&Ra(a.constructor)));return a}function Ta(a,b,c){c=void 0===c?!1:c;if(Array.isArray(a))return new b(a);if(c)return new b};var Ua=function(){throw Error("please construct maps as mutable then call toImmutable");};if(Pa){var Va=function(){throw Error("Cannot perform instanceof checks on ImmutableMap");},Wa={};Object.defineProperties(Ua,(Wa[Symbol.hasInstance]=Qa(Va),Wa));v(Ua[Symbol.hasInstance]===Va,"defineProperties did not work: was it monkey-patched?")};function Xa(a){switch(typeof a){case "number":return isFinite(a)?a:String(a);case "object":if(a&&!Array.isArray(a)){if(Ba&&null!=a&&a instanceof Uint8Array)return Aa(a);if(a instanceof Ea){var b=a.qa;null!=b&&"string"!==typeof b&&(Ba&&b instanceof Uint8Array?b=Aa(b):(wa("Cannot coerce to b64 string: "+pa(b)),b=null));return(a.qa=b)||""}}}return a};function Ya(a,b){b=void 0===b?Za:b;w(a);return $a(a,b)}function ab(a,b){if(null!=a){if(Array.isArray(a))a=$a(a,b);else if(Ka(a)){var c={},d;for(d in a)c[d]=ab(a[d],b);a=c}else a=b(a);return a}}function $a(a,b){w(a);for(var c=a.slice(),d=0;d<c.length;d++)c[d]=ab(c[d],b);Array.isArray(a)&&A(a)&1&&B(c);return c}function bb(a){if(a&&"object"==typeof a&&a.toJSON)return a.toJSON();a=Xa(a);return Array.isArray(a)?Ya(a,bb):a}function Za(a){return Ba&&null!=a&&a instanceof Uint8Array?new Uint8Array(a):a};var cb=function(a){return a.C||(a.C=a.g[a.G+a.D]={})},db=function(a,b,c){return-1===b?null:b>=a.G?a.C?a.C[b]:void 0:(void 0===c?0:c)&&a.C&&(c=a.C[b],null!=c)?c:a.g[b+a.D]},D=function(a,b,c,d,e){d=void 0===d?!1:d;(void 0===e?0:e)||Oa(a);b<a.G&&!d?a.g[b+a.D]=c:cb(a)[b]=c},E=function(a,b,c,d){c=void 0===c?!0:c;var e=db(a,b,d);Array.isArray(e)||(e=Na);if(C(a.g))c&&(Ia(e),Object.freeze(e));else if(e===Na||C(e))e=B(e.slice()),D(a,b,e,d);return e},F=function(a,b){var c=Number,d=E(a,b,!1),e;if(e=d.length)e=
-d,w(e,"state is only maintained on arrays."),e=!(A(e)&4);if(e){Object.isFrozen(d)&&(d=B(d.slice()),D(a,b,d,void 0,!0));for(b=0;b<d.length;b++)d[b]=c(d[b]);c=d;w(c,"state is only maintained on arrays.");Ga(c,5)}C(a.g)&&Object.freeze(d);return d},G=function(a,b,c){a=db(a,b);return null==a?c:a},I=function(a,b){a=db(a,b);a=null==a?a:!!a;return null==a?!1:a},J=function(a,b){a=db(a,b);a=null==a?a:+a;return null==a?0:a};function L(a,b,c){Oa(a);0!==c?D(a,b,c):D(a,b,void 0,!1);return a}
-var M=function(a,b,c,d,e){e=void 0===e?!1:e;var g=e;if(-1===c)d=null;else{a.h||(a.h={});var f=a.h[c];if(f)d=f;else{var h=db(a,c,g);b=Ta(h,b,d);void 0==b?d=f:(d&&b.g!==h&&D(a,c,b.g,g,!0),a.h[c]=b,C(a.g)&&Ia(b.g),d=b)}}if(null==d)return d;C(d.g)&&!C(a.g)&&(d=d.fa(Fa),D(a,c,d.g,e),a.h[c]=d);return d},N=function(a,b,c,d){var e=d=void 0===d?!1:d;a.h||(a.h={});var g=C(a.g),f=a.h[c];if(!f){e=E(a,c,!0,e);f=[];var h=g||C(e);g=g||h;for(var l=0;l<e.length;l++){var k=e[l];g=g||C(k);k=Ta(k,b);void 0!==k&&(f.push(k),
-h&&Ia(k.g))}h&&(Ia(f),Object.freeze(f));a.h[c]=f;Ja(e,!g)}b=f;f=C(a.g);if(c=a=E(a,c,d)){if(!Array.isArray(a))throw Error("cannot check mutability state of non-array");c=!(A(a)&8)}if(c){for(c=0;c<b.length;c++)(d=b[c])&&C(d.g)&&!f&&(b[c]=b[c].fa(Fa),a[c]=b[c].g);Ja(a,!0)}return b},eb=function(a,b,c,d){Oa(a);a.h||(a.h={});b=null!=d?Sa(d,va(b)).g:d;a.h[c]=d;D(a,c,b)},O=function(a,b){return G(a,b,"0")};var P=function(a,b,c){x(this,P,"The message constructor should only be used by subclasses");v(this.constructor!==P,"Message is an abstract class and cannot be directly constructed");if(!0!==this[La]){v(!0===this[Ma],"Message can only be subclassed by proto gencode.");var d=Object.getPrototypeOf(v(Object.getPrototypeOf(this)));v(d.hasOwnProperty(Ma),"Generated jspb classes should not be extended")}a||(a=fb);fb=null;d=this.constructor.Ia;a||(a=d?[d]:[]);this.D=(d?0:-1)-(this.constructor.Ga||0);this.h=
-void 0;this.g=a;a:{d=this.g.length;a=d-1;if(d&&(d=this.g[a],Ka(d))){this.G=a-this.D;this.C=d;break a}void 0!==b&&-1<b?(this.G=Math.max(b,a+1-this.D),this.C=void 0):this.G=Number.MAX_VALUE}if(c)for(b=0;b<c.length;b++)if(a=c[b],a<this.G)a+=this.D,(d=this.g[a])?Array.isArray(d)&&B(d):this.g[a]=Na;else{d=cb(this);var e=d[a];e?Array.isArray(e)&&B(e):d[a]=Na}};n=P.prototype;n.toJSON=function(){return Ya(this.g,bb)};n.getExtension=function(a){x(this,a.va);return a.Ea(x(this,P))};
-n.hasExtension=function(a){x(this,a.va);v(!a.Ha,"repeated extensions don't support hasExtension");var b=x(this,P);return null!=db(b,a.Da)};n.clone=function(){var a=x(this,P),b=Ya(a.g);x(a,P);w(b);fb=b;b=new a.constructor(b);x(b,P);fb=null;gb(b,a);return b};n.toString=function(){return this.g.toString()};
-function gb(a,b){v(a,"expected `to` to be non-null");v(b,"expected `from` to be non-null");b.N&&(a.N=b.N.slice());var c=b.h;if(c){b=b.C;for(var d in c){var e=c[d];if(e){var g=!(!b||!b[d]),f=+d;if(Array.isArray(e)){if(e.length)for(g=N(a,e[0].constructor,f,g),f=0;f<Math.min(g.length,e.length);f++)gb(g[f],x(e[f],P))}else x(e,P),(g=M(a,e.constructor,f,void 0,g))&&gb(g,e)}}}}var fb;var hb=function(){P.call(this,void 0);throw Error("ImmutableMessage is not instantiable");};t(hb,P);hb.prototype.clone=function(){return P.prototype.clone.call(this)};if(Pa){var ib=function(){throw Error("Cannot perform instanceof checks for MutableMessage");},jb={};Object.defineProperties(hb,(jb[Symbol.hasInstance]=Qa(ib),jb));v(hb[Symbol.hasInstance]===ib,"broken defineProperties implementation")};var kb=function(){P.apply(this,arguments)};t(kb,P);kb.prototype.fa=function(){return this};if(Pa){var lb=function(){throw Error("Cannot perform instanceof checks for MutableMessage");},mb={};Object.defineProperties(kb,(mb[Symbol.hasInstance]=Qa(lb),mb));v(kb[Symbol.hasInstance]===lb,"defineProperties did not work: was it monkey-patched?")};function nb(a,b,c,d,e,g){if(a=a.h&&a.h[c])if(Array.isArray(a)){e=g.ba?B(a.slice()):a;g=0<e.length?e[0].constructor:void 0;Oa(b);if(null!=e){w(e);d=B([]);a=!1;for(var f=0;f<e.length;f++)d[f]=Sa(e[f],va(g)).g,a=a||C(d[f]);b.h||(b.h={});b.h[c]=e;Ja(d,!a)}else b.h&&(b.h[c]=void 0),d=Na;D(b,c,d)}else eb(b,a.constructor,c,x(a,P));else Ba&&d instanceof Uint8Array?(e=d,x(e,Uint8Array),e=e.length?new Ea(new Uint8Array(e)):Da||(Da=new Ea(null))):(Array.isArray(d)&&(e?Ia(d):Array.isArray(d)&&A(d)&1&&g.ba&&(d=
-d.slice())),e=d),D(b,c,e)};var Q=function(){kb.apply(this,arguments)};t(Q,kb);
-Q.prototype.fa=function(a){if(a!==Fa)throw Error("requires a valid immutable API token");if(C(this.g)){x(this,P);a={ba:!0};var b=C(this.g);if(b&&!a.ba)throw Error("copyRepeatedFields must be true for frozen messages");var c=new this.constructor;this.N&&(c.N=this.N.slice());for(var d=this.g,e=0;e<d.length;e++){var g=d[e];if(e===d.length-1&&Ka(g))for(h in g){var f=+h;Number.isNaN(f)?cb(c)[h]=g[h]:nb(this,c,f,g[h],b,a)}else nb(this,c,e-this.D,g,b,a)}var h=c}else h=this;return h};Q.prototype[Ma]=!0;
-if(Pa){var ob={};Object.defineProperties(Q,(ob[Symbol.hasInstance]=Qa(Object[Symbol.hasInstance]),ob));v(Q[Symbol.hasInstance]===Object[Symbol.hasInstance],"broken defineProperties implementation")};var pb=void 0;function qb(a){var b=pb;pb=void 0;var c=[],d=rb(a,c);if(!d&&c){var e="Expected Array<unknown>, got "+sb(a);c.push(e)}if(!d)throw a="",b&&(a=b()+"\n"),Error(a+"Guard Array<unknown> failed:\n"+c.reverse().join("\n"));return a}
-function sb(a,b){b=void 0===b?new Set:b;if(b.has(a))return"(Recursive reference)";switch(typeof a){case "object":if(a){var c=Object.getPrototypeOf(a);switch(c){case Map.prototype:case Set.prototype:case Array.prototype:b.add(a);var d="["+Array.from(a,function(e){return sb(e,b)}).join(", ")+"]";b.delete(a);c!==Array.prototype&&(d=tb(c.constructor)+"("+d+")");return d;case Object.prototype:return b.add(a),c="{"+Object.entries(a).map(function(e){var g=r(e);e=g.next().value;g=g.next().value;return e+
-": "+sb(g,b)}).join(", ")+"}",b.delete(a),c;default:return d="Object",c&&c.constructor&&(d=tb(c.constructor)),"function"===typeof a.toString&&a.toString!==Object.prototype.toString?d+"("+String(a)+")":"(object "+d+")"}}break;case "function":return"function "+tb(a);case "number":if(!Number.isFinite(a))return String(a);break;case "bigint":return a.toString(10)+"n"}return JSON.stringify(a)}function tb(a){var b=a.name;b||(b=(a=/function\s+([^\(]+)/m.exec(String(a)))?a[1]:"(Anonymous)");return b};var rb=function(a){a.Fa=function(){return"Array<unknown>"};return a}(function(a){return Array.isArray(a)});var ub=[[[["1646440773",[-.21289063,-.014526367,-.0046081543,-.013671875,-.012451172,.056152344,-.05029297,-.15234375,-.044677734,-.29101563,-.099121094,.0014190674,.08496094,.078125,-.009765625,-.09765625,-.045166016,.09765625,-.022583008,.23242188,-.04321289,.0126953125,.032226563,.064941406,.36132813,-.09716797,.28515625,.0074768066,-.11279297,-.0625,.012329102,-.076171875]]],[["1646451678",[-.18652344,.15917969,-.005340576,.055664063,.041015625,-.010253906,.06591797,-.071777344,.024536133,1.828125,
--.19140625,-.35351563,.13671875,.45117188,.12792969,-.03466797,.18261719,.19628906,.14160156,.17480469,-.04638672,-.06689453,-.30273438,.35351563,-.33789063,-.7578125,-.17675781,.05810547,-.002029419,.005279541,-.025756836,.15234375]]]],null,[1],"CMb9tKfcrvYCFawfBgAdboELOQ",null,[null,null,null,1,[]],[null,null,null,null,[]]];var vb={owner:"https://googleads.g.doubleclick.net/",name:"1j115753478",biddingLogicUrl:"https://googleads.g.doubleclick.net/td/bjs",dailyUpdateUrl:"https://googleads.g.doubleclick.net/td/update",trustedBiddingSignalsUrl:"https://googleads.g.doubleclick.net/td/sjs",trustedBiddingSignalsKeys:["1j115753478"],userBiddingSignals:[],ads:[{renderUrl:"https://googleads.g.doubleclick.net/ads/simple-ad.html?adg_id=28447972118&cr_id=310927197288&cv_id=6",metadata:["28447972118","310927197288","6","377212838"]},
-{renderUrl:"https://googleads.g.doubleclick.net/ads/simple-ad.html?adg_id=28447972118&cr_id=310927197291&cv_id=6",metadata:["28447972118","310927197291","6","377212838"]},{renderUrl:"https://googleads.g.doubleclick.net/ads/simple-ad.html?adg_id=28447972118&cr_id=310966379641&cv_id=5",metadata:["28447972118","310966379641","5","377212838"]},{renderUrl:"https://googleads.g.doubleclick.net/ads/simple-ad.html?adg_id=57015819359&cr_id=331239455455&cv_id=5",metadata:["57015819359","331239455455","5","1499135732"]},
-{renderUrl:"https://googleads.g.doubleclick.net/ads/simple-ad.html?adg_id=57015819359&cr_id=331239455458&cv_id=4",metadata:["57015819359","331239455458","4","1499135732"]},{renderUrl:"https://googleads.g.doubleclick.net/ads/simple-ad.html?adg_id=57015819359&cr_id=331239455461&cv_id=5",metadata:["57015819359","331239455461","5","1499135732"]},{renderUrl:"https://googleads.g.doubleclick.net/ads/simple-ad.html?adg_id=52836427830&cr_id=310927197294&cv_id=4",metadata:["52836427830","310927197294","4",
-"608936333"]},{renderUrl:"https://googleads.g.doubleclick.net/ads/simple-ad.html?adg_id=52836427830&cr_id=310927197297&cv_id=4",metadata:["52836427830","310927197297","4","608936333"]},{renderUrl:"https://googleads.g.doubleclick.net/ads/simple-ad.html?adg_id=52836427830&cr_id=310927197300&cv_id=4",metadata:["52836427830","310927197300","4","608936333"]}]};var wb={"1j115753478":[[["52836427830","310927197294","4",[[["1643849995",[3.09375,.8203125,1.4765625,-.55078125,1.9140625,-.78125,-1.1640625,-3.15625,1.25,3.421875,1.6484375,1.0625,4.96875,-.66796875,-1.4375,.87109375,1.6171875,-4.125,-2.375,3.421875,-2.359375,1.6015625,.625,-4.65625,-5.03125,.416015625,-4.03125,-.24609375,3.296875,-.052001953125,-3.75,3.765625]],["1643804092",[3.09375,.796875,1.46875,-.56640625,1.890625,-.76953125,-1.1484375,-3.140625,1.2109375,3.421875,1.625,1.046875,4.9375,-.65234375,
--1.421875,.84765625,1.6015625,-4.125,-2.359375,3.453125,-2.34375,1.5859375,.63671875,-4.65625,-5,.396484375,-4.03125,-.26171875,3.296875,-.068359375,-3.734375,3.75]]],null,[["1643822293",[-.039794921875,.035400390625,.357421875,.041748046875,.0054931640625,-.060791015625,.138671875,-.318359375,.2255859375,.10546875,.2099609375,-.240234375,-.07373046875,-.279296875,-.44140625,.015380859375,-.298828125,.119140625,-.09716796875,.1796875,.04248046875,.09033203125,.38671875,.412109375,-.357421875,.259765625,
--.24609375,-.3828125,.33984375,.07861328125,-.1259765625,.3046875]],["1643799063",[.0079345703125,.0546875,.353515625,.00958251953125,-.01318359375,-.10888671875,.13671875,-.373046875,.208984375,.09228515625,.1962890625,-.248046875,-.031494140625,-.2734375,-.42578125,.0035400390625,-.345703125,.1083984375,-.068359375,.173828125,.0810546875,.1162109375,.361328125,.451171875,-.3671875,.162109375,-.212890625,-.46484375,.337890625,.1083984375,-.177734375,.318359375]]],null,null,null,null,[[null,[318.3513488769531,
-1],[1,2],[1,1],null,3]]],[null,[[2,0,null,["PubPolicy1"]]]],"608936333",null,null,null,[[2,1,7]],[[2,1,5]]],["52836427830","310927197297","4",[[["1643849995",[3.125,.953125,1.484375,-.46875,2.109375,-.89453125,-1.265625,-3.15625,1.265625,3.421875,1.7578125,1.1796875,4.9375,-.6796875,-1.5234375,.953125,1.7734375,-4.125,-2.453125,3.4375,-2.375,1.6328125,.3984375,-4.375,-4.96875,.59375,-4.03125,-.08935546875,3.34375,.1806640625,-3.8125,3.796875]],["1643804092",[3.125,.90625,1.4609375,-.5,2.046875,-.8671875,
--1.234375,-3.140625,1.2265625,3.421875,1.71875,1.1328125,4.90625,-.65625,-1.4921875,.921875,1.734375,-4.125,-2.421875,3.46875,-2.34375,1.6015625,.4296875,-4.375,-4.9375,.55078125,-4.03125,-.123046875,3.328125,.1416015625,-3.78125,3.765625]]],null,[["1643822293",[-.060546875,.0185546875,.353515625,.02587890625,.00311279296875,-.07421875,.1533203125,-.3203125,.2470703125,.06689453125,.193359375,-.234375,.029296875,-.255859375,-.44921875,.0146484375,-.306640625,.11962890625,-.10498046875,.1865234375,
-.049072265625,.1162109375,.365234375,.42578125,-.359375,.26953125,-.2490234375,-.392578125,.306640625,.1103515625,-.1376953125,.310546875]],["1643799063",[-.015869140625,.02978515625,.337890625,-.00628662109375,-.0169677734375,-.12353515625,.1494140625,-.373046875,.232421875,.056640625,.1806640625,-.2353515625,.0966796875,-.2451171875,-.43359375,.004180908203125,-.353515625,.107421875,-.087890625,.1865234375,.087890625,.138671875,.345703125,.455078125,-.36328125,.181640625,-.224609375,-.486328125,
-.294921875,.13671875,-.19921875,.3203125]]],null,null,null,null,[[null,[318.3513488769531,1],[1,2],[1,1],null,3]]],[null,[[2,0,null,["PubPolicy1"]]]],"608936333",null,null,null,[[2,1,7]],[[2,1,5]]],["52836427830","310927197300","4",[[["1643849995",[3.109375,.99609375,1.59375,-.4609375,2.171875,-.91015625,-1.296875,-3.3125,1.3984375,3.4375,1.8046875,1.2578125,5.09375,-.7421875,-1.59375,1.0078125,1.8125,-4.1875,-2.578125,3.390625,-2.53125,1.765625,.54296875,-4.71875,-5.09375,.55859375,-4.09375,-.1318359375,
-3.328125,.0654296875,-3.890625,3.859375]],["1643804092",[3.109375,.953125,1.5703125,-.48828125,2.109375,-.88671875,-1.2734375,-3.296875,1.359375,3.4375,1.7734375,1.21875,5.0625,-.71875,-1.5625,.9765625,1.7734375,-4.1875,-2.53125,3.4375,-2.5,1.734375,.5703125,-4.71875,-5.0625,.5234375,-4.0625,-.1591796875,3.328125,.03515625,-3.84375,3.828125]]],null,[["1643822293",[-.048095703125,.0179443359375,.36328125,.033203125,.030029296875,-.07568359375,.15625,-.326171875,.224609375,.07568359375,.1787109375,
--.234375,-.0277099609375,-.265625,-.412109375,.00909423828125,-.3046875,.11865234375,-.103515625,.1767578125,.048095703125,.12158203125,.36328125,.421875,-.359375,.255859375,-.25,-.396484375,.29296875,.10205078125,-.1279296875,.318359375]],["1643799063",[-.0045166015625,.03173828125,.353515625,.003631591796875,.00927734375,-.126953125,.154296875,-.37890625,.208984375,.06689453125,.1708984375,-.234375,.03173828125,-.255859375,-.396484375,-.00384521484375,-.353515625,.10693359375,-.0830078125,.1708984375,
-.08935546875,.1474609375,.341796875,.44921875,-.3671875,.1669921875,-.224609375,-.482421875,.28125,.130859375,-.1796875,.326171875]]],null,null,null,null,[[null,[318.3513488769531,1],[1,2],[1,1],null,3]]],[null,[[2,0,null,["PubPolicy1"]]]],"608936333",null,null,null,[[2,1,7]],[[2,1,5]]]]],"1j380357233":[[["52836427830","310927197294","4",[[["1643849995",[4.53125,1.8671875,.13671875,3.3125,-7.5625,.546875,2.953125,-7.90625,4.71875,7.375,.0047607421875,-3.25,.74609375,.298828125,-1.34375,-2.4375,-6.34375,
--9.1875,-1.3359375,9.875,1.1796875,-3.15625,3.796875,-6.90625,-3.203125,-.09375,-7.65625,-.71875,4.65625,-.75390625,-6.28125,3.6875]],["1643804092",[4.53125,1.9453125,.19140625,3.40625,-7.53125,.52734375,2.9375,-7.9375,4.625,7.375,.01416015625,-3.25,.74609375,.28125,-1.34375,-2.484375,-6.34375,-9.25,-1.328125,9.9375,1.2421875,-3.171875,3.71875,-6.71875,-3.21875,-.0311279296875,-7.71875,-.69140625,4.65625,-.70703125,-6.40625,3.71875]]],null,[["1643822293",[-.09033203125,.037109375,.423828125,.0439453125,
-.0390625,-.04345703125,.162109375,-.3125,.2197265625,.06884765625,.25,-.240234375,-.07763671875,-.267578125,-.416015625,.0150146484375,-.2890625,.126953125,-.08740234375,.158203125,.035888671875,.130859375,.3515625,.412109375,-.38671875,.27734375,-.234375,-.408203125,.337890625,.0458984375,-.1328125,.36328125]],["1643799063",[-.044921875,.056640625,.3984375,.0162353515625,.01373291015625,-.08544921875,.1611328125,-.359375,.1982421875,.06298828125,.2421875,-.2421875,-.05078125,-.263671875,-.39453125,
-.001953125,-.33203125,.11767578125,-.060546875,.1513671875,.07080078125,.14453125,.3359375,.4453125,-.388671875,.1865234375,-.1904296875,-.48046875,.3359375,.0693359375,-.177734375,.37109375]]],null,null,null,null,[[null,[318.3513488769531,1],[1,2],[1,1],null,3]]],[null,[[2,0,null,["PubPolicy1"]]]],"608936333",null,null,null,[[2,1,7]],[[2,1,5]]],["52836427830","310927197297","4",[[["1643849995",[4.4375,1.90625,.20703125,3.125,-7.03125,.44140625,2.703125,-7.46875,4.5,7.1875,.080078125,-3.03125,.94140625,
-.25390625,-1.3203125,-2.25,-5.875,-8.875,-1.375,9.4375,1.0234375,-2.984375,3.453125,-6.46875,-3.171875,.007781982421875,-7.4375,-.62890625,4.5625,-.58984375,-6.125,3.609375]],["1643804092",[4.46875,1.9765625,.26171875,3.1875,-6.9375,.41015625,2.671875,-7.53125,4.375,7.21875,.09716796875,-3.015625,1.0078125,.232421875,-1.3203125,-2.28125,-5.84375,-8.875,-1.3828125,9.5625,1.0859375,-2.96875,3.359375,-6.3125,-3.234375,.06494140625,-7.5,-.6171875,4.5625,-.53125,-6.28125,3.703125]]],null,[["1643822293",
-[-.107421875,.017822265625,.427734375,.0274658203125,.0289306640625,-.05908203125,.17578125,-.31640625,.2373046875,.033447265625,.2470703125,-.23046875,.00579833984375,-.25,-.421875,.01385498046875,-.298828125,.1240234375,-.09912109375,.16796875,.036865234375,.1435546875,.33984375,.4296875,-.380859375,.28515625,-.232421875,-.427734375,.3125,.0654296875,-.1513671875,.373046875]],["1643799063",[-.07177734375,.024658203125,.396484375,-.0016937255859375,.01434326171875,-.11328125,.1748046875,-.3671875,
-.2255859375,.026611328125,.224609375,-.2197265625,.07470703125,-.232421875,-.396484375,.01507568359375,-.341796875,.11376953125,-.087890625,.16015625,.072265625,.173828125,.3203125,.44921875,-.3828125,.19921875,-.2080078125,-.5078125,.28125,.1044921875,-.21484375,.380859375]]],null,null,null,null,[[null,[318.3513488769531,1],[1,2],[1,1],null,3]]],[null,[[2,0,null,["PubPolicy1"]]]],"608936333",null,null,null,[[2,1,7]],[[2,1,5]]],["52836427830","310927197300","4",[[["1643849995",[4.5,1.96875,.2099609375,
-3.328125,-7.28125,.458984375,2.8125,-7.84375,4.84375,7.3125,.09814453125,-3.078125,.859375,.224609375,-1.4296875,-2.3125,-6.09375,-9.125,-1.4453125,9.75,1.0078125,-3,3.71875,-6.90625,-3.203125,-.04931640625,-7.5625,-.6328125,4.625,-.69140625,-6.25,3.671875]],["1643804092",[4.5,2.09375,.298828125,3.453125,-7.1875,.416015625,2.765625,-7.90625,4.75,7.3125,.1318359375,-3.046875,.9140625,.17578125,-1.4453125,-2.328125,-6.0625,-9.125,-1.46875,9.75,1.046875,-2.984375,3.59375,-6.6875,-3.25,.041015625,-7.625,
--.5859375,4.625,-.6171875,-6.40625,3.75]]],null,[["1643822293",[-.09765625,.0216064453125,.421875,.03955078125,.056396484375,-.0546875,.1767578125,-.31640625,.208984375,.04248046875,.2265625,-.2314453125,-.0419921875,-.2578125,-.3828125,.0084228515625,-.29296875,.123046875,-.09423828125,.1533203125,.0380859375,.1474609375,.333984375,.4140625,-.384765625,.275390625,-.232421875,-.4140625,.291015625,.06591796875,-.1337890625,.376953125]],["1643799063",[-.0673828125,.03271484375,.41796875,.01336669921875,
-.041748046875,-.10595703125,.1767578125,-.37109375,.1982421875,.0294189453125,.212890625,-.2275390625,.02880859375,-.248046875,-.361328125,.00909423828125,-.337890625,.115234375,-.0732421875,.14453125,.07080078125,.1875,.310546875,.4453125,-.39453125,.1875,-.203125,-.5078125,.26953125,.095703125,-.1962890625,.40625]]],null,null,null,null,[[null,[318.3513488769531,1],[1,2],[1,1],null,3]]],[null,[[2,0,null,["PubPolicy1"]]]],"608936333",null,null,null,[[2,1,7]],[[2,1,5]]],["31279674038","113383149038",
-null,[[["1643849995",[7.875,2.375,-3.078125,9.8125,-20.875,2.46875,9.1875,-18.25,10,13.0625,-1.1171875,-8.875,-6.9375,2.078125,-2.1875,-7.34375,-17.375,-19.375,.640625,21.375,7.0625,-9.875,7.875,-9.5625,-2.09375,.034423828125,-13.4375,-.3359375,8.5625,-.75390625,-11.375,6.15625]],["1643804092",[7.875,2.4375,-3.015625,10,-20.75,2.453125,9.1875,-18.25,9.6875,13,-1.1484375,-8.9375,-6.875,2.078125,-2.125,-7.4375,-17.5,-19.25,.71875,21.25,7.3125,-9.9375,7.65625,-9.125,-2.171875,.1513671875,-13.5625,-.34765625,
-8.5625,-.69921875,-11.6875,6.28125]]],null,[["1643822293",[-.337890625,-.1884765625,.1923828125,-.0213623046875,-.1953125,.5234375,.326171875,.0908203125,-.09033203125,.019775390625,.40234375,.462890625,-.19921875,-.08642578125,-.29296875,-.1943359375,.248046875,-.2470703125,-.2099609375,.2353515625,.0400390625,.1767578125,.828125,-.059326171875,-.0218505859375,.5703125,-.431640625,-.30859375,.19921875,.1455078125,-.486328125,-.2578125]],["1643799063",[-.37109375,-.1455078125,.361328125,-.0595703125,
--.1611328125,.5234375,.3203125,.07568359375,-.0791015625,.03173828125,.423828125,.4609375,-.2412109375,-.09130859375,-.310546875,-.193359375,.232421875,-.2353515625,-.19140625,.2177734375,.0205078125,.232421875,.8359375,-.04150390625,-.045166015625,.55078125,-.451171875,-.412109375,.298828125,.1220703125,-.56640625,-.11767578125]]],null,null,null,null,[[null,[176.8618621826172,1],[1,2],[1,1],null,3]]],[null,[[2,0,null,["PubPolicy1"]]]],"608936333",null,null,null,[[2,1,7]],[[2,1,5]]],["31279674038",
-"113383149158",null,[[["1643849995",[8.1875,2.0625,-3.328125,9.5,-21.125,2.609375,9.3125,-17.875,9.5,13.375,-1.2578125,-9.1875,-7,2.265625,-1.9140625,-7.5,-17.625,-19.5,.953125,21.375,7.46875,-10.3125,7.65625,-9.125,-2.265625,.02490234375,-13.75,-.4375,8.8125,-.59765625,-11.4375,6.40625]],["1643804092",[8.125,2.140625,-3.25,9.6875,-21.125,2.59375,9.3125,-17.875,9.25,13.25,-1.25,-9.1875,-6.90625,2.234375,-1.8671875,-7.5625,-17.625,-19.5,1.0078125,21.25,7.625,-10.375,7.5,-8.8125,-2.359375,.1494140625,
--13.75,-.458984375,8.75,-.5625,-11.6875,6.5]]],null,[["1643822293",[-.349609375,-.19140625,.1767578125,-.0213623046875,-.197265625,.5234375,.330078125,.0927734375,-.0908203125,.027587890625,.3984375,.462890625,-.2001953125,-.0810546875,-.296875,-.19140625,.2490234375,-.244140625,-.2119140625,.2392578125,.0400390625,.181640625,.828125,-.05859375,-.0181884765625,.5703125,-.4296875,-.302734375,.1982421875,.1494140625,-.490234375,-.263671875]],["1643799063",[-.369140625,-.1435546875,.353515625,-.05908203125,
--.1552734375,.515625,.322265625,.0703125,-.07177734375,.04345703125,.421875,.45703125,-.248046875,-.08935546875,-.30859375,-.1953125,.2255859375,-.2333984375,-.1943359375,.220703125,.021484375,.2431640625,.83984375,-.0419921875,-.04052734375,.54296875,-.443359375,-.41015625,.30078125,.11767578125,-.5703125,-.12158203125]]],null,null,null,null,[[null,[176.8618621826172,1],[1,2],[1,1],null,3]]],[null,[[2,0,null,["PubPolicy1"]]]],"608936333",null,null,null,[[2,1,7]],[[2,1,5]]],["31279674038","113383149518",
-null,[[["1643849995",[7.71875,2.21875,-2.984375,9.3125,-20.25,2.40625,8.875,-17.375,9.5,12.75,-1.1015625,-8.6875,-6.53125,2.03125,-2.03125,-7.09375,-16.875,-18.625,.61328125,20.625,6.84375,-9.625,7.625,-9.3125,-2.140625,-.0341796875,-13.125,-.435546875,8.375,-.8046875,-11.0625,6]],["1643804092",[7.65625,2.328125,-2.875,9.5,-20.125,2.375,8.8125,-17.375,9.3125,12.625,-1.09375,-8.625,-6.46875,1.9921875,-2.015625,-7.125,-16.875,-18.625,.671875,20.5,7,-9.625,7.4375,-8.9375,-2.15625,.1357421875,-13.125,
--.4140625,8.25,-.73046875,-11.25,6.0625]]],null,[["1643822293",[-.34765625,-.193359375,.208984375,-.025390625,-.201171875,.5234375,.330078125,.09326171875,-.09423828125,.0084228515625,.41015625,.46484375,-.1767578125,-.08251953125,-.310546875,-.19140625,.25,-.24609375,-.212890625,.2392578125,.0380859375,.17578125,.828125,-.0576171875,-.01904296875,.578125,-.43359375,-.31640625,.2060546875,.14453125,-.4921875,-.255859375]],["1643799063",[-.369140625,-.150390625,.37890625,-.0546875,-.1630859375,.53125,
-.3203125,.08251953125,-.08447265625,.01318359375,.43359375,.462890625,-.2392578125,-.09619140625,-.310546875,-.189453125,.2421875,-.2333984375,-.1953125,.2119140625,.0142822265625,.23046875,.83203125,-.0284423828125,-.047119140625,.55078125,-.447265625,-.427734375,.306640625,.115234375,-.57421875,-.107421875]]],null,null,null,null,[[null,[176.8618621826172,1],[1,2],[1,1],null,3]]],[null,[[2,0,null,["PubPolicy1"]]]],"608936333",null,null,null,[[2,1,7]],[[2,1,5]]]]],"1j395640136":[[["31279674038","113383149038",
-null,[[["1643849995",[3.34375,.197265625,.66015625,-.796875,1.1015625,-.5546875,-.78515625,-2.21875,.84765625,3.390625,1.28125,.482421875,3.9375,-.1865234375,-1.09375,.609375,1.1484375,-4.0625,-1.7890625,4.5625,-1.859375,.83203125,.64453125,-4,-4.09375,.02587890625,-3.734375,-.31640625,3.65625,-.025146484375,-2.5625,3.03125]],["1643804092",[3.34375,.177734375,.6484375,-.8125,1.078125,-.54296875,-.76953125,-2.203125,.81640625,3.40625,1.265625,.462890625,3.9375,-.171875,-1.078125,.59375,1.125,-4.09375,
--1.7734375,4.59375,-1.8359375,.8203125,.65625,-3.984375,-4.09375,.0101318359375,-3.75,-.33203125,3.671875,-.039794921875,-2.546875,3.015625]]],null,[["1643822293",[-.345703125,-.1962890625,.2109375,-.034912109375,-.2158203125,.5234375,.3359375,.09619140625,-.09326171875,.01385498046875,.427734375,.474609375,-.1806640625,-.0771484375,-.3203125,-.2060546875,.2451171875,-.2578125,-.2177734375,.2490234375,.035888671875,.1513671875,.84375,-.04638671875,-.01220703125,.5703125,-.439453125,-.32421875,.2138671875,
-.1513671875,-.50390625,-.263671875]],["1643799063",[-.3828125,-.1494140625,.384765625,-.058837890625,-.1826171875,.53125,.322265625,.0859375,-.08837890625,.0159912109375,.458984375,.462890625,-.2275390625,-.08984375,-.328125,-.1962890625,.23828125,-.23828125,-.189453125,.22265625,.01556396484375,.2109375,.83203125,-.0238037109375,-.044677734375,.55859375,-.453125,-.43359375,.31640625,.12158203125,-.57421875,-.11328125]]],null,null,null,null,[[null,[176.8618621826172,1],[1,2],[1,1],null,3]]],[null,
-[[2,0,null,["PubPolicy1"]]]],"608936333",null,null,null,[[2,1,7]],[[2,1,5]]],["31279674038","113383149158",null,[[["1643849995",[3.34375,.130859375,.62109375,-.84765625,.98046875,-.453125,-.68359375,-2.03125,.51953125,3.453125,1.140625,.291015625,3.96875,-.15625,-.8828125,.435546875,1.0078125,-4,-1.515625,4.15625,-1.5234375,.62890625,.37890625,-3.421875,-4.21875,.1220703125,-3.84375,-.345703125,3.5625,.10791015625,-2.828125,3.25]],["1643804092",[3.34375,.130859375,.62109375,-.8515625,.98046875,-.451171875,
--.68359375,-2.03125,.50390625,3.453125,1.1328125,.287109375,3.96875,-.1533203125,-.875,.427734375,1.0078125,-4,-1.5078125,4.15625,-1.515625,.625,.369140625,-3.390625,-4.21875,.1259765625,-3.84375,-.34765625,3.5625,.11181640625,-2.828125,3.25]]],null,[["1643822293",[-.3515625,-.1982421875,.185546875,-.027099609375,-.21875,.5234375,.333984375,.099609375,-.09423828125,.0244140625,.42578125,.47265625,-.1845703125,-.0751953125,-.314453125,-.2001953125,.2470703125,-.25390625,-.216796875,.248046875,.036865234375,
-.1533203125,.83984375,-.044189453125,-.00933837890625,.5703125,-.43359375,-.31640625,.212890625,.15625,-.5,-.275390625]],["1643799063",[-.38671875,-.138671875,.375,-.061767578125,-.177734375,.5234375,.3203125,.07666015625,-.080078125,.033447265625,.4453125,.447265625,-.2333984375,-.09130859375,-.333984375,-.19921875,.2265625,-.2275390625,-.18359375,.2255859375,.02197265625,.2197265625,.828125,-.0189208984375,-.047119140625,.55078125,-.44140625,-.4296875,.328125,.11962890625,-.5703125,-.11572265625]]],
-null,null,null,null,[[null,[176.8618621826172,1],[1,2],[1,1],null,3]]],[null,[[2,0,null,["PubPolicy1"]]]],"608936333",null,null,null,[[2,1,7]],[[2,1,5]]],["31279674038","113383149518",null,[[["1643849995",[3.21875,.1484375,.6796875,-.8203125,1,-.486328125,-.73046875,-2.21875,.77734375,3.3125,1.1875,.419921875,3.875,-.1904296875,-1.015625,.52734375,1.046875,-3.984375,-1.7265625,4.46875,-1.8046875,.828125,.7421875,-4.03125,-4.0625,-.07080078125,-3.671875,-.3984375,3.53125,-.1494140625,-2.515625,2.953125]],
-["1643804092",[3.21875,.1416015625,.671875,-.828125,1,-.486328125,-.73046875,-2.21875,.75390625,3.3125,1.1796875,.416015625,3.890625,-.1796875,-1.015625,.51953125,1.046875,-3.984375,-1.71875,4.5,-1.7890625,.8203125,.73046875,-4,-4.0625,-.06640625,-3.6875,-.3984375,3.53125,-.142578125,-2.53125,2.96875]]],null,[["1643822293",[-.349609375,-.19921875,.2109375,-.03173828125,-.2158203125,.53515625,.333984375,.10400390625,-.11181640625,.00836181640625,.431640625,.4765625,-.16796875,-.07568359375,-.32421875,
--.201171875,.25390625,-.26171875,-.21875,.251953125,.032958984375,.142578125,.83984375,-.05126953125,-.00836181640625,.58203125,-.439453125,-.31640625,.21875,.1513671875,-.498046875,-.267578125]],["1643799063",[-.376953125,-.1513671875,.38671875,-.061279296875,-.1875,.53125,.322265625,.08642578125,-.08935546875,.01324462890625,.45703125,.462890625,-.224609375,-.08984375,-.333984375,-.19921875,.23828125,-.240234375,-.1962890625,.2197265625,.01519775390625,.2041015625,.8359375,-.0179443359375,-.041748046875,
-.5546875,-.451171875,-.43359375,.3203125,.123046875,-.578125,-.11962890625]]],null,null,null,null,[[null,[176.8618621826172,1],[1,2],[1,1],null,3]]],[null,[[2,0,null,["PubPolicy1"]]]],"608936333",null,null,null,[[2,1,7]],[[2,1,5]]]]],"1j396781473":[[["31279674038","113383149038",null,[[["1643849995",[3.28125,.37890625,.828125,-.734375,1.3359375,-.625,-.89453125,-2.390625,.7578125,3.40625,1.3515625,.58984375,4.125,-.2734375,-1.125,.6171875,1.2734375,-4.0625,-1.859375,4.3125,-1.84375,.953125,.427734375,
--3.71875,-4.28125,.2119140625,-3.828125,-.244140625,3.5625,.134765625,-2.9375,3.25]],["1643804092",[3.28125,.345703125,.80859375,-.75390625,1.2890625,-.6015625,-.87109375,-2.375,.72265625,3.40625,1.3203125,.5546875,4.09375,-.255859375,-1.09375,.5859375,1.234375,-4.0625,-1.828125,4.34375,-1.8125,.92578125,.4453125,-3.71875,-4.28125,.185546875,-3.84375,-.267578125,3.5625,.111328125,-2.921875,3.234375]]],null,[["1643822293",[-.32421875,-.203125,.212890625,-.006622314453125,-.224609375,.5234375,.330078125,
-.099609375,-.08203125,-.01239013671875,.41015625,.484375,-.140625,-.0751953125,-.3046875,-.17578125,.251953125,-.25,-.2119140625,.2119140625,.030029296875,.1689453125,.8359375,-.041748046875,-.022216796875,.5546875,-.412109375,-.34375,.1748046875,.1806640625,-.5,-.2470703125]],["1643799063",[-.3359375,-.1572265625,.376953125,-.039306640625,-.1982421875,.515625,.314453125,.076171875,-.0595703125,-.0079345703125,.43359375,.4765625,-.208984375,-.091796875,-.3125,-.1708984375,.23046875,-.23828125,-.1962890625,
-.1787109375,.01556396484375,.220703125,.84375,-.0184326171875,-.052001953125,.51953125,-.4296875,-.458984375,.263671875,.1494140625,-.58203125,-.10498046875]]],null,null,null,null,[[null,[176.8618621826172,1],[1,2],[1,1],null,3]]],[null,[[2,0,null,["PubPolicy1"]]]],"608936333",null,null,null,[[2,1,7]],[[2,1,5]]],["31279674038","113383149158",null,[[["1643849995",[3.328125,.369140625,.8125,-.7578125,1.3125,-.56640625,-.84375,-2.25,.478515625,3.484375,1.2734375,.462890625,4.21875,-.265625,-.96875,.4921875,
-1.2109375,-4.03125,-1.640625,3.875,-1.5546875,.7890625,.10302734375,-3.125,-4.4375,.375,-3.96875,-.2236328125,3.5,.3359375,-3.265625,3.515625]],["1643804092",[3.3125,.349609375,.80078125,-.76953125,1.28125,-.5546875,-.828125,-2.234375,.4453125,3.46875,1.25,.44140625,4.1875,-.251953125,-.94921875,.47265625,1.1875,-4.03125,-1.6171875,3.890625,-1.53125,.76953125,.10888671875,-3.109375,-4.4375,.359375,-3.953125,-.236328125,3.5,.32421875,-3.234375,3.5]]],null,[["1643822293",[-.326171875,-.201171875,.1884765625,
--.0014190673828125,-.2216796875,.53125,.330078125,.10107421875,-.0849609375,-.00994873046875,.404296875,.4765625,-.1513671875,-.07470703125,-.298828125,-.17578125,.25390625,-.2421875,-.2099609375,.2109375,.0322265625,.1728515625,.83203125,-.0380859375,-.0242919921875,.55859375,-.408203125,-.33984375,.177734375,.18359375,-.494140625,-.25390625]],["1643799063",[-.33984375,-.1474609375,.3515625,-.03466796875,-.1923828125,.5078125,.3125,.0712890625,-.057861328125,.01446533203125,.431640625,.46484375,
--.2109375,-.0927734375,-.310546875,-.17578125,.220703125,-.2294921875,-.1923828125,.1796875,.023681640625,.2314453125,.83984375,-.0205078125,-.049072265625,.51953125,-.41796875,-.4453125,.2734375,.1513671875,-.57421875,-.115234375]]],null,null,null,null,[[null,[176.8618621826172,1],[1,2],[1,1],null,3]]],[null,[[2,0,null,["PubPolicy1"]]]],"608936333",null,null,null,[[2,1,7]],[[2,1,5]]],["31279674038","113383149518",null,[[["1643849995",[3.15625,.34765625,.8515625,-.74609375,1.2578125,-.56640625,-.85546875,
--2.40625,.6953125,3.328125,1.265625,.546875,4.09375,-.283203125,-1.0625,.54296875,1.1953125,-3.984375,-1.8046875,4.1875,-1.796875,.95703125,.5,-3.75,-4.25,.1376953125,-3.78125,-.310546875,3.4375,.03173828125,-2.921875,3.1875]],["1643804092",[3.171875,.322265625,.8359375,-.765625,1.2265625,-.546875,-.8359375,-2.390625,.65625,3.328125,1.2421875,.515625,4.0625,-.265625,-1.0390625,.51953125,1.171875,-3.984375,-1.7734375,4.21875,-1.765625,.93359375,.5,-3.71875,-4.25,.12353515625,-3.78125,-.32421875,3.4375,
-.0242919921875,-2.921875,3.1875]]],null,[["1643822293",[-.32421875,-.21484375,.212890625,-.00543212890625,-.2333984375,.52734375,.333984375,.10498046875,-.08740234375,-.0296630859375,.416015625,.49609375,-.1357421875,-.072265625,-.302734375,-.1728515625,.2578125,-.259765625,-.2177734375,.208984375,.028564453125,.1640625,.83984375,-.042724609375,-.0184326171875,.55859375,-.41796875,-.345703125,.162109375,.185546875,-.5078125,-.25390625]],["1643799063",[-.345703125,-.1650390625,.375,-.041748046875,
--.1962890625,.51953125,.318359375,.08056640625,-.06396484375,-.004486083984375,.447265625,.486328125,-.197265625,-.0888671875,-.3203125,-.166015625,.234375,-.2431640625,-.2041015625,.1826171875,.01495361328125,.2216796875,.84765625,-.029052734375,-.044921875,.53125,-.431640625,-.4609375,.2578125,.1494140625,-.5859375,-.115234375]]],null,null,null,null,[[null,[176.8618621826172,1],[1,2],[1,1],null,3]]],[null,[[2,0,null,["PubPolicy1"]]]],"608936333",null,null,null,[[2,1,7]],[[2,1,5]]]]],"1j475122041":[[["60795725037",
-"306664789872",null,[[["1643849995",[3.421875,1.78125,1.6796875,.048095703125,2.796875,-1.3984375,-1.703125,-3.5625,1.328125,3.796875,2.265625,1.5,5.125,-.80078125,-1.8515625,1.1796875,2.203125,-4.53125,-2.78125,3.5625,-2.265625,1.6796875,-.76171875,-2.8125,-5.09375,1.5078125,-4.5,.59375,3.609375,1.359375,-4.78125,4.375]],["1643804092",[3.40625,1.75,1.6640625,.0306396484375,2.75,-1.3828125,-1.6875,-3.53125,1.3125,3.78125,2.25,1.4765625,5.09375,-.79296875,-1.828125,1.171875,2.171875,-4.53125,-2.765625,
-3.5625,-2.25,1.6640625,-.73046875,-2.84375,-5.0625,1.4765625,-4.5,.56640625,3.609375,1.3203125,-4.75,4.34375]]],null,[["1643822293",[1.2734375,1.0859375,.298828125,.09619140625,.10107421875,-.09375,-.52734375,-.953125,-.1259765625,-.5078125,-.1611328125,-.498046875,-1.3515625,-.412109375,.94140625,-.33984375,-.578125,.2578125,.47265625,-.478515625,.255859375,-.1005859375,-.06396484375,.166015625,-.9765625,.029541015625,.314453125,.0106201171875,.74609375,-.38671875,.83984375,.75390625]],["1643799063",
-[1.3046875,1.0625,.3828125,.06201171875,.1142578125,-.046875,-.52734375,-.94921875,-.134765625,-.56640625,-.08740234375,-.439453125,-1.3671875,-.4296875,1.046875,-.33203125,-.5625,.2734375,.50390625,-.54296875,.1728515625,-.123046875,-.0233154296875,.1962890625,-1.0546875,.05859375,.318359375,-.0537109375,.8125,-.423828125,.79296875,.953125]]],null,null,null,null,[[null,[61170.82421875,1],[1,2],[1,1],null,3]]],[null,[[3,0,null,["AdvControlbrand-unsafe"]]]],"1614272341"]]]};function xb(a,b){return!b||0>=b?a:Math.min(a,b)}function R(a,b,c){return b?b:c?c:a?1:0}function yb(a){a=null==a?void 0:G(a,9,0);return void 0===a?!1:[61,51,52].includes(a)};var S=function(a){Q.call(this,a,-1,zb)};t(S,Q);var zb=[2];var Ab=function(a){Q.call(this,a)};t(Ab,Q);var Cb=function(a){Q.call(this,a,-1,Bb)};t(Cb,Q);Cb.prototype.ca=function(){return N(this,Ab,3)};var Bb=[2,3];var Eb=function(a){Q.call(this,a,-1,Db)};t(Eb,Q);var Gb=function(a){Q.call(this,a,-1,Fb)};t(Gb,Q);var Ib=function(a){Q.call(this,a,-1,Hb)};t(Ib,Q);Ib.prototype.ca=function(){return N(this,Ab,5)};var Db=[1,2],Fb=[3,4],Hb=[3,4,5];var Kb=function(a){Q.call(this,a,-1,Jb)};t(Kb,Q);var T=function(a){return M(a,Lb,3)},Nb=function(a){Q.call(this,a,-1,Mb)};t(Nb,Q);Nb.prototype.Y=function(){return N(this,S,2)};Nb.prototype.ma=function(){return N(this,S,3)};var Ob=function(a){Q.call(this,a)};t(Ob,Q);Ob.prototype.u=function(){return O(this,1)};Ob.prototype.v=function(){return O(this,2)};Ob.prototype.da=function(){return J(this,3)};var Lb=function(a){Q.call(this,a)};t(Lb,Q);var U=function(a){Q.call(this,a)};t(U,Q);
-var V=function(a){Q.call(this,a)};t(V,Q);var Rb=function(a){var b=new V;return L(b,1,a)},X=function(a){Q.call(this,a)};t(X,Q);X.prototype.u=function(){return O(this,2)};X.prototype.v=function(){return O(this,3)};X.prototype.W=function(){return O(this,4)};X.prototype.da=function(){return J(this,5)};var Jb=[2],Mb=[1,2,3];function Sb(a,b,c){if(!b||0>=b)return{l:0,P:1};var d=R(!0,null==a?void 0:J(a,1),null==c?void 0:J(c,1)),e=R(!1,null==a?void 0:J(a,2),null==c?void 0:J(c,2)),g=R(!1,null==a?void 0:J(a,3),null==c?void 0:J(c,3)),f,h;a=R(!1,null==a?void 0:null==(f=M(a,V,5))?void 0:J(f,1),null==c?void 0:null==(h=M(c,V,5))?void 0:J(h,1));c=new U;f=L(c,1,d);f=L(f,2,e);f=L(f,3,g);h=Rb(a);eb(f,V,5,h);return{l:b*d*(1-1/(1+Math.exp(-e*(Math.log(b/1E6)-a-g)))),P:4,sa:c}};function Tb(a,b){var c=null==a?void 0:M(a,U,6),d,e=null==a?void 0:null==(d=T(a))?void 0:M(d,U,3);if(!b||0>=b)return{l:0,P:1};var g;if(!(null==a?0:null==(g=T(a))?0:I(g,2)))return{l:.85*b,P:2};d=R(!0,null==c?void 0:J(c,4),null==e?void 0:J(e,4));g=R(!0,null==c?void 0:J(c,1),null==e?void 0:J(e,1));var f=R(!1,null==c?void 0:J(c,2),null==e?void 0:J(e,2)),h=R(!1,null==c?void 0:J(c,3),null==e?void 0:J(e,3)),l,k;c=R(!1,null==c?void 0:null==(l=M(c,V,5))?void 0:J(l,1),null==e?void 0:null==(k=M(e,V,5))?void 0:
-J(k,1));l=new U;k=L(l,1,g);k=L(k,2,f);k=L(k,3,h);k=L(k,4,d);var m=Rb(c);eb(k,V,5,m);d=d*b*g*(1-1/(1+Math.exp(-f*(Math.log(d*b/1E6)-c-h))));g=1E6*(null==a?NaN:J(a,8));var q;if((null==a?0:null==(q=T(a))?0:I(q,6))&&d<g&&g<b){var y;d=g+1E6*(null!=(y=null==e?void 0:J(e,7))?y:0)*Math.log(b/g)}return{l:d,P:3,sa:l}};function Ub(a,b){if(!(0<F(a,2).length&&F(a,2).length===E(a,3).length&&F(a,2).length===F(a,4).length))return 0;for(var c=0,d=0,e=1,g=r(E(a,3)),f=g.next();!f.done;f=g.next()){var h=0;switch(f.value){case 1:h=F(a,2)[d]*(b.ea?Math.pow(b.ea,F(a,4)[d]):0);break;case 2:c=h=F(a,2)[d]*(b.oa?Math.pow(b.oa,F(a,4)[d]):0);break;case 3:h=F(a,2)[d]}if(0===h)return 0;e*=h;d+=1}0<J(a,7)&&(e=Math.min(e,J(a,7)*c*1E3));return 1E6*e}
-function Vb(a,b){var c=0;b&&(0<N(b,Wb,7).length?c=Ub(N(b,Wb,7)[0],a):0<N(b,Wb,8).length&&(c=Ub(N(b,Wb,8)[0],a)));return c};function Xb(a,b,c){if(G(a,2,0)!==G(b,2,0))return c;var d=!1;switch(G(a,2,0)){case 1:a:{var e,g=new Set(null!=(e=E(a,3))?e:[]);b=r(E(b,3));for(e=b.next();!e.done;e=b.next())if(g.has(e.value)){d=!0;break a}d=!1}break;case 0:a:{e=new Set(null!=(g=E(a,4))?g:[]);b=r(E(b,4));for(g=b.next();!g.done;g=b.next())if(e.has(g.value)){d=!0;break a}d=!1}break;case 2:b=new Yb(b),d=(e=M(a,Cb,5))?Zb(b,e):!1}return I(a,6)?d?null:c:d?c:null}
-function Zb(a,b){var c=G(b,1,0),d=b.ca(),e=N(b,Cb,2);switch(c){case 2:c=d.every(function(g){return $b(a,g)})&&e.every(function(g){return Zb(a,g)});break;case 1:c=d.some(function(g){return $b(a,g)})||e.some(function(g){return Zb(a,g)});break;default:throw Error("unexpected value "+c+"!");}return I(b,4)?!c:c}
-var Yb=function(a){this.ga=new Map;a=r(a.ca());for(var b=a.next();!b.done;b=a.next()){var c=b.value;b=G(c,1,0);c=G(c,2,0);var d=this.ga.get(b);d||(d=new Set,this.ga.set(b,d));d.add(c)}},$b=function(a,b){var c=G(b,2,0);return(a=a.ga.get(G(b,1,0)))?a.has(c):!1};function ac(a,b){a=r((null==b?void 0:b.get(a))||[]);for(b=a.next();!b.done;b=a.next())if(b=b.value,b.count+1>b.xa)return!1;return!0};function bc(a,b){return null==a.na?!0:!a.na.some(function(c){var d;return null==(d=b.Ba)?void 0:d.includes(c,0)})};var cc=function(a){Q.call(this,a)};t(cc,Q);n=cc.prototype;n.u=function(){return O(this,1)};n.v=function(){return O(this,2)};n.W=function(){return O(this,3)};n.V=function(){return O(this,4)};n.U=function(){return O(this,5)};n.X=function(){return O(this,6)};var ec=function(a){Q.call(this,a,-1,dc)};t(ec,Q);var dc=[1];function fc(a,b){var c=!0;c=void 0===c?!1:c;return gc(0,(null==a?void 0:N(a,S,1))||[],(null==b?void 0:N(b,S,1))||[],c)}function hc(a,b){var c=!0;c=void 0===c?!1:c;return gc(1,(null==a?void 0:a.Y())||[],(null==b?void 0:b.Y())||[],c)}function ic(a,b){var c=!0;c=void 0===c?!1:c;return gc(1,(null==a?void 0:a.ma())||[],(null==b?void 0:b.Y())||[],c)}
-function gc(a,b,c,d){var e=0,g=new Map;b=r(b);for(var f=b.next();!f.done;f=b.next())e=f.value,g.set(G(e,1,""),e),e=J(e,3);b=null;c=r(c);for(f=c.next();!f.done;f=c.next()){var h=f.value;e=J(h,3);if(f=d?g.values().next().value:g.get(G(h,1,""))){a:{b=a;f=F(f,2);h=F(h,2);if(f.length===h.length){for(var l=0,k=0;k<f.length;k++)l+=f[k]*h[k];f=l}else f=void 0;if(void 0!==f)switch(b){case 0:b=1/(1+Math.exp(-1*f));break a;case 1:b=Math.exp(f);break a}b=void 0}if(void 0!==b)return b;b=e}}var m;return null!=
-(m=b)?m:e};var jc=function(a){Q.call(this,a)};t(jc,Q);function kc(a,b,c){"0"===a||c.has(a)||c.set(a,b.filter(function(d){return 0<G(d,3,0)}).map(function(d){var e=G(d,3,0);switch(G(d,1,0)){case 6:d=60*G(d,2,0);break;case 1:d=3600*G(d,2,0);break;case 2:d=86400*G(d,2,0);break;case 3:d=604800*G(d,2,0);break;case 4:d=2592E3*G(d,2,0);break;case 5:d=null;break;default:e=d=0}return{pa:d,xa:e,count:0}}))}function lc(a,b,c){if(b=c.get(b))for(b=r(b),c=b.next();!c.done;c=b.next())c=c.value,(null===c.pa||a.Aa<=c.pa)&&c.count++};var Wb=function(a){Q.call(this,a,-1,mc)};t(Wb,Q);var mc=[2,3,4];var oc=function(a){Q.call(this,a,-1,nc)};t(oc,Q);oc.prototype.Y=function(){return N(this,S,3)};oc.prototype.ma=function(){return N(this,S,10)};var nc=[1,3,10,7,8];var qc=function(a){Q.call(this,a,-1,pc)};t(qc,Q);n=qc.prototype;n.u=function(){return O(this,1)};n.v=function(){return O(this,2)};n.W=function(){return O(this,3)};n.V=function(){return O(this,6)};n.U=function(){return O(this,7)};n.X=function(){return O(this,8)};var pc=[9,10,11,12,13,14];var sc=function(a){Q.call(this,a,-1,rc)};t(sc,Q);var rc=[1];var uc=function(a){Q.call(this,a,-1,tc)};t(uc,Q);var tc=[1];var vc={ad:{},bid:0,render:""};function wc(){new uc;return function(a,b,c,d,e){return xc(a,c,d,e)}}
-function xc(a,b,c,d){b=b?new Kb(qb(b)):void 0;var e,g;if(!b||!(N(b,Ob,2).length||(null==(e=T(b))?0:I(e,1))||(null==(g=T(b))?0:I(g,5))))return vc;e=new ec(qb(a.userBiddingSignals));g=a.ads.map(function(f){return{renderUrl:f.renderUrl,metadata:new cc(qb(f.metadata))}});c=c[a.name]?new sc(qb(c[a.name])):void 0;d=d.prevWins.map(function(f){return{Aa:f[0],I:new cc(qb(f[1].metadata))}});return yc(a.name,e,g,d,c,b)}
-function yc(a,b,c,d,e,g){var f,h={Ja:null!=(f=null==g?void 0:T(g))?f:void 0,T:new Map,O:new Map,R:new Map,S:new Map,Z:new Map,interestGroupName:null!=a?a:void 0};a=new Map;if(e){e=r(N(e,qc,1));for(f=e.next();!f.done;f=e.next())f=f.value,a.set(f.u().concat("+",f.v(),"+",f.W()),f),kc(f.v(),N(f,jc,9),h.T),kc(f.u(),N(f,jc,10),h.O),kc(f.V(),N(f,jc,11),h.R),kc(f.U(),N(f,jc,12),h.S),kc(f.X(),N(f,jc,13),h.Z);d=r(d);for(e=d.next();!e.done;e=d.next())e=e.value,h.T&&lc(e,e.I.v(),h.T),h.O&&lc(e,e.I.u(),h.O),
-h.R&&lc(e,e.I.V(),h.R),h.S&&lc(e,e.I.U(),h.S),h.Z&&lc(e,e.I.X(),h.Z)}e=new Map;if(g)for(d=r(N(g,Ob,2)),f=d.next();!f.done;f=d.next())f=f.value,e.set(f.u().concat("+",f.v(),"+",""),f.da());d=[];c=r(c);for(f=c.next();!f.done;f=c.next()){f=f.value;f={renderUrl:f.renderUrl,H:f.metadata.u(),K:f.metadata.v(),ka:f.metadata.W(),ja:f.metadata.V(),ia:f.metadata.U(),la:f.metadata.X(),i:0,J:0};var l=f.H.concat("+",f.K,"+",f.ka);f.aa=e.get(f.H.concat("+",f.K,"+",""));if(!f.aa){var k=void 0,m=void 0,q=void 0,y=
-void 0;if(!(null==(k=g)?0:null==(m=T(k))?0:I(m,1))&&!(null==(q=g)?0:null==(y=T(q))?0:I(y,5)))continue;else if(!a.get(l))continue;m=k=void 0;f.o=null!=(m=null==(k=a.get(l))?void 0:M(k,oc,4))?m:void 0}m=k=void 0;f.ha=null!=(m=null==(k=a.get(l))?void 0:M(k,Eb,5))?m:void 0;m=k=void 0;f.na=null!=(m=null==(k=a.get(l))?void 0:E(k,14))?m:void 0;d.push(f)}if(c=null==g?void 0:M(g,Eb,5)){a=new Map;e=new Map;f=r(N(c,Gb,1));for(l=f.next();!l.done;l=f.next())l=l.value,a.set(G(l,1,0),l);c=r(N(c,Ib,2));for(f=c.next();!f.done;f=
-c.next())f=f.value,e.set(G(f,1,0),f);h.ta=a;h.ua=e}var H;h.Ba=null!=(H=E(b,1))?H:void 0;b=[];H=new Map;a=r(d);for(d=a.next();!d.done;d=a.next())if(d=d.value,e=h,!(!ac(d.K,e.T)||!ac(d.H,e.O)||d.ja&&!ac(d.ja,e.R)||d.ia&&!ac(d.ia,e.S)||d.la&&!ac(d.la,e.Z))){if(d.ha){c=h;e=c.ta;c=c.ua;f=d.ha;if(e&&c&&f)a:{l=r(N(f,Gb,1));for(k=l.next();!k.done;k=l.next()){q=k.value;y=G(q,1,0);var fa=c.get(y);if(fa){if(I(q,7)){k=H.get(y);m=G(q,8,0);if(void 0===k)k=new Map,H.set(y,k);else{var qa=k.get(m);if(void 0!==qa){e=
-qa;break a}}q=Xb(q,fa,y);k.set(m,q)}else q=Xb(q,fa,y);if(q){e=q;break a}}}c=r(N(f,Ib,2));for(f=c.next();!f.done;f=c.next())if(f=f.value,l=G(f,1,0),k=e.get(l))if(f=Xb(k,f,l)){e=f;break a}e=null}else e=null;if(e)continue}bc(d,h)&&b.push(d)}return zc({ads:b,ya:h},g).bidResponse}
-function zc(a,b){for(var c=[],d=[],e=r(a.ads),g=e.next();!g.done;g=e.next()){g=g.value;var f=void 0,h=void 0;if(null==(f=b)?0:null==(h=T(f))?0:I(h,7)){var l=h=f=void 0,k=void 0,m=void 0,q=void 0;g.H===(null==(f=b)?void 0:null==(h=M(f,X,16))?void 0:h.u())&&g.K===(null==(l=b)?void 0:null==(k=M(l,X,16))?void 0:k.v())&&a.ya.interestGroupName===(null==(m=b)?void 0:null==(q=M(m,X,16))?void 0:G(q,1,""))?(l=h=f=void 0,k=null!=(l=null==(f=b)?void 0:null==(h=M(f,X,16))?void 0:h.da())?l:0,g.i=0===k?1E9:k):g.i=
-0}else if(null!=g.aa){g.i=g.aa;c.push(g);continue}else if(h=f=void 0,null==(f=b)?0:null==(h=T(f))?0:I(h,1))yb(g.o)?(f=void 0,g.ea=ic(null==(f=b)?void 0:M(f,Nb,1),g.o)):(f=void 0,g.oa=fc(null==(f=b)?void 0:M(f,Nb,1),g.o),f=void 0,g.ea=hc(null==(f=b)?void 0:M(f,Nb,1),g.o)),g.i=Vb(g,g.o),g.i||(h=f=void 0,g.i=null!=(h=null==(f=g.o)?void 0:J(f,6))?h:0);else if(h=f=void 0,null==(f=b)?0:null==(h=T(f))?0:I(h,5))h=f=void 0,g.i=null!=(h=null==(f=g.o)?void 0:J(f,6))?h:0;d.push(g)}c={renderUrl:"",H:"",K:"",ka:"",
-i:0,J:0};var y;if(null==b?0:null==(y=T(b))?0:I(y,7))b=a.ads.reduce(function(W,K){return W.i<K.i?K:W},c),b.J=b.i;else{y=a.ads.reduce(function(W,K){return!yb(K.o)&&W.i<K.i?K:W},c);c=a.ads.reduce(function(W,K){return yb(K.o)&&W.i<K.i?K:W},c);a=Tb(b,null==y?void 0:y.i);var H,fa;a.l=xb(a.l,null==b?void 0:null==(H=T(b))?void 0:null==(fa=M(H,U,3))?void 0:J(fa,6));var qa;H=Sb(null==b?void 0:M(b,U,7),null==c?void 0:c.i,null==b?void 0:null==(qa=T(b))?void 0:M(qa,U,4));var Pb,Qb;H.l=xb(H.l,null==b?void 0:null==
-(Pb=T(b))?void 0:null==(Qb=M(Pb,U,4))?void 0:J(Qb,6));a.l>H.l?(b=y,b.J=a.l):(b=c,b.J=H.l)}return{bidResponse:{ad:{},bid:b.J,render:b.renderUrl},debugInfo:void 0}};var Ac={generateBidTime:0,success:!1},Bc=["metrics"],Y=oa;Bc[0]in Y||"undefined"==typeof Y.execScript||Y.execScript("var "+Bc[0]);for(var Z;Bc.length&&(Z=Bc.shift());)Bc.length||void 0===Ac?Y=Y[Z]&&Y[Z]!==Object.prototype[Z]?Y[Z]:Y[Z]={}:Y[Z]=Ac;var Cc=function(){var a={maxFloorCpmUsdMicros:"6250"},b={topWindowHostname:"www.cnn.com",seller:"https://pubads.g.doubleclick.net",joinCount:7,bidCount:0,prevWins:[]},c=wc();return function(){return c(vb,a,ub,wb,b)}};
-
-function generateBid(){var a=Cc(),b=Date.now()
-;a=a();Ac.generateBidTime=Date.now()-b;Ac.success=JSON.stringify(a)===JSON.stringify({ad:{},bid:2937687.988333709,render:"https://googleads.g.doubleclick.net/ads/simple-ad.html?adg_id=52836427830&cr_id=310927197294&cv_id=4"});Ac.bidResponse=a;return Ac}
\ No newline at end of file
diff --git a/apct-tests/perftests/rubidium/assets/turtledove_parametrized_generateBid.js b/apct-tests/perftests/rubidium/assets/turtledove_parametrized_generateBid.js
deleted file mode 100644
index d8e0f8e..0000000
--- a/apct-tests/perftests/rubidium/assets/turtledove_parametrized_generateBid.js
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
-
- Copyright The Closure Library Authors.
- SPDX-License-Identifier: Apache-2.0
-*/
-var n,aa=function(a){var b=0;return function(){return b<a.length?{done:!1,value:a[b++]}:{done:!0}}},ba="function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(a==Array.prototype||a==Object.prototype)return a;a[b]=c.value;return a},ca=function(a){a=["object"==typeof globalThis&&globalThis,a,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var b=0;b<a.length;++b){var c=a[b];if(c&&c.Math==Math)return c}throw Error("Cannot find global object");
-},ea=ca(this),q=function(a,b){if(b)a:{var c=ea;a=a.split(".");for(var d=0;d<a.length-1;d++){var e=a[d];if(!(e in c))break a;c=c[e]}a=a[a.length-1];d=c[a];b=b(d);b!=d&&null!=b&&ba(c,a,{configurable:!0,writable:!0,value:b})}};
-q("Symbol",function(a){if(a)return a;var b=function(g,f){this.ra=g;ba(this,"description",{configurable:!0,writable:!0,value:f})};b.prototype.toString=function(){return this.ra};var c="jscomp_symbol_"+(1E9*Math.random()>>>0)+"_",d=0,e=function(g){if(this instanceof e)throw new TypeError("Symbol is not a constructor");return new b(c+(g||"")+"_"+d++,g)};return e});
-q("Symbol.iterator",function(a){if(a)return a;a=Symbol("Symbol.iterator");for(var b="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),c=0;c<b.length;c++){var d=ea[b[c]];"function"===typeof d&&"function"!=typeof d.prototype[a]&&ba(d.prototype,a,{configurable:!0,writable:!0,value:function(){return fa(aa(this))}})}return a});
-var fa=function(a){a={next:a};a[Symbol.iterator]=function(){return this};return a},r=function(a){var b="undefined"!=typeof Symbol&&Symbol.iterator&&a[Symbol.iterator];return b?b.call(a):{next:aa(a)}},ha="function"==typeof Object.create?Object.create:function(a){var b=function(){};b.prototype=a;return new b},ia;
-if("function"==typeof Object.setPrototypeOf)ia=Object.setPrototypeOf;else{var ja;a:{var ka={a:!0},la={};try{la.__proto__=ka;ja=la.a;break a}catch(a){}ja=!1}ia=ja?function(a,b){a.__proto__=b;if(a.__proto__!==b)throw new TypeError(a+" is not extensible");return a}:null}
-var ma=ia,t=function(a,b){a.prototype=ha(b.prototype);a.prototype.constructor=a;if(ma)ma(a,b);else for(var c in b)if("prototype"!=c)if(Object.defineProperties){var d=Object.getOwnPropertyDescriptor(b,c);d&&Object.defineProperty(a,c,d)}else a[c]=b[c];a.za=b.prototype},u=function(a,b){return Object.prototype.hasOwnProperty.call(a,b)};
-q("WeakMap",function(a){function b(){}function c(k){var l=typeof k;return"object"===l&&null!==k||"function"===l}function d(k){if(!u(k,g)){var l=new b;ba(k,g,{value:l})}}function e(k){var l=Object[k];l&&(Object[k]=function(m){if(m instanceof b)return m;Object.isExtensible(m)&&d(m);return l(m)})}if(function(){if(!a||!Object.seal)return!1;try{var k=Object.seal({}),l=Object.seal({}),m=new a([[k,2],[l,3]]);if(2!=m.get(k)||3!=m.get(l))return!1;m.delete(k);m.set(l,4);return!m.has(k)&&4==m.get(l)}catch(p){return!1}}())return a;
-var g="$jscomp_hidden_"+Math.random();e("freeze");e("preventExtensions");e("seal");var f=0,h=function(k){this.M=(f+=Math.random()+1).toString();if(k){k=r(k);for(var l;!(l=k.next()).done;)l=l.value,this.set(l[0],l[1])}};h.prototype.set=function(k,l){if(!c(k))throw Error("Invalid WeakMap key");d(k);if(!u(k,g))throw Error("WeakMap key fail: "+k);k[g][this.M]=l;return this};h.prototype.get=function(k){return c(k)&&u(k,g)?k[g][this.M]:void 0};h.prototype.has=function(k){return c(k)&&u(k,g)&&u(k[g],this.M)};
-h.prototype.delete=function(k){return c(k)&&u(k,g)&&u(k[g],this.M)?delete k[g][this.M]:!1};return h});
-q("Map",function(a){if(function(){if(!a||"function"!=typeof a||!a.prototype.entries||"function"!=typeof Object.seal)return!1;try{var h=Object.seal({x:4}),k=new a(r([[h,"s"]]));if("s"!=k.get(h)||1!=k.size||k.get({x:4})||k.set({x:4},"t")!=k||2!=k.size)return!1;var l=k.entries(),m=l.next();if(m.done||m.value[0]!=h||"s"!=m.value[1])return!1;m=l.next();return m.done||4!=m.value[0].x||"t"!=m.value[1]||!l.next().done?!1:!0}catch(p){return!1}}())return a;var b=new WeakMap,c=function(h){this.L={};this.A=g();
-this.size=0;if(h){h=r(h);for(var k;!(k=h.next()).done;)k=k.value,this.set(k[0],k[1])}};c.prototype.set=function(h,k){h=0===h?0:h;var l=d(this,h);l.list||(l.list=this.L[l.id]=[]);l.j?l.j.value=k:(l.j={next:this.A,B:this.A.B,head:this.A,key:h,value:k},l.list.push(l.j),this.A.B.next=l.j,this.A.B=l.j,this.size++);return this};c.prototype.delete=function(h){h=d(this,h);return h.j&&h.list?(h.list.splice(h.index,1),h.list.length||delete this.L[h.id],h.j.B.next=h.j.next,h.j.next.B=h.j.B,h.j.head=null,this.size--,
-!0):!1};c.prototype.clear=function(){this.L={};this.A=this.A.B=g();this.size=0};c.prototype.has=function(h){return!!d(this,h).j};c.prototype.get=function(h){return(h=d(this,h).j)&&h.value};c.prototype.entries=function(){return e(this,function(h){return[h.key,h.value]})};c.prototype.keys=function(){return e(this,function(h){return h.key})};c.prototype.values=function(){return e(this,function(h){return h.value})};c.prototype.forEach=function(h,k){for(var l=this.entries(),m;!(m=l.next()).done;)m=m.value,
-h.call(k,m[1],m[0],this)};c.prototype[Symbol.iterator]=c.prototype.entries;var d=function(h,k){var l=k&&typeof k;"object"==l||"function"==l?b.has(k)?l=b.get(k):(l=""+ ++f,b.set(k,l)):l="p_"+k;var m=h.L[l];if(m&&u(h.L,l))for(h=0;h<m.length;h++){var p=m[h];if(k!==k&&p.key!==p.key||k===p.key)return{id:l,list:m,index:h,j:p}}return{id:l,list:m,index:-1,j:void 0}},e=function(h,k){var l=h.A;return fa(function(){if(l){for(;l.head!=h.A;)l=l.B;for(;l.next!=l.head;)return l=l.next,{done:!1,value:k(l)};l=null}return{done:!0,
-value:void 0}})},g=function(){var h={};return h.B=h.next=h.head=h},f=0;return c});q("Number.isFinite",function(a){return a?a:function(b){return"number"!==typeof b?!1:!isNaN(b)&&Infinity!==b&&-Infinity!==b}});var oa=function(a,b){a instanceof String&&(a+="");var c=0,d=!1,e={next:function(){if(!d&&c<a.length){var g=c++;return{value:b(g,a[g]),done:!1}}d=!0;return{done:!0,value:void 0}}};e[Symbol.iterator]=function(){return e};return e};
-q("Array.prototype.entries",function(a){return a?a:function(){return oa(this,function(b,c){return[b,c]})}});q("Number.isNaN",function(a){return a?a:function(b){return"number"===typeof b&&isNaN(b)}});
-q("Set",function(a){if(function(){if(!a||"function"!=typeof a||!a.prototype.entries||"function"!=typeof Object.seal)return!1;try{var c=Object.seal({x:4}),d=new a(r([c]));if(!d.has(c)||1!=d.size||d.add(c)!=d||1!=d.size||d.add({x:4})!=d||2!=d.size)return!1;var e=d.entries(),g=e.next();if(g.done||g.value[0]!=c||g.value[1]!=c)return!1;g=e.next();return g.done||g.value[0]==c||4!=g.value[0].x||g.value[1]!=g.value[0]?!1:e.next().done}catch(f){return!1}}())return a;var b=function(c){this.m=new Map;if(c){c=
-r(c);for(var d;!(d=c.next()).done;)this.add(d.value)}this.size=this.m.size};b.prototype.add=function(c){c=0===c?0:c;this.m.set(c,c);this.size=this.m.size;return this};b.prototype.delete=function(c){c=this.m.delete(c);this.size=this.m.size;return c};b.prototype.clear=function(){this.m.clear();this.size=0};b.prototype.has=function(c){return this.m.has(c)};b.prototype.entries=function(){return this.m.entries()};b.prototype.values=function(){return this.m.values()};b.prototype.keys=b.prototype.values;
-b.prototype[Symbol.iterator]=b.prototype.values;b.prototype.forEach=function(c,d){var e=this;this.m.forEach(function(g){return c.call(d,g,g,e)})};return b});q("Array.from",function(a){return a?a:function(b,c,d){c=null!=c?c:function(h){return h};var e=[],g="undefined"!=typeof Symbol&&Symbol.iterator&&b[Symbol.iterator];if("function"==typeof g){b=g.call(b);for(var f=0;!(g=b.next()).done;)e.push(c.call(d,g.value,f++))}else for(g=b.length,f=0;f<g;f++)e.push(c.call(d,b[f],f));return e}});
-q("Object.entries",function(a){return a?a:function(b){var c=[],d;for(d in b)u(b,d)&&c.push([d,b[d]]);return c}});q("Object.is",function(a){return a?a:function(b,c){return b===c?0!==b||1/b===1/c:b!==b&&c!==c}});q("Array.prototype.includes",function(a){return a?a:function(b,c){var d=this;d instanceof String&&(d=String(d));var e=d.length;c=c||0;for(0>c&&(c=Math.max(c+e,0));c<e;c++){var g=d[c];if(g===b||Object.is(g,b))return!0}return!1}});
-q("String.prototype.includes",function(a){return a?a:function(b,c){if(null==this)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(b instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==(this+"").indexOf(b,c||0)}});q("Array.prototype.values",function(a){return a?a:function(){return oa(this,function(b,c){return c})}});
-var pa=function(a){var b=typeof a;return"object"!=b?b:a?Array.isArray(a)?"array":b:"null"},qa=function(a,b){function c(){}c.prototype=b.prototype;a.za=b.prototype;a.prototype=new c;a.prototype.constructor=a;a.Ca=function(d,e,g){for(var f=Array(arguments.length-2),h=2;h<arguments.length;h++)f[h-2]=arguments[h];return b.prototype[e].apply(d,f)}};function ra(a,b){if(Error.captureStackTrace)Error.captureStackTrace(this,ra);else{var c=Error().stack;c&&(this.stack=c)}a&&(this.message=String(a));void 0!==b&&(this.cause=b)}qa(ra,Error);ra.prototype.name="CustomError";function sa(a,b){a=a.split("%s");for(var c="",d=a.length-1,e=0;e<d;e++)c+=a[e]+(e<b.length?b[e]:"%s");ra.call(this,c+a[d])}qa(sa,ra);sa.prototype.name="AssertionError";function ta(a,b,c,d){var e="Assertion failed";if(c){e+=": "+c;var g=d}else a&&(e+=": "+a,g=b);throw new sa(""+e,g||[]);}
-var v=function(a,b,c){a||ta("",null,b,Array.prototype.slice.call(arguments,2));return a},ua=function(a,b,c){null==a&&ta("Expected to exist: %s.",[a],b,Array.prototype.slice.call(arguments,2));return a},va=function(a,b){throw new sa("Failure"+(a?": "+a:""),Array.prototype.slice.call(arguments,1));},w=function(a,b,c){Array.isArray(a)||ta("Expected array but got %s: %s.",[pa(a),a],b,Array.prototype.slice.call(arguments,2))},x=function(a,b,c,d){a instanceof b||ta("Expected instanceof %s but got %s.",
-[wa(b),wa(a)],c,Array.prototype.slice.call(arguments,3));return a};function wa(a){return a instanceof Function?a.displayName||a.name||"unknown type name":a instanceof Object?a.constructor.displayName||a.constructor.name||Object.prototype.toString.call(a):null===a?"null":typeof a};var xa={},ya=null,za=function(a){var b,c=pa(a);v("array"==c||"object"==c&&"number"==typeof a.length,"encodeByteArray takes an array as a parameter");void 0===b&&(b=0);if(!ya){ya={};c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split("");for(var d=["+/=","+/","-_=","-_.","-_"],e=0;5>e;e++){var g=c.concat(d[e].split(""));xa[e]=g;for(var f=0;f<g.length;f++){var h=g[f],k=ya[h];void 0===k?ya[h]=f:v(k===f)}}}b=xa[b];c=Array(Math.floor(a.length/3));d=b[64]||"";for(e=g=0;g<a.length-2;g+=
-3){k=a[g];var l=a[g+1];h=a[g+2];f=b[k>>2];k=b[(k&3)<<4|l>>4];l=b[(l&15)<<2|h>>6];h=b[h&63];c[e++]=""+f+k+l+h}f=0;h=d;switch(a.length-g){case 2:f=a[g+1],h=b[(f&15)<<2]||d;case 1:a=a[g],c[e]=""+b[a>>2]+b[(a&3)<<4|f>>4]+h+d}return c.join("")};var Aa="undefined"!==typeof Uint8Array,Ba={};var Ca,Da=function(a){if(Ba!==Ba)throw Error("illegal external caller");this.qa=a;if(null!=a&&0===a.length)throw Error("ByteString should be constructed with non-empty values");};v(!0);var Ea={};var z="function"===typeof Symbol&&"symbol"===typeof Symbol()?Symbol("INTERNAL_ARRAY_STATE"):void 0;function Fa(a,b){Object.isFrozen(a)||(z?a[z]|=b:void 0!==a.F?a.F|=b:Object.defineProperties(a,{F:{value:b,configurable:!0,writable:!0,enumerable:!1}}))}var Ga=Object.getOwnPropertyDescriptor(Array.prototype,"wa");
-Object.defineProperties(Array.prototype,{wa:{get:function(){var a=A(this),b=[];1&a&&b.push("IS_REPEATED_FIELD");2&a&&b.push("IS_IMMUTABLE_ARRAY");4&a&&b.push("IS_API_FORMATTED");8&a&&b.push("ONLY_MUTABLE_VALUES");a=b.join(",");return Ga?Ga.get.call(this)+"|"+a:a},configurable:!0,enumerable:!1}});function A(a){w(a,"state is only maintained on arrays.");a=z?a[z]:a.F;return null==a?0:a}function B(a){w(a,"state is only maintained on arrays.");Fa(a,1);return a}
-function C(a){return Array.isArray(a)?!!(A(a)&2):!1}function Ha(a){if(!Array.isArray(a))throw Error("cannot mark non-array as immutable");Fa(a,2)}function Ia(a,b){if(!Array.isArray(a))throw Error("cannot mark non-array as mutable");b?Fa(a,8):Object.isFrozen(a)||(z?a[z]&=-9:void 0!==a.F&&(a.F&=-9))};function Ja(a){return null!==a&&"object"===typeof a&&!Array.isArray(a)&&a.constructor===Object}var Ka=Symbol("exempted jspb subclass"),La=Symbol("generated by jspb"),Ma=Object.freeze(B([])),Na=function(a){if(C(a.g))throw Error("Cannot mutate an immutable Message");},Oa="undefined"!=typeof Symbol&&"undefined"!=typeof Symbol.hasInstance;function Pa(a){return{value:a,configurable:!1,writable:!1,enumerable:!1}};function Qa(a){return a.displayName||a.name||"unknown type name"}function Ra(a,b){if(!(a instanceof b))throw Error("Expected instanceof "+Qa(b)+" but got "+(a&&Qa(a.constructor)));return a}function Sa(a,b,c){c=void 0===c?!1:c;if(Array.isArray(a))return new b(a);if(c)return new b};var Ta=function(){throw Error("please construct maps as mutable then call toImmutable");};if(Oa){var Ua=function(){throw Error("Cannot perform instanceof checks on ImmutableMap");},Va={};Object.defineProperties(Ta,(Va[Symbol.hasInstance]=Pa(Ua),Va));v(Ta[Symbol.hasInstance]===Ua,"defineProperties did not work: was it monkey-patched?")};function Wa(a){switch(typeof a){case "number":return isFinite(a)?a:String(a);case "object":if(a&&!Array.isArray(a)){if(Aa&&null!=a&&a instanceof Uint8Array)return za(a);if(a instanceof Da){var b=a.qa;null!=b&&"string"!==typeof b&&(Aa&&b instanceof Uint8Array?b=za(b):(va("Cannot coerce to b64 string: "+pa(b)),b=null));return null==b?"":a.qa=b}}}return a};function Xa(a,b){b=void 0===b?Ya:b;w(a);return Za(a,b)}function $a(a,b){if(null!=a){if(Array.isArray(a))a=Za(a,b);else if(Ja(a)){var c={},d;for(d in a)c[d]=$a(a[d],b);a=c}else a=b(a);return a}}function Za(a,b){w(a);for(var c=a.slice(),d=0;d<c.length;d++)c[d]=$a(c[d],b);Array.isArray(a)&&A(a)&1&&B(c);return c}function ab(a){if(a&&"object"==typeof a&&a.toJSON)return a.toJSON();a=Wa(a);return Array.isArray(a)?Xa(a,ab):a}function Ya(a){return Aa&&null!=a&&a instanceof Uint8Array?new Uint8Array(a):a};var bb=function(a){return a.C||(a.C=a.g[a.G+a.D]={})},D=function(a,b,c){return-1===b?null:b>=a.G?a.C?a.C[b]:void 0:(void 0===c?0:c)&&a.C&&(c=a.C[b],null!=c)?c:a.g[b+a.D]},E=function(a,b,c,d,e){d=void 0===d?!1:d;(void 0===e?0:e)||Na(a);b<a.G&&!d?a.g[b+a.D]=c:bb(a)[b]=c},F=function(a,b,c,d){c=void 0===c?!0:c;var e=D(a,b,d);Array.isArray(e)||(e=Ma);if(C(a.g))c&&(Ha(e),Object.freeze(e));else if(e===Ma||C(e))e=B(e.slice()),E(a,b,e,d);return e},G=function(a,b){var c=Number,d=F(a,b,!1),e;if(e=d.length)e=
-d,w(e,"state is only maintained on arrays."),e=!(A(e)&4);if(e){Object.isFrozen(d)&&(d=B(d.slice()),E(a,b,d,void 0,!0));for(b=0;b<d.length;b++)d[b]=c(d[b]);c=d;w(c,"state is only maintained on arrays.");Fa(c,5)}C(a.g)&&Object.freeze(d);return d},I=function(a,b,c){a=D(a,b);return null==a?c:a},J=function(a,b){a=D(a,b);a=null==a?a:!!a;return null==a?!1:a},L=function(a,b){a=D(a,b);a=null==a?a:+a;return null==a?0:a};function M(a,b,c){Na(a);0!==c?E(a,b,c):E(a,b,void 0,!1);return a}
-var N=function(a,b,c,d,e){e=void 0===e?!1:e;var g=e;if(-1===c)d=null;else{a.h||(a.h={});var f=a.h[c];if(f)d=f;else{var h=D(a,c,g);b=Sa(h,b,d);void 0==b?d=f:(d&&b.g!==h&&E(a,c,b.g,g,!0),a.h[c]=b,C(a.g)&&Ha(b.g),d=b)}}if(null==d)return d;C(d.g)&&!C(a.g)&&(d=d.fa(Ea),E(a,c,d.g,e),a.h[c]=d);return d},O=function(a,b,c,d){d=void 0===d?!1:d;var e=C(a.g),g=d,f=e;f=void 0===f?!0:f;a.h||(a.h={});var h=C(a.g);var k=a.h[c];g=F(a,c,!0,g);var l=h||C(g);if(!k){k=[];h=h||l;for(var m=0;m<g.length;m++){var p=g[m];
-h=h||C(p);p=Sa(p,b);void 0!==p&&(k.push(p),l&&Ha(p.g))}a.h[c]=k;Ia(g,!h)}b=l||f;f=C(k);b&&!f&&(Object.isFrozen(k)&&(a.h[c]=k=k.slice()),Ha(k),Object.freeze(k));!b&&f&&(a.h[c]=k=k.slice());a=F(a,c,d);if(!(c=e)&&(c=a)){if(!Array.isArray(a))throw Error("cannot check mutability state of non-array");c=!(A(a)&8)}if(c){for(c=0;c<k.length;c++)(d=k[c])&&C(d.g)&&!e&&(k[c]=k[c].fa(Ea),a[c]=k[c].g);Ia(a,!0)}return k},cb=function(a,b,c,d){Na(a);a.h||(a.h={});b=null!=d?Ra(d,ua(b)).g:d;a.h[c]=d;E(a,c,b)},P=function(a,
-b){return I(a,b,"0")};var Q=function(a,b,c){x(this,Q,"The message constructor should only be used by subclasses");v(this.constructor!==Q,"Message is an abstract class and cannot be directly constructed");if(!0!==this[Ka]){v(!0===this[La],"Message can only be subclassed by proto gencode.");var d=Object.getPrototypeOf(v(Object.getPrototypeOf(this)));v(d.hasOwnProperty(La),"Generated jspb classes should not be extended")}a||(a=db);db=null;d=this.constructor.Ia;a||(a=d?[d]:[]);this.D=(d?0:-1)-(this.constructor.Ga||0);this.h=
-void 0;this.g=a;a:{d=this.g.length;a=d-1;if(d&&(d=this.g[a],Ja(d))){this.G=a-this.D;this.C=d;break a}void 0!==b&&-1<b?(this.G=Math.max(b,a+1-this.D),this.C=void 0):this.G=Number.MAX_VALUE}if(c)for(b=0;b<c.length;b++)if(a=c[b],a<this.G)a+=this.D,(d=this.g[a])?Array.isArray(d)&&B(d):this.g[a]=Ma;else{d=bb(this);var e=d[a];e?Array.isArray(e)&&B(e):d[a]=Ma}};n=Q.prototype;n.toJSON=function(){return Xa(this.g,ab)};n.getExtension=function(a){x(this,a.va);return a.Ea(x(this,Q))};
-n.hasExtension=function(a){x(this,a.va);v(!a.Ha,"repeated extensions don't support hasExtension");var b=x(this,Q);return null!=D(b,a.Da)};n.clone=function(){var a=x(this,Q),b=Xa(a.g);x(a,Q);w(b);db=b;b=new a.constructor(b);x(b,Q);db=null;eb(b,a);return b};n.toString=function(){return this.g.toString()};
-function eb(a,b){v(a,"expected `to` to be non-null");v(b,"expected `from` to be non-null");b.N&&(a.N=b.N.slice());var c=b.h;if(c){b=b.C;for(var d in c){var e=c[d];if(e){var g=!(!b||!b[d]),f=+d;if(Array.isArray(e)){if(e.length)for(g=O(a,e[0].constructor,f,g),f=0;f<Math.min(g.length,e.length);f++)eb(g[f],x(e[f],Q))}else x(e,Q),(g=N(a,e.constructor,f,void 0,g))&&eb(g,e)}}}}var db;var fb=function(){Q.call(this,void 0);throw Error("ImmutableMessage is not instantiable");};t(fb,Q);fb.prototype.clone=function(){return Q.prototype.clone.call(this)};if(Oa){var gb=function(){throw Error("Cannot perform instanceof checks for MutableMessage");},hb={};Object.defineProperties(fb,(hb[Symbol.hasInstance]=Pa(gb),hb));v(fb[Symbol.hasInstance]===gb,"broken defineProperties implementation")};var R=function(){Q.apply(this,arguments)};t(R,Q);R.prototype.fa=function(){return this};if(Oa){var ib=function(){throw Error("Cannot perform instanceof checks for MutableMessage");},jb={};Object.defineProperties(R,(jb[Symbol.hasInstance]=Pa(ib),jb));v(R[Symbol.hasInstance]===ib,"defineProperties did not work: was it monkey-patched?")};function kb(a,b,c,d,e,g){if(a=a.h&&a.h[c])if(Array.isArray(a)){e=g.ba?B(a.slice()):a;g=0<e.length?e[0].constructor:void 0;Na(b);if(null!=e){w(e);d=B([]);a=!1;for(var f=0;f<e.length;f++)d[f]=Ra(e[f],ua(g)).g,a=a||C(d[f]);b.h||(b.h={});b.h[c]=e;Ia(d,!a)}else b.h&&(b.h[c]=void 0),d=Ma;E(b,c,d)}else cb(b,a.constructor,c,x(a,Q));else Aa&&d instanceof Uint8Array?(e=d,x(e,Uint8Array),e=e.length?new Da(new Uint8Array(e)):Ca||(Ca=new Da(null))):(Array.isArray(d)&&(e?Ha(d):Array.isArray(d)&&A(d)&1&&g.ba&&(d=
-d.slice())),e=d),E(b,c,e)};var S=function(){R.apply(this,arguments)};t(S,R);
-S.prototype.fa=function(a){if(a!==Ea)throw Error("requires a valid immutable API token");if(C(this.g)){x(this,Q);a={ba:!0};var b=C(this.g);if(b&&!a.ba)throw Error("copyRepeatedFields must be true for frozen messages");var c=new this.constructor;this.N&&(c.N=this.N.slice());for(var d=this.g,e=0;e<d.length;e++){var g=d[e];if(e===d.length-1&&Ja(g))for(h in g){var f=+h;Number.isNaN(f)?bb(c)[h]=g[h]:kb(this,c,f,g[h],b,a)}else kb(this,c,e-this.D,g,b,a)}var h=c}else h=this;return h};S.prototype[La]=!0;
-if(Oa){var lb={};Object.defineProperties(S,(lb[Symbol.hasInstance]=Pa(Object[Symbol.hasInstance]),lb));v(S[Symbol.hasInstance]===Object[Symbol.hasInstance],"broken defineProperties implementation")};var mb=void 0;function nb(a){var b=mb;mb=void 0;var c=[],d=ob(a,c);if(!d&&c){var e="Expected Array<unknown>, got "+pb(a);c.push(e)}if(!d)throw a="",b&&(a=b()+"\n"),Error(a+"Guard Array<unknown> failed:\n"+c.reverse().join("\n"));return a}
-function pb(a,b){b=void 0===b?new Set:b;if(b.has(a))return"(Recursive reference)";switch(typeof a){case "object":if(a){var c=Object.getPrototypeOf(a);switch(c){case Map.prototype:case Set.prototype:case Array.prototype:b.add(a);var d="["+Array.from(a,function(e){return pb(e,b)}).join(", ")+"]";b.delete(a);c!==Array.prototype&&(d=qb(c.constructor)+"("+d+")");return d;case Object.prototype:return b.add(a),c="{"+Object.entries(a).map(function(e){var g=r(e);e=g.next().value;g=g.next().value;return e+
-": "+pb(g,b)}).join(", ")+"}",b.delete(a),c;default:return d="Object",c&&c.constructor&&(d=qb(c.constructor)),"function"===typeof a.toString&&a.toString!==Object.prototype.toString?d+"("+String(a)+")":"(object "+d+")"}}break;case "function":return"function "+qb(a);case "number":if(!Number.isFinite(a))return String(a);break;case "bigint":return a.toString(10)+"n"}return JSON.stringify(a)}function qb(a){var b=a.name;b||(b=(a=/function\s+([^\(]+)/m.exec(String(a)))?a[1]:"(Anonymous)");return b};var ob=function(a){a.Fa=function(){return"Array<unknown>"};return a}(function(a){return Array.isArray(a)});var rb=[[[["1646440773",[-.21289063,-.014526367,-.0046081543,-.013671875,-.012451172,.056152344,-.05029297,-.15234375,-.044677734,-.29101563,-.099121094,.0014190674,.08496094,.078125,-.009765625,-.09765625,-.045166016,.09765625,-.022583008,.23242188,-.04321289,.0126953125,.032226563,.064941406,.36132813,-.09716797,.28515625,.0074768066,-.11279297,-.0625,.012329102,-.076171875]]],[["1646451678",[-.18652344,.15917969,-.005340576,.055664063,.041015625,-.010253906,.06591797,-.071777344,.024536133,1.828125,
--.19140625,-.35351563,.13671875,.45117188,.12792969,-.03466797,.18261719,.19628906,.14160156,.17480469,-.04638672,-.06689453,-.30273438,.35351563,-.33789063,-.7578125,-.17675781,.05810547,-.002029419,.005279541,-.025756836,.15234375]]]],null,[1],"CMb9tKfcrvYCFawfBgAdboELOQ",null,[null,null,null,1,[]],[null,null,null,null,[]]];var sb={"1j115753478":[[["52836427830","310927197294","4",[[["1643849995",[3.09375,.8203125,1.4765625,-.55078125,1.9140625,-.78125,-1.1640625,-3.15625,1.25,3.421875,1.6484375,1.0625,4.96875,-.66796875,-1.4375,.87109375,1.6171875,-4.125,-2.375,3.421875,-2.359375,1.6015625,.625,-4.65625,-5.03125,.416015625,-4.03125,-.24609375,3.296875,-.052001953125,-3.75,3.765625]],["1643804092",[3.09375,.796875,1.46875,-.56640625,1.890625,-.76953125,-1.1484375,-3.140625,1.2109375,3.421875,1.625,1.046875,4.9375,-.65234375,
--1.421875,.84765625,1.6015625,-4.125,-2.359375,3.453125,-2.34375,1.5859375,.63671875,-4.65625,-5,.396484375,-4.03125,-.26171875,3.296875,-.068359375,-3.734375,3.75]]],null,[["1643822293",[-.039794921875,.035400390625,.357421875,.041748046875,.0054931640625,-.060791015625,.138671875,-.318359375,.2255859375,.10546875,.2099609375,-.240234375,-.07373046875,-.279296875,-.44140625,.015380859375,-.298828125,.119140625,-.09716796875,.1796875,.04248046875,.09033203125,.38671875,.412109375,-.357421875,.259765625,
--.24609375,-.3828125,.33984375,.07861328125,-.1259765625,.3046875]],["1643799063",[.0079345703125,.0546875,.353515625,.00958251953125,-.01318359375,-.10888671875,.13671875,-.373046875,.208984375,.09228515625,.1962890625,-.248046875,-.031494140625,-.2734375,-.42578125,.0035400390625,-.345703125,.1083984375,-.068359375,.173828125,.0810546875,.1162109375,.361328125,.451171875,-.3671875,.162109375,-.212890625,-.46484375,.337890625,.1083984375,-.177734375,.318359375]]],null,null,null,null,[[null,[318.3513488769531,
-1],[1,2],[1,1],null,3]]],[null,[[2,0,null,["PubPolicy1"]]]],"608936333",null,null,null,[[2,1,7]],[[2,1,5]]],["52836427830","310927197297","4",[[["1643849995",[3.125,.953125,1.484375,-.46875,2.109375,-.89453125,-1.265625,-3.15625,1.265625,3.421875,1.7578125,1.1796875,4.9375,-.6796875,-1.5234375,.953125,1.7734375,-4.125,-2.453125,3.4375,-2.375,1.6328125,.3984375,-4.375,-4.96875,.59375,-4.03125,-.08935546875,3.34375,.1806640625,-3.8125,3.796875]],["1643804092",[3.125,.90625,1.4609375,-.5,2.046875,-.8671875,
--1.234375,-3.140625,1.2265625,3.421875,1.71875,1.1328125,4.90625,-.65625,-1.4921875,.921875,1.734375,-4.125,-2.421875,3.46875,-2.34375,1.6015625,.4296875,-4.375,-4.9375,.55078125,-4.03125,-.123046875,3.328125,.1416015625,-3.78125,3.765625]]],null,[["1643822293",[-.060546875,.0185546875,.353515625,.02587890625,.00311279296875,-.07421875,.1533203125,-.3203125,.2470703125,.06689453125,.193359375,-.234375,.029296875,-.255859375,-.44921875,.0146484375,-.306640625,.11962890625,-.10498046875,.1865234375,
-.049072265625,.1162109375,.365234375,.42578125,-.359375,.26953125,-.2490234375,-.392578125,.306640625,.1103515625,-.1376953125,.310546875]],["1643799063",[-.015869140625,.02978515625,.337890625,-.00628662109375,-.0169677734375,-.12353515625,.1494140625,-.373046875,.232421875,.056640625,.1806640625,-.2353515625,.0966796875,-.2451171875,-.43359375,.004180908203125,-.353515625,.107421875,-.087890625,.1865234375,.087890625,.138671875,.345703125,.455078125,-.36328125,.181640625,-.224609375,-.486328125,
-.294921875,.13671875,-.19921875,.3203125]]],null,null,null,null,[[null,[318.3513488769531,1],[1,2],[1,1],null,3]]],[null,[[2,0,null,["PubPolicy1"]]]],"608936333",null,null,null,[[2,1,7]],[[2,1,5]]],["52836427830","310927197300","4",[[["1643849995",[3.109375,.99609375,1.59375,-.4609375,2.171875,-.91015625,-1.296875,-3.3125,1.3984375,3.4375,1.8046875,1.2578125,5.09375,-.7421875,-1.59375,1.0078125,1.8125,-4.1875,-2.578125,3.390625,-2.53125,1.765625,.54296875,-4.71875,-5.09375,.55859375,-4.09375,-.1318359375,
-3.328125,.0654296875,-3.890625,3.859375]],["1643804092",[3.109375,.953125,1.5703125,-.48828125,2.109375,-.88671875,-1.2734375,-3.296875,1.359375,3.4375,1.7734375,1.21875,5.0625,-.71875,-1.5625,.9765625,1.7734375,-4.1875,-2.53125,3.4375,-2.5,1.734375,.5703125,-4.71875,-5.0625,.5234375,-4.0625,-.1591796875,3.328125,.03515625,-3.84375,3.828125]]],null,[["1643822293",[-.048095703125,.0179443359375,.36328125,.033203125,.030029296875,-.07568359375,.15625,-.326171875,.224609375,.07568359375,.1787109375,
--.234375,-.0277099609375,-.265625,-.412109375,.00909423828125,-.3046875,.11865234375,-.103515625,.1767578125,.048095703125,.12158203125,.36328125,.421875,-.359375,.255859375,-.25,-.396484375,.29296875,.10205078125,-.1279296875,.318359375]],["1643799063",[-.0045166015625,.03173828125,.353515625,.003631591796875,.00927734375,-.126953125,.154296875,-.37890625,.208984375,.06689453125,.1708984375,-.234375,.03173828125,-.255859375,-.396484375,-.00384521484375,-.353515625,.10693359375,-.0830078125,.1708984375,
-.08935546875,.1474609375,.341796875,.44921875,-.3671875,.1669921875,-.224609375,-.482421875,.28125,.130859375,-.1796875,.326171875]]],null,null,null,null,[[null,[318.3513488769531,1],[1,2],[1,1],null,3]]],[null,[[2,0,null,["PubPolicy1"]]]],"608936333",null,null,null,[[2,1,7]],[[2,1,5]]]]],"1j380357233":[[["52836427830","310927197294","4",[[["1643849995",[4.53125,1.8671875,.13671875,3.3125,-7.5625,.546875,2.953125,-7.90625,4.71875,7.375,.0047607421875,-3.25,.74609375,.298828125,-1.34375,-2.4375,-6.34375,
--9.1875,-1.3359375,9.875,1.1796875,-3.15625,3.796875,-6.90625,-3.203125,-.09375,-7.65625,-.71875,4.65625,-.75390625,-6.28125,3.6875]],["1643804092",[4.53125,1.9453125,.19140625,3.40625,-7.53125,.52734375,2.9375,-7.9375,4.625,7.375,.01416015625,-3.25,.74609375,.28125,-1.34375,-2.484375,-6.34375,-9.25,-1.328125,9.9375,1.2421875,-3.171875,3.71875,-6.71875,-3.21875,-.0311279296875,-7.71875,-.69140625,4.65625,-.70703125,-6.40625,3.71875]]],null,[["1643822293",[-.09033203125,.037109375,.423828125,.0439453125,
-.0390625,-.04345703125,.162109375,-.3125,.2197265625,.06884765625,.25,-.240234375,-.07763671875,-.267578125,-.416015625,.0150146484375,-.2890625,.126953125,-.08740234375,.158203125,.035888671875,.130859375,.3515625,.412109375,-.38671875,.27734375,-.234375,-.408203125,.337890625,.0458984375,-.1328125,.36328125]],["1643799063",[-.044921875,.056640625,.3984375,.0162353515625,.01373291015625,-.08544921875,.1611328125,-.359375,.1982421875,.06298828125,.2421875,-.2421875,-.05078125,-.263671875,-.39453125,
-.001953125,-.33203125,.11767578125,-.060546875,.1513671875,.07080078125,.14453125,.3359375,.4453125,-.388671875,.1865234375,-.1904296875,-.48046875,.3359375,.0693359375,-.177734375,.37109375]]],null,null,null,null,[[null,[318.3513488769531,1],[1,2],[1,1],null,3]]],[null,[[2,0,null,["PubPolicy1"]]]],"608936333",null,null,null,[[2,1,7]],[[2,1,5]]],["52836427830","310927197297","4",[[["1643849995",[4.4375,1.90625,.20703125,3.125,-7.03125,.44140625,2.703125,-7.46875,4.5,7.1875,.080078125,-3.03125,.94140625,
-.25390625,-1.3203125,-2.25,-5.875,-8.875,-1.375,9.4375,1.0234375,-2.984375,3.453125,-6.46875,-3.171875,.007781982421875,-7.4375,-.62890625,4.5625,-.58984375,-6.125,3.609375]],["1643804092",[4.46875,1.9765625,.26171875,3.1875,-6.9375,.41015625,2.671875,-7.53125,4.375,7.21875,.09716796875,-3.015625,1.0078125,.232421875,-1.3203125,-2.28125,-5.84375,-8.875,-1.3828125,9.5625,1.0859375,-2.96875,3.359375,-6.3125,-3.234375,.06494140625,-7.5,-.6171875,4.5625,-.53125,-6.28125,3.703125]]],null,[["1643822293",
-[-.107421875,.017822265625,.427734375,.0274658203125,.0289306640625,-.05908203125,.17578125,-.31640625,.2373046875,.033447265625,.2470703125,-.23046875,.00579833984375,-.25,-.421875,.01385498046875,-.298828125,.1240234375,-.09912109375,.16796875,.036865234375,.1435546875,.33984375,.4296875,-.380859375,.28515625,-.232421875,-.427734375,.3125,.0654296875,-.1513671875,.373046875]],["1643799063",[-.07177734375,.024658203125,.396484375,-.0016937255859375,.01434326171875,-.11328125,.1748046875,-.3671875,
-.2255859375,.026611328125,.224609375,-.2197265625,.07470703125,-.232421875,-.396484375,.01507568359375,-.341796875,.11376953125,-.087890625,.16015625,.072265625,.173828125,.3203125,.44921875,-.3828125,.19921875,-.2080078125,-.5078125,.28125,.1044921875,-.21484375,.380859375]]],null,null,null,null,[[null,[318.3513488769531,1],[1,2],[1,1],null,3]]],[null,[[2,0,null,["PubPolicy1"]]]],"608936333",null,null,null,[[2,1,7]],[[2,1,5]]],["52836427830","310927197300","4",[[["1643849995",[4.5,1.96875,.2099609375,
-3.328125,-7.28125,.458984375,2.8125,-7.84375,4.84375,7.3125,.09814453125,-3.078125,.859375,.224609375,-1.4296875,-2.3125,-6.09375,-9.125,-1.4453125,9.75,1.0078125,-3,3.71875,-6.90625,-3.203125,-.04931640625,-7.5625,-.6328125,4.625,-.69140625,-6.25,3.671875]],["1643804092",[4.5,2.09375,.298828125,3.453125,-7.1875,.416015625,2.765625,-7.90625,4.75,7.3125,.1318359375,-3.046875,.9140625,.17578125,-1.4453125,-2.328125,-6.0625,-9.125,-1.46875,9.75,1.046875,-2.984375,3.59375,-6.6875,-3.25,.041015625,-7.625,
--.5859375,4.625,-.6171875,-6.40625,3.75]]],null,[["1643822293",[-.09765625,.0216064453125,.421875,.03955078125,.056396484375,-.0546875,.1767578125,-.31640625,.208984375,.04248046875,.2265625,-.2314453125,-.0419921875,-.2578125,-.3828125,.0084228515625,-.29296875,.123046875,-.09423828125,.1533203125,.0380859375,.1474609375,.333984375,.4140625,-.384765625,.275390625,-.232421875,-.4140625,.291015625,.06591796875,-.1337890625,.376953125]],["1643799063",[-.0673828125,.03271484375,.41796875,.01336669921875,
-.041748046875,-.10595703125,.1767578125,-.37109375,.1982421875,.0294189453125,.212890625,-.2275390625,.02880859375,-.248046875,-.361328125,.00909423828125,-.337890625,.115234375,-.0732421875,.14453125,.07080078125,.1875,.310546875,.4453125,-.39453125,.1875,-.203125,-.5078125,.26953125,.095703125,-.1962890625,.40625]]],null,null,null,null,[[null,[318.3513488769531,1],[1,2],[1,1],null,3]]],[null,[[2,0,null,["PubPolicy1"]]]],"608936333",null,null,null,[[2,1,7]],[[2,1,5]]],["31279674038","113383149038",
-null,[[["1643849995",[7.875,2.375,-3.078125,9.8125,-20.875,2.46875,9.1875,-18.25,10,13.0625,-1.1171875,-8.875,-6.9375,2.078125,-2.1875,-7.34375,-17.375,-19.375,.640625,21.375,7.0625,-9.875,7.875,-9.5625,-2.09375,.034423828125,-13.4375,-.3359375,8.5625,-.75390625,-11.375,6.15625]],["1643804092",[7.875,2.4375,-3.015625,10,-20.75,2.453125,9.1875,-18.25,9.6875,13,-1.1484375,-8.9375,-6.875,2.078125,-2.125,-7.4375,-17.5,-19.25,.71875,21.25,7.3125,-9.9375,7.65625,-9.125,-2.171875,.1513671875,-13.5625,-.34765625,
-8.5625,-.69921875,-11.6875,6.28125]]],null,[["1643822293",[-.337890625,-.1884765625,.1923828125,-.0213623046875,-.1953125,.5234375,.326171875,.0908203125,-.09033203125,.019775390625,.40234375,.462890625,-.19921875,-.08642578125,-.29296875,-.1943359375,.248046875,-.2470703125,-.2099609375,.2353515625,.0400390625,.1767578125,.828125,-.059326171875,-.0218505859375,.5703125,-.431640625,-.30859375,.19921875,.1455078125,-.486328125,-.2578125]],["1643799063",[-.37109375,-.1455078125,.361328125,-.0595703125,
--.1611328125,.5234375,.3203125,.07568359375,-.0791015625,.03173828125,.423828125,.4609375,-.2412109375,-.09130859375,-.310546875,-.193359375,.232421875,-.2353515625,-.19140625,.2177734375,.0205078125,.232421875,.8359375,-.04150390625,-.045166015625,.55078125,-.451171875,-.412109375,.298828125,.1220703125,-.56640625,-.11767578125]]],null,null,null,null,[[null,[176.8618621826172,1],[1,2],[1,1],null,3]]],[null,[[2,0,null,["PubPolicy1"]]]],"608936333",null,null,null,[[2,1,7]],[[2,1,5]]],["31279674038",
-"113383149158",null,[[["1643849995",[8.1875,2.0625,-3.328125,9.5,-21.125,2.609375,9.3125,-17.875,9.5,13.375,-1.2578125,-9.1875,-7,2.265625,-1.9140625,-7.5,-17.625,-19.5,.953125,21.375,7.46875,-10.3125,7.65625,-9.125,-2.265625,.02490234375,-13.75,-.4375,8.8125,-.59765625,-11.4375,6.40625]],["1643804092",[8.125,2.140625,-3.25,9.6875,-21.125,2.59375,9.3125,-17.875,9.25,13.25,-1.25,-9.1875,-6.90625,2.234375,-1.8671875,-7.5625,-17.625,-19.5,1.0078125,21.25,7.625,-10.375,7.5,-8.8125,-2.359375,.1494140625,
--13.75,-.458984375,8.75,-.5625,-11.6875,6.5]]],null,[["1643822293",[-.349609375,-.19140625,.1767578125,-.0213623046875,-.197265625,.5234375,.330078125,.0927734375,-.0908203125,.027587890625,.3984375,.462890625,-.2001953125,-.0810546875,-.296875,-.19140625,.2490234375,-.244140625,-.2119140625,.2392578125,.0400390625,.181640625,.828125,-.05859375,-.0181884765625,.5703125,-.4296875,-.302734375,.1982421875,.1494140625,-.490234375,-.263671875]],["1643799063",[-.369140625,-.1435546875,.353515625,-.05908203125,
--.1552734375,.515625,.322265625,.0703125,-.07177734375,.04345703125,.421875,.45703125,-.248046875,-.08935546875,-.30859375,-.1953125,.2255859375,-.2333984375,-.1943359375,.220703125,.021484375,.2431640625,.83984375,-.0419921875,-.04052734375,.54296875,-.443359375,-.41015625,.30078125,.11767578125,-.5703125,-.12158203125]]],null,null,null,null,[[null,[176.8618621826172,1],[1,2],[1,1],null,3]]],[null,[[2,0,null,["PubPolicy1"]]]],"608936333",null,null,null,[[2,1,7]],[[2,1,5]]],["31279674038","113383149518",
-null,[[["1643849995",[7.71875,2.21875,-2.984375,9.3125,-20.25,2.40625,8.875,-17.375,9.5,12.75,-1.1015625,-8.6875,-6.53125,2.03125,-2.03125,-7.09375,-16.875,-18.625,.61328125,20.625,6.84375,-9.625,7.625,-9.3125,-2.140625,-.0341796875,-13.125,-.435546875,8.375,-.8046875,-11.0625,6]],["1643804092",[7.65625,2.328125,-2.875,9.5,-20.125,2.375,8.8125,-17.375,9.3125,12.625,-1.09375,-8.625,-6.46875,1.9921875,-2.015625,-7.125,-16.875,-18.625,.671875,20.5,7,-9.625,7.4375,-8.9375,-2.15625,.1357421875,-13.125,
--.4140625,8.25,-.73046875,-11.25,6.0625]]],null,[["1643822293",[-.34765625,-.193359375,.208984375,-.025390625,-.201171875,.5234375,.330078125,.09326171875,-.09423828125,.0084228515625,.41015625,.46484375,-.1767578125,-.08251953125,-.310546875,-.19140625,.25,-.24609375,-.212890625,.2392578125,.0380859375,.17578125,.828125,-.0576171875,-.01904296875,.578125,-.43359375,-.31640625,.2060546875,.14453125,-.4921875,-.255859375]],["1643799063",[-.369140625,-.150390625,.37890625,-.0546875,-.1630859375,.53125,
-.3203125,.08251953125,-.08447265625,.01318359375,.43359375,.462890625,-.2392578125,-.09619140625,-.310546875,-.189453125,.2421875,-.2333984375,-.1953125,.2119140625,.0142822265625,.23046875,.83203125,-.0284423828125,-.047119140625,.55078125,-.447265625,-.427734375,.306640625,.115234375,-.57421875,-.107421875]]],null,null,null,null,[[null,[176.8618621826172,1],[1,2],[1,1],null,3]]],[null,[[2,0,null,["PubPolicy1"]]]],"608936333",null,null,null,[[2,1,7]],[[2,1,5]]]]],"1j395640136":[[["31279674038","113383149038",
-null,[[["1643849995",[3.34375,.197265625,.66015625,-.796875,1.1015625,-.5546875,-.78515625,-2.21875,.84765625,3.390625,1.28125,.482421875,3.9375,-.1865234375,-1.09375,.609375,1.1484375,-4.0625,-1.7890625,4.5625,-1.859375,.83203125,.64453125,-4,-4.09375,.02587890625,-3.734375,-.31640625,3.65625,-.025146484375,-2.5625,3.03125]],["1643804092",[3.34375,.177734375,.6484375,-.8125,1.078125,-.54296875,-.76953125,-2.203125,.81640625,3.40625,1.265625,.462890625,3.9375,-.171875,-1.078125,.59375,1.125,-4.09375,
--1.7734375,4.59375,-1.8359375,.8203125,.65625,-3.984375,-4.09375,.0101318359375,-3.75,-.33203125,3.671875,-.039794921875,-2.546875,3.015625]]],null,[["1643822293",[-.345703125,-.1962890625,.2109375,-.034912109375,-.2158203125,.5234375,.3359375,.09619140625,-.09326171875,.01385498046875,.427734375,.474609375,-.1806640625,-.0771484375,-.3203125,-.2060546875,.2451171875,-.2578125,-.2177734375,.2490234375,.035888671875,.1513671875,.84375,-.04638671875,-.01220703125,.5703125,-.439453125,-.32421875,.2138671875,
-.1513671875,-.50390625,-.263671875]],["1643799063",[-.3828125,-.1494140625,.384765625,-.058837890625,-.1826171875,.53125,.322265625,.0859375,-.08837890625,.0159912109375,.458984375,.462890625,-.2275390625,-.08984375,-.328125,-.1962890625,.23828125,-.23828125,-.189453125,.22265625,.01556396484375,.2109375,.83203125,-.0238037109375,-.044677734375,.55859375,-.453125,-.43359375,.31640625,.12158203125,-.57421875,-.11328125]]],null,null,null,null,[[null,[176.8618621826172,1],[1,2],[1,1],null,3]]],[null,
-[[2,0,null,["PubPolicy1"]]]],"608936333",null,null,null,[[2,1,7]],[[2,1,5]]],["31279674038","113383149158",null,[[["1643849995",[3.34375,.130859375,.62109375,-.84765625,.98046875,-.453125,-.68359375,-2.03125,.51953125,3.453125,1.140625,.291015625,3.96875,-.15625,-.8828125,.435546875,1.0078125,-4,-1.515625,4.15625,-1.5234375,.62890625,.37890625,-3.421875,-4.21875,.1220703125,-3.84375,-.345703125,3.5625,.10791015625,-2.828125,3.25]],["1643804092",[3.34375,.130859375,.62109375,-.8515625,.98046875,-.451171875,
--.68359375,-2.03125,.50390625,3.453125,1.1328125,.287109375,3.96875,-.1533203125,-.875,.427734375,1.0078125,-4,-1.5078125,4.15625,-1.515625,.625,.369140625,-3.390625,-4.21875,.1259765625,-3.84375,-.34765625,3.5625,.11181640625,-2.828125,3.25]]],null,[["1643822293",[-.3515625,-.1982421875,.185546875,-.027099609375,-.21875,.5234375,.333984375,.099609375,-.09423828125,.0244140625,.42578125,.47265625,-.1845703125,-.0751953125,-.314453125,-.2001953125,.2470703125,-.25390625,-.216796875,.248046875,.036865234375,
-.1533203125,.83984375,-.044189453125,-.00933837890625,.5703125,-.43359375,-.31640625,.212890625,.15625,-.5,-.275390625]],["1643799063",[-.38671875,-.138671875,.375,-.061767578125,-.177734375,.5234375,.3203125,.07666015625,-.080078125,.033447265625,.4453125,.447265625,-.2333984375,-.09130859375,-.333984375,-.19921875,.2265625,-.2275390625,-.18359375,.2255859375,.02197265625,.2197265625,.828125,-.0189208984375,-.047119140625,.55078125,-.44140625,-.4296875,.328125,.11962890625,-.5703125,-.11572265625]]],
-null,null,null,null,[[null,[176.8618621826172,1],[1,2],[1,1],null,3]]],[null,[[2,0,null,["PubPolicy1"]]]],"608936333",null,null,null,[[2,1,7]],[[2,1,5]]],["31279674038","113383149518",null,[[["1643849995",[3.21875,.1484375,.6796875,-.8203125,1,-.486328125,-.73046875,-2.21875,.77734375,3.3125,1.1875,.419921875,3.875,-.1904296875,-1.015625,.52734375,1.046875,-3.984375,-1.7265625,4.46875,-1.8046875,.828125,.7421875,-4.03125,-4.0625,-.07080078125,-3.671875,-.3984375,3.53125,-.1494140625,-2.515625,2.953125]],
-["1643804092",[3.21875,.1416015625,.671875,-.828125,1,-.486328125,-.73046875,-2.21875,.75390625,3.3125,1.1796875,.416015625,3.890625,-.1796875,-1.015625,.51953125,1.046875,-3.984375,-1.71875,4.5,-1.7890625,.8203125,.73046875,-4,-4.0625,-.06640625,-3.6875,-.3984375,3.53125,-.142578125,-2.53125,2.96875]]],null,[["1643822293",[-.349609375,-.19921875,.2109375,-.03173828125,-.2158203125,.53515625,.333984375,.10400390625,-.11181640625,.00836181640625,.431640625,.4765625,-.16796875,-.07568359375,-.32421875,
--.201171875,.25390625,-.26171875,-.21875,.251953125,.032958984375,.142578125,.83984375,-.05126953125,-.00836181640625,.58203125,-.439453125,-.31640625,.21875,.1513671875,-.498046875,-.267578125]],["1643799063",[-.376953125,-.1513671875,.38671875,-.061279296875,-.1875,.53125,.322265625,.08642578125,-.08935546875,.01324462890625,.45703125,.462890625,-.224609375,-.08984375,-.333984375,-.19921875,.23828125,-.240234375,-.1962890625,.2197265625,.01519775390625,.2041015625,.8359375,-.0179443359375,-.041748046875,
-.5546875,-.451171875,-.43359375,.3203125,.123046875,-.578125,-.11962890625]]],null,null,null,null,[[null,[176.8618621826172,1],[1,2],[1,1],null,3]]],[null,[[2,0,null,["PubPolicy1"]]]],"608936333",null,null,null,[[2,1,7]],[[2,1,5]]]]],"1j396781473":[[["31279674038","113383149038",null,[[["1643849995",[3.28125,.37890625,.828125,-.734375,1.3359375,-.625,-.89453125,-2.390625,.7578125,3.40625,1.3515625,.58984375,4.125,-.2734375,-1.125,.6171875,1.2734375,-4.0625,-1.859375,4.3125,-1.84375,.953125,.427734375,
--3.71875,-4.28125,.2119140625,-3.828125,-.244140625,3.5625,.134765625,-2.9375,3.25]],["1643804092",[3.28125,.345703125,.80859375,-.75390625,1.2890625,-.6015625,-.87109375,-2.375,.72265625,3.40625,1.3203125,.5546875,4.09375,-.255859375,-1.09375,.5859375,1.234375,-4.0625,-1.828125,4.34375,-1.8125,.92578125,.4453125,-3.71875,-4.28125,.185546875,-3.84375,-.267578125,3.5625,.111328125,-2.921875,3.234375]]],null,[["1643822293",[-.32421875,-.203125,.212890625,-.006622314453125,-.224609375,.5234375,.330078125,
-.099609375,-.08203125,-.01239013671875,.41015625,.484375,-.140625,-.0751953125,-.3046875,-.17578125,.251953125,-.25,-.2119140625,.2119140625,.030029296875,.1689453125,.8359375,-.041748046875,-.022216796875,.5546875,-.412109375,-.34375,.1748046875,.1806640625,-.5,-.2470703125]],["1643799063",[-.3359375,-.1572265625,.376953125,-.039306640625,-.1982421875,.515625,.314453125,.076171875,-.0595703125,-.0079345703125,.43359375,.4765625,-.208984375,-.091796875,-.3125,-.1708984375,.23046875,-.23828125,-.1962890625,
-.1787109375,.01556396484375,.220703125,.84375,-.0184326171875,-.052001953125,.51953125,-.4296875,-.458984375,.263671875,.1494140625,-.58203125,-.10498046875]]],null,null,null,null,[[null,[176.8618621826172,1],[1,2],[1,1],null,3]]],[null,[[2,0,null,["PubPolicy1"]]]],"608936333",null,null,null,[[2,1,7]],[[2,1,5]]],["31279674038","113383149158",null,[[["1643849995",[3.328125,.369140625,.8125,-.7578125,1.3125,-.56640625,-.84375,-2.25,.478515625,3.484375,1.2734375,.462890625,4.21875,-.265625,-.96875,.4921875,
-1.2109375,-4.03125,-1.640625,3.875,-1.5546875,.7890625,.10302734375,-3.125,-4.4375,.375,-3.96875,-.2236328125,3.5,.3359375,-3.265625,3.515625]],["1643804092",[3.3125,.349609375,.80078125,-.76953125,1.28125,-.5546875,-.828125,-2.234375,.4453125,3.46875,1.25,.44140625,4.1875,-.251953125,-.94921875,.47265625,1.1875,-4.03125,-1.6171875,3.890625,-1.53125,.76953125,.10888671875,-3.109375,-4.4375,.359375,-3.953125,-.236328125,3.5,.32421875,-3.234375,3.5]]],null,[["1643822293",[-.326171875,-.201171875,.1884765625,
--.0014190673828125,-.2216796875,.53125,.330078125,.10107421875,-.0849609375,-.00994873046875,.404296875,.4765625,-.1513671875,-.07470703125,-.298828125,-.17578125,.25390625,-.2421875,-.2099609375,.2109375,.0322265625,.1728515625,.83203125,-.0380859375,-.0242919921875,.55859375,-.408203125,-.33984375,.177734375,.18359375,-.494140625,-.25390625]],["1643799063",[-.33984375,-.1474609375,.3515625,-.03466796875,-.1923828125,.5078125,.3125,.0712890625,-.057861328125,.01446533203125,.431640625,.46484375,
--.2109375,-.0927734375,-.310546875,-.17578125,.220703125,-.2294921875,-.1923828125,.1796875,.023681640625,.2314453125,.83984375,-.0205078125,-.049072265625,.51953125,-.41796875,-.4453125,.2734375,.1513671875,-.57421875,-.115234375]]],null,null,null,null,[[null,[176.8618621826172,1],[1,2],[1,1],null,3]]],[null,[[2,0,null,["PubPolicy1"]]]],"608936333",null,null,null,[[2,1,7]],[[2,1,5]]],["31279674038","113383149518",null,[[["1643849995",[3.15625,.34765625,.8515625,-.74609375,1.2578125,-.56640625,-.85546875,
--2.40625,.6953125,3.328125,1.265625,.546875,4.09375,-.283203125,-1.0625,.54296875,1.1953125,-3.984375,-1.8046875,4.1875,-1.796875,.95703125,.5,-3.75,-4.25,.1376953125,-3.78125,-.310546875,3.4375,.03173828125,-2.921875,3.1875]],["1643804092",[3.171875,.322265625,.8359375,-.765625,1.2265625,-.546875,-.8359375,-2.390625,.65625,3.328125,1.2421875,.515625,4.0625,-.265625,-1.0390625,.51953125,1.171875,-3.984375,-1.7734375,4.21875,-1.765625,.93359375,.5,-3.71875,-4.25,.12353515625,-3.78125,-.32421875,3.4375,
-.0242919921875,-2.921875,3.1875]]],null,[["1643822293",[-.32421875,-.21484375,.212890625,-.00543212890625,-.2333984375,.52734375,.333984375,.10498046875,-.08740234375,-.0296630859375,.416015625,.49609375,-.1357421875,-.072265625,-.302734375,-.1728515625,.2578125,-.259765625,-.2177734375,.208984375,.028564453125,.1640625,.83984375,-.042724609375,-.0184326171875,.55859375,-.41796875,-.345703125,.162109375,.185546875,-.5078125,-.25390625]],["1643799063",[-.345703125,-.1650390625,.375,-.041748046875,
--.1962890625,.51953125,.318359375,.08056640625,-.06396484375,-.004486083984375,.447265625,.486328125,-.197265625,-.0888671875,-.3203125,-.166015625,.234375,-.2431640625,-.2041015625,.1826171875,.01495361328125,.2216796875,.84765625,-.029052734375,-.044921875,.53125,-.431640625,-.4609375,.2578125,.1494140625,-.5859375,-.115234375]]],null,null,null,null,[[null,[176.8618621826172,1],[1,2],[1,1],null,3]]],[null,[[2,0,null,["PubPolicy1"]]]],"608936333",null,null,null,[[2,1,7]],[[2,1,5]]]]],"1j475122041":[[["60795725037",
-"306664789872",null,[[["1643849995",[3.421875,1.78125,1.6796875,.048095703125,2.796875,-1.3984375,-1.703125,-3.5625,1.328125,3.796875,2.265625,1.5,5.125,-.80078125,-1.8515625,1.1796875,2.203125,-4.53125,-2.78125,3.5625,-2.265625,1.6796875,-.76171875,-2.8125,-5.09375,1.5078125,-4.5,.59375,3.609375,1.359375,-4.78125,4.375]],["1643804092",[3.40625,1.75,1.6640625,.0306396484375,2.75,-1.3828125,-1.6875,-3.53125,1.3125,3.78125,2.25,1.4765625,5.09375,-.79296875,-1.828125,1.171875,2.171875,-4.53125,-2.765625,
-3.5625,-2.25,1.6640625,-.73046875,-2.84375,-5.0625,1.4765625,-4.5,.56640625,3.609375,1.3203125,-4.75,4.34375]]],null,[["1643822293",[1.2734375,1.0859375,.298828125,.09619140625,.10107421875,-.09375,-.52734375,-.953125,-.1259765625,-.5078125,-.1611328125,-.498046875,-1.3515625,-.412109375,.94140625,-.33984375,-.578125,.2578125,.47265625,-.478515625,.255859375,-.1005859375,-.06396484375,.166015625,-.9765625,.029541015625,.314453125,.0106201171875,.74609375,-.38671875,.83984375,.75390625]],["1643799063",
-[1.3046875,1.0625,.3828125,.06201171875,.1142578125,-.046875,-.52734375,-.94921875,-.134765625,-.56640625,-.08740234375,-.439453125,-1.3671875,-.4296875,1.046875,-.33203125,-.5625,.2734375,.50390625,-.54296875,.1728515625,-.123046875,-.0233154296875,.1962890625,-1.0546875,.05859375,.318359375,-.0537109375,.8125,-.423828125,.79296875,.953125]]],null,null,null,null,[[null,[61170.82421875,1],[1,2],[1,1],null,3]]],[null,[[3,0,null,["AdvControlbrand-unsafe"]]]],"1614272341"]]]};function tb(a,b){return!b||0>=b?a:Math.min(a,b)}function T(a,b,c){return b?b:c?c:a?1:0}function ub(a){a=null==a?void 0:I(a,9,0);return void 0===a?!1:[61,51,52].includes(a)};var U=function(a){S.call(this,a,-1,vb)};t(U,S);var vb=[2];var wb=function(a){S.call(this,a)};t(wb,S);var yb=function(a){S.call(this,a,-1,xb)};t(yb,S);yb.prototype.ca=function(){return O(this,wb,3)};var xb=[2,3];var Ab=function(a){S.call(this,a,-1,zb)};t(Ab,S);var Cb=function(a){S.call(this,a,-1,Bb)};t(Cb,S);var Eb=function(a){S.call(this,a,-1,Db)};t(Eb,S);Eb.prototype.ca=function(){return O(this,wb,5)};var zb=[1,2],Bb=[3,4],Db=[3,4,5];var Gb=function(a){S.call(this,a,-1,Fb)};t(Gb,S);var W=function(a){return N(a,Hb,3)},Jb=function(a){S.call(this,a,-1,Ib)};t(Jb,S);Jb.prototype.Y=function(){return O(this,U,2)};Jb.prototype.ma=function(){return O(this,U,3)};var Kb=function(a){S.call(this,a)};t(Kb,S);Kb.prototype.u=function(){return P(this,1)};Kb.prototype.v=function(){return P(this,2)};Kb.prototype.da=function(){return L(this,3)};var Hb=function(a){S.call(this,a)};t(Hb,S);var X=function(a){S.call(this,a)};t(X,S);
-var Y=function(a){S.call(this,a)};t(Y,S);var Nb=function(a){var b=new Y;return M(b,1,a)},Z=function(a){S.call(this,a)};t(Z,S);Z.prototype.u=function(){return P(this,2)};Z.prototype.v=function(){return P(this,3)};Z.prototype.W=function(){return P(this,4)};Z.prototype.da=function(){return L(this,5)};var Fb=[2],Ib=[1,2,3];function Ob(a,b,c){if(!b||0>=b)return{l:0,P:1};var d=T(!0,null==a?void 0:L(a,1),null==c?void 0:L(c,1)),e=T(!1,null==a?void 0:L(a,2),null==c?void 0:L(c,2)),g=T(!1,null==a?void 0:L(a,3),null==c?void 0:L(c,3)),f,h;a=T(!1,null==a?void 0:null==(f=N(a,Y,5))?void 0:L(f,1),null==c?void 0:null==(h=N(c,Y,5))?void 0:L(h,1));c=new X;f=M(c,1,d);f=M(f,2,e);f=M(f,3,g);h=Nb(a);cb(f,Y,5,h);return{l:b*d*(1-1/(1+Math.exp(-e*(Math.log(b/1E6)-a-g)))),P:4,sa:c}};function Pb(a,b){var c=null==a?void 0:N(a,X,6),d,e=null==a?void 0:null==(d=W(a))?void 0:N(d,X,3);if(!b||0>=b)return{l:0,P:1};var g;if(!(null==a?0:null==(g=W(a))?0:J(g,2)))return{l:.85*b,P:2};d=T(!0,null==c?void 0:L(c,4),null==e?void 0:L(e,4));g=T(!0,null==c?void 0:L(c,1),null==e?void 0:L(e,1));var f=T(!1,null==c?void 0:L(c,2),null==e?void 0:L(e,2)),h=T(!1,null==c?void 0:L(c,3),null==e?void 0:L(e,3)),k,l;c=T(!1,null==c?void 0:null==(k=N(c,Y,5))?void 0:L(k,1),null==e?void 0:null==(l=N(e,Y,5))?void 0:
-L(l,1));k=new X;l=M(k,1,g);l=M(l,2,f);l=M(l,3,h);l=M(l,4,d);var m=Nb(c);cb(l,Y,5,m);d=d*b*g*(1-1/(1+Math.exp(-f*(Math.log(d*b/1E6)-c-h))));g=1E6*(null==a?NaN:L(a,8));var p;if((null==a?0:null==(p=W(a))?0:J(p,6))&&d<g&&g<b){var y;d=g+1E6*(null!=(y=null==e?void 0:L(e,7))?y:0)*Math.log(b/g)}return{l:d,P:3,sa:k}};function Qb(a,b){if(!(0<G(a,2).length&&G(a,2).length===F(a,3).length&&G(a,2).length===G(a,4).length))return 0;for(var c=0,d=0,e=1,g=r(F(a,3)),f=g.next();!f.done;f=g.next()){var h=0;switch(f.value){case 1:h=G(a,2)[d]*(b.ea?Math.pow(b.ea,G(a,4)[d]):0);break;case 2:c=h=G(a,2)[d]*(b.oa?Math.pow(b.oa,G(a,4)[d]):0);break;case 3:h=G(a,2)[d]}if(0===h)return 0;e*=h;d+=1}0<L(a,7)&&(e=Math.min(e,L(a,7)*c*1E3));return 1E6*e}
-function Rb(a,b){var c=0;b&&(0<O(b,Sb,7).length?c=Qb(O(b,Sb,7)[0],a):0<O(b,Sb,8).length&&(c=Qb(O(b,Sb,8)[0],a)));return c};function Tb(a,b,c){if(I(a,2,0)!==I(b,2,0))return c;var d=!1;switch(I(a,2,0)){case 1:a:{var e,g=new Set(null!=(e=F(a,3))?e:[]);b=r(F(b,3));for(e=b.next();!e.done;e=b.next())if(g.has(e.value)){d=!0;break a}d=!1}break;case 0:a:{e=new Set(null!=(g=F(a,4))?g:[]);b=r(F(b,4));for(g=b.next();!g.done;g=b.next())if(e.has(g.value)){d=!0;break a}d=!1}break;case 2:b=new Ub(b),d=(e=N(a,yb,5))?Vb(b,e):!1}return J(a,6)?d?null:c:d?c:null}
-function Vb(a,b){var c=I(b,1,0),d=b.ca(),e=O(b,yb,2);switch(c){case 2:c=d.every(function(g){return Wb(a,g)})&&e.every(function(g){return Vb(a,g)});break;case 1:c=d.some(function(g){return Wb(a,g)})||e.some(function(g){return Vb(a,g)});break;default:throw Error("unexpected value "+c+"!");}return J(b,4)?!c:c}
-var Ub=function(a){this.ga=new Map;a=r(a.ca());for(var b=a.next();!b.done;b=a.next()){var c=b.value;b=I(c,1,0);c=I(c,2,0);var d=this.ga.get(b);d||(d=new Set,this.ga.set(b,d));d.add(c)}},Wb=function(a,b){var c=I(b,2,0);return(a=a.ga.get(I(b,1,0)))?a.has(c):!1};function Xb(a,b){a=r((null==b?void 0:b.get(a))||[]);for(b=a.next();!b.done;b=a.next())if(b=b.value,b.count+1>b.xa)return!1;return!0};function Yb(a,b){return null==a.na?!0:!a.na.some(function(c){var d;return null==(d=b.Ba)?void 0:d.includes(c,0)})};var Zb=function(a){S.call(this,a)};t(Zb,S);n=Zb.prototype;n.u=function(){return P(this,1)};n.v=function(){return P(this,2)};n.W=function(){return P(this,3)};n.V=function(){return P(this,4)};n.U=function(){return P(this,5)};n.X=function(){return P(this,6)};var ac=function(a){S.call(this,a,-1,$b)};t(ac,S);var $b=[1];function bc(a,b){var c=!0;c=void 0===c?!1:c;return cc(0,(null==a?void 0:O(a,U,1))||[],(null==b?void 0:O(b,U,1))||[],c)}function dc(a,b){var c=!0;c=void 0===c?!1:c;return cc(1,(null==a?void 0:a.Y())||[],(null==b?void 0:b.Y())||[],c)}function ec(a,b){var c=!0;c=void 0===c?!1:c;return cc(1,(null==a?void 0:a.ma())||[],(null==b?void 0:b.Y())||[],c)}
-function cc(a,b,c,d){var e=0,g=new Map;b=r(b);for(var f=b.next();!f.done;f=b.next())e=f.value,g.set(I(e,1,""),e),e=L(e,3);b=null;c=r(c);for(f=c.next();!f.done;f=c.next()){var h=f.value;e=L(h,3);if(f=d?g.values().next().value:g.get(I(h,1,""))){a:{b=a;f=G(f,2);h=G(h,2);if(f.length===h.length){for(var k=0,l=0;l<f.length;l++)k+=f[l]*h[l];f=k}else f=void 0;if(void 0!==f)switch(b){case 0:b=1/(1+Math.exp(-1*f));break a;case 1:b=Math.exp(f);break a}b=void 0}if(void 0!==b)return b;b=e}}var m;return null!=
-(m=b)?m:e};var fc=function(a){S.call(this,a)};t(fc,S);function gc(a,b,c){"0"===a||c.has(a)||c.set(a,b.filter(function(d){return 0<I(d,3,0)}).map(function(d){var e=I(d,3,0);switch(I(d,1,0)){case 6:d=60*I(d,2,0);break;case 1:d=3600*I(d,2,0);break;case 2:d=86400*I(d,2,0);break;case 3:d=604800*I(d,2,0);break;case 4:d=2592E3*I(d,2,0);break;case 5:d=null;break;default:e=d=0}return{pa:d,xa:e,count:0}}))}function hc(a,b,c){if(b=c.get(b))for(b=r(b),c=b.next();!c.done;c=b.next())c=c.value,(null===c.pa||a.Aa<=c.pa)&&c.count++};var Sb=function(a){S.call(this,a,-1,ic)};t(Sb,S);var ic=[2,3,4];var kc=function(a){S.call(this,a,-1,jc)};t(kc,S);kc.prototype.Y=function(){return O(this,U,3)};kc.prototype.ma=function(){return O(this,U,10)};var jc=[1,3,10,7,8];var mc=function(a){S.call(this,a,-1,lc)};t(mc,S);n=mc.prototype;n.u=function(){return P(this,1)};n.v=function(){return P(this,2)};n.W=function(){return P(this,3)};n.V=function(){return P(this,6)};n.U=function(){return P(this,7)};n.X=function(){return P(this,8)};var lc=[9,10,11,12,13,14];var oc=function(a){S.call(this,a,-1,nc)};t(oc,S);var nc=[1];var qc=function(a){S.call(this,a,-1,pc)};t(qc,S);var pc=[1];var rc={ad:{},bid:0,render:""};function sc(){new qc;return function(a,b,c,d,e){return tc(a,c,d,e)}}
-function tc(a,b,c,d){b=b?new Gb(nb(b)):void 0;var e,g;if(!b||!(O(b,Kb,2).length||(null==(e=W(b))?0:J(e,1))||(null==(g=W(b))?0:J(g,5))))return rc;e=new ac(nb(a.userBiddingSignals));g=a.ads.map(function(f){return{renderUrl:f.renderUrl,metadata:new Zb(nb(f.metadata))}});c=c[a.name]?new oc(nb(c[a.name])):void 0;d=d.prevWins.map(function(f){return{Aa:f[0],I:new Zb(nb(f[1].metadata))}});return uc(a.name,e,g,d,c,b)}
-function uc(a,b,c,d,e,g){var f,h={Ja:null!=(f=null==g?void 0:W(g))?f:void 0,T:new Map,O:new Map,R:new Map,S:new Map,Z:new Map,interestGroupName:null!=a?a:void 0};a=new Map;if(e){e=r(O(e,mc,1));for(f=e.next();!f.done;f=e.next())f=f.value,a.set(f.u().concat("+",f.v(),"+",f.W()),f),gc(f.v(),O(f,fc,9),h.T),gc(f.u(),O(f,fc,10),h.O),gc(f.V(),O(f,fc,11),h.R),gc(f.U(),O(f,fc,12),h.S),gc(f.X(),O(f,fc,13),h.Z);d=r(d);for(e=d.next();!e.done;e=d.next())e=e.value,h.T&&hc(e,e.I.v(),h.T),h.O&&hc(e,e.I.u(),h.O),
-h.R&&hc(e,e.I.V(),h.R),h.S&&hc(e,e.I.U(),h.S),h.Z&&hc(e,e.I.X(),h.Z)}e=new Map;if(g)for(d=r(O(g,Kb,2)),f=d.next();!f.done;f=d.next())f=f.value,e.set(f.u().concat("+",f.v(),"+",""),f.da());d=[];c=r(c);for(f=c.next();!f.done;f=c.next()){f=f.value;f={renderUrl:f.renderUrl,H:f.metadata.u(),K:f.metadata.v(),ka:f.metadata.W(),ja:f.metadata.V(),ia:f.metadata.U(),la:f.metadata.X(),i:0,J:0};var k=f.H.concat("+",f.K,"+",f.ka);f.aa=e.get(f.H.concat("+",f.K,"+",""));if(!f.aa){var l=void 0,m=void 0,p=void 0,y=
-void 0;if(!(null==(l=g)?0:null==(m=W(l))?0:J(m,1))&&!(null==(p=g)?0:null==(y=W(p))?0:J(y,5)))continue;else if(!a.get(k))continue;m=l=void 0;f.o=null!=(m=null==(l=a.get(k))?void 0:N(l,kc,4))?m:void 0}m=l=void 0;f.ha=null!=(m=null==(l=a.get(k))?void 0:N(l,Ab,5))?m:void 0;m=l=void 0;f.na=null!=(m=null==(l=a.get(k))?void 0:F(l,14))?m:void 0;d.push(f)}if(c=null==g?void 0:N(g,Ab,5)){a=new Map;e=new Map;f=r(O(c,Cb,1));for(k=f.next();!k.done;k=f.next())k=k.value,a.set(I(k,1,0),k);c=r(O(c,Eb,2));for(f=c.next();!f.done;f=
-c.next())f=f.value,e.set(I(f,1,0),f);h.ta=a;h.ua=e}var H;h.Ba=null!=(H=F(b,1))?H:void 0;b=[];H=new Map;a=r(d);for(d=a.next();!d.done;d=a.next())if(d=d.value,e=h,!(!Xb(d.K,e.T)||!Xb(d.H,e.O)||d.ja&&!Xb(d.ja,e.R)||d.ia&&!Xb(d.ia,e.S)||d.la&&!Xb(d.la,e.Z))){if(d.ha){c=h;e=c.ta;c=c.ua;f=d.ha;if(e&&c&&f)a:{k=r(O(f,Cb,1));for(l=k.next();!l.done;l=k.next()){p=l.value;y=I(p,1,0);var da=c.get(y);if(da){if(J(p,7)){l=H.get(y);m=I(p,8,0);if(void 0===l)l=new Map,H.set(y,l);else{var na=l.get(m);if(void 0!==na){e=
-na;break a}}p=Tb(p,da,y);l.set(m,p)}else p=Tb(p,da,y);if(p){e=p;break a}}}c=r(O(f,Eb,2));for(f=c.next();!f.done;f=c.next())if(f=f.value,k=I(f,1,0),l=e.get(k))if(f=Tb(l,f,k)){e=f;break a}e=null}else e=null;if(e)continue}Yb(d,h)&&b.push(d)}return vc({ads:b,ya:h},g).bidResponse}
-function vc(a,b){for(var c=[],d=[],e=r(a.ads),g=e.next();!g.done;g=e.next()){g=g.value;var f=void 0,h=void 0;if(null==(f=b)?0:null==(h=W(f))?0:J(h,7)){var k=h=f=void 0,l=void 0,m=void 0,p=void 0;g.H===(null==(f=b)?void 0:null==(h=N(f,Z,16))?void 0:h.u())&&g.K===(null==(k=b)?void 0:null==(l=N(k,Z,16))?void 0:l.v())&&a.ya.interestGroupName===(null==(m=b)?void 0:null==(p=N(m,Z,16))?void 0:I(p,1,""))?(k=h=f=void 0,l=null!=(k=null==(f=b)?void 0:null==(h=N(f,Z,16))?void 0:h.da())?k:0,g.i=0===l?1E9:l):g.i=
-0}else if(null!=g.aa){g.i=g.aa;c.push(g);continue}else if(h=f=void 0,null==(f=b)?0:null==(h=W(f))?0:J(h,1))ub(g.o)?(f=void 0,g.ea=ec(null==(f=b)?void 0:N(f,Jb,1),g.o)):(f=void 0,g.oa=bc(null==(f=b)?void 0:N(f,Jb,1),g.o),f=void 0,g.ea=dc(null==(f=b)?void 0:N(f,Jb,1),g.o)),g.i=Rb(g,g.o),g.i||(h=f=void 0,g.i=null!=(h=null==(f=g.o)?void 0:L(f,6))?h:0);else if(h=f=void 0,null==(f=b)?0:null==(h=W(f))?0:J(h,5))h=f=void 0,g.i=null!=(h=null==(f=g.o)?void 0:L(f,6))?h:0;d.push(g)}c={renderUrl:"",H:"",K:"",ka:"",
-i:0,J:0};var y;if(null==b?0:null==(y=W(b))?0:J(y,7))b=a.ads.reduce(function(V,K){return V.i<K.i?K:V},c),b.J=b.i;else{y=a.ads.reduce(function(V,K){return!ub(K.o)&&V.i<K.i?K:V},c);c=a.ads.reduce(function(V,K){return ub(K.o)&&V.i<K.i?K:V},c);a=Pb(b,null==y?void 0:y.i);var H,da;a.l=tb(a.l,null==b?void 0:null==(H=W(b))?void 0:null==(da=N(H,X,3))?void 0:L(da,6));var na;H=Ob(null==b?void 0:N(b,X,7),null==c?void 0:c.i,null==b?void 0:null==(na=W(b))?void 0:N(na,X,4));var Lb,Mb;H.l=tb(H.l,null==b?void 0:null==
-(Lb=W(b))?void 0:null==(Mb=N(Lb,X,4))?void 0:L(Mb,6));a.l>H.l?(b=y,b.J=a.l):(b=c,b.J=H.l)}return{bidResponse:{ad:{},bid:b.J,render:b.renderUrl},debugInfo:void 0}};var wc=function(a){var b={maxFloorCpmUsdMicros:"6250"},c={topWindowHostname:"www.cnn.com",seller:"https://pubads.g.doubleclick.net",joinCount:7,bidCount:0,prevWins:[]},d=sc();return function(){return d(a,b,rb,sb,c)}};
-
-function generateBid(interestGroups){for(var a=[],b=Date.now(),c=r(interestGroups),d=c.next();!d.done;d=c.next()){var e={generateBidTime:0,success:!1},g=wc(d.value);d=Date.now();g=g();e.generateBidTime=Date.now()-d;e.success=JSON.stringify(g)===JSON.stringify({ad:{},bid:2937687.988333709,render:"https://googleads.g.doubleclick.net/ads/simple-ad.html?adg_id=52836427830&cr_id=310927197294&cv_id=4"});e.bidResponse=g;a.push(e)}a.push({generateBidTime:Date.now()-b,success:!0});return a;}
diff --git a/apct-tests/perftests/rubidium/src/android/rubidium/js/JSScriptEnginePerfTests.java b/apct-tests/perftests/rubidium/src/android/rubidium/js/JSScriptEnginePerfTests.java
deleted file mode 100644
index fc3738c..0000000
--- a/apct-tests/perftests/rubidium/src/android/rubidium/js/JSScriptEnginePerfTests.java
+++ /dev/null
@@ -1,616 +0,0 @@
-/*
- * Copyright (C) 2022 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.rubidium.js;
-
-import static com.android.adservices.service.js.JSScriptArgument.arrayArg;
-import static com.android.adservices.service.js.JSScriptArgument.jsonArg;
-import static com.android.adservices.service.js.JSScriptArgument.numericArg;
-import static com.android.adservices.service.js.JSScriptArgument.recordArg;
-import static com.android.adservices.service.js.JSScriptArgument.stringArg;
-import static com.android.adservices.service.js.JSScriptArgument.stringArrayArg;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.junit.Assume.assumeTrue;
-
-import android.adservices.adselection.AdSelectionConfig;
-import android.adservices.adselection.AdWithBid;
-import android.adservices.common.AdData;
-import android.adservices.common.AdSelectionSignals;
-import android.adservices.common.AdTechIdentifier;
-import android.annotation.SuppressLint;
-import android.content.Context;
-import android.net.Uri;
-import android.perftests.utils.BenchmarkState;
-import android.perftests.utils.PerfStatusReporter;
-import android.util.Log;
-
-import androidx.annotation.NonNull;
-import androidx.test.core.app.ApplicationProvider;
-import androidx.test.filters.MediumTest;
-import androidx.test.runner.AndroidJUnit4;
-
-import com.android.adservices.LoggerFactory;
-import com.android.adservices.data.adselection.CustomAudienceSignals;
-import com.android.adservices.service.adselection.AdCounterKeyCopier;
-import com.android.adservices.service.adselection.AdCounterKeyCopierNoOpImpl;
-import com.android.adservices.service.adselection.AdDataArgumentUtil;
-import com.android.adservices.service.adselection.AdSelectionConfigArgumentUtil;
-import com.android.adservices.service.adselection.AdWithBidArgumentUtil;
-import com.android.adservices.service.adselection.CustomAudienceBiddingSignalsArgumentUtil;
-import com.android.adservices.service.adselection.CustomAudienceScoringSignalsArgumentUtil;
-import com.android.adservices.service.common.NoOpRetryStrategyImpl;
-import com.android.adservices.service.js.IsolateSettings;
-import com.android.adservices.service.js.JSScriptArgument;
-import com.android.adservices.service.js.JSScriptArrayArgument;
-import com.android.adservices.service.js.JSScriptEngine;
-import com.android.adservices.service.js.JSScriptRecordArgument;
-import com.android.adservices.service.profiling.JSScriptEngineLogConstants;
-import com.android.adservices.service.profiling.Profiler;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.util.concurrent.ListenableFuture;
-
-import org.json.JSONArray;
-import org.json.JSONObject;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.charset.StandardCharsets;
-import java.time.Clock;
-import java.time.Duration;
-import java.time.Instant;
-import java.time.ZoneOffset;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Random;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.TimeUnit;
-import java.util.stream.Collectors;
-import java.util.stream.IntStream;
-
-/** To run the unit tests for this class, run "atest RubidiumPerfTests:JSScriptEnginePerfTests" */
-@MediumTest
-@RunWith(AndroidJUnit4.class)
-public class JSScriptEnginePerfTests {
- private static final String TAG = JSScriptEngine.TAG;
- private static final Context sContext = ApplicationProvider.getApplicationContext();
- private static final ExecutorService sExecutorService = Executors.newFixedThreadPool(10);
-
- private static final LoggerFactory.Logger sLogger = LoggerFactory.getFledgeLogger();
- private static final JSScriptEngine sJSScriptEngine =
- JSScriptEngine.getInstanceForTesting(
- sContext, Profiler.createInstance(JSScriptEngine.TAG), sLogger);
- private static final Clock CLOCK = Clock.fixed(Instant.now(), ZoneOffset.UTC);
- private static final Instant ACTIVATION_TIME = CLOCK.instant();
- private static final Instant EXPIRATION_TIME = CLOCK.instant().plus(Duration.ofDays(1));
- private static final AdSelectionSignals CONTEXTUAL_SIGNALS = AdSelectionSignals.EMPTY;
- private static final AdCounterKeyCopier AD_COUNTER_KEY_COPIER_NO_OP =
- new AdCounterKeyCopierNoOpImpl();
-
- private final AdDataArgumentUtil mAdDataArgumentUtil =
- new AdDataArgumentUtil(AD_COUNTER_KEY_COPIER_NO_OP);
- private final AdWithBidArgumentUtil mAdWithBidArgumentUtil =
- new AdWithBidArgumentUtil(mAdDataArgumentUtil);
-
- @Rule
- public PerfStatusReporter mPerfStatusReporter = new PerfStatusReporter();
-
- @Before
- public void before() throws Exception {
- // Warm up the sandbox env.
- callJSEngine(
- "function test() { return \"hello world\";" + " }", ImmutableList.of(), "test");
- }
-
- @After
- public void after() {
- sJSScriptEngine.shutdown();
- }
-
- @Test
- public void evaluate_helloWorld() throws Exception {
- BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
- while (state.keepRunning()) {
- String res =
- callJSEngine(
- "function test() { return \"hello world\";" + " }",
- ImmutableList.of(),
- "test");
- assertThat(res).isEqualTo("\"hello world\"");
- }
- }
-
- @Test
- public void evaluate_emptyGenerateBid() throws Exception {
- BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
- state.pauseTiming();
-
- InputStream testJsInputStream = sContext.getAssets().open("empty_generate_bid.js");
- String jsTestFile = new String(testJsInputStream.readAllBytes(), StandardCharsets.UTF_8);
- JSScriptArgument adDataArgument =
- recordArg(
- "ad",
- stringArg("render_url", "http://google.com"),
- recordArg("metadata", numericArg("input", 10)));
- callJSEngine(jsTestFile, ImmutableList.of(adDataArgument), "generateBid");
-
- state.resumeTiming();
- while (state.keepRunning()) {
- callJSEngine(jsTestFile, ImmutableList.of(adDataArgument), "generateBid");
- }
- }
-
- @Test
- public void evaluate_turtledoveSampleGenerateBid() throws Exception {
- BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
- state.pauseTiming();
-
- InputStream testJsInputStream = sContext.getAssets().open("turtledove_generate_bid.js");
- String jsTestFile = new String(testJsInputStream.readAllBytes(), StandardCharsets.UTF_8);
- // Initialize the environment with one call.
- callJSEngine(jsTestFile, ImmutableList.of(), "generateBid");
-
- state.resumeTiming();
- while (state.keepRunning()) {
- callJSEngine(jsTestFile, ImmutableList.of(), "generateBid");
- }
- }
-
- @Test
- public void evaluate_turtledoveSampleGenerateBid_parametrized_10Ads() throws Exception {
- runParametrizedTurtledoveScript(10);
- }
-
- @Test
- public void evaluate_turtledoveSampleGenerateBid_parametrized_25Ads() throws Exception {
- runParametrizedTurtledoveScript(25);
- }
-
- @Test
- public void evaluate_turtledoveSampleGenerateBid_parametrized_50Ads() throws Exception {
- runParametrizedTurtledoveScript(50);
- }
-
- @Test
- public void evaluate_turtledoveSampleGenerateBid_parametrized_75Ads() throws Exception {
- runParametrizedTurtledoveScript(75);
- }
-
- @Test
- public void evaluate_rubidiumGenerateBid_parametrized_1Ad() throws Exception {
- runParameterizedRubidiumGenerateBid(1);
- }
-
- @Test
- public void evaluate_rubidiumGenerateBid_parametrized_10Ads() throws Exception {
- runParameterizedRubidiumGenerateBid(10);
- }
-
- @Test
- public void evaluate_rubidiumGenerateBid_parametrized_25Ads() throws Exception {
- runParameterizedRubidiumGenerateBid(25);
- }
-
- @Test
- public void evaluate_rubidiumGenerateBid_parametrized_50Ads() throws Exception {
- runParameterizedRubidiumGenerateBid(50);
- }
-
- @Test
- public void evaluate_rubidiumGenerateBid_parametrized_75Ads() throws Exception {
- runParameterizedRubidiumGenerateBid(75);
- }
-
- @Test
- public void evaluate_rubidiumScoreAd_parametrized_1Ad() throws Exception {
- runParameterizedRubidiumScoreAd(1);
- }
-
- @Test
- public void evaluate_rubidiumScoreAd_parametrized_10Ads() throws Exception {
- runParameterizedRubidiumScoreAd(10);
- }
-
- @Test
- public void evaluate_rubidiumScoreAd_parametrized_25Ads() throws Exception {
- runParameterizedRubidiumScoreAd(25);
- }
-
- @Test
- public void evaluate_rubidiumScoreAd_parametrized_50Ads() throws Exception {
- runParameterizedRubidiumScoreAd(50);
- }
-
- @Test
- public void evaluate_rubidiumScoreAd_parametrized_75Ads() throws Exception {
- runParameterizedRubidiumScoreAd(75);
- }
-
- @SuppressLint("DefaultLocale")
- private void runParametrizedTurtledoveScript(int numAds) throws Exception {
- BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
- state.pauseTiming();
- InputStream testJsInputStream =
- sContext.getAssets().open("turtledove_parametrized_generateBid.js");
- String jsTestFile = new String(testJsInputStream.readAllBytes(), StandardCharsets.UTF_8);
-
- state.resumeTiming();
- while (state.keepRunning()) {
- int numInterestGroups = 1;
- String res =
- callJSEngine(
- sJSScriptEngine,
- jsTestFile,
- ImmutableList.of(
- buildSampleInterestGroupArg(numInterestGroups, numAds)),
- "generateBid");
-
- // I modified the Turtledove script to have the total execution time
- // (across all IGs) as the last element in the response array.
- JSONArray obj = new JSONArray(res);
- long webviewExecTime = obj.getJSONObject(obj.length() - 1).getLong("generateBidTime");
- String webviewExecTimeLog =
- String.format(
- "(%s: %d)",
- JSScriptEngineLogConstants.WEBVIEW_EXECUTION_TIME, webviewExecTime);
- // The listener picks up logs from JSScriptEngine, so simulate logging from there.
- Log.d(TAG, webviewExecTimeLog);
- }
- }
-
- private JSScriptArrayArgument<JSScriptRecordArgument> buildSampleInterestGroupArg(
- int numCustomAudiences, int numAds) {
- JSScriptRecordArgument ad =
- recordArg(
- "foo",
- ImmutableList.of(
- stringArg(
- "renderUrl",
- "https://googleads.g.doubleclick.net/ads/simple-ad"
- + ".html?adg_id=52836427830&cr_id=310927197297"
- + "&cv_id=4"),
- stringArrayArg(
- "metadata",
- ImmutableList.of(
- "52836427830", "310927197297", "4", "608936333"))));
-
- JSScriptRecordArgument interestGroupArg =
- recordArg(
- "foo",
- stringArg("owner", "https://googleads.g.doubleclick.net/"),
- stringArg("name", "1j115753478"),
- stringArg("biddingLogicUrl", "https://googleads.g.doubleclick.net/td/bjs"),
- stringArg(
- "dailyUpdateUrl", "https://googleads.g.doubleclick.net/td/update"),
- stringArg(
- "trustedBiddingSignalsUrl",
- "https://googleads.g.doubleclick.net/td/sjs"),
- stringArrayArg(
- "trustedBiddingSignalsKeys", ImmutableList.of("1j115753478")),
- stringArrayArg("userBiddingSignals", ImmutableList.of()),
- new JSScriptArrayArgument("ads", Collections.nCopies(numAds, ad)));
-
- return arrayArg("foo", Collections.nCopies(numCustomAudiences, interestGroupArg));
- }
-
- @Test
- public void evaluate_turtledoveWasm() throws Exception {
- assumeTrue(sJSScriptEngine.isWasmSupported().get(3, TimeUnit.SECONDS));
-
- BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
- state.pauseTiming();
-
- String jsTestFile = readAsset("generate_bid_using_wasm.js");
- byte[] wasmTestFile = readBinaryAsset("generate_bid.wasm");
- JSScriptArgument[] inputBytes = new JSScriptArgument[200];
- Random rand = new Random();
- for (int i = 0; i < inputBytes.length; i++) {
- byte value = (byte) (rand.nextInt(2 * Byte.MAX_VALUE) - Byte.MIN_VALUE);
- inputBytes[i] = JSScriptArgument.numericArg("_", value);
- }
- JSScriptArgument adDataArgument =
- recordArg(
- "ad",
- stringArg("render_url", "http://google.com"),
- recordArg("metadata", JSScriptArgument.arrayArg("input", inputBytes)));
-
- state.resumeTiming();
- while (state.keepRunning()) {
- callJSEngine(jsTestFile, wasmTestFile, ImmutableList.of(adDataArgument), "generateBid");
- }
- }
-
- private String callJSEngine(
- @NonNull String jsScript,
- @NonNull List<JSScriptArgument> args,
- @NonNull String functionName)
- throws Exception {
- return callJSEngine(sJSScriptEngine, jsScript, args, functionName);
- }
-
- private String callJSEngine(
- @NonNull String jsScript,
- @NonNull byte[] wasmScript,
- @NonNull List<JSScriptArgument> args,
- @NonNull String functionName)
- throws Exception {
- return callJSEngine(sJSScriptEngine, jsScript, wasmScript, args, functionName);
- }
-
- private static String callJSEngine(
- @NonNull JSScriptEngine jsScriptEngine,
- @NonNull String jsScript,
- @NonNull List<JSScriptArgument> args,
- @NonNull String functionName)
- throws Exception {
- CountDownLatch resultLatch = new CountDownLatch(1);
- ListenableFuture<String> futureResult =
- callJSEngineAsync(jsScriptEngine, jsScript, args, functionName, resultLatch);
- resultLatch.await();
- return futureResult.get();
- }
-
- private String callJSEngine(
- @NonNull JSScriptEngine jsScriptEngine,
- @NonNull String jsScript,
- @NonNull byte[] wasmScript,
- @NonNull List<JSScriptArgument> args,
- @NonNull String functionName)
- throws Exception {
- CountDownLatch resultLatch = new CountDownLatch(1);
- ListenableFuture<String> futureResult =
- callJSEngineAsync(
- jsScriptEngine, jsScript, wasmScript, args, functionName, resultLatch);
- resultLatch.await();
- return futureResult.get();
- }
-
- private static ListenableFuture<String> callJSEngineAsync(
- @NonNull String jsScript,
- @NonNull List<JSScriptArgument> args,
- @NonNull String functionName,
- @NonNull CountDownLatch resultLatch) {
- return callJSEngineAsync(sJSScriptEngine, jsScript, args, functionName, resultLatch);
- }
-
- private static ListenableFuture<String> callJSEngineAsync(
- @NonNull JSScriptEngine engine,
- @NonNull String jsScript,
- @NonNull List<JSScriptArgument> args,
- @NonNull String functionName,
- @NonNull CountDownLatch resultLatch) {
- Objects.requireNonNull(engine);
- Objects.requireNonNull(resultLatch);
- ListenableFuture<String> result = engine.evaluate(
- jsScript,
- args,
- functionName,
- IsolateSettings.forMaxHeapSizeEnforcementDisabled(),
- new NoOpRetryStrategyImpl());
- result.addListener(resultLatch::countDown, sExecutorService);
- return result;
- }
-
- private ListenableFuture<String> callJSEngineAsync(
- @NonNull JSScriptEngine engine,
- @NonNull String jsScript,
- @NonNull byte[] wasmScript,
- @NonNull List<JSScriptArgument> args,
- @NonNull String functionName,
- @NonNull CountDownLatch resultLatch) {
- Objects.requireNonNull(engine);
- Objects.requireNonNull(resultLatch);
- ListenableFuture<String> result = engine.evaluate(
- jsScript,
- wasmScript,
- args,
- functionName,
- IsolateSettings.forMaxHeapSizeEnforcementDisabled(),
- new NoOpRetryStrategyImpl());
- result.addListener(resultLatch::countDown, sExecutorService);
- return result;
- }
-
- private byte[] readBinaryAsset(@NonNull String assetName) throws IOException {
- return sContext.getAssets().open(assetName).readAllBytes();
- }
-
- private String readAsset(@NonNull String assetName) throws IOException {
- return new String(readBinaryAsset(assetName), StandardCharsets.UTF_8);
- }
-
- public void runParameterizedRubidiumGenerateBid(int numOfAds) throws Exception {
- BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
- state.pauseTiming();
- List<AdData> adDataList = getSampleAdDataList(numOfAds, "https://ads.example/");
- ImmutableList.Builder<JSScriptArgument> adDataListArgument = new ImmutableList.Builder<>();
- for (AdData adData : adDataList) {
- adDataListArgument.add(mAdDataArgumentUtil.asScriptArgument("ignored", adData));
- }
- AdSelectionSignals perBuyerSignals = generatePerBuyerSignals(numOfAds);
- AdSelectionSignals auctionSignals = AdSelectionSignals.fromString("{\"auctionSignal1"
- + "\":\"auctionValue1\",\"auctionSignal2\":\"auctionValue2\"}");
-
- AdTechIdentifier buyer = AdTechIdentifier.fromString("https://example-dsp.com");
- AdSelectionSignals trustedBiddingSignals = AdSelectionSignals.fromString("{\"key1"
- + "\":\"tbs1\",\"key2\":{}}");
- CustomAudienceSignals customAudienceSignals = getSampleCustomAudienceSignals(buyer,
- "shoes-running");
-
- ImmutableList<JSScriptArgument> args = ImmutableList.<JSScriptArgument>builder()
- .add(arrayArg("ads", adDataListArgument.build()))
- .add(jsonArg("auctionSignals", auctionSignals))
- .add(jsonArg("perBuyerSignals", perBuyerSignals))
- .add(jsonArg("trustedBiddingSignals", trustedBiddingSignals))
- .add(jsonArg("contextualSignals", CONTEXTUAL_SIGNALS))
- .add(CustomAudienceBiddingSignalsArgumentUtil.asScriptArgument(
- "customAudienceBiddingSignal", customAudienceSignals))
- .build();
- InputStream testJsInputStream = sContext.getAssets().open(
- "rubidium_bidding_logic_compiled.js");
- String jsTestFile = new String(testJsInputStream.readAllBytes(), StandardCharsets.UTF_8);
- //logging time taken to call JS
- state.resumeTiming();
- while (state.keepRunning()) {
- String res = callJSEngine(jsTestFile, args, "generateBidIterative");
- JSONObject jsonObject = new JSONObject(res);
- long webviewExecTime = jsonObject.getLong("duration");
- String webviewExecTimeLog =
- String.format(Locale.ENGLISH,
- "(%s: %d)",
- JSScriptEngineLogConstants.WEBVIEW_EXECUTION_TIME,
- webviewExecTime);
- // The listener picks up logs from JSScriptEngine, so simulate logging from there.
- Log.d(TAG, webviewExecTimeLog);
- }
- }
-
- public void runParameterizedRubidiumScoreAd(int numOfAds) throws Exception {
- BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
- state.pauseTiming();
- String adRenderUrl = "https://rtb.example/creative";
- List<AdWithBid> adWithBidList = getSampleAdDataWithBidList(numOfAds, adRenderUrl);
- ImmutableList.Builder<JSScriptArgument> adWithBidArrayArgument =
- new ImmutableList.Builder<>();
- for (AdWithBid adWithBid : adWithBidList) {
- adWithBidArrayArgument.add(
- mAdWithBidArgumentUtil.asScriptArgument("adWithBid", adWithBid));
- }
- AdTechIdentifier seller = AdTechIdentifier.fromString("www.example-ssp.com");
- AdSelectionSignals sellerSignals = AdSelectionSignals.fromString("{\"signals\":[]}");
- String trustedScoringSignalJson = String.format(Locale.ENGLISH,
- "{\"renderUrl\":{\"%s\":[]}}", adRenderUrl);
- AdSelectionSignals trustedScoringSignalsJson = AdSelectionSignals.fromString(
- trustedScoringSignalJson);
-
- AdTechIdentifier buyer1 = AdTechIdentifier.fromString("https://example-dsp.com");
- AdSelectionSignals buyer1Signals = AdSelectionSignals.fromString("{\"https://example-dsp"
- + ".com:1\":\"value1\",\"https://example-dsp.com:2\":\"value2\"}");
- Map<AdTechIdentifier, AdSelectionSignals> perBuyerSignals = ImmutableMap.of(buyer1,
- buyer1Signals);
-
- AdSelectionConfig adSelectionConfig = getSampleAdSelectionConfig(seller, sellerSignals,
- perBuyerSignals);
- CustomAudienceSignals customAudienceSignals = getSampleCustomAudienceSignals(buyer1,
- "shoes-running");
-
- ImmutableList<JSScriptArgument> args = ImmutableList.<JSScriptArgument>builder()
- .add(arrayArg("adsWithBids", adWithBidArrayArgument.build()))
- .add(AdSelectionConfigArgumentUtil.asScriptArgument(adSelectionConfig,
- "adSelectionConfig"))
- .add(jsonArg("sellerSignals", sellerSignals))
- .add(jsonArg("trustedScoringSignals", trustedScoringSignalsJson))
- .add(jsonArg("contextualSignals", CONTEXTUAL_SIGNALS))
- .add(CustomAudienceScoringSignalsArgumentUtil.asScriptArgument(
- "customAudienceScoringSignal", customAudienceSignals))
- .build();
- InputStream testJsInputStream = sContext.getAssets().open(
- "rubidium_scoring_logic_compiled.js");
- String jsTestFile = new String(testJsInputStream.readAllBytes(), StandardCharsets.UTF_8);
- //logging time taken to call JS
- state.resumeTiming();
- while (state.keepRunning()) {
- String res = callJSEngine(jsTestFile, args, "scoreAdIterative");
- JSONObject jsonObject = new JSONObject(res);
- long webviewExecTime = jsonObject.getLong("duration");
- String webviewExecTimeLog =
- String.format(Locale.ENGLISH,
- "(%s: %d)",
- JSScriptEngineLogConstants.WEBVIEW_EXECUTION_TIME,
- webviewExecTime);
- // The listener picks up logs from JSScriptEngine, so simulate logging from there.
- Log.d(TAG, webviewExecTimeLog);
- }
- }
-
- private List<AdWithBid> getSampleAdDataWithBidList(int size, String baseUri) {
- double initialBid = 1.23;
- return IntStream.rangeClosed(1, size).mapToObj(iterator -> {
- Uri renderUri = Uri.parse(String.format(Locale.ENGLISH, "%s%d", baseUri, iterator));
- String metaDataJson = String.format(Locale.ENGLISH, "{\"metadata\":[\"%d\",\"123\"]}",
- iterator);
- AdData adData = new AdData.Builder().setRenderUri(renderUri).setMetadata(
- metaDataJson).build();
- return new AdWithBid(adData, initialBid + iterator);
- }).collect(Collectors.toCollection(ArrayList::new));
- }
-
- private List<AdData> getSampleAdDataList(int size, String baseUri) {
- return IntStream.rangeClosed(1, size).mapToObj(iterator -> {
- Uri renderUri = Uri.parse(String.format(Locale.ENGLISH, "%s%d", baseUri, iterator));
- String metaDataJson = String.format(Locale.ENGLISH, "{\"metadata\":[\"%d\",\"123\"]}",
- iterator);
- return new AdData.Builder().setRenderUri(renderUri).setMetadata(
- metaDataJson).build();
- }).collect(Collectors.toCollection(ArrayList::new));
- }
-
- private CustomAudienceSignals getSampleCustomAudienceSignals(AdTechIdentifier buyer,
- String name) {
- String owner = "www.example-dsp.com";
- AdSelectionSignals userBiddingSignals = AdSelectionSignals.fromString("{\"signals\":[]}");
- return new CustomAudienceSignals.Builder()
- .setOwner(owner)
- .setBuyer(buyer)
- .setActivationTime(ACTIVATION_TIME)
- .setExpirationTime(EXPIRATION_TIME)
- .setUserBiddingSignals(userBiddingSignals)
- .setName(name)
- .build();
- }
-
- private AdSelectionConfig getSampleAdSelectionConfig(AdTechIdentifier seller,
- AdSelectionSignals sellerSignals,
- Map<AdTechIdentifier, AdSelectionSignals> perBuyerSignals) {
- Uri decisionLogicUri = Uri.parse("https://www.example-ssp.com/decide.js");
- Uri trustedScoringSignalsUri = Uri.parse("https://www.example-ssp.com/signals");
- List<AdTechIdentifier> buyers = ImmutableList.copyOf(
- new ArrayList<>(perBuyerSignals.keySet()));
- return new AdSelectionConfig.Builder()
- .setSeller(seller)
- .setDecisionLogicUri(decisionLogicUri)
- .setCustomAudienceBuyers(buyers)
- .setAdSelectionSignals(AdSelectionSignals.EMPTY)
- .setSellerSignals(sellerSignals)
- .setPerBuyerSignals(perBuyerSignals)
- .setTrustedScoringSignalsUri(trustedScoringSignalsUri)
- .build();
- }
-
- private AdSelectionSignals generatePerBuyerSignals(int size) {
- String signalArrayFormat = "[\"%d\",\"123\",%d]";
- String signalArray = IntStream.rangeClosed(1, size)
- .mapToObj(i -> String.format(Locale.ENGLISH, signalArrayFormat, i, i))
- .collect(Collectors.joining(", ", "[", "]"));
- return AdSelectionSignals.fromString(
- String.format(Locale.ENGLISH, "{\"signals\":[null,%s,[null]]}",
- signalArray));
- }
-}
diff --git a/apex/jobscheduler/framework/aconfig/job.aconfig b/apex/jobscheduler/framework/aconfig/job.aconfig
index 2c1a853..80db264 100644
--- a/apex/jobscheduler/framework/aconfig/job.aconfig
+++ b/apex/jobscheduler/framework/aconfig/job.aconfig
@@ -1,4 +1,5 @@
package: "android.app.job"
+container: "system"
flag {
name: "enforce_minimum_time_windows"
diff --git a/apex/jobscheduler/framework/java/com/android/server/job/JobSchedulerInternal.java b/apex/jobscheduler/framework/java/com/android/server/job/JobSchedulerInternal.java
index ae98fe1..6c8af39 100644
--- a/apex/jobscheduler/framework/java/com/android/server/job/JobSchedulerInternal.java
+++ b/apex/jobscheduler/framework/java/com/android/server/job/JobSchedulerInternal.java
@@ -77,12 +77,6 @@
@NonNull String notificationChannel, int userId, @NonNull String packageName);
/**
- * @return {@code true} if the given package holds the
- * {@link android.Manifest.permission.RUN_BACKUP_JOBS} permission.
- */
- boolean hasRunBackupJobsPermission(@NonNull String packageName, int packageUid);
-
- /**
* Report a snapshot of sync-related jobs back to the sync manager
*/
JobStorePersistStats getPersistStats();
diff --git a/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java b/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java
index 10162fd..5d1433c 100644
--- a/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java
+++ b/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java
@@ -4560,11 +4560,6 @@
}
@Override
- public boolean hasRunBackupJobsPermission(@NonNull String packageName, int packageUid) {
- return JobSchedulerService.this.hasRunBackupJobsPermission(packageName, packageUid);
- }
-
- @Override
public JobStorePersistStats getPersistStats() {
synchronized (mLock) {
return new JobStorePersistStats(mJobs.getPersistStats());
@@ -4727,27 +4722,6 @@
}
/**
- * Returns whether the app holds the {@link Manifest.permission.RUN_BACKUP_JOBS} permission.
- */
- private boolean hasRunBackupJobsPermission(@NonNull String packageName, int packageUid) {
- // This permission is currently hidden so always return false for now (see b/331272951)
- return false;
-
- /**
- if (packageName == null) {
- Slog.wtfStack(TAG,
- "Expected a non-null package name when calling hasRunBackupJobsPermission");
- return false;
- }
-
- return PermissionChecker.checkPermissionForPreflight(getTestableContext(),
- android.Manifest.permission.RUN_BACKUP_JOBS,
- PermissionChecker.PID_UNKNOWN, packageUid, packageName)
- == PermissionChecker.PERMISSION_GRANTED;
- */
- }
-
- /**
* Binder stub trampoline implementation
*/
final class JobSchedulerStub extends IJobScheduler.Stub {
diff --git a/apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java b/apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java
index 9985543..7fca867 100644
--- a/apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java
+++ b/apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java
@@ -1203,14 +1203,9 @@
return ACTIVE_INDEX;
}
- final boolean isEligibleAsBackupJob = false // this exemption is being disabled for now.
- && job.getTriggerContentUris() != null
- && job.getRequiredNetwork() != null
- && !job.hasLateConstraint()
- && mJobSchedulerInternal.hasRunBackupJobsPermission(sourcePackageName, sourceUid);
- final boolean isBackupExempt = mHasMediaBackupExemption || isEligibleAsBackupJob;
final int bucketWithBackupExemption;
- if (actualBucket != RESTRICTED_INDEX && actualBucket != NEVER_INDEX && isBackupExempt) {
+ if (actualBucket != RESTRICTED_INDEX && actualBucket != NEVER_INDEX
+ && mHasMediaBackupExemption) {
// Treat it as if it's at most WORKING_INDEX (lower index grants higher quota) since
// media backup jobs are important to the user, and the source package may not have
// been used directly in a while.
diff --git a/cmds/uinput/README.md b/cmds/uinput/README.md
index f177586..5d3f12e 100644
--- a/cmds/uinput/README.md
+++ b/cmds/uinput/README.md
@@ -154,8 +154,24 @@
#### `delay`
-Add a delay between the processing of commands. The delay will be timed from when the last delay
-ended, rather than from the current time, to allow for more precise timings to be produced.
+Add a delay between the processing of commands.
+
+The delay will be timed relative to the time base, a reference time which is set when the device is
+registered or by the `updateTimeBase` command. Take the following set of example commands:
+
+1. `register` device
+2. `delay` 500ms
+3. `inject` some events
+4. `delay` 10ms
+5. `inject` more events
+
+If the `register` command is executed at time _X_, the injection at step 3 will be scheduled for
+time _X_+500ms. Since scheduling isn't precise, they might actually be injected a few milliseconds
+later, but regardless of that the injection at step 5 will always be scheduled for _X_+510ms. This
+prevents scheduling delays from building up over time and slowing down the playback of recordings.
+However, it does mean that when you expect to wait for an indeterminate period of time, you should
+send `updateTimeBase` afterwards to prevent following events being scheduled in the past — see that
+command's section for an example.
| Field | Type | Description |
|:-------------:|:-------------:|:-------------------------- |
@@ -173,6 +189,45 @@
}
```
+#### `updateTimeBase`
+
+Update the time base from which the following events are scheduled to the current time. When
+controlling `uinput` over standard input, you should send this command if you want following events
+to be scheduled relative to now, rather than the last injection. See the following example set of
+commands and the times they will be scheduled to run at:
+
+1. `register` (say this occurs at time _X_)
+2. `delay` 500ms
+3. `inject`: scheduled for _X_+500ms
+4. `delay` 10ms
+5. `inject`: scheduled for _X_+510ms
+6. (wait a few seconds)
+7. `updateTimeBase` (say this occurs at time _Y_)
+8. `delay` 10ms
+9. `inject`: scheduled for _Y_+10ms
+
+Without the `updateTimeBase` command, the final injection would be scheduled for _X_+520ms, which
+would be in the past.
+
+This is useful if you are issuing commands in multiple stages with long or unknown delays in between
+them. For example, say you have a test that does the following:
+
+1. `register` a device
+2. `inject` a few events that should launch an app
+3. Wait for the app to launch (an indeterminate amount of time, possibly seconds)
+4. 1000 `inject` commands separated by `delay` commands of 10ms
+
+Without `updateTimeBase`, the `inject` commands of step 4 will be scheduled to start immediately
+after the events from step 2. That time is probably in the past, so many of the 1000 injections will
+be sent immediately. This will likely fill the kernel's event buffers, causing events to be dropped.
+Sending `updateTimeBase` before the `inject` commands in step 4 will schedule them relative to the
+current time, meaning that they will be all injected with the intended 10ms delays between them.
+
+| Field | Type | Description |
+|:-------------:|:-------------:|:------------------------------- |
+| `id` | integer | Device ID |
+| `command` | string | Must be set to "updateTimeBase" |
+
#### `inject`
Send an array of uinput event packets to the uinput device
diff --git a/cmds/uinput/src/com/android/commands/uinput/Device.java b/cmds/uinput/src/com/android/commands/uinput/Device.java
index b452fc7..2cac6313 100644
--- a/cmds/uinput/src/com/android/commands/uinput/Device.java
+++ b/cmds/uinput/src/com/android/commands/uinput/Device.java
@@ -102,7 +102,7 @@
}
mHandler.obtainMessage(MSG_OPEN_UINPUT_DEVICE, args).sendToTarget();
- mTimeToSendNanos = SystemClock.uptimeNanos();
+ updateTimeBase();
}
private long getTimeToSendMillis() {
@@ -135,6 +135,13 @@
}
/**
+ * Set the reference time from which future injections are scheduled to the current time.
+ */
+ public void updateTimeBase() {
+ mTimeToSendNanos = SystemClock.uptimeNanos();
+ }
+
+ /**
* Delay subsequent device activity by the specified amount of time.
*
* <p>Note that although the delay is specified in nanoseconds, due to limitations of {@link
@@ -216,7 +223,7 @@
break;
}
long offsetMicros = args.argl1;
- if (mLastInjectTimestampMicros == -1 || offsetMicros == -1) {
+ if (mLastInjectTimestampMicros == -1) {
// There's often a delay of a few milliseconds between the time specified to
// Handler.sendMessageAtTime and the handler actually being called, due to
// the way threads are scheduled. We don't take this into account when
@@ -232,6 +239,9 @@
// To prevent this, we need to use the time at which we scheduled this first
// batch, rather than the actual current time.
mLastInjectTimestampMicros = args.argl2 / 1000;
+ } else if (offsetMicros == -1) {
+ // No timestamp offset is specified for this event, so use the current time.
+ mLastInjectTimestampMicros = SystemClock.uptimeNanos() / 1000;
} else {
mLastInjectTimestampMicros += offsetMicros;
}
diff --git a/cmds/uinput/src/com/android/commands/uinput/Event.java b/cmds/uinput/src/com/android/commands/uinput/Event.java
index 9e7ee09..a3f3d1c 100644
--- a/cmds/uinput/src/com/android/commands/uinput/Event.java
+++ b/cmds/uinput/src/com/android/commands/uinput/Event.java
@@ -36,6 +36,7 @@
DELAY,
INJECT,
SYNC,
+ UPDATE_TIME_BASE,
}
// Constants representing evdev event types, from include/uapi/linux/input-event-codes.h in the
diff --git a/cmds/uinput/src/com/android/commands/uinput/JsonStyleParser.java b/cmds/uinput/src/com/android/commands/uinput/JsonStyleParser.java
index 6994f0c..85a9e9b 100644
--- a/cmds/uinput/src/com/android/commands/uinput/JsonStyleParser.java
+++ b/cmds/uinput/src/com/android/commands/uinput/JsonStyleParser.java
@@ -25,6 +25,7 @@
import java.io.Reader;
import java.util.ArrayList;
import java.util.List;
+import java.util.Locale;
import java.util.Objects;
import java.util.function.Function;
import java.util.stream.IntStream;
@@ -57,8 +58,7 @@
String name = mReader.nextName();
switch (name) {
case "id" -> eb.setId(readInt());
- case "command" -> eb.setCommand(
- Event.Command.valueOf(mReader.nextString().toUpperCase()));
+ case "command" -> eb.setCommand(readCommand());
case "name" -> eb.setName(mReader.nextString());
case "vid" -> eb.setVendorId(readInt());
case "pid" -> eb.setProductId(readInt());
@@ -91,6 +91,18 @@
return e;
}
+ private Event.Command readCommand() throws IOException {
+ String commandStr = mReader.nextString();
+ return switch (commandStr.toLowerCase(Locale.ROOT)) {
+ case "register" -> Event.Command.REGISTER;
+ case "delay" -> Event.Command.DELAY;
+ case "inject" -> Event.Command.INJECT;
+ case "sync" -> Event.Command.SYNC;
+ case "updatetimebase" -> Event.Command.UPDATE_TIME_BASE;
+ default -> throw new IllegalStateException("Invalid command \"" + commandStr + "\"");
+ };
+ }
+
private ArrayList<Integer> readInjectedEvents() throws IOException {
ArrayList<Integer> data = new ArrayList<>();
try {
diff --git a/cmds/uinput/src/com/android/commands/uinput/Uinput.java b/cmds/uinput/src/com/android/commands/uinput/Uinput.java
index 760e981..b9967fb 100644
--- a/cmds/uinput/src/com/android/commands/uinput/Uinput.java
+++ b/cmds/uinput/src/com/android/commands/uinput/Uinput.java
@@ -137,6 +137,7 @@
case INJECT -> d.injectEvent(e.getInjections(), e.getTimestampOffsetMicros());
case DELAY -> d.addDelayNanos(e.getDurationNanos());
case SYNC -> d.syncEvent(e.getSyncToken());
+ case UPDATE_TIME_BASE -> d.updateTimeBase();
}
}
diff --git a/core/api/current.txt b/core/api/current.txt
index c7fce1b..7d9ce58 100644
--- a/core/api/current.txt
+++ b/core/api/current.txt
@@ -511,7 +511,7 @@
field public static final int autoSizeTextType = 16844085; // 0x1010535
field public static final int autoStart = 16843445; // 0x10102b5
field @Deprecated public static final int autoText = 16843114; // 0x101016a
- field @FlaggedApi("android.nfc.Flags.FLAG_NFC_READ_POLLING_LOOP") public static final int autoTransact;
+ field @FlaggedApi("android.nfc.nfc_read_polling_loop") public static final int autoTransact;
field public static final int autoUrlDetect = 16843404; // 0x101028c
field public static final int autoVerify = 16844014; // 0x10104ee
field public static final int autofillHints = 16844118; // 0x1010556
@@ -1499,7 +1499,7 @@
field public static final int shortcutId = 16844072; // 0x1010528
field public static final int shortcutLongLabel = 16844074; // 0x101052a
field public static final int shortcutShortLabel = 16844073; // 0x1010529
- field @FlaggedApi("android.nfc.Flags.FLAG_OBSERVE_MODE") public static final int shouldDefaultToObserveMode;
+ field @FlaggedApi("android.nfc.nfc_observe_mode") public static final int shouldDefaultToObserveMode;
field public static final int shouldDisableView = 16843246; // 0x10101ee
field public static final int shouldUseDefaultUnfoldTransition = 16844364; // 0x101064c
field public static final int showAsAction = 16843481; // 0x10102d9
@@ -26804,6 +26804,7 @@
field public static final int STATE_FAST_FORWARDING = 4; // 0x4
field public static final int STATE_NONE = 0; // 0x0
field public static final int STATE_PAUSED = 2; // 0x2
+ field @FlaggedApi("com.android.media.flags.enable_notifying_activity_manager_with_media_session_status_change") public static final int STATE_PLAYBACK_SUPPRESSED = 12; // 0xc
field public static final int STATE_PLAYING = 3; // 0x3
field public static final int STATE_REWINDING = 5; // 0x5
field public static final int STATE_SKIPPING_TO_NEXT = 10; // 0xa
diff --git a/core/api/system-current.txt b/core/api/system-current.txt
index 45bcd0d..e12da63 100644
--- a/core/api/system-current.txt
+++ b/core/api/system-current.txt
@@ -12,7 +12,7 @@
field public static final String ACCESS_DRM_CERTIFICATES = "android.permission.ACCESS_DRM_CERTIFICATES";
field @Deprecated public static final String ACCESS_FM_RADIO = "android.permission.ACCESS_FM_RADIO";
field public static final String ACCESS_FPS_COUNTER = "android.permission.ACCESS_FPS_COUNTER";
- field @FlaggedApi("android.multiuser.flags.enable_permission_to_access_hidden_profiles") public static final String ACCESS_HIDDEN_PROFILES_FULL = "android.permission.ACCESS_HIDDEN_PROFILES_FULL";
+ field @FlaggedApi("android.multiuser.enable_permission_to_access_hidden_profiles") public static final String ACCESS_HIDDEN_PROFILES_FULL = "android.permission.ACCESS_HIDDEN_PROFILES_FULL";
field public static final String ACCESS_INSTANT_APPS = "android.permission.ACCESS_INSTANT_APPS";
field @FlaggedApi("com.android.server.telecom.flags.telecom_resolve_hidden_dependencies") public static final String ACCESS_LAST_KNOWN_CELL_ID = "android.permission.ACCESS_LAST_KNOWN_CELL_ID";
field public static final String ACCESS_LOCUS_ID_USAGE_STATS = "android.permission.ACCESS_LOCUS_ID_USAGE_STATS";
diff --git a/core/api/test-current.txt b/core/api/test-current.txt
index 1383096..5a3ff83 100644
--- a/core/api/test-current.txt
+++ b/core/api/test-current.txt
@@ -263,6 +263,7 @@
method @RequiresPermission("android.permission.MANAGE_APPOPS") public void setHistoryParameters(int, long, int);
method @RequiresPermission(android.Manifest.permission.MANAGE_APP_OPS_MODES) public void setMode(int, int, String, int);
method public static int strOpToOp(@NonNull String);
+ method public int unsafeCheckOpRawNoThrow(@NonNull String, @NonNull android.content.AttributionSource);
field public static final int ATTRIBUTION_CHAIN_ID_NONE = -1; // 0xffffffff
field public static final int ATTRIBUTION_FLAGS_NONE = 0; // 0x0
field public static final int ATTRIBUTION_FLAG_ACCESSOR = 1; // 0x1
@@ -1769,16 +1770,14 @@
}
public final class InputManager {
- method @FlaggedApi("com.android.input.flags.device_associations") @RequiresPermission("android.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY") public void addUniqueIdAssociationByDescriptor(@NonNull String, @NonNull String);
- method @FlaggedApi("com.android.input.flags.device_associations") @RequiresPermission("android.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY") public void addUniqueIdAssociationByPort(@NonNull String, @NonNull String);
+ method public void addUniqueIdAssociation(@NonNull String, @NonNull String);
method @RequiresPermission(android.Manifest.permission.REMAP_MODIFIER_KEYS) public void clearAllModifierKeyRemappings();
method @NonNull public java.util.List<java.lang.String> getKeyboardLayoutDescriptors();
method @NonNull public String getKeyboardLayoutTypeForLayoutDescriptor(@NonNull String);
method @NonNull @RequiresPermission(android.Manifest.permission.REMAP_MODIFIER_KEYS) public java.util.Map<java.lang.Integer,java.lang.Integer> getModifierKeyRemapping();
method public int getMousePointerSpeed();
method @RequiresPermission(android.Manifest.permission.REMAP_MODIFIER_KEYS) public void remapModifierKey(int, int);
- method @FlaggedApi("com.android.input.flags.device_associations") @RequiresPermission("android.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY") public void removeUniqueIdAssociationByDescriptor(@NonNull String);
- method @FlaggedApi("com.android.input.flags.device_associations") @RequiresPermission("android.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY") public void removeUniqueIdAssociationByPort(@NonNull String);
+ method public void removeUniqueIdAssociation(@NonNull String);
field public static final long BLOCK_UNTRUSTED_TOUCHES = 158002302L; // 0x96aec7eL
}
diff --git a/core/api/test-lint-baseline.txt b/core/api/test-lint-baseline.txt
index e6265ae..685ea63 100644
--- a/core/api/test-lint-baseline.txt
+++ b/core/api/test-lint-baseline.txt
@@ -977,16 +977,8 @@
Method 'setHdmiCecVersion' documentation mentions permissions already declared by @RequiresPermission
RequiresPermission: android.hardware.input.InputManager#addUniqueIdAssociation(String, String):
Method 'addUniqueIdAssociation' documentation mentions permissions without declaring @RequiresPermission
-RequiresPermission: android.hardware.input.InputManager#addUniqueIdAssociationByDescriptor(String, String):
- Method 'addUniqueIdAssociationByDescriptor' documentation mentions permissions already declared by @RequiresPermission
-RequiresPermission: android.hardware.input.InputManager#addUniqueIdAssociationByPort(String, String):
- Method 'addUniqueIdAssociationByPort' documentation mentions permissions already declared by @RequiresPermission
RequiresPermission: android.hardware.input.InputManager#removeUniqueIdAssociation(String):
Method 'removeUniqueIdAssociation' documentation mentions permissions without declaring @RequiresPermission
-RequiresPermission: android.hardware.input.InputManager#removeUniqueIdAssociationByDescriptor(String):
- Method 'removeUniqueIdAssociationByDescriptor' documentation mentions permissions already declared by @RequiresPermission
-RequiresPermission: android.hardware.input.InputManager#removeUniqueIdAssociationByPort(String):
- Method 'removeUniqueIdAssociationByPort' documentation mentions permissions already declared by @RequiresPermission
RequiresPermission: android.hardware.location.GeofenceHardware#addGeofence(int, int, android.hardware.location.GeofenceHardwareRequest, android.hardware.location.GeofenceHardwareCallback):
Method 'addGeofence' documentation mentions permissions without declaring @RequiresPermission
RequiresPermission: android.hardware.location.GeofenceHardware#getMonitoringTypes():
diff --git a/core/java/android/adaptiveauth/flags.aconfig b/core/java/android/adaptiveauth/flags.aconfig
index de4e607..b9cf29c 100644
--- a/core/java/android/adaptiveauth/flags.aconfig
+++ b/core/java/android/adaptiveauth/flags.aconfig
@@ -1,4 +1,5 @@
package: "android.adaptiveauth"
+container: "system"
flag {
name: "enable_adaptive_auth"
diff --git a/core/java/android/app/AppCompatTaskInfo.java b/core/java/android/app/AppCompatTaskInfo.java
index 0bae5e6..7724c23 100644
--- a/core/java/android/app/AppCompatTaskInfo.java
+++ b/core/java/android/app/AppCompatTaskInfo.java
@@ -16,60 +16,16 @@
package android.app;
-import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.os.Parcel;
import android.os.Parcelable;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
/**
* Stores App Compat information about a particular Task.
* @hide
*/
public class AppCompatTaskInfo implements Parcelable {
-
- /**
- * Camera compat control isn't shown because it's not requested by heuristics.
- */
- public static final int CAMERA_COMPAT_CONTROL_HIDDEN = 0;
-
- /**
- * Camera compat control is shown with the treatment suggested.
- */
- public static final int CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED = 1;
-
- /**
- * Camera compat control is shown to allow reverting the applied treatment.
- */
- public static final int CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED = 2;
-
- /**
- * Camera compat control is dismissed by user.
- */
- public static final int CAMERA_COMPAT_CONTROL_DISMISSED = 3;
-
- /**
- * Enum for the Camera app compat control states.
- */
- @Retention(RetentionPolicy.SOURCE)
- @IntDef(prefix = { "CAMERA_COMPAT_CONTROL_" }, value = {
- CAMERA_COMPAT_CONTROL_HIDDEN,
- CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED,
- CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED,
- CAMERA_COMPAT_CONTROL_DISMISSED,
- })
- public @interface CameraCompatControlState {};
-
- /**
- * State of the Camera app compat control which is used to correct stretched viewfinder
- * in apps that don't handle all possible configurations and changes between them correctly.
- */
- @CameraCompatControlState
- public int cameraCompatControlState = CAMERA_COMPAT_CONTROL_HIDDEN;
-
/**
* Whether the direct top activity is eligible for letterbox education.
*/
@@ -135,6 +91,11 @@
*/
public int topActivityLetterboxHeight;
+ /**
+ * Stores camera-related app compat information about a particular Task.
+ */
+ public CameraCompatTaskInfo cameraCompatTaskInfo = CameraCompatTaskInfo.create();
+
private AppCompatTaskInfo() {
// Do nothing
}
@@ -167,18 +128,10 @@
};
/**
- * @return {@value true} if the task has camera compat controls.
- */
- public boolean hasCameraCompatControl() {
- return cameraCompatControlState != CAMERA_COMPAT_CONTROL_HIDDEN
- && cameraCompatControlState != CAMERA_COMPAT_CONTROL_DISMISSED;
- }
-
- /**
* @return {@value true} if the task has some compat ui.
*/
public boolean hasCompatUI() {
- return hasCameraCompatControl() || topActivityInSizeCompat
+ return cameraCompatTaskInfo.hasCameraCompatUI() || topActivityInSizeCompat
|| topActivityEligibleForLetterboxEducation
|| isLetterboxDoubleTapEnabled
|| topActivityEligibleForUserAspectRatioButton;
@@ -208,7 +161,8 @@
&& topActivityLetterboxHorizontalPosition
== that.topActivityLetterboxHorizontalPosition
&& isUserFullscreenOverrideEnabled == that.isUserFullscreenOverrideEnabled
- && isSystemFullscreenOverrideEnabled == that.isSystemFullscreenOverrideEnabled;
+ && isSystemFullscreenOverrideEnabled == that.isSystemFullscreenOverrideEnabled
+ && cameraCompatTaskInfo.equalsForTaskOrganizer(that.cameraCompatTaskInfo);
}
/**
@@ -229,18 +183,17 @@
== that.topActivityLetterboxHorizontalPosition
&& topActivityLetterboxWidth == that.topActivityLetterboxWidth
&& topActivityLetterboxHeight == that.topActivityLetterboxHeight
- && cameraCompatControlState == that.cameraCompatControlState
&& isUserFullscreenOverrideEnabled == that.isUserFullscreenOverrideEnabled
- && isSystemFullscreenOverrideEnabled == that.isSystemFullscreenOverrideEnabled;
+ && isSystemFullscreenOverrideEnabled == that.isSystemFullscreenOverrideEnabled
+ && cameraCompatTaskInfo.equalsForCompatUi(that.cameraCompatTaskInfo);
}
/**
- * Reads the TaskInfo from a parcel.
+ * Reads the AppCompatTaskInfo from a parcel.
*/
void readFromParcel(Parcel source) {
topActivityInSizeCompat = source.readBoolean();
topActivityEligibleForLetterboxEducation = source.readBoolean();
- cameraCompatControlState = source.readInt();
isLetterboxDoubleTapEnabled = source.readBoolean();
topActivityEligibleForUserAspectRatioButton = source.readBoolean();
topActivityBoundsLetterboxed = source.readBoolean();
@@ -251,16 +204,16 @@
topActivityLetterboxHeight = source.readInt();
isUserFullscreenOverrideEnabled = source.readBoolean();
isSystemFullscreenOverrideEnabled = source.readBoolean();
+ cameraCompatTaskInfo = source.readTypedObject(CameraCompatTaskInfo.CREATOR);
}
/**
- * Writes the TaskInfo to a parcel.
+ * Writes the AppCompatTaskInfo to a parcel.
*/
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeBoolean(topActivityInSizeCompat);
dest.writeBoolean(topActivityEligibleForLetterboxEducation);
- dest.writeInt(cameraCompatControlState);
dest.writeBoolean(isLetterboxDoubleTapEnabled);
dest.writeBoolean(topActivityEligibleForUserAspectRatioButton);
dest.writeBoolean(topActivityBoundsLetterboxed);
@@ -271,6 +224,7 @@
dest.writeInt(topActivityLetterboxHeight);
dest.writeBoolean(isUserFullscreenOverrideEnabled);
dest.writeBoolean(isSystemFullscreenOverrideEnabled);
+ dest.writeTypedObject(cameraCompatTaskInfo, flags);
}
@Override
@@ -290,23 +244,7 @@
+ " topActivityLetterboxHeight=" + topActivityLetterboxHeight
+ " isUserFullscreenOverrideEnabled=" + isUserFullscreenOverrideEnabled
+ " isSystemFullscreenOverrideEnabled=" + isSystemFullscreenOverrideEnabled
- + " cameraCompatControlState="
- + cameraCompatControlStateToString(cameraCompatControlState)
+ + " cameraCompatTaskInfo=" + cameraCompatTaskInfo.toString()
+ "}";
}
-
- /** Human readable version of the camera control state. */
- @NonNull
- public static String cameraCompatControlStateToString(
- @CameraCompatControlState int cameraCompatControlState) {
- switch (cameraCompatControlState) {
- case CAMERA_COMPAT_CONTROL_HIDDEN: return "hidden";
- case CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED: return "treatment-suggested";
- case CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED: return "treatment-applied";
- case CAMERA_COMPAT_CONTROL_DISMISSED: return "dismissed";
- default:
- throw new AssertionError(
- "Unexpected camera compat control state: " + cameraCompatControlState);
- }
- }
}
diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java
index 7ae514a..b3312a8 100644
--- a/core/java/android/app/AppOpsManager.java
+++ b/core/java/android/app/AppOpsManager.java
@@ -1554,11 +1554,11 @@
AppProtoEnums.APP_OP_READ_SYSTEM_GRAMMATICAL_GENDER;
/**
- * Allows an app with a major use case of backing-up or syncing content to run longer jobs.
+ * This app has been removed..
*
* @hide
*/
- public static final int OP_RUN_BACKUP_JOBS = AppProtoEnums.APP_OP_RUN_BACKUP_JOBS;
+ private static final int OP_DEPRECATED_4 = AppProtoEnums.APP_OP_RUN_BACKUP_JOBS;
/**
* Whether the app has enabled to receive the icon overlay for fetching archived apps.
@@ -1738,7 +1738,6 @@
OPSTR_ENABLE_MOBILE_DATA_BY_USER,
OPSTR_RESERVED_FOR_TESTING,
OPSTR_RAPID_CLEAR_NOTIFICATIONS_BY_LISTENER,
- OPSTR_RUN_BACKUP_JOBS,
OPSTR_ARCHIVE_ICON_OVERLAY,
OPSTR_UNARCHIVAL_CONFIRMATION,
OPSTR_EMERGENCY_LOCATION,
@@ -2447,11 +2446,11 @@
"android:read_system_grammatical_gender";
/**
- * Allows an app whose primary use case is to backup or sync content to run longer jobs.
+ * App op has been removed.
*
* @hide
*/
- public static final String OPSTR_RUN_BACKUP_JOBS = "android:run_backup_jobs";
+ public static final String OPSTR_DEPRECATED_4 = "android:deprecated_4";
/**
* Allows an app to access location without the traditional location permissions and while the
@@ -2578,7 +2577,6 @@
OP_RECEIVE_SANDBOX_TRIGGER_AUDIO,
OP_MEDIA_ROUTING_CONTROL,
OP_READ_SYSTEM_GRAMMATICAL_GENDER,
- OP_RUN_BACKUP_JOBS,
OP_ARCHIVE_ICON_OVERLAY,
OP_UNARCHIVAL_CONFIRMATION,
};
@@ -3036,8 +3034,8 @@
// will make it an app-op permission in the future.
// .setPermission(Manifest.permission.READ_SYSTEM_GRAMMATICAL_GENDER)
.build(),
- new AppOpInfo.Builder(OP_RUN_BACKUP_JOBS, OPSTR_RUN_BACKUP_JOBS, "RUN_BACKUP_JOBS")
- .setPermission(Manifest.permission.RUN_BACKUP_JOBS).build(),
+ new AppOpInfo.Builder(OP_DEPRECATED_4, OPSTR_DEPRECATED_4, "DEPRECATED_4")
+ .setDefaultMode(AppOpsManager.MODE_IGNORED).build(),
new AppOpInfo.Builder(OP_ARCHIVE_ICON_OVERLAY, OPSTR_ARCHIVE_ICON_OVERLAY,
"ARCHIVE_ICON_OVERLAY")
.setDefaultMode(MODE_ALLOWED).build(),
@@ -8790,6 +8788,18 @@
* Does not throw a security exception, does not translate {@link #MODE_FOREGROUND}.
* @hide
*/
+ @TestApi
+ @SuppressLint("UnflaggedApi") // @TestApi without associated feature.
+ public int unsafeCheckOpRawNoThrow(
+ @NonNull String op, @NonNull AttributionSource attributionSource) {
+ return unsafeCheckOpRawNoThrow(strOpToOp(op), attributionSource);
+ }
+
+ /**
+ * Returns the <em>raw</em> mode associated with the op.
+ * Does not throw a security exception, does not translate {@link #MODE_FOREGROUND}.
+ * @hide
+ */
public int unsafeCheckOpRawNoThrow(int op, int uid, @NonNull String packageName) {
return unsafeCheckOpRawNoThrow(op, uid, packageName, Context.DEVICE_ID_DEFAULT);
}
@@ -8800,8 +8810,8 @@
if (virtualDeviceId == Context.DEVICE_ID_DEFAULT) {
return mService.checkOperationRaw(op, uid, packageName, null);
} else {
- return mService.checkOperationRawForDevice(op, uid, packageName, null,
- Context.DEVICE_ID_DEFAULT);
+ return mService.checkOperationRawForDevice(
+ op, uid, packageName, null, virtualDeviceId);
}
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
diff --git a/core/java/android/app/CameraCompatTaskInfo.java b/core/java/android/app/CameraCompatTaskInfo.java
new file mode 100644
index 0000000..1e116b7
--- /dev/null
+++ b/core/java/android/app/CameraCompatTaskInfo.java
@@ -0,0 +1,225 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.app;
+
+import android.annotation.IntDef;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Stores Camera Compat information about a particular Task.
+ * @hide
+ */
+public class CameraCompatTaskInfo implements Parcelable {
+ /**
+ * Camera compat control isn't shown because it's not requested by heuristics.
+ */
+ public static final int CAMERA_COMPAT_CONTROL_HIDDEN = 0;
+
+ /**
+ * Camera compat control is shown with the treatment suggested.
+ */
+ public static final int CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED = 1;
+
+ /**
+ * Camera compat control is shown to allow reverting the applied treatment.
+ */
+ public static final int CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED = 2;
+
+ /**
+ * Camera compat control is dismissed by user.
+ */
+ public static final int CAMERA_COMPAT_CONTROL_DISMISSED = 3;
+
+ /**
+ * Enum for the Camera app compat control states.
+ */
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef(prefix = { "CAMERA_COMPAT_CONTROL_" }, value = {
+ CAMERA_COMPAT_CONTROL_HIDDEN,
+ CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED,
+ CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED,
+ CAMERA_COMPAT_CONTROL_DISMISSED,
+ })
+ public @interface CameraCompatControlState {}
+
+ /**
+ * State of the Camera app compat control which is used to correct stretched viewfinder
+ * in apps that don't handle all possible configurations and changes between them correctly.
+ */
+ @CameraCompatControlState
+ public int cameraCompatControlState = CAMERA_COMPAT_CONTROL_HIDDEN;
+
+ /**
+ * The value to use when no camera compat treatment should be applied to a windowed task.
+ */
+ public static final int CAMERA_COMPAT_FREEFORM_NONE = 0;
+
+ /**
+ * The value to use when portrait camera compat treatment should be applied to a windowed task.
+ */
+ public static final int CAMERA_COMPAT_FREEFORM_PORTRAIT = 1;
+
+ /**
+ * The value to use when landscape camera compat treatment should be applied to a windowed task.
+ */
+ public static final int CAMERA_COMPAT_FREEFORM_LANDSCAPE = 2;
+
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef(prefix = { "CAMERA_COMPAT_FREEFORM_" }, value = {
+ CAMERA_COMPAT_FREEFORM_NONE,
+ CAMERA_COMPAT_FREEFORM_PORTRAIT,
+ CAMERA_COMPAT_FREEFORM_LANDSCAPE,
+ })
+ public @interface FreeformCameraCompatMode {}
+
+ /**
+ * Whether the camera activity is letterboxed in freeform windowing mode to emulate expected
+ * aspect ratio for fixed-orientation apps.
+ *
+ * <p>This field is used by the WM and the camera framework, to coordinate camera compat mode
+ * setup.
+ */
+ @FreeformCameraCompatMode
+ public int freeformCameraCompatMode;
+
+ private CameraCompatTaskInfo() {
+ // Do nothing
+ }
+
+ @NonNull
+ static CameraCompatTaskInfo create() {
+ return new CameraCompatTaskInfo();
+ }
+
+ private CameraCompatTaskInfo(Parcel source) {
+ readFromParcel(source);
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ public static final Creator<CameraCompatTaskInfo> CREATOR =
+ new Creator<>() {
+ @Override
+ public CameraCompatTaskInfo createFromParcel(Parcel in) {
+ return new CameraCompatTaskInfo(in);
+ }
+
+ @Override
+ public CameraCompatTaskInfo[] newArray(int size) {
+ return new CameraCompatTaskInfo[size];
+ }
+ };
+
+ /**
+ * Reads the CameraCompatTaskInfo from a parcel.
+ */
+ void readFromParcel(Parcel source) {
+ cameraCompatControlState = source.readInt();
+ freeformCameraCompatMode = source.readInt();
+ }
+
+ /**
+ * Writes the CameraCompatTaskInfo to a parcel.
+ */
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeInt(cameraCompatControlState);
+ dest.writeInt(freeformCameraCompatMode);
+ }
+
+ /**
+ * @return {@value true} if the task has camera compat controls.
+ */
+ public boolean hasCameraCompatControl() {
+ return cameraCompatControlState != CAMERA_COMPAT_CONTROL_HIDDEN
+ && cameraCompatControlState != CAMERA_COMPAT_CONTROL_DISMISSED;
+ }
+
+ /**
+ * @return {@value true} if the task has some compat ui.
+ */
+ public boolean hasCameraCompatUI() {
+ return hasCameraCompatControl();
+ }
+
+ /**
+ * @return {@code true} if the camera compat parameters that are important for task organizers
+ * are equal.
+ */
+ public boolean equalsForTaskOrganizer(@Nullable CameraCompatTaskInfo that) {
+ if (that == null) {
+ return false;
+ }
+ return freeformCameraCompatMode == that.freeformCameraCompatMode;
+ }
+
+ /**
+ * @return {@code true} if parameters that are important for size compat have changed.
+ */
+ public boolean equalsForCompatUi(@Nullable CameraCompatTaskInfo that) {
+ if (that == null) {
+ return false;
+ }
+ return cameraCompatControlState == that.cameraCompatControlState
+ && freeformCameraCompatMode == that.freeformCameraCompatMode;
+ }
+
+ @Override
+ public String toString() {
+ return "CameraCompatTaskInfo { cameraCompatControlState="
+ + cameraCompatControlStateToString(cameraCompatControlState)
+ + " freeformCameraCompatMode="
+ + freeformCameraCompatModeToString(freeformCameraCompatMode)
+ + "}";
+ }
+
+ /** Human readable version of the camera control state. */
+ @NonNull
+ public static String cameraCompatControlStateToString(
+ @CameraCompatControlState int cameraCompatControlState) {
+ return switch (cameraCompatControlState) {
+ case CAMERA_COMPAT_CONTROL_HIDDEN -> "hidden";
+ case CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED -> "treatment-suggested";
+ case CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED -> "treatment-applied";
+ case CAMERA_COMPAT_CONTROL_DISMISSED -> "dismissed";
+ default -> throw new AssertionError(
+ "Unexpected camera compat control state: " + cameraCompatControlState);
+ };
+ }
+
+ /** Human readable version of the freeform camera compat mode. */
+ @NonNull
+ public static String freeformCameraCompatModeToString(
+ @FreeformCameraCompatMode int freeformCameraCompatMode) {
+ return switch (freeformCameraCompatMode) {
+ case CAMERA_COMPAT_FREEFORM_NONE -> "inactive";
+ case CAMERA_COMPAT_FREEFORM_PORTRAIT -> "portrait";
+ case CAMERA_COMPAT_FREEFORM_LANDSCAPE -> "landscape";
+ default -> throw new AssertionError(
+ "Unexpected camera compat mode: " + freeformCameraCompatMode);
+ };
+ }
+}
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java
index e39928b..714454b 100644
--- a/core/java/android/app/Notification.java
+++ b/core/java/android/app/Notification.java
@@ -17,15 +17,14 @@
package android.app;
import static android.annotation.Dimension.DP;
+import static android.app.Flags.evenlyDividedCallStyleActionLayout;
+import static android.app.Flags.updateRankingTime;
import static android.app.admin.DevicePolicyResources.Drawables.Source.NOTIFICATION;
import static android.app.admin.DevicePolicyResources.Drawables.Style.SOLID_COLORED;
import static android.app.admin.DevicePolicyResources.Drawables.WORK_PROFILE_ICON;
import static android.app.admin.DevicePolicyResources.UNDEFINED;
import static android.graphics.drawable.Icon.TYPE_URI;
import static android.graphics.drawable.Icon.TYPE_URI_ADAPTIVE_BITMAP;
-import static android.app.Flags.cleanUpSpansAndNewLines;
-import static android.app.Flags.evenlyDividedCallStyleActionLayout;
-import static android.app.Flags.updateRankingTime;
import static java.util.Objects.requireNonNull;
@@ -94,7 +93,10 @@
import android.text.style.CharacterStyle;
import android.text.style.ForegroundColorSpan;
import android.text.style.RelativeSizeSpan;
+import android.text.style.StrikethroughSpan;
+import android.text.style.StyleSpan;
import android.text.style.TextAppearanceSpan;
+import android.text.style.UnderlineSpan;
import android.util.ArraySet;
import android.util.Log;
import android.util.Pair;
@@ -766,11 +768,24 @@
MessagingStyle.class, CallStyle.class);
/** @hide */
- @IntDef(flag = true, prefix = { "FLAG_" }, value = {FLAG_SHOW_LIGHTS, FLAG_ONGOING_EVENT,
- FLAG_INSISTENT, FLAG_ONLY_ALERT_ONCE,
- FLAG_AUTO_CANCEL, FLAG_NO_CLEAR, FLAG_FOREGROUND_SERVICE, FLAG_HIGH_PRIORITY,
- FLAG_LOCAL_ONLY, FLAG_GROUP_SUMMARY, FLAG_AUTOGROUP_SUMMARY, FLAG_BUBBLE,
- FLAG_USER_INITIATED_JOB})
+ @IntDef(flag = true, prefix = {"FLAG_"}, value = {
+ FLAG_SHOW_LIGHTS,
+ FLAG_ONGOING_EVENT,
+ FLAG_INSISTENT,
+ FLAG_ONLY_ALERT_ONCE,
+ FLAG_AUTO_CANCEL,
+ FLAG_NO_CLEAR,
+ FLAG_FOREGROUND_SERVICE,
+ FLAG_HIGH_PRIORITY,
+ FLAG_LOCAL_ONLY,
+ FLAG_GROUP_SUMMARY,
+ FLAG_AUTOGROUP_SUMMARY,
+ FLAG_CAN_COLORIZE,
+ FLAG_BUBBLE,
+ FLAG_NO_DISMISS,
+ FLAG_FSI_REQUESTED_BUT_DENIED,
+ FLAG_USER_INITIATED_JOB
+ })
@Retention(RetentionPolicy.SOURCE)
public @interface NotificationFlags{};
@@ -3155,9 +3170,6 @@
+ " instance is a custom Parcelable and not allowed in Notification");
return cs.toString();
}
- if (Flags.cleanUpSpansAndNewLines()) {
- return stripStyling(cs);
- }
return removeTextSizeSpans(cs);
}
@@ -3780,10 +3792,10 @@
if (this.tickerText != null) {
sb.append(" tick");
}
- sb.append(" defaults=0x");
- sb.append(Integer.toHexString(this.defaults));
- sb.append(" flags=0x");
- sb.append(Integer.toHexString(this.flags));
+ sb.append(" defaults=");
+ sb.append(defaultsToString(this.defaults));
+ sb.append(" flags=");
+ sb.append(flagsToString(this.flags));
sb.append(String.format(" color=0x%08x", this.color));
if (this.category != null) {
sb.append(" category=");
@@ -3852,6 +3864,124 @@
}
/**
+ * {@hide}
+ */
+ public static String flagsToString(@NotificationFlags int flags) {
+ final List<String> flagStrings = new ArrayList<String>();
+ if ((flags & FLAG_SHOW_LIGHTS) != 0) {
+ flagStrings.add("SHOW_LIGHTS");
+ flags &= ~FLAG_SHOW_LIGHTS;
+ }
+ if ((flags & FLAG_ONGOING_EVENT) != 0) {
+ flagStrings.add("ONGOING_EVENT");
+ flags &= ~FLAG_ONGOING_EVENT;
+ }
+ if ((flags & FLAG_INSISTENT) != 0) {
+ flagStrings.add("INSISTENT");
+ flags &= ~FLAG_INSISTENT;
+ }
+ if ((flags & FLAG_ONLY_ALERT_ONCE) != 0) {
+ flagStrings.add("ONLY_ALERT_ONCE");
+ flags &= ~FLAG_ONLY_ALERT_ONCE;
+ }
+ if ((flags & FLAG_AUTO_CANCEL) != 0) {
+ flagStrings.add("AUTO_CANCEL");
+ flags &= ~FLAG_AUTO_CANCEL;
+ }
+ if ((flags & FLAG_NO_CLEAR) != 0) {
+ flagStrings.add("NO_CLEAR");
+ flags &= ~FLAG_NO_CLEAR;
+ }
+ if ((flags & FLAG_FOREGROUND_SERVICE) != 0) {
+ flagStrings.add("FOREGROUND_SERVICE");
+ flags &= ~FLAG_FOREGROUND_SERVICE;
+ }
+ if ((flags & FLAG_HIGH_PRIORITY) != 0) {
+ flagStrings.add("HIGH_PRIORITY");
+ flags &= ~FLAG_HIGH_PRIORITY;
+ }
+ if ((flags & FLAG_LOCAL_ONLY) != 0) {
+ flagStrings.add("LOCAL_ONLY");
+ flags &= ~FLAG_LOCAL_ONLY;
+ }
+ if ((flags & FLAG_GROUP_SUMMARY) != 0) {
+ flagStrings.add("GROUP_SUMMARY");
+ flags &= ~FLAG_GROUP_SUMMARY;
+ }
+ if ((flags & FLAG_AUTOGROUP_SUMMARY) != 0) {
+ flagStrings.add("AUTOGROUP_SUMMARY");
+ flags &= ~FLAG_AUTOGROUP_SUMMARY;
+ }
+ if ((flags & FLAG_CAN_COLORIZE) != 0) {
+ flagStrings.add("CAN_COLORIZE");
+ flags &= ~FLAG_CAN_COLORIZE;
+ }
+ if ((flags & FLAG_BUBBLE) != 0) {
+ flagStrings.add("BUBBLE");
+ flags &= ~FLAG_BUBBLE;
+ }
+ if ((flags & FLAG_NO_DISMISS) != 0) {
+ flagStrings.add("NO_DISMISS");
+ flags &= ~FLAG_NO_DISMISS;
+ }
+ if ((flags & FLAG_FSI_REQUESTED_BUT_DENIED) != 0) {
+ flagStrings.add("FSI_REQUESTED_BUT_DENIED");
+ flags &= ~FLAG_FSI_REQUESTED_BUT_DENIED;
+ }
+ if ((flags & FLAG_USER_INITIATED_JOB) != 0) {
+ flagStrings.add("USER_INITIATED_JOB");
+ flags &= ~FLAG_USER_INITIATED_JOB;
+ }
+ if (Flags.lifetimeExtensionRefactor()) {
+ if ((flags & FLAG_LIFETIME_EXTENDED_BY_DIRECT_REPLY) != 0) {
+ flagStrings.add("LIFETIME_EXTENDED_BY_DIRECT_REPLY");
+ flags &= ~FLAG_LIFETIME_EXTENDED_BY_DIRECT_REPLY;
+ }
+ }
+
+ if (flagStrings.isEmpty()) {
+ return "0";
+ }
+
+ if (flags != 0) {
+ flagStrings.add(String.format("UNKNOWN(0x%08x)", flags));
+ }
+
+ return String.join("|", flagStrings);
+ }
+
+ /** @hide */
+ public static String defaultsToString(int defaults) {
+ final List<String> defaultStrings = new ArrayList<String>();
+ if ((defaults & DEFAULT_ALL) == DEFAULT_ALL) {
+ defaultStrings.add("ALL");
+ defaults &= ~DEFAULT_ALL;
+ }
+ if ((defaults & DEFAULT_SOUND) != 0) {
+ defaultStrings.add("SOUND");
+ defaults &= ~DEFAULT_SOUND;
+ }
+ if ((defaults & DEFAULT_VIBRATE) != 0) {
+ defaultStrings.add("VIBRATE");
+ defaults &= ~DEFAULT_VIBRATE;
+ }
+ if ((defaults & DEFAULT_LIGHTS) != 0) {
+ defaultStrings.add("LIGHTS");
+ defaults &= ~DEFAULT_LIGHTS;
+ }
+
+ if (defaultStrings.isEmpty()) {
+ return "0";
+ }
+
+ if (defaults != 0) {
+ defaultStrings.add(String.format("UNKNOWN(0x%08x)", defaults));
+ }
+
+ return String.join("|", defaultStrings);
+ }
+
+ /**
* @hide
*/
public boolean hasCompletedProgress() {
@@ -8155,9 +8285,6 @@
*/
public BigTextStyle bigText(CharSequence cs) {
mBigText = safeCharSequence(cs);
- if (Flags.cleanUpSpansAndNewLines()) {
- mBigText = cleanUpNewLines(mBigText);
- }
return this;
}
@@ -8228,6 +8355,9 @@
// Replace the text with the big text, but only if the big text is not empty.
CharSequence bigTextText = mBuilder.processLegacyText(mBigText);
+ if (Flags.cleanUpSpansAndNewLines()) {
+ bigTextText = cleanUpNewLines(stripStyling(bigTextText));
+ }
if (!TextUtils.isEmpty(bigTextText)) {
p.text(bigTextText);
}
@@ -9143,11 +9273,43 @@
*/
public void ensureColorContrastOrStripStyling(int backgroundColor) {
if (Flags.cleanUpSpansAndNewLines()) {
- mText = stripStyling(mText);
+ mText = stripNonStyleSpans(mText);
} else {
ensureColorContrast(backgroundColor);
}
}
+
+ private CharSequence stripNonStyleSpans(CharSequence text) {
+
+ if (text instanceof Spanned) {
+ Spanned ss = (Spanned) text;
+ Object[] spans = ss.getSpans(0, ss.length(), Object.class);
+ SpannableStringBuilder builder = new SpannableStringBuilder(ss.toString());
+ for (Object span : spans) {
+ final Object resultSpan;
+ if (span instanceof StyleSpan
+ || span instanceof StrikethroughSpan
+ || span instanceof UnderlineSpan) {
+ resultSpan = span;
+ } else if (span instanceof TextAppearanceSpan) {
+ final TextAppearanceSpan originalSpan = (TextAppearanceSpan) span;
+ resultSpan = new TextAppearanceSpan(
+ null,
+ originalSpan.getTextStyle(),
+ -1,
+ null,
+ null);
+ } else {
+ continue;
+ }
+ builder.setSpan(resultSpan, ss.getSpanStart(span), ss.getSpanEnd(span),
+ ss.getSpanFlags(span));
+ }
+ return builder;
+ }
+ return text;
+ }
+
/**
* Updates TextAppearance spans in the message text so it has sufficient contrast
* against its background.
diff --git a/core/java/android/app/WindowConfiguration.java b/core/java/android/app/WindowConfiguration.java
index aa3b71a..a12faca 100644
--- a/core/java/android/app/WindowConfiguration.java
+++ b/core/java/android/app/WindowConfiguration.java
@@ -100,9 +100,6 @@
/** The current windowing mode of the configuration. */
private @WindowingMode int mWindowingMode;
- /** The display windowing mode of the configuration */
- private @WindowingMode int mDisplayWindowingMode;
-
/** Windowing mode is currently not defined. */
public static final int WINDOWING_MODE_UNDEFINED = 0;
/** Occupies the full area of the screen or the parent container. */
@@ -193,12 +190,9 @@
/** Bit that indicates that the {@link #mRotation} changed.
* @hide */
public static final int WINDOW_CONFIG_ROTATION = 1 << 6;
- /** Bit that indicates that the {@link #mDisplayWindowingMode} changed.
- * @hide */
- public static final int WINDOW_CONFIG_DISPLAY_WINDOWING_MODE = 1 << 7;
/** Bit that indicates that the apparent-display changed.
* @hide */
- public static final int WINDOW_CONFIG_DISPLAY_ROTATION = 1 << 8;
+ public static final int WINDOW_CONFIG_DISPLAY_ROTATION = 1 << 7;
/** @hide */
@IntDef(flag = true, prefix = { "WINDOW_CONFIG_" }, value = {
@@ -209,7 +203,6 @@
WINDOW_CONFIG_ACTIVITY_TYPE,
WINDOW_CONFIG_ALWAYS_ON_TOP,
WINDOW_CONFIG_ROTATION,
- WINDOW_CONFIG_DISPLAY_WINDOWING_MODE,
WINDOW_CONFIG_DISPLAY_ROTATION,
})
public @interface WindowConfig {}
@@ -237,7 +230,6 @@
dest.writeInt(mActivityType);
dest.writeInt(mAlwaysOnTop);
dest.writeInt(mRotation);
- dest.writeInt(mDisplayWindowingMode);
dest.writeInt(mDisplayRotation);
}
@@ -250,7 +242,6 @@
mActivityType = source.readInt();
mAlwaysOnTop = source.readInt();
mRotation = source.readInt();
- mDisplayWindowingMode = source.readInt();
mDisplayRotation = source.readInt();
}
@@ -411,17 +402,6 @@
return mWindowingMode;
}
- /** @hide */
- public void setDisplayWindowingMode(@WindowingMode int windowingMode) {
- mDisplayWindowingMode = windowingMode;
- }
-
- /** @hide */
- @WindowingMode
- public int getDisplayWindowingMode() {
- return mDisplayWindowingMode;
- }
-
public void setActivityType(@ActivityType int activityType) {
if (mActivityType == activityType) {
return;
@@ -453,7 +433,6 @@
setActivityType(other.mActivityType);
setAlwaysOnTop(other.mAlwaysOnTop);
setRotation(other.mRotation);
- setDisplayWindowingMode(other.mDisplayWindowingMode);
}
/** Set this object to completely undefined.
@@ -472,7 +451,6 @@
setActivityType(ACTIVITY_TYPE_UNDEFINED);
setAlwaysOnTop(ALWAYS_ON_TOP_UNDEFINED);
setRotation(ROTATION_UNDEFINED);
- setDisplayWindowingMode(WINDOWING_MODE_UNDEFINED);
}
/** @hide */
@@ -543,11 +521,6 @@
changed |= WINDOW_CONFIG_ROTATION;
setRotation(delta.mRotation);
}
- if (delta.mDisplayWindowingMode != WINDOWING_MODE_UNDEFINED
- && mDisplayWindowingMode != delta.mDisplayWindowingMode) {
- changed |= WINDOW_CONFIG_DISPLAY_WINDOWING_MODE;
- setDisplayWindowingMode(delta.mDisplayWindowingMode);
- }
if (delta.mDisplayRotation != ROTATION_UNDEFINED
&& delta.mDisplayRotation != mDisplayRotation) {
changed |= WINDOW_CONFIG_DISPLAY_ROTATION;
@@ -582,9 +555,6 @@
if ((mask & WINDOW_CONFIG_ROTATION) != 0) {
setRotation(delta.mRotation);
}
- if ((mask & WINDOW_CONFIG_DISPLAY_WINDOWING_MODE) != 0) {
- setDisplayWindowingMode(delta.mDisplayWindowingMode);
- }
if ((mask & WINDOW_CONFIG_DISPLAY_ROTATION) != 0) {
setDisplayRotation(delta.mDisplayRotation);
}
@@ -639,11 +609,6 @@
changes |= WINDOW_CONFIG_ROTATION;
}
- if ((compareUndefined || other.mDisplayWindowingMode != WINDOWING_MODE_UNDEFINED)
- && mDisplayWindowingMode != other.mDisplayWindowingMode) {
- changes |= WINDOW_CONFIG_DISPLAY_WINDOWING_MODE;
- }
-
if ((compareUndefined || other.mDisplayRotation != ROTATION_UNDEFINED)
&& mDisplayRotation != other.mDisplayRotation) {
changes |= WINDOW_CONFIG_DISPLAY_ROTATION;
@@ -697,8 +662,6 @@
n = mRotation - that.mRotation;
if (n != 0) return n;
- n = mDisplayWindowingMode - that.mDisplayWindowingMode;
- if (n != 0) return n;
n = mDisplayRotation - that.mDisplayRotation;
if (n != 0) return n;
@@ -728,7 +691,6 @@
result = 31 * result + mActivityType;
result = 31 * result + mAlwaysOnTop;
result = 31 * result + mRotation;
- result = 31 * result + mDisplayWindowingMode;
result = 31 * result + mDisplayRotation;
return result;
}
@@ -742,7 +704,6 @@
+ " mDisplayRotation=" + (mRotation == ROTATION_UNDEFINED
? "undefined" : rotationToString(mDisplayRotation))
+ " mWindowingMode=" + windowingModeToString(mWindowingMode)
- + " mDisplayWindowingMode=" + windowingModeToString(mDisplayWindowingMode)
+ " mActivityType=" + activityTypeToString(mActivityType)
+ " mAlwaysOnTop=" + alwaysOnTopToString(mAlwaysOnTop)
+ " mRotation=" + (mRotation == ROTATION_UNDEFINED
@@ -818,16 +779,6 @@
}
/**
- * Returns true if the activities associated with this window configuration display a decor
- * view.
- * @hide
- */
- public boolean hasWindowDecorCaption() {
- return mActivityType == ACTIVITY_TYPE_STANDARD && (mWindowingMode == WINDOWING_MODE_FREEFORM
- || mDisplayWindowingMode == WINDOWING_MODE_FREEFORM);
- }
-
- /**
* Returns true if the tasks associated with this window configuration can be resized
* independently of their parent container.
* @hide
diff --git a/core/java/android/app/activity_manager.aconfig b/core/java/android/app/activity_manager.aconfig
index e751bd2..e4425ca 100644
--- a/core/java/android/app/activity_manager.aconfig
+++ b/core/java/android/app/activity_manager.aconfig
@@ -1,4 +1,5 @@
package: "android.app"
+container: "system"
flag {
namespace: "system_performance"
diff --git a/core/java/android/app/admin/flags/flags.aconfig b/core/java/android/app/admin/flags/flags.aconfig
index f5e0f68..31c9a258 100644
--- a/core/java/android/app/admin/flags/flags.aconfig
+++ b/core/java/android/app/admin/flags/flags.aconfig
@@ -2,6 +2,7 @@
# proto-message: flag_declarations
package: "android.app.admin.flags"
+container: "system"
flag {
name: "policy_engine_migration_v2_enabled"
diff --git a/core/java/android/app/background_install_control_manager.aconfig b/core/java/android/app/background_install_control_manager.aconfig
index 5f3bb07..d29c5b5 100644
--- a/core/java/android/app/background_install_control_manager.aconfig
+++ b/core/java/android/app/background_install_control_manager.aconfig
@@ -1,4 +1,5 @@
package: "android.app"
+container: "system"
flag {
namespace: "preload_safety"
diff --git a/core/java/android/app/contextualsearch/CallbackToken.java b/core/java/android/app/contextualsearch/CallbackToken.java
index 378193f..94cdc73 100644
--- a/core/java/android/app/contextualsearch/CallbackToken.java
+++ b/core/java/android/app/contextualsearch/CallbackToken.java
@@ -68,6 +68,8 @@
* invocations of this method will result in {@link OutcomeReceiver#onError} being called with
* an {@link IllegalAccessException}.
*
+ * Note that the callback could be invoked multiple times, e.g. in the case of split screen.
+ *
* @param executor The executor which will be used to invoke the callback.
* @param callback The callback which will be used to return {@link ContextualSearchState}
* if/when it is available via {@link OutcomeReceiver#onResult}. It will also be
diff --git a/core/java/android/app/contextualsearch/ContextualSearchManager.java b/core/java/android/app/contextualsearch/ContextualSearchManager.java
index c080a6b..cfbe741 100644
--- a/core/java/android/app/contextualsearch/ContextualSearchManager.java
+++ b/core/java/android/app/contextualsearch/ContextualSearchManager.java
@@ -27,6 +27,7 @@
import android.os.IBinder;
import android.os.RemoteException;
import android.os.ServiceManager;
+import android.os.SystemClock;
import android.util.Log;
import java.lang.annotation.Retention;
@@ -51,6 +52,7 @@
*/
public static final String EXTRA_ENTRYPOINT =
"android.app.contextualsearch.extra.ENTRYPOINT";
+
/**
* Key to get the flag_secure value from the extras of the activity launched by contextual
* search. The value will be true if flag_secure is found in any of the visible activities.
@@ -58,12 +60,14 @@
*/
public static final String EXTRA_FLAG_SECURE_FOUND =
"android.app.contextualsearch.extra.FLAG_SECURE_FOUND";
+
/**
* Key to get the screenshot from the extras of the activity launched by contextual search.
* Only supposed to be used with ACTON_LAUNCH_CONTEXTUAL_SEARCH.
*/
public static final String EXTRA_SCREENSHOT =
"android.app.contextualsearch.extra.SCREENSHOT";
+
/**
* Key to check whether managed profile is visible from the extras of the activity launched by
* contextual search. The value will be true if any one of the visible apps is managed.
@@ -71,6 +75,7 @@
*/
public static final String EXTRA_IS_MANAGED_PROFILE_VISIBLE =
"android.app.contextualsearch.extra.IS_MANAGED_PROFILE_VISIBLE";
+
/**
* Key to get the list of visible packages from the extras of the activity launched by
* contextual search.
@@ -80,6 +85,18 @@
"android.app.contextualsearch.extra.VISIBLE_PACKAGE_NAMES";
/**
+ * Key to get the time the user made the invocation request, based on
+ * {@link SystemClock#uptimeMillis()}.
+ * Only supposed to be used with ACTON_LAUNCH_CONTEXTUAL_SEARCH.
+ *
+ * TODO: un-hide in W
+ *
+ * @hide
+ */
+ public static final String EXTRA_INVOCATION_TIME_MS =
+ "android.app.contextualsearch.extra.INVOCATION_TIME_MS";
+
+ /**
* Key to get the binder token from the extras of the activity launched by contextual search.
* This token is needed to invoke {@link CallbackToken#getContextualSearchState} method.
* Only supposed to be used with ACTON_LAUNCH_CONTEXTUAL_SEARCH.
diff --git a/core/java/android/app/contextualsearch/flags.aconfig b/core/java/android/app/contextualsearch/flags.aconfig
index 5ab0762..3385b2b 100644
--- a/core/java/android/app/contextualsearch/flags.aconfig
+++ b/core/java/android/app/contextualsearch/flags.aconfig
@@ -1,4 +1,5 @@
package: "android.app.contextualsearch.flags"
+container: "system"
flag {
name: "enable_service"
diff --git a/core/java/android/app/grammatical_inflection_manager.aconfig b/core/java/android/app/grammatical_inflection_manager.aconfig
index 0d7bf65..ea494f4 100644
--- a/core/java/android/app/grammatical_inflection_manager.aconfig
+++ b/core/java/android/app/grammatical_inflection_manager.aconfig
@@ -1,4 +1,5 @@
package: "android.app"
+container: "system"
flag {
name: "system_terms_of_address_enabled"
diff --git a/core/java/android/app/multitasking.aconfig b/core/java/android/app/multitasking.aconfig
index dbf3173..9a64519 100644
--- a/core/java/android/app/multitasking.aconfig
+++ b/core/java/android/app/multitasking.aconfig
@@ -1,4 +1,5 @@
package: "android.app"
+container: "system"
flag {
name: "enable_pip_ui_state_callback_on_entering"
diff --git a/core/java/android/app/network-policy.aconfig b/core/java/android/app/network-policy.aconfig
index 88f386f..e7b02a7 100644
--- a/core/java/android/app/network-policy.aconfig
+++ b/core/java/android/app/network-policy.aconfig
@@ -1,4 +1,5 @@
package: "android.app"
+container: "system"
flag {
namespace: "backstage_power"
diff --git a/core/java/android/app/notification.aconfig b/core/java/android/app/notification.aconfig
index 28afd5f..e694ccc 100644
--- a/core/java/android/app/notification.aconfig
+++ b/core/java/android/app/notification.aconfig
@@ -1,4 +1,5 @@
package: "android.app"
+container: "system"
# Note: When adding a new flag here, consider including the word "notification(s)" in the flag name
# when appropriate, as it's not currently part of the namespace so it may not be obvious what the
diff --git a/core/java/android/app/ondeviceintelligence/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/servertransaction/ClientTransactionListenerController.java b/core/java/android/app/servertransaction/ClientTransactionListenerController.java
index c9b4aa1..cda2867 100644
--- a/core/java/android/app/servertransaction/ClientTransactionListenerController.java
+++ b/core/java/android/app/servertransaction/ClientTransactionListenerController.java
@@ -17,14 +17,13 @@
package android.app.servertransaction;
import static android.app.WindowConfiguration.areConfigurationsEqualForDisplay;
+import static android.view.Display.INVALID_DISPLAY;
import static com.android.window.flags.Flags.activityWindowInfoFlag;
import static com.android.window.flags.Flags.bundleClientTransactionFlag;
import static java.util.Objects.requireNonNull;
-import android.annotation.AnyThread;
-import android.annotation.MainThread;
import android.annotation.NonNull;
import android.app.Activity;
import android.app.ActivityThread;
@@ -62,9 +61,11 @@
* Keeps track of the Context whose Configuration will get updated, mapping to the config before
* the change.
*/
+ @GuardedBy("mLock")
private final ArrayMap<Context, Configuration> mContextToPreChangedConfigMap = new ArrayMap<>();
/** Whether there is an {@link ClientTransaction} being executed. */
+ @GuardedBy("mLock")
private boolean mIsClientTransactionExecuting;
/** Gets the singleton controller. */
@@ -96,7 +97,6 @@
* The listener will be invoked with two parameters: {@link Activity#getActivityToken()} and
* {@link ActivityWindowInfo}.
*/
- @AnyThread
public void registerActivityWindowInfoChangedListener(
@NonNull BiConsumer<IBinder, ActivityWindowInfo> listener) {
if (!activityWindowInfoFlag()) {
@@ -111,7 +111,6 @@
* Unregisters the listener that was previously registered via
* {@link #registerActivityWindowInfoChangedListener(BiConsumer)}
*/
- @AnyThread
public void unregisterActivityWindowInfoChangedListener(
@NonNull BiConsumer<IBinder, ActivityWindowInfo> listener) {
if (!activityWindowInfoFlag()) {
@@ -126,7 +125,6 @@
* Called when receives a {@link ClientTransaction} that is updating an activity's
* {@link ActivityWindowInfo}.
*/
- @MainThread
public void onActivityWindowInfoChanged(@NonNull IBinder activityToken,
@NonNull ActivityWindowInfo activityWindowInfo) {
if (!activityWindowInfoFlag()) {
@@ -146,80 +144,85 @@
}
/** Called when starts executing a remote {@link ClientTransaction}. */
- @MainThread
public void onClientTransactionStarted() {
- mIsClientTransactionExecuting = true;
+ synchronized (mLock) {
+ mIsClientTransactionExecuting = true;
+ }
}
/** Called when finishes executing a remote {@link ClientTransaction}. */
- @MainThread
public void onClientTransactionFinished() {
- notifyDisplayManagerIfNeeded();
- mIsClientTransactionExecuting = false;
+ final ArraySet<Integer> configUpdatedDisplayIds;
+ synchronized (mLock) {
+ mIsClientTransactionExecuting = false;
+
+ // When {@link Configuration} is changed, we want to trigger display change callback as
+ // well, because Display reads some fields from {@link Configuration}.
+ if (mContextToPreChangedConfigMap.isEmpty()) {
+ return;
+ }
+
+ // Calculate display ids that have config changed.
+ configUpdatedDisplayIds = new ArraySet<>();
+ final int contextCount = mContextToPreChangedConfigMap.size();
+ try {
+ for (int i = 0; i < contextCount; i++) {
+ final Context context = mContextToPreChangedConfigMap.keyAt(i);
+ final Configuration preChangedConfig = mContextToPreChangedConfigMap.valueAt(i);
+ if (shouldReportDisplayChange(context, preChangedConfig)) {
+ configUpdatedDisplayIds.add(context.getDisplayId());
+ }
+ }
+ } finally {
+ mContextToPreChangedConfigMap.clear();
+ }
+ }
+
+ // Dispatch the display changed callbacks.
+ final int displayCount = configUpdatedDisplayIds.size();
+ for (int i = 0; i < displayCount; i++) {
+ final int displayId = configUpdatedDisplayIds.valueAt(i);
+ onDisplayChanged(displayId);
+ }
}
/** Called before updating the Configuration of the given {@code context}. */
- @MainThread
public void onContextConfigurationPreChanged(@NonNull Context context) {
if (!bundleClientTransactionFlag() || ActivityThread.isSystem()) {
// Not enable for system server.
return;
}
- if (mContextToPreChangedConfigMap.containsKey(context)) {
- // There is an earlier change that hasn't been reported yet.
- return;
+ synchronized (mLock) {
+ if (mContextToPreChangedConfigMap.containsKey(context)) {
+ // There is an earlier change that hasn't been reported yet.
+ return;
+ }
+ mContextToPreChangedConfigMap.put(context,
+ new Configuration(context.getResources().getConfiguration()));
}
- mContextToPreChangedConfigMap.put(context,
- new Configuration(context.getResources().getConfiguration()));
}
/** Called after updating the Configuration of the given {@code context}. */
- @MainThread
public void onContextConfigurationPostChanged(@NonNull Context context) {
if (!bundleClientTransactionFlag() || ActivityThread.isSystem()) {
// Not enable for system server.
return;
}
- if (mIsClientTransactionExecuting) {
- // Wait until #onClientTransactionFinished to prevent it from triggering the same
- // #onDisplayChanged multiple times within the same ClientTransaction.
- return;
- }
- final Configuration preChangedConfig = mContextToPreChangedConfigMap.remove(context);
- if (preChangedConfig != null && shouldReportDisplayChange(context, preChangedConfig)) {
- onDisplayChanged(context.getDisplayId());
- }
- }
-
- /**
- * When {@link Configuration} is changed, we want to trigger display change callback as well,
- * because Display reads some fields from {@link Configuration}.
- */
- private void notifyDisplayManagerIfNeeded() {
- if (mContextToPreChangedConfigMap.isEmpty()) {
- return;
- }
- // Whether the configuration change should trigger DisplayListener#onDisplayChanged.
- try {
- // Calculate display ids that have config changed.
- final ArraySet<Integer> configUpdatedDisplayIds = new ArraySet<>();
- final int contextCount = mContextToPreChangedConfigMap.size();
- for (int i = 0; i < contextCount; i++) {
- final Context context = mContextToPreChangedConfigMap.keyAt(i);
- final Configuration preChangedConfig = mContextToPreChangedConfigMap.valueAt(i);
- if (shouldReportDisplayChange(context, preChangedConfig)) {
- configUpdatedDisplayIds.add(context.getDisplayId());
- }
+ int changedDisplayId = INVALID_DISPLAY;
+ synchronized (mLock) {
+ if (mIsClientTransactionExecuting) {
+ // Wait until #onClientTransactionFinished to prevent it from triggering the same
+ // #onDisplayChanged multiple times within the same ClientTransaction.
+ return;
}
-
- // Dispatch the display changed callbacks.
- final int displayCount = configUpdatedDisplayIds.size();
- for (int i = 0; i < displayCount; i++) {
- final int displayId = configUpdatedDisplayIds.valueAt(i);
- onDisplayChanged(displayId);
+ final Configuration preChangedConfig = mContextToPreChangedConfigMap.remove(context);
+ if (preChangedConfig != null && shouldReportDisplayChange(context, preChangedConfig)) {
+ changedDisplayId = context.getDisplayId();
}
- } finally {
- mContextToPreChangedConfigMap.clear();
+ }
+
+ if (changedDisplayId != INVALID_DISPLAY) {
+ onDisplayChanged(changedDisplayId);
}
}
diff --git a/core/java/android/app/smartspace/flags.aconfig b/core/java/android/app/smartspace/flags.aconfig
index e90ba67..df71924 100644
--- a/core/java/android/app/smartspace/flags.aconfig
+++ b/core/java/android/app/smartspace/flags.aconfig
@@ -1,4 +1,5 @@
package: "android.app.smartspace.flags"
+container: "system"
flag {
name: "remote_views"
diff --git a/core/java/android/app/ui_mode_manager.aconfig b/core/java/android/app/ui_mode_manager.aconfig
index 27a38cc..9f44a4d 100644
--- a/core/java/android/app/ui_mode_manager.aconfig
+++ b/core/java/android/app/ui_mode_manager.aconfig
@@ -1,4 +1,5 @@
package: "android.app"
+container: "system"
flag {
namespace: "systemui"
diff --git a/core/java/android/app/usage/flags.aconfig b/core/java/android/app/usage/flags.aconfig
index 9a2d2e5..c7b168a 100644
--- a/core/java/android/app/usage/flags.aconfig
+++ b/core/java/android/app/usage/flags.aconfig
@@ -1,4 +1,5 @@
package: "android.app.usage"
+container: "system"
flag {
name: "user_interaction_type_api"
diff --git a/core/java/android/app/wearable/flags.aconfig b/core/java/android/app/wearable/flags.aconfig
index d1d7b5d..b68bafe 100644
--- a/core/java/android/app/wearable/flags.aconfig
+++ b/core/java/android/app/wearable/flags.aconfig
@@ -1,4 +1,5 @@
package: "android.app.wearable"
+container: "system"
flag {
name: "enable_unsupported_operation_status_code"
diff --git a/core/java/android/appwidget/flags.aconfig b/core/java/android/appwidget/flags.aconfig
index 765c802..374be6f 100644
--- a/core/java/android/appwidget/flags.aconfig
+++ b/core/java/android/appwidget/flags.aconfig
@@ -1,4 +1,5 @@
package: "android.appwidget.flags"
+container: "system"
flag {
name: "generated_previews"
diff --git a/core/java/android/companion/flags.aconfig b/core/java/android/companion/flags.aconfig
index ecc5e1b..8458857 100644
--- a/core/java/android/companion/flags.aconfig
+++ b/core/java/android/companion/flags.aconfig
@@ -1,4 +1,5 @@
package: "android.companion"
+container: "system"
flag {
name: "new_association_builder"
diff --git a/core/java/android/companion/virtual/camera/VirtualCameraConfig.java b/core/java/android/companion/virtual/camera/VirtualCameraConfig.java
index 06a0f5c..769b658 100644
--- a/core/java/android/companion/virtual/camera/VirtualCameraConfig.java
+++ b/core/java/android/companion/virtual/camera/VirtualCameraConfig.java
@@ -237,19 +237,15 @@
@IntRange(from = 1) int height,
@ImageFormat.Format int format,
@IntRange(from = 1) int maximumFramesPerSecond) {
- // TODO(b/310857519): Check dimension upper limits based on the maximum texture size
- // supported by the current device, instead of hardcoded limits.
- if (width <= 0 || width > VirtualCameraStreamConfig.DIMENSION_UPPER_LIMIT) {
+ if (width <= 0) {
throw new IllegalArgumentException(
"Invalid width passed for stream config: " + width
- + ", must be between 1 and "
- + VirtualCameraStreamConfig.DIMENSION_UPPER_LIMIT);
+ + ", must be greater than 0");
}
- if (height <= 0 || height > VirtualCameraStreamConfig.DIMENSION_UPPER_LIMIT) {
+ if (height <= 0) {
throw new IllegalArgumentException(
"Invalid height passed for stream config: " + height
- + ", must be between 1 and "
- + VirtualCameraStreamConfig.DIMENSION_UPPER_LIMIT);
+ + ", must be greater than 0");
}
if (!isFormatSupported(format)) {
throw new IllegalArgumentException(
diff --git a/core/java/android/companion/virtual/camera/VirtualCameraStreamConfig.java b/core/java/android/companion/virtual/camera/VirtualCameraStreamConfig.java
index 00a814e..6ab66b3 100644
--- a/core/java/android/companion/virtual/camera/VirtualCameraStreamConfig.java
+++ b/core/java/android/companion/virtual/camera/VirtualCameraStreamConfig.java
@@ -39,11 +39,6 @@
public final class VirtualCameraStreamConfig implements Parcelable {
// TODO(b/310857519): Check if we should increase the fps upper limit in future.
static final int MAX_FPS_UPPER_LIMIT = 60;
- // This is the minimum guaranteed upper bound of texture size supported by all devices.
- // Keep this in sync with kMaxTextureSize from services/camera/virtualcamera/util/Util.cc
- // TODO(b/310857519): Remove this once we add support for fetching the maximum texture size
- // supported by the current device.
- static final int DIMENSION_UPPER_LIMIT = 2048;
private final int mWidth;
private final int mHeight;
diff --git a/core/java/android/companion/virtual/flags.aconfig b/core/java/android/companion/virtual/flags.aconfig
index e6649df..3e23762 100644
--- a/core/java/android/companion/virtual/flags.aconfig
+++ b/core/java/android/companion/virtual/flags.aconfig
@@ -8,6 +8,7 @@
# instead.
package: "android.companion.virtual.flags"
+container: "system"
flag {
name: "enable_native_vdm"
diff --git a/core/java/android/companion/virtual/flags/flags.aconfig b/core/java/android/companion/virtual/flags/flags.aconfig
index 2904e7c..006226e 100644
--- a/core/java/android/companion/virtual/flags/flags.aconfig
+++ b/core/java/android/companion/virtual/flags/flags.aconfig
@@ -14,6 +14,7 @@
# limitations under the License.
package: "android.companion.virtualdevice.flags"
+container: "system"
flag {
namespace: "virtual_devices"
diff --git a/core/java/android/content/IntentFilter.java b/core/java/android/content/IntentFilter.java
index e290722..86d061c 100644
--- a/core/java/android/content/IntentFilter.java
+++ b/core/java/android/content/IntentFilter.java
@@ -21,6 +21,9 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
+import android.compat.annotation.ChangeId;
+import android.compat.annotation.Disabled;
+import android.compat.annotation.Overridable;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.pm.Flags;
import android.net.Uri;
@@ -186,6 +189,18 @@
private static final boolean[] EMPTY_BOOLEAN_ARRAY = new boolean[0];
/**
+ * An intent with action set as null used to always pass the action test during intent
+ * filter matching. This causes a lot of confusion and unexpected intent matches.
+ * Null action intents should be blocked when the intent sender application targets V or higher.
+ *
+ * @hide
+ */
+ @ChangeId
+ @Disabled
+ @Overridable
+ public static final long BLOCK_NULL_ACTION_INTENTS = 293560872;
+
+ /**
* The filter {@link #setPriority} value at which system high-priority
* receivers are placed; that is, receivers that should execute before
* application code. Applications should never use filters with this or
diff --git a/core/java/android/content/flags/flags.aconfig b/core/java/android/content/flags/flags.aconfig
index 27bce5b..aac04b3a 100644
--- a/core/java/android/content/flags/flags.aconfig
+++ b/core/java/android/content/flags/flags.aconfig
@@ -1,4 +1,5 @@
package: "android.content.flags"
+container: "system"
flag {
name: "enable_bind_package_isolated_process"
diff --git a/core/java/android/content/pm/ActivityInfo.java b/core/java/android/content/pm/ActivityInfo.java
index 535cebb..7ac9547 100644
--- a/core/java/android/content/pm/ActivityInfo.java
+++ b/core/java/android/content/pm/ActivityInfo.java
@@ -1548,6 +1548,26 @@
public static final long INSETS_DECOUPLED_CONFIGURATION_ENFORCED = 151861875L;
/**
+ * When enabled, the activity will receive configuration decoupled from system bar insets.
+ *
+ * <p>This will only apply if the activity is targeting SDK level 34 or earlier versions.
+ *
+ * <p>This will only in effect if the device is trying to provide a different value by default
+ * other than the legacy value, i.e., the
+ * {@code Flags.allowsScreenSizeDecoupledFromStatusBarAndCutout()} is set to true.
+ *
+ * <p>If the {@code Flags.insetsDecoupledConfiguration()} is also set to true, all apps
+ * targeting SDK level 35 or later, and apps with this override flag will receive the insets
+ * decoupled configuration.
+ *
+ * @hide
+ */
+ @ChangeId
+ @Disabled
+ @Overridable
+ public static final long OVERRIDE_ENABLE_INSETS_DECOUPLED_CONFIGURATION = 327313645L;
+
+ /**
* Optional set of a certificates identifying apps that are allowed to embed this activity. From
* the "knownActivityEmbeddingCerts" attribute.
*/
diff --git a/core/java/android/content/pm/flags.aconfig b/core/java/android/content/pm/flags.aconfig
index cde565b..6158917 100644
--- a/core/java/android/content/pm/flags.aconfig
+++ b/core/java/android/content/pm/flags.aconfig
@@ -1,4 +1,5 @@
package: "android.content.pm"
+container: "system"
flag {
name: "quarantined_enabled"
diff --git a/core/java/android/content/pm/multiuser.aconfig b/core/java/android/content/pm/multiuser.aconfig
index 321e539..c57a3a6 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"
@@ -112,6 +113,26 @@
is_fixed_read_only: true
}
+flag {
+ name: "fix_avatar_picker_read_back_order"
+ namespace: "multiuser"
+ description: "Talkback focus doesn't move to the 'If you change your Google Account picture…' after swiping next to move the focus from 'Choose a picture'"
+ bug: "330835921"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
+
+flag {
+ name: "fix_avatar_picker_selected_read_back"
+ namespace: "multiuser"
+ description: "Talkback doesn't announce 'selected' after double tapping the button in the picture list in 'Choose a picture' page."
+ bug: "330840549"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
+
# This flag guards the private space feature and all its implementations excluding the APIs. APIs are guarded by android.os.Flags.allow_private_profile.
flag {
name: "enable_private_space_features"
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/DatabaseUtils.java b/core/java/android/database/DatabaseUtils.java
index 2081ced..3c4307c 100644
--- a/core/java/android/database/DatabaseUtils.java
+++ b/core/java/android/database/DatabaseUtils.java
@@ -22,6 +22,7 @@
import android.content.ContentValues;
import android.content.Context;
import android.content.OperationApplicationException;
+import android.database.sqlite.Flags;
import android.database.sqlite.SQLiteAbortException;
import android.database.sqlite.SQLiteConstraintException;
import android.database.sqlite.SQLiteDatabase;
@@ -1609,7 +1610,7 @@
* Comments either start with "--" and run to the end of the line or are C-style block
* comments. The function returns null if a prefix could not be found.
*/
- private static String getSqlStatementPrefixExtended(String sql) {
+ private static String getSqlStatementPrefixExtendedRegex(String sql) {
Matcher m = sPrefixPattern.matcher(sql);
if (m.lookingAt()) {
return m.group(PREFIX_GROUP_NUM).toUpperCase(Locale.ROOT);
@@ -1619,6 +1620,61 @@
}
/**
+ * Return the index of the first character past comments and whitespace. -1 is returned if
+ * a comment is malformed.
+ */
+ private static int getSqlStatementPrefixOffset(String s) {
+ final int limit = s.length() - 2;
+ if (limit < 0) return -1;
+ int i = 0;
+ while (i < limit) {
+ final char c = s.charAt(i);
+ if (c <= ' ') {
+ // This behavior conforms to String.trim(), which is used by the legacy Android
+ // SQL prefix logic. This test is not unicode-aware. Notice that it accepts the
+ // null character as whitespace even though the null character will terminate the
+ // SQL string in native code.
+ i++;
+ } else if (c == '-') {
+ if (s.charAt(i+1) != '-') return i;
+ i = s.indexOf('\n', i+2);
+ if (i < 0) return -1;
+ i++;
+ } else if (c == '/') {
+ if (s.charAt(i+1) != '*') return i;
+ i++;
+ do {
+ i = s.indexOf('*', i+1);
+ if (i < 0) return -1;
+ i++;
+ } while (s.charAt(i) != '/');
+ i++;
+ } else {
+ return i;
+ }
+ }
+ return -1;
+ }
+
+ /**
+ * Scan past leading comments without using the Java regex routines.
+ */
+ private static String getSqlStatementPrefixExtendedNoRegex(String sql) {
+ int n = getSqlStatementPrefixOffset(sql);
+ if (n < 0) {
+ // Bad comment syntax.
+ return null;
+ }
+ final int end = sql.length();
+ if (n > end) {
+ // Bad scanning. This indicates a programming error.
+ return null;
+ }
+ final int eos = Math.min(n+3, end);
+ return sql.substring(n, eos).toUpperCase(Locale.ROOT);
+ }
+
+ /**
* Return the extended statement type for the SQL statement. This is not a public API and it
* can return values that are not publicly visible.
* @hide
@@ -1663,11 +1719,15 @@
* @hide
*/
public static int getSqlStatementTypeExtended(@NonNull String sql) {
- int type = categorizeStatement(getSqlStatementPrefixSimple(sql), sql);
- if (type == STATEMENT_COMMENT) {
- type = categorizeStatement(getSqlStatementPrefixExtended(sql), sql);
+ if (Flags.simpleSqlCommentScanner()) {
+ return categorizeStatement(getSqlStatementPrefixExtendedNoRegex(sql), sql);
+ } else {
+ int type = categorizeStatement(getSqlStatementPrefixSimple(sql), sql);
+ if (type == STATEMENT_COMMENT) {
+ type = categorizeStatement(getSqlStatementPrefixExtendedRegex(sql), sql);
+ }
+ return type;
}
- return type;
}
/**
diff --git a/core/java/android/database/sqlite/flags.aconfig b/core/java/android/database/sqlite/flags.aconfig
index 7ecffaf..285f984 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"
@@ -16,3 +17,11 @@
description: "Permit updates to TEMP tables in read-only transactions"
bug: "317993835"
}
+
+flag {
+ name: "simple_sql_comment_scanner"
+ namespace: "system_performance"
+ is_fixed_read_only: true
+ description: "Scan SQL comments by hand instead of with a regex"
+ bug: "329118560"
+}
diff --git a/core/java/android/hardware/biometrics/AuthenticationStateListener.aidl b/core/java/android/hardware/biometrics/AuthenticationStateListener.aidl
index 1488cff..63e1895 100644
--- a/core/java/android/hardware/biometrics/AuthenticationStateListener.aidl
+++ b/core/java/android/hardware/biometrics/AuthenticationStateListener.aidl
@@ -15,7 +15,13 @@
*/
package android.hardware.biometrics;
-import android.hardware.biometrics.BiometricSourceType;
+import android.hardware.biometrics.events.AuthenticationAcquiredInfo;
+import android.hardware.biometrics.events.AuthenticationErrorInfo;
+import android.hardware.biometrics.events.AuthenticationFailedInfo;
+import android.hardware.biometrics.events.AuthenticationHelpInfo;
+import android.hardware.biometrics.events.AuthenticationStartedInfo;
+import android.hardware.biometrics.events.AuthenticationStoppedInfo;
+import android.hardware.biometrics.events.AuthenticationSucceededInfo;
/**
* Low-level callback interface between <Biometric>Manager and <Auth>Service. Allows core system
@@ -25,41 +31,44 @@
*/
oneway interface AuthenticationStateListener {
/**
- * Defines behavior in response to authentication starting
- * @param requestReason reason from [BiometricRequestConstants.RequestReason] for requesting
- * authentication starting
+ * Defines behavior in response to biometric authentication being acquired.
+ * @param authInfo information related to the biometric authentication acquired.
*/
- void onAuthenticationStarted(int requestReason);
+ void onAuthenticationAcquired(in AuthenticationAcquiredInfo authInfo);
/**
- * Defines behavior in response to authentication stopping
+ * Defines behavior in response to an unrecoverable error encountered during authentication.
+ * @param authInfo information related to the unrecoverable auth error encountered
*/
- void onAuthenticationStopped();
-
- /**
- * Defines behavior in response to a successful authentication
- * @param requestReason Reason from [BiometricRequestConstants.RequestReason] for the requested
- * authentication
- * @param userId The user Id for the requested authentication
- */
- void onAuthenticationSucceeded(int requestReason, int userId);
+ void onAuthenticationError(in AuthenticationErrorInfo authInfo);
/**
* Defines behavior in response to a failed authentication
- * @param requestReason Reason from [BiometricRequestConstants.RequestReason] for the requested
- * authentication
- * @param userId The user Id for the requested authentication
+ * @param authInfo information related to the failed authentication
*/
- void onAuthenticationFailed(int requestReason, int userId);
+ void onAuthenticationFailed(in AuthenticationFailedInfo authInfo);
/**
- * Defines behavior in response to biometric being acquired.
- * @param biometricSourceType identifies [BiometricSourceType] biometric was acquired for
- * @param requestReason reason from [BiometricRequestConstants.RequestReason] for authentication
- * @param acquiredInfo [BiometricFingerprintConstants.FingerprintAcquired] int corresponding to
- * a known acquired message.
+ * Defines behavior in response to a recoverable error encountered during authentication.
+ * @param authInfo information related to the recoverable auth error encountered
*/
- void onAuthenticationAcquired(
- in BiometricSourceType biometricSourceType, int requestReason, int acquiredInfo
- );
+ void onAuthenticationHelp(in AuthenticationHelpInfo authInfo);
+
+ /**
+ * Defines behavior in response to authentication starting
+ * @param authInfo information related to the authentication starting
+ */
+ void onAuthenticationStarted(in AuthenticationStartedInfo authInfo);
+
+ /**
+ * Defines behavior in response to authentication stopping
+ * @param authInfo information related to the authentication stopping
+ */
+ void onAuthenticationStopped(in AuthenticationStoppedInfo authInfo);
+
+ /**
+ * Defines behavior in response to a successful authentication
+ * @param authInfo information related to the successful authentication
+ */
+ void onAuthenticationSucceeded(in AuthenticationSucceededInfo authInfo);
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/SettingsClockSize.kt b/core/java/android/hardware/biometrics/events/AuthenticationAcquiredInfo.aidl
similarity index 76%
copy from packages/SystemUI/src/com/android/systemui/keyguard/shared/model/SettingsClockSize.kt
copy to core/java/android/hardware/biometrics/events/AuthenticationAcquiredInfo.aidl
index c6b0f58..2c9a55b 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/SettingsClockSize.kt
+++ b/core/java/android/hardware/biometrics/events/AuthenticationAcquiredInfo.aidl
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2023 The Android Open Source Project
+ * Copyright (C) 2024 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -12,12 +12,8 @@
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
- *
*/
-package com.android.systemui.keyguard.shared.model
+package android.hardware.biometrics.events;
-enum class SettingsClockSize {
- DYNAMIC,
- SMALL,
-}
+parcelable AuthenticationAcquiredInfo;
diff --git a/core/java/android/hardware/biometrics/events/AuthenticationAcquiredInfo.java b/core/java/android/hardware/biometrics/events/AuthenticationAcquiredInfo.java
new file mode 100644
index 0000000..09b52d6
--- /dev/null
+++ b/core/java/android/hardware/biometrics/events/AuthenticationAcquiredInfo.java
@@ -0,0 +1,305 @@
+/*
+ * 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.hardware.biometrics.events;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.hardware.biometrics.BiometricFaceConstants;
+import android.hardware.biometrics.BiometricFingerprintConstants;
+import android.hardware.biometrics.BiometricRequestConstants;
+import android.hardware.biometrics.BiometricSourceType;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import com.android.internal.util.DataClass;
+
+/**
+ * Information related to biometric authentication being acquired.
+ * @hide
+ */
+@DataClass(
+ genParcelable = true,
+ genAidl = true,
+ genBuilder = true,
+ genSetters = true,
+ genEqualsHashCode = true
+)
+public final class AuthenticationAcquiredInfo implements Parcelable {
+ /** Identifies {@link BiometricSourceType} of authentication. */
+ @NonNull
+ private final BiometricSourceType mBiometricSourceType;
+
+ /** Indicates reason from {@link BiometricRequestConstants.RequestReason} for
+ * requesting authentication. */
+ @BiometricRequestConstants.RequestReason
+ private final int mRequestReason;
+
+ /**
+ * {@link BiometricFaceConstants.FaceAcquired} or
+ * {@link BiometricFingerprintConstants.FingerprintAcquired} int corresponding to
+ * a known acquired message.
+ */
+ private final int mAcquiredInfo;
+
+
+
+ // Code below generated by codegen v1.0.23.
+ //
+ // DO NOT MODIFY!
+ // CHECKSTYLE:OFF Generated code
+ //
+ // To regenerate run:
+ // $ codegen $ANDROID_BUILD_TOP/frameworks/base/core/java/android/hardware/biometrics/events/AuthenticationAcquiredInfo.java
+ //
+ // To exclude the generated code from IntelliJ auto-formatting enable (one-time):
+ // Settings > Editor > Code Style > Formatter Control
+ //@formatter:off
+
+
+ @DataClass.Generated.Member
+ /* package-private */ AuthenticationAcquiredInfo(
+ @NonNull BiometricSourceType biometricSourceType,
+ @BiometricRequestConstants.RequestReason int requestReason,
+ int acquiredInfo) {
+ this.mBiometricSourceType = biometricSourceType;
+ com.android.internal.util.AnnotationValidations.validate(
+ NonNull.class, null, mBiometricSourceType);
+ this.mRequestReason = requestReason;
+ com.android.internal.util.AnnotationValidations.validate(
+ BiometricRequestConstants.RequestReason.class, null, mRequestReason);
+ this.mAcquiredInfo = acquiredInfo;
+
+ // onConstructed(); // You can define this method to get a callback
+ }
+
+ /**
+ * Identifies {@link BiometricSourceType} of authentication.
+ */
+ @DataClass.Generated.Member
+ public @NonNull BiometricSourceType getBiometricSourceType() {
+ return mBiometricSourceType;
+ }
+
+ /**
+ * Indicates reason from {@link BiometricRequestConstants.RequestReason} for
+ * requesting authentication.
+ */
+ @DataClass.Generated.Member
+ public @BiometricRequestConstants.RequestReason int getRequestReason() {
+ return mRequestReason;
+ }
+
+ /**
+ * {@link BiometricFaceConstants.FaceAcquired} or
+ * {@link BiometricFingerprintConstants.FingerprintAcquired} int corresponding to
+ * a known acquired message.
+ */
+ @DataClass.Generated.Member
+ public int getAcquiredInfo() {
+ return mAcquiredInfo;
+ }
+
+ @Override
+ @DataClass.Generated.Member
+ public boolean equals(@Nullable Object o) {
+ // You can override field equality logic by defining either of the methods like:
+ // boolean fieldNameEquals(AuthenticationAcquiredInfo other) { ... }
+ // boolean fieldNameEquals(FieldType otherValue) { ... }
+
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ @SuppressWarnings("unchecked")
+ AuthenticationAcquiredInfo that = (AuthenticationAcquiredInfo) o;
+ //noinspection PointlessBooleanExpression
+ return true
+ && java.util.Objects.equals(mBiometricSourceType, that.mBiometricSourceType)
+ && mRequestReason == that.mRequestReason
+ && mAcquiredInfo == that.mAcquiredInfo;
+ }
+
+ @Override
+ @DataClass.Generated.Member
+ public int hashCode() {
+ // You can override field hashCode logic by defining methods like:
+ // int fieldNameHashCode() { ... }
+
+ int _hash = 1;
+ _hash = 31 * _hash + java.util.Objects.hashCode(mBiometricSourceType);
+ _hash = 31 * _hash + mRequestReason;
+ _hash = 31 * _hash + mAcquiredInfo;
+ return _hash;
+ }
+
+ @Override
+ @DataClass.Generated.Member
+ public void writeToParcel(@NonNull Parcel dest, int flags) {
+ // You can override field parcelling by defining methods like:
+ // void parcelFieldName(Parcel dest, int flags) { ... }
+
+ dest.writeTypedObject(mBiometricSourceType, flags);
+ dest.writeInt(mRequestReason);
+ dest.writeInt(mAcquiredInfo);
+ }
+
+ @Override
+ @DataClass.Generated.Member
+ public int describeContents() { return 0; }
+
+ /** @hide */
+ @SuppressWarnings({"unchecked", "RedundantCast"})
+ @DataClass.Generated.Member
+ /* package-private */ AuthenticationAcquiredInfo(@NonNull Parcel in) {
+ // You can override field unparcelling by defining methods like:
+ // static FieldType unparcelFieldName(Parcel in) { ... }
+
+ BiometricSourceType biometricSourceType = (BiometricSourceType) in.readTypedObject(BiometricSourceType.CREATOR);
+ int requestReason = in.readInt();
+ int acquiredInfo = in.readInt();
+
+ this.mBiometricSourceType = biometricSourceType;
+ com.android.internal.util.AnnotationValidations.validate(
+ NonNull.class, null, mBiometricSourceType);
+ this.mRequestReason = requestReason;
+ com.android.internal.util.AnnotationValidations.validate(
+ BiometricRequestConstants.RequestReason.class, null, mRequestReason);
+ this.mAcquiredInfo = acquiredInfo;
+
+ // onConstructed(); // You can define this method to get a callback
+ }
+
+ @DataClass.Generated.Member
+ public static final @NonNull Parcelable.Creator<AuthenticationAcquiredInfo> CREATOR
+ = new Parcelable.Creator<AuthenticationAcquiredInfo>() {
+ @Override
+ public AuthenticationAcquiredInfo[] newArray(int size) {
+ return new AuthenticationAcquiredInfo[size];
+ }
+
+ @Override
+ public AuthenticationAcquiredInfo createFromParcel(@NonNull Parcel in) {
+ return new AuthenticationAcquiredInfo(in);
+ }
+ };
+
+ /**
+ * A builder for {@link AuthenticationAcquiredInfo}
+ */
+ @SuppressWarnings("WeakerAccess")
+ @DataClass.Generated.Member
+ public static final class Builder {
+
+ private @NonNull BiometricSourceType mBiometricSourceType;
+ private @BiometricRequestConstants.RequestReason int mRequestReason;
+ private int mAcquiredInfo;
+
+ private long mBuilderFieldsSet = 0L;
+
+ /**
+ * Creates a new Builder.
+ *
+ * @param biometricSourceType
+ * Identifies {@link BiometricSourceType} of authentication.
+ * @param requestReason
+ * Indicates reason from {@link BiometricRequestConstants.RequestReason} for
+ * requesting authentication.
+ * @param acquiredInfo
+ * {@link BiometricFaceConstants.FaceAcquired} or
+ * {@link BiometricFingerprintConstants.FingerprintAcquired} int corresponding to
+ * a known acquired message.
+ */
+ public Builder(
+ @NonNull BiometricSourceType biometricSourceType,
+ @BiometricRequestConstants.RequestReason int requestReason,
+ int acquiredInfo) {
+ mBiometricSourceType = biometricSourceType;
+ com.android.internal.util.AnnotationValidations.validate(
+ NonNull.class, null, mBiometricSourceType);
+ mRequestReason = requestReason;
+ com.android.internal.util.AnnotationValidations.validate(
+ BiometricRequestConstants.RequestReason.class, null, mRequestReason);
+ mAcquiredInfo = acquiredInfo;
+ }
+
+ /**
+ * Identifies {@link BiometricSourceType} of authentication.
+ */
+ @DataClass.Generated.Member
+ public @NonNull Builder setBiometricSourceType(@NonNull BiometricSourceType value) {
+ checkNotUsed();
+ mBuilderFieldsSet |= 0x1;
+ mBiometricSourceType = value;
+ return this;
+ }
+
+ /**
+ * Indicates reason from {@link BiometricRequestConstants.RequestReason} for
+ * requesting authentication.
+ */
+ @DataClass.Generated.Member
+ public @NonNull Builder setRequestReason(@BiometricRequestConstants.RequestReason int value) {
+ checkNotUsed();
+ mBuilderFieldsSet |= 0x2;
+ mRequestReason = value;
+ return this;
+ }
+
+ /**
+ * {@link BiometricFaceConstants.FaceAcquired} or
+ * {@link BiometricFingerprintConstants.FingerprintAcquired} int corresponding to
+ * a known acquired message.
+ */
+ @DataClass.Generated.Member
+ public @NonNull Builder setAcquiredInfo(int value) {
+ checkNotUsed();
+ mBuilderFieldsSet |= 0x4;
+ mAcquiredInfo = value;
+ return this;
+ }
+
+ /** Builds the instance. This builder should not be touched after calling this! */
+ public @NonNull AuthenticationAcquiredInfo build() {
+ checkNotUsed();
+ mBuilderFieldsSet |= 0x8; // Mark builder used
+
+ AuthenticationAcquiredInfo o = new AuthenticationAcquiredInfo(
+ mBiometricSourceType,
+ mRequestReason,
+ mAcquiredInfo);
+ return o;
+ }
+
+ private void checkNotUsed() {
+ if ((mBuilderFieldsSet & 0x8) != 0) {
+ throw new IllegalStateException(
+ "This Builder should not be reused. Use a new Builder instance instead");
+ }
+ }
+ }
+
+ @DataClass.Generated(
+ time = 1713305187861L,
+ codegenVersion = "1.0.23",
+ sourceFile = "frameworks/base/core/java/android/hardware/biometrics/events/AuthenticationAcquiredInfo.java",
+ inputSignatures = "private final @android.annotation.NonNull android.hardware.biometrics.BiometricSourceType mBiometricSourceType\nprivate final @android.hardware.biometrics.BiometricRequestConstants.RequestReason int mRequestReason\nprivate final int mAcquiredInfo\nclass AuthenticationAcquiredInfo extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genParcelable=true, genAidl=true, genBuilder=true, genSetters=true, genEqualsHashCode=true)")
+ @Deprecated
+ private void __metadata() {}
+
+
+ //@formatter:on
+ // End of generated code
+
+}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/SettingsClockSize.kt b/core/java/android/hardware/biometrics/events/AuthenticationErrorInfo.aidl
similarity index 76%
copy from packages/SystemUI/src/com/android/systemui/keyguard/shared/model/SettingsClockSize.kt
copy to core/java/android/hardware/biometrics/events/AuthenticationErrorInfo.aidl
index c6b0f58..cf30e46 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/SettingsClockSize.kt
+++ b/core/java/android/hardware/biometrics/events/AuthenticationErrorInfo.aidl
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2023 The Android Open Source Project
+ * Copyright (C) 2024 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -12,12 +12,8 @@
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
- *
*/
-package com.android.systemui.keyguard.shared.model
+package android.hardware.biometrics.events;
-enum class SettingsClockSize {
- DYNAMIC,
- SMALL,
-}
+parcelable AuthenticationErrorInfo;
diff --git a/core/java/android/hardware/biometrics/events/AuthenticationErrorInfo.java b/core/java/android/hardware/biometrics/events/AuthenticationErrorInfo.java
new file mode 100644
index 0000000..88ee9d6
--- /dev/null
+++ b/core/java/android/hardware/biometrics/events/AuthenticationErrorInfo.java
@@ -0,0 +1,347 @@
+/*
+ * 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.hardware.biometrics.events;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.hardware.biometrics.BiometricFaceConstants;
+import android.hardware.biometrics.BiometricFingerprintConstants;
+import android.hardware.biometrics.BiometricRequestConstants;
+import android.hardware.biometrics.BiometricSourceType;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import com.android.internal.util.DataClass;
+
+/**
+ * Information related to a unrecoverable error encountered during biometric authentication.
+ * @hide
+ */
+@DataClass(
+ genParcelable = true,
+ genAidl = true,
+ genBuilder = true,
+ genSetters = true,
+ genEqualsHashCode = true
+)
+public final class AuthenticationErrorInfo implements Parcelable {
+ /** Identifies {@link BiometricSourceType} of authentication. */
+ @NonNull
+ private final BiometricSourceType mBiometricSourceType;
+
+ /** Indicates reason from {@link BiometricRequestConstants.RequestReason} for
+ * requesting authentication. */
+ @BiometricRequestConstants.RequestReason
+ private final int mRequestReason;
+
+ /**
+ * String shown on the UI for an authentication error.
+ */
+ @Nullable
+ private final String mErrString;
+
+ /**
+ * {@link BiometricFaceConstants.FaceError} or
+ * {@link BiometricFingerprintConstants.FingerprintError} int identifying the error message for
+ * an authentication error
+ */
+ private final int mErrCode;
+
+
+
+ // Code below generated by codegen v1.0.23.
+ //
+ // DO NOT MODIFY!
+ // CHECKSTYLE:OFF Generated code
+ //
+ // To regenerate run:
+ // $ codegen $ANDROID_BUILD_TOP/frameworks/base/core/java/android/hardware/biometrics/events/AuthenticationErrorInfo.java
+ //
+ // To exclude the generated code from IntelliJ auto-formatting enable (one-time):
+ // Settings > Editor > Code Style > Formatter Control
+ //@formatter:off
+
+
+ @DataClass.Generated.Member
+ /* package-private */ AuthenticationErrorInfo(
+ @NonNull BiometricSourceType biometricSourceType,
+ @BiometricRequestConstants.RequestReason int requestReason,
+ @Nullable String errString,
+ int errCode) {
+ this.mBiometricSourceType = biometricSourceType;
+ com.android.internal.util.AnnotationValidations.validate(
+ NonNull.class, null, mBiometricSourceType);
+ this.mRequestReason = requestReason;
+ com.android.internal.util.AnnotationValidations.validate(
+ BiometricRequestConstants.RequestReason.class, null, mRequestReason);
+ this.mErrString = errString;
+ this.mErrCode = errCode;
+
+ // onConstructed(); // You can define this method to get a callback
+ }
+
+ /**
+ * Identifies {@link BiometricSourceType} of authentication.
+ */
+ @DataClass.Generated.Member
+ public @NonNull BiometricSourceType getBiometricSourceType() {
+ return mBiometricSourceType;
+ }
+
+ /**
+ * Indicates reason from {@link BiometricRequestConstants.RequestReason} for
+ * requesting authentication.
+ */
+ @DataClass.Generated.Member
+ public @BiometricRequestConstants.RequestReason int getRequestReason() {
+ return mRequestReason;
+ }
+
+ /**
+ * String shown on the UI for an authentication error.
+ */
+ @DataClass.Generated.Member
+ public @Nullable String getErrString() {
+ return mErrString;
+ }
+
+ /**
+ * {@link BiometricFaceConstants.FaceError} or
+ * {@link BiometricFingerprintConstants.FingerprintError} int identifying the error message for
+ * an authentication error
+ */
+ @DataClass.Generated.Member
+ public int getErrCode() {
+ return mErrCode;
+ }
+
+ @Override
+ @DataClass.Generated.Member
+ public boolean equals(@Nullable Object o) {
+ // You can override field equality logic by defining either of the methods like:
+ // boolean fieldNameEquals(AuthenticationErrorInfo other) { ... }
+ // boolean fieldNameEquals(FieldType otherValue) { ... }
+
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ @SuppressWarnings("unchecked")
+ AuthenticationErrorInfo that = (AuthenticationErrorInfo) o;
+ //noinspection PointlessBooleanExpression
+ return true
+ && java.util.Objects.equals(mBiometricSourceType, that.mBiometricSourceType)
+ && mRequestReason == that.mRequestReason
+ && java.util.Objects.equals(mErrString, that.mErrString)
+ && mErrCode == that.mErrCode;
+ }
+
+ @Override
+ @DataClass.Generated.Member
+ public int hashCode() {
+ // You can override field hashCode logic by defining methods like:
+ // int fieldNameHashCode() { ... }
+
+ int _hash = 1;
+ _hash = 31 * _hash + java.util.Objects.hashCode(mBiometricSourceType);
+ _hash = 31 * _hash + mRequestReason;
+ _hash = 31 * _hash + java.util.Objects.hashCode(mErrString);
+ _hash = 31 * _hash + mErrCode;
+ return _hash;
+ }
+
+ @Override
+ @DataClass.Generated.Member
+ public void writeToParcel(@NonNull Parcel dest, int flags) {
+ // You can override field parcelling by defining methods like:
+ // void parcelFieldName(Parcel dest, int flags) { ... }
+
+ byte flg = 0;
+ if (mErrString != null) flg |= 0x4;
+ dest.writeByte(flg);
+ dest.writeTypedObject(mBiometricSourceType, flags);
+ dest.writeInt(mRequestReason);
+ if (mErrString != null) dest.writeString(mErrString);
+ dest.writeInt(mErrCode);
+ }
+
+ @Override
+ @DataClass.Generated.Member
+ public int describeContents() { return 0; }
+
+ /** @hide */
+ @SuppressWarnings({"unchecked", "RedundantCast"})
+ @DataClass.Generated.Member
+ /* package-private */ AuthenticationErrorInfo(@NonNull Parcel in) {
+ // You can override field unparcelling by defining methods like:
+ // static FieldType unparcelFieldName(Parcel in) { ... }
+
+ byte flg = in.readByte();
+ BiometricSourceType biometricSourceType = (BiometricSourceType) in.readTypedObject(BiometricSourceType.CREATOR);
+ int requestReason = in.readInt();
+ String errString = (flg & 0x4) == 0 ? null : in.readString();
+ int errCode = in.readInt();
+
+ this.mBiometricSourceType = biometricSourceType;
+ com.android.internal.util.AnnotationValidations.validate(
+ NonNull.class, null, mBiometricSourceType);
+ this.mRequestReason = requestReason;
+ com.android.internal.util.AnnotationValidations.validate(
+ BiometricRequestConstants.RequestReason.class, null, mRequestReason);
+ this.mErrString = errString;
+ this.mErrCode = errCode;
+
+ // onConstructed(); // You can define this method to get a callback
+ }
+
+ @DataClass.Generated.Member
+ public static final @NonNull Parcelable.Creator<AuthenticationErrorInfo> CREATOR
+ = new Parcelable.Creator<AuthenticationErrorInfo>() {
+ @Override
+ public AuthenticationErrorInfo[] newArray(int size) {
+ return new AuthenticationErrorInfo[size];
+ }
+
+ @Override
+ public AuthenticationErrorInfo createFromParcel(@NonNull Parcel in) {
+ return new AuthenticationErrorInfo(in);
+ }
+ };
+
+ /**
+ * A builder for {@link AuthenticationErrorInfo}
+ */
+ @SuppressWarnings("WeakerAccess")
+ @DataClass.Generated.Member
+ public static final class Builder {
+
+ private @NonNull BiometricSourceType mBiometricSourceType;
+ private @BiometricRequestConstants.RequestReason int mRequestReason;
+ private @Nullable String mErrString;
+ private int mErrCode;
+
+ private long mBuilderFieldsSet = 0L;
+
+ /**
+ * Creates a new Builder.
+ *
+ * @param biometricSourceType
+ * Identifies {@link BiometricSourceType} of authentication.
+ * @param requestReason
+ * Indicates reason from {@link BiometricRequestConstants.RequestReason} for
+ * requesting authentication.
+ * @param errString
+ * String shown on the UI for an authentication error.
+ * @param errCode
+ * {@link BiometricFaceConstants.FaceError} or
+ * {@link BiometricFingerprintConstants.FingerprintError} int identifying the error message for
+ * an authentication error
+ */
+ public Builder(
+ @NonNull BiometricSourceType biometricSourceType,
+ @BiometricRequestConstants.RequestReason int requestReason,
+ @Nullable String errString,
+ int errCode) {
+ mBiometricSourceType = biometricSourceType;
+ com.android.internal.util.AnnotationValidations.validate(
+ NonNull.class, null, mBiometricSourceType);
+ mRequestReason = requestReason;
+ com.android.internal.util.AnnotationValidations.validate(
+ BiometricRequestConstants.RequestReason.class, null, mRequestReason);
+ mErrString = errString;
+ mErrCode = errCode;
+ }
+
+ /**
+ * Identifies {@link BiometricSourceType} of authentication.
+ */
+ @DataClass.Generated.Member
+ public @NonNull Builder setBiometricSourceType(@NonNull BiometricSourceType value) {
+ checkNotUsed();
+ mBuilderFieldsSet |= 0x1;
+ mBiometricSourceType = value;
+ return this;
+ }
+
+ /**
+ * Indicates reason from {@link BiometricRequestConstants.RequestReason} for
+ * requesting authentication.
+ */
+ @DataClass.Generated.Member
+ public @NonNull Builder setRequestReason(@BiometricRequestConstants.RequestReason int value) {
+ checkNotUsed();
+ mBuilderFieldsSet |= 0x2;
+ mRequestReason = value;
+ return this;
+ }
+
+ /**
+ * String shown on the UI for an authentication error.
+ */
+ @DataClass.Generated.Member
+ public @NonNull Builder setErrString(@NonNull String value) {
+ checkNotUsed();
+ mBuilderFieldsSet |= 0x4;
+ mErrString = value;
+ return this;
+ }
+
+ /**
+ * {@link BiometricFaceConstants.FaceError} or
+ * {@link BiometricFingerprintConstants.FingerprintError} int identifying the error message for
+ * an authentication error
+ */
+ @DataClass.Generated.Member
+ public @NonNull Builder setErrCode(int value) {
+ checkNotUsed();
+ mBuilderFieldsSet |= 0x8;
+ mErrCode = value;
+ return this;
+ }
+
+ /** Builds the instance. This builder should not be touched after calling this! */
+ public @NonNull AuthenticationErrorInfo build() {
+ checkNotUsed();
+ mBuilderFieldsSet |= 0x10; // Mark builder used
+
+ AuthenticationErrorInfo o = new AuthenticationErrorInfo(
+ mBiometricSourceType,
+ mRequestReason,
+ mErrString,
+ mErrCode);
+ return o;
+ }
+
+ private void checkNotUsed() {
+ if ((mBuilderFieldsSet & 0x10) != 0) {
+ throw new IllegalStateException(
+ "This Builder should not be reused. Use a new Builder instance instead");
+ }
+ }
+ }
+
+ @DataClass.Generated(
+ time = 1713305309794L,
+ codegenVersion = "1.0.23",
+ sourceFile = "frameworks/base/core/java/android/hardware/biometrics/events/AuthenticationErrorInfo.java",
+ inputSignatures = "private final @android.annotation.NonNull android.hardware.biometrics.BiometricSourceType mBiometricSourceType\nprivate final @android.hardware.biometrics.BiometricRequestConstants.RequestReason int mRequestReason\nprivate final @android.annotation.Nullable java.lang.String mErrString\nprivate final int mErrCode\nclass AuthenticationErrorInfo extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genParcelable=true, genAidl=true, genBuilder=true, genSetters=true, genEqualsHashCode=true)")
+ @Deprecated
+ private void __metadata() {}
+
+
+ //@formatter:on
+ // End of generated code
+
+}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/SettingsClockSize.kt b/core/java/android/hardware/biometrics/events/AuthenticationFailedInfo.aidl
similarity index 76%
rename from packages/SystemUI/src/com/android/systemui/keyguard/shared/model/SettingsClockSize.kt
rename to core/java/android/hardware/biometrics/events/AuthenticationFailedInfo.aidl
index c6b0f58..5712f91 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/SettingsClockSize.kt
+++ b/core/java/android/hardware/biometrics/events/AuthenticationFailedInfo.aidl
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2023 The Android Open Source Project
+ * Copyright (C) 2024 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -12,12 +12,8 @@
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
- *
*/
-package com.android.systemui.keyguard.shared.model
+package android.hardware.biometrics.events;
-enum class SettingsClockSize {
- DYNAMIC,
- SMALL,
-}
+parcelable AuthenticationFailedInfo;
diff --git a/core/java/android/hardware/biometrics/events/AuthenticationFailedInfo.java b/core/java/android/hardware/biometrics/events/AuthenticationFailedInfo.java
new file mode 100644
index 0000000..7218780
--- /dev/null
+++ b/core/java/android/hardware/biometrics/events/AuthenticationFailedInfo.java
@@ -0,0 +1,295 @@
+/*
+ * 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.hardware.biometrics.events;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.hardware.biometrics.BiometricRequestConstants;
+import android.hardware.biometrics.BiometricSourceType;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import com.android.internal.util.DataClass;
+
+/**
+ * Information related to a failed biometric authentication.
+ * @hide
+ */
+@DataClass(
+ genParcelable = true,
+ genAidl = true,
+ genBuilder = true,
+ genSetters = true,
+ genEqualsHashCode = true
+)
+public final class AuthenticationFailedInfo implements Parcelable {
+ /** Identifies {@link BiometricSourceType} of authentication. */
+ @NonNull
+ private final BiometricSourceType mBiometricSourceType;
+
+ /** Indicates reason from {@link BiometricRequestConstants.RequestReason} for
+ * requesting authentication. */
+ @BiometricRequestConstants.RequestReason
+ private final int mRequestReason;
+
+ /**
+ * The user id for the requested authentication
+ */
+ private final int mUserId;
+
+
+
+ // Code below generated by codegen v1.0.23.
+ //
+ // DO NOT MODIFY!
+ // CHECKSTYLE:OFF Generated code
+ //
+ // To regenerate run:
+ // $ codegen $ANDROID_BUILD_TOP/frameworks/base/core/java/android/hardware/biometrics/events/AuthenticationFailedInfo.java
+ //
+ // To exclude the generated code from IntelliJ auto-formatting enable (one-time):
+ // Settings > Editor > Code Style > Formatter Control
+ //@formatter:off
+
+
+ @DataClass.Generated.Member
+ /* package-private */ AuthenticationFailedInfo(
+ @NonNull BiometricSourceType biometricSourceType,
+ @BiometricRequestConstants.RequestReason int requestReason,
+ int userId) {
+ this.mBiometricSourceType = biometricSourceType;
+ com.android.internal.util.AnnotationValidations.validate(
+ NonNull.class, null, mBiometricSourceType);
+ this.mRequestReason = requestReason;
+ com.android.internal.util.AnnotationValidations.validate(
+ BiometricRequestConstants.RequestReason.class, null, mRequestReason);
+ this.mUserId = userId;
+
+ // onConstructed(); // You can define this method to get a callback
+ }
+
+ /**
+ * Identifies {@link BiometricSourceType} of authentication.
+ */
+ @DataClass.Generated.Member
+ public @NonNull BiometricSourceType getBiometricSourceType() {
+ return mBiometricSourceType;
+ }
+
+ /**
+ * Indicates reason from {@link BiometricRequestConstants.RequestReason} for
+ * requesting authentication.
+ */
+ @DataClass.Generated.Member
+ public @BiometricRequestConstants.RequestReason int getRequestReason() {
+ return mRequestReason;
+ }
+
+ /**
+ * The user id for the requested authentication
+ */
+ @DataClass.Generated.Member
+ public int getUserId() {
+ return mUserId;
+ }
+
+ @Override
+ @DataClass.Generated.Member
+ public boolean equals(@Nullable Object o) {
+ // You can override field equality logic by defining either of the methods like:
+ // boolean fieldNameEquals(AuthenticationFailedInfo other) { ... }
+ // boolean fieldNameEquals(FieldType otherValue) { ... }
+
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ @SuppressWarnings("unchecked")
+ AuthenticationFailedInfo that = (AuthenticationFailedInfo) o;
+ //noinspection PointlessBooleanExpression
+ return true
+ && java.util.Objects.equals(mBiometricSourceType, that.mBiometricSourceType)
+ && mRequestReason == that.mRequestReason
+ && mUserId == that.mUserId;
+ }
+
+ @Override
+ @DataClass.Generated.Member
+ public int hashCode() {
+ // You can override field hashCode logic by defining methods like:
+ // int fieldNameHashCode() { ... }
+
+ int _hash = 1;
+ _hash = 31 * _hash + java.util.Objects.hashCode(mBiometricSourceType);
+ _hash = 31 * _hash + mRequestReason;
+ _hash = 31 * _hash + mUserId;
+ return _hash;
+ }
+
+ @Override
+ @DataClass.Generated.Member
+ public void writeToParcel(@NonNull Parcel dest, int flags) {
+ // You can override field parcelling by defining methods like:
+ // void parcelFieldName(Parcel dest, int flags) { ... }
+
+ dest.writeTypedObject(mBiometricSourceType, flags);
+ dest.writeInt(mRequestReason);
+ dest.writeInt(mUserId);
+ }
+
+ @Override
+ @DataClass.Generated.Member
+ public int describeContents() { return 0; }
+
+ /** @hide */
+ @SuppressWarnings({"unchecked", "RedundantCast"})
+ @DataClass.Generated.Member
+ /* package-private */ AuthenticationFailedInfo(@NonNull Parcel in) {
+ // You can override field unparcelling by defining methods like:
+ // static FieldType unparcelFieldName(Parcel in) { ... }
+
+ BiometricSourceType biometricSourceType = (BiometricSourceType) in.readTypedObject(BiometricSourceType.CREATOR);
+ int requestReason = in.readInt();
+ int userId = in.readInt();
+
+ this.mBiometricSourceType = biometricSourceType;
+ com.android.internal.util.AnnotationValidations.validate(
+ NonNull.class, null, mBiometricSourceType);
+ this.mRequestReason = requestReason;
+ com.android.internal.util.AnnotationValidations.validate(
+ BiometricRequestConstants.RequestReason.class, null, mRequestReason);
+ this.mUserId = userId;
+
+ // onConstructed(); // You can define this method to get a callback
+ }
+
+ @DataClass.Generated.Member
+ public static final @NonNull Parcelable.Creator<AuthenticationFailedInfo> CREATOR
+ = new Parcelable.Creator<AuthenticationFailedInfo>() {
+ @Override
+ public AuthenticationFailedInfo[] newArray(int size) {
+ return new AuthenticationFailedInfo[size];
+ }
+
+ @Override
+ public AuthenticationFailedInfo createFromParcel(@NonNull Parcel in) {
+ return new AuthenticationFailedInfo(in);
+ }
+ };
+
+ /**
+ * A builder for {@link AuthenticationFailedInfo}
+ */
+ @SuppressWarnings("WeakerAccess")
+ @DataClass.Generated.Member
+ public static final class Builder {
+
+ private @NonNull BiometricSourceType mBiometricSourceType;
+ private @BiometricRequestConstants.RequestReason int mRequestReason;
+ private int mUserId;
+
+ private long mBuilderFieldsSet = 0L;
+
+ /**
+ * Creates a new Builder.
+ *
+ * @param biometricSourceType
+ * Identifies {@link BiometricSourceType} of authentication.
+ * @param requestReason
+ * Indicates reason from {@link BiometricRequestConstants.RequestReason} for
+ * requesting authentication.
+ * @param userId
+ * The user id for the requested authentication
+ */
+ public Builder(
+ @NonNull BiometricSourceType biometricSourceType,
+ @BiometricRequestConstants.RequestReason int requestReason,
+ int userId) {
+ mBiometricSourceType = biometricSourceType;
+ com.android.internal.util.AnnotationValidations.validate(
+ NonNull.class, null, mBiometricSourceType);
+ mRequestReason = requestReason;
+ com.android.internal.util.AnnotationValidations.validate(
+ BiometricRequestConstants.RequestReason.class, null, mRequestReason);
+ mUserId = userId;
+ }
+
+ /**
+ * Identifies {@link BiometricSourceType} of authentication.
+ */
+ @DataClass.Generated.Member
+ public @NonNull Builder setBiometricSourceType(@NonNull BiometricSourceType value) {
+ checkNotUsed();
+ mBuilderFieldsSet |= 0x1;
+ mBiometricSourceType = value;
+ return this;
+ }
+
+ /**
+ * Indicates reason from {@link BiometricRequestConstants.RequestReason} for
+ * requesting authentication.
+ */
+ @DataClass.Generated.Member
+ public @NonNull Builder setRequestReason(@BiometricRequestConstants.RequestReason int value) {
+ checkNotUsed();
+ mBuilderFieldsSet |= 0x2;
+ mRequestReason = value;
+ return this;
+ }
+
+ /**
+ * The user id for the requested authentication
+ */
+ @DataClass.Generated.Member
+ public @NonNull Builder setUserId(int value) {
+ checkNotUsed();
+ mBuilderFieldsSet |= 0x4;
+ mUserId = value;
+ return this;
+ }
+
+ /** Builds the instance. This builder should not be touched after calling this! */
+ public @NonNull AuthenticationFailedInfo build() {
+ checkNotUsed();
+ mBuilderFieldsSet |= 0x8; // Mark builder used
+
+ AuthenticationFailedInfo o = new AuthenticationFailedInfo(
+ mBiometricSourceType,
+ mRequestReason,
+ mUserId);
+ return o;
+ }
+
+ private void checkNotUsed() {
+ if ((mBuilderFieldsSet & 0x8) != 0) {
+ throw new IllegalStateException(
+ "This Builder should not be reused. Use a new Builder instance instead");
+ }
+ }
+ }
+
+ @DataClass.Generated(
+ time = 1713305348961L,
+ codegenVersion = "1.0.23",
+ sourceFile = "frameworks/base/core/java/android/hardware/biometrics/events/AuthenticationFailedInfo.java",
+ inputSignatures = "private final @android.annotation.NonNull android.hardware.biometrics.BiometricSourceType mBiometricSourceType\nprivate final @android.hardware.biometrics.BiometricRequestConstants.RequestReason int mRequestReason\nprivate final int mUserId\nclass AuthenticationFailedInfo extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genParcelable=true, genAidl=true, genBuilder=true, genSetters=true, genEqualsHashCode=true)")
+ @Deprecated
+ private void __metadata() {}
+
+
+ //@formatter:on
+ // End of generated code
+
+}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/SettingsClockSize.kt b/core/java/android/hardware/biometrics/events/AuthenticationHelpInfo.aidl
similarity index 76%
copy from packages/SystemUI/src/com/android/systemui/keyguard/shared/model/SettingsClockSize.kt
copy to core/java/android/hardware/biometrics/events/AuthenticationHelpInfo.aidl
index c6b0f58..a5efb20 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/SettingsClockSize.kt
+++ b/core/java/android/hardware/biometrics/events/AuthenticationHelpInfo.aidl
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2023 The Android Open Source Project
+ * Copyright (C) 2024 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -12,12 +12,8 @@
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
- *
*/
-package com.android.systemui.keyguard.shared.model
+package android.hardware.biometrics.events;
-enum class SettingsClockSize {
- DYNAMIC,
- SMALL,
-}
+parcelable AuthenticationHelpInfo;
diff --git a/core/java/android/hardware/biometrics/events/AuthenticationHelpInfo.java b/core/java/android/hardware/biometrics/events/AuthenticationHelpInfo.java
new file mode 100644
index 0000000..4ba8a5e
--- /dev/null
+++ b/core/java/android/hardware/biometrics/events/AuthenticationHelpInfo.java
@@ -0,0 +1,337 @@
+/*
+ * 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.hardware.biometrics.events;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.hardware.biometrics.BiometricRequestConstants;
+import android.hardware.biometrics.BiometricSourceType;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import com.android.internal.util.DataClass;
+
+/**
+ * Information related to a recoverable error encountered during biometric authentication.
+ * @hide
+ */
+@DataClass(
+ genParcelable = true,
+ genAidl = true,
+ genBuilder = true,
+ genSetters = true,
+ genEqualsHashCode = true
+)
+public final class AuthenticationHelpInfo implements Parcelable {
+ /** Identifies {@link BiometricSourceType} of authentication. */
+ @NonNull
+ private final BiometricSourceType mBiometricSourceType;
+
+ /** Indicates reason from {@link BiometricRequestConstants.RequestReason} for
+ * requesting authentication. */
+ @BiometricRequestConstants.RequestReason
+ private final int mRequestReason;
+
+ /**
+ * Guidance help string shown on the UI for authentication help.
+ */
+ @Nullable
+ private final String mHelpString;
+
+ /**
+ * An integer identifying the help message for authentication help.
+ */
+ private final int mHelpCode;
+
+
+
+ // Code below generated by codegen v1.0.23.
+ //
+ // DO NOT MODIFY!
+ // CHECKSTYLE:OFF Generated code
+ //
+ // To regenerate run:
+ // $ codegen $ANDROID_BUILD_TOP/frameworks/base/core/java/android/hardware/biometrics/events/AuthenticationHelpInfo.java
+ //
+ // To exclude the generated code from IntelliJ auto-formatting enable (one-time):
+ // Settings > Editor > Code Style > Formatter Control
+ //@formatter:off
+
+
+ @DataClass.Generated.Member
+ /* package-private */ AuthenticationHelpInfo(
+ @NonNull BiometricSourceType biometricSourceType,
+ @BiometricRequestConstants.RequestReason int requestReason,
+ @Nullable String helpString,
+ int helpCode) {
+ this.mBiometricSourceType = biometricSourceType;
+ com.android.internal.util.AnnotationValidations.validate(
+ NonNull.class, null, mBiometricSourceType);
+ this.mRequestReason = requestReason;
+ com.android.internal.util.AnnotationValidations.validate(
+ BiometricRequestConstants.RequestReason.class, null, mRequestReason);
+ this.mHelpString = helpString;
+ this.mHelpCode = helpCode;
+
+ // onConstructed(); // You can define this method to get a callback
+ }
+
+ /**
+ * Identifies {@link BiometricSourceType} of authentication.
+ */
+ @DataClass.Generated.Member
+ public @NonNull BiometricSourceType getBiometricSourceType() {
+ return mBiometricSourceType;
+ }
+
+ /**
+ * Indicates reason from {@link BiometricRequestConstants.RequestReason} for
+ * requesting authentication.
+ */
+ @DataClass.Generated.Member
+ public @BiometricRequestConstants.RequestReason int getRequestReason() {
+ return mRequestReason;
+ }
+
+ /**
+ * Guidance help string shown on the UI for authentication help.
+ */
+ @DataClass.Generated.Member
+ public @Nullable String getHelpString() {
+ return mHelpString;
+ }
+
+ /**
+ * An integer identifying the help message for authentication help.
+ */
+ @DataClass.Generated.Member
+ public int getHelpCode() {
+ return mHelpCode;
+ }
+
+ @Override
+ @DataClass.Generated.Member
+ public boolean equals(@Nullable Object o) {
+ // You can override field equality logic by defining either of the methods like:
+ // boolean fieldNameEquals(AuthenticationHelpInfo other) { ... }
+ // boolean fieldNameEquals(FieldType otherValue) { ... }
+
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ @SuppressWarnings("unchecked")
+ AuthenticationHelpInfo that = (AuthenticationHelpInfo) o;
+ //noinspection PointlessBooleanExpression
+ return true
+ && java.util.Objects.equals(mBiometricSourceType, that.mBiometricSourceType)
+ && mRequestReason == that.mRequestReason
+ && java.util.Objects.equals(mHelpString, that.mHelpString)
+ && mHelpCode == that.mHelpCode;
+ }
+
+ @Override
+ @DataClass.Generated.Member
+ public int hashCode() {
+ // You can override field hashCode logic by defining methods like:
+ // int fieldNameHashCode() { ... }
+
+ int _hash = 1;
+ _hash = 31 * _hash + java.util.Objects.hashCode(mBiometricSourceType);
+ _hash = 31 * _hash + mRequestReason;
+ _hash = 31 * _hash + java.util.Objects.hashCode(mHelpString);
+ _hash = 31 * _hash + mHelpCode;
+ return _hash;
+ }
+
+ @Override
+ @DataClass.Generated.Member
+ public void writeToParcel(@NonNull Parcel dest, int flags) {
+ // You can override field parcelling by defining methods like:
+ // void parcelFieldName(Parcel dest, int flags) { ... }
+
+ byte flg = 0;
+ if (mHelpString != null) flg |= 0x4;
+ dest.writeByte(flg);
+ dest.writeTypedObject(mBiometricSourceType, flags);
+ dest.writeInt(mRequestReason);
+ if (mHelpString != null) dest.writeString(mHelpString);
+ dest.writeInt(mHelpCode);
+ }
+
+ @Override
+ @DataClass.Generated.Member
+ public int describeContents() { return 0; }
+
+ /** @hide */
+ @SuppressWarnings({"unchecked", "RedundantCast"})
+ @DataClass.Generated.Member
+ /* package-private */ AuthenticationHelpInfo(@NonNull Parcel in) {
+ // You can override field unparcelling by defining methods like:
+ // static FieldType unparcelFieldName(Parcel in) { ... }
+
+ byte flg = in.readByte();
+ BiometricSourceType biometricSourceType = (BiometricSourceType) in.readTypedObject(BiometricSourceType.CREATOR);
+ int requestReason = in.readInt();
+ String helpString = (flg & 0x4) == 0 ? null : in.readString();
+ int helpCode = in.readInt();
+
+ this.mBiometricSourceType = biometricSourceType;
+ com.android.internal.util.AnnotationValidations.validate(
+ NonNull.class, null, mBiometricSourceType);
+ this.mRequestReason = requestReason;
+ com.android.internal.util.AnnotationValidations.validate(
+ BiometricRequestConstants.RequestReason.class, null, mRequestReason);
+ this.mHelpString = helpString;
+ this.mHelpCode = helpCode;
+
+ // onConstructed(); // You can define this method to get a callback
+ }
+
+ @DataClass.Generated.Member
+ public static final @NonNull Parcelable.Creator<AuthenticationHelpInfo> CREATOR
+ = new Parcelable.Creator<AuthenticationHelpInfo>() {
+ @Override
+ public AuthenticationHelpInfo[] newArray(int size) {
+ return new AuthenticationHelpInfo[size];
+ }
+
+ @Override
+ public AuthenticationHelpInfo createFromParcel(@NonNull Parcel in) {
+ return new AuthenticationHelpInfo(in);
+ }
+ };
+
+ /**
+ * A builder for {@link AuthenticationHelpInfo}
+ */
+ @SuppressWarnings("WeakerAccess")
+ @DataClass.Generated.Member
+ public static final class Builder {
+
+ private @NonNull BiometricSourceType mBiometricSourceType;
+ private @BiometricRequestConstants.RequestReason int mRequestReason;
+ private @Nullable String mHelpString;
+ private int mHelpCode;
+
+ private long mBuilderFieldsSet = 0L;
+
+ /**
+ * Creates a new Builder.
+ *
+ * @param biometricSourceType
+ * Identifies {@link BiometricSourceType} of authentication.
+ * @param requestReason
+ * Indicates reason from {@link BiometricRequestConstants.RequestReason} for
+ * requesting authentication.
+ * @param helpString
+ * Guidance help string shown on the UI for authentication help.
+ * @param helpCode
+ * An integer identifying the help message for authentication help.
+ */
+ public Builder(
+ @NonNull BiometricSourceType biometricSourceType,
+ @BiometricRequestConstants.RequestReason int requestReason,
+ @Nullable String helpString,
+ int helpCode) {
+ mBiometricSourceType = biometricSourceType;
+ com.android.internal.util.AnnotationValidations.validate(
+ NonNull.class, null, mBiometricSourceType);
+ mRequestReason = requestReason;
+ com.android.internal.util.AnnotationValidations.validate(
+ BiometricRequestConstants.RequestReason.class, null, mRequestReason);
+ mHelpString = helpString;
+ mHelpCode = helpCode;
+ }
+
+ /**
+ * Identifies {@link BiometricSourceType} of authentication.
+ */
+ @DataClass.Generated.Member
+ public @NonNull Builder setBiometricSourceType(@NonNull BiometricSourceType value) {
+ checkNotUsed();
+ mBuilderFieldsSet |= 0x1;
+ mBiometricSourceType = value;
+ return this;
+ }
+
+ /**
+ * Indicates reason from {@link BiometricRequestConstants.RequestReason} for
+ * requesting authentication.
+ */
+ @DataClass.Generated.Member
+ public @NonNull Builder setRequestReason(@BiometricRequestConstants.RequestReason int value) {
+ checkNotUsed();
+ mBuilderFieldsSet |= 0x2;
+ mRequestReason = value;
+ return this;
+ }
+
+ /**
+ * Guidance help string shown on the UI for authentication help.
+ */
+ @DataClass.Generated.Member
+ public @NonNull Builder setHelpString(@NonNull String value) {
+ checkNotUsed();
+ mBuilderFieldsSet |= 0x4;
+ mHelpString = value;
+ return this;
+ }
+
+ /**
+ * An integer identifying the help message for authentication help.
+ */
+ @DataClass.Generated.Member
+ public @NonNull Builder setHelpCode(int value) {
+ checkNotUsed();
+ mBuilderFieldsSet |= 0x8;
+ mHelpCode = value;
+ return this;
+ }
+
+ /** Builds the instance. This builder should not be touched after calling this! */
+ public @NonNull AuthenticationHelpInfo build() {
+ checkNotUsed();
+ mBuilderFieldsSet |= 0x10; // Mark builder used
+
+ AuthenticationHelpInfo o = new AuthenticationHelpInfo(
+ mBiometricSourceType,
+ mRequestReason,
+ mHelpString,
+ mHelpCode);
+ return o;
+ }
+
+ private void checkNotUsed() {
+ if ((mBuilderFieldsSet & 0x10) != 0) {
+ throw new IllegalStateException(
+ "This Builder should not be reused. Use a new Builder instance instead");
+ }
+ }
+ }
+
+ @DataClass.Generated(
+ time = 1713305435226L,
+ codegenVersion = "1.0.23",
+ sourceFile = "frameworks/base/core/java/android/hardware/biometrics/events/AuthenticationHelpInfo.java",
+ inputSignatures = "private final @android.annotation.NonNull android.hardware.biometrics.BiometricSourceType mBiometricSourceType\nprivate final @android.hardware.biometrics.BiometricRequestConstants.RequestReason int mRequestReason\nprivate final @android.annotation.Nullable java.lang.String mHelpString\nprivate final int mHelpCode\nclass AuthenticationHelpInfo extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genParcelable=true, genAidl=true, genBuilder=true, genSetters=true, genEqualsHashCode=true)")
+ @Deprecated
+ private void __metadata() {}
+
+
+ //@formatter:on
+ // End of generated code
+
+}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/SettingsClockSize.kt b/core/java/android/hardware/biometrics/events/AuthenticationStartedInfo.aidl
similarity index 76%
copy from packages/SystemUI/src/com/android/systemui/keyguard/shared/model/SettingsClockSize.kt
copy to core/java/android/hardware/biometrics/events/AuthenticationStartedInfo.aidl
index c6b0f58..325379c 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/SettingsClockSize.kt
+++ b/core/java/android/hardware/biometrics/events/AuthenticationStartedInfo.aidl
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2023 The Android Open Source Project
+ * Copyright (C) 2024 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -12,12 +12,8 @@
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
- *
*/
-package com.android.systemui.keyguard.shared.model
+package android.hardware.biometrics.events;
-enum class SettingsClockSize {
- DYNAMIC,
- SMALL,
-}
+parcelable AuthenticationStartedInfo;
diff --git a/core/java/android/hardware/biometrics/events/AuthenticationStartedInfo.java b/core/java/android/hardware/biometrics/events/AuthenticationStartedInfo.java
new file mode 100644
index 0000000..06461ea
--- /dev/null
+++ b/core/java/android/hardware/biometrics/events/AuthenticationStartedInfo.java
@@ -0,0 +1,258 @@
+/*
+ * 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.hardware.biometrics.events;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.hardware.biometrics.BiometricRequestConstants;
+import android.hardware.biometrics.BiometricSourceType;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import com.android.internal.util.DataClass;
+
+/**
+ * Information about a request to start biometric authentication
+ * @hide
+ */
+@DataClass(
+ genParcelable = true,
+ genAidl = true,
+ genBuilder = true,
+ genSetters = true,
+ genEqualsHashCode = true
+)
+public final class AuthenticationStartedInfo implements Parcelable {
+ /** Identifies {@link BiometricSourceType} of authentication. */
+ @NonNull
+ private final BiometricSourceType mBiometricSourceType;
+
+ /** Indicates reason from {@link BiometricRequestConstants.RequestReason} for
+ * requesting authentication. */
+ @BiometricRequestConstants.RequestReason
+ private final int mRequestReason;
+
+
+
+ // Code below generated by codegen v1.0.23.
+ //
+ // DO NOT MODIFY!
+ // CHECKSTYLE:OFF Generated code
+ //
+ // To regenerate run:
+ // $ codegen $ANDROID_BUILD_TOP/frameworks/base/core/java/android/hardware/biometrics/events/AuthenticationStartedInfo.java
+ //
+ // To exclude the generated code from IntelliJ auto-formatting enable (one-time):
+ // Settings > Editor > Code Style > Formatter Control
+ //@formatter:off
+
+
+ @DataClass.Generated.Member
+ /* package-private */ AuthenticationStartedInfo(
+ @NonNull BiometricSourceType biometricSourceType,
+ @BiometricRequestConstants.RequestReason int requestReason) {
+ this.mBiometricSourceType = biometricSourceType;
+ com.android.internal.util.AnnotationValidations.validate(
+ NonNull.class, null, mBiometricSourceType);
+ this.mRequestReason = requestReason;
+ com.android.internal.util.AnnotationValidations.validate(
+ BiometricRequestConstants.RequestReason.class, null, mRequestReason);
+
+ // onConstructed(); // You can define this method to get a callback
+ }
+
+ /**
+ * Identifies {@link BiometricSourceType} of authentication.
+ */
+ @DataClass.Generated.Member
+ public @NonNull BiometricSourceType getBiometricSourceType() {
+ return mBiometricSourceType;
+ }
+
+ /**
+ * Indicates reason from {@link BiometricRequestConstants.RequestReason} for
+ * requesting authentication.
+ */
+ @DataClass.Generated.Member
+ public @BiometricRequestConstants.RequestReason int getRequestReason() {
+ return mRequestReason;
+ }
+
+ @Override
+ @DataClass.Generated.Member
+ public boolean equals(@Nullable Object o) {
+ // You can override field equality logic by defining either of the methods like:
+ // boolean fieldNameEquals(AuthenticationStartedInfo other) { ... }
+ // boolean fieldNameEquals(FieldType otherValue) { ... }
+
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ @SuppressWarnings("unchecked")
+ AuthenticationStartedInfo that = (AuthenticationStartedInfo) o;
+ //noinspection PointlessBooleanExpression
+ return true
+ && java.util.Objects.equals(mBiometricSourceType, that.mBiometricSourceType)
+ && mRequestReason == that.mRequestReason;
+ }
+
+ @Override
+ @DataClass.Generated.Member
+ public int hashCode() {
+ // You can override field hashCode logic by defining methods like:
+ // int fieldNameHashCode() { ... }
+
+ int _hash = 1;
+ _hash = 31 * _hash + java.util.Objects.hashCode(mBiometricSourceType);
+ _hash = 31 * _hash + mRequestReason;
+ return _hash;
+ }
+
+ @Override
+ @DataClass.Generated.Member
+ public void writeToParcel(@NonNull Parcel dest, int flags) {
+ // You can override field parcelling by defining methods like:
+ // void parcelFieldName(Parcel dest, int flags) { ... }
+
+ dest.writeTypedObject(mBiometricSourceType, flags);
+ dest.writeInt(mRequestReason);
+ }
+
+ @Override
+ @DataClass.Generated.Member
+ public int describeContents() { return 0; }
+
+ /** @hide */
+ @SuppressWarnings({"unchecked", "RedundantCast"})
+ @DataClass.Generated.Member
+ /* package-private */ AuthenticationStartedInfo(@NonNull Parcel in) {
+ // You can override field unparcelling by defining methods like:
+ // static FieldType unparcelFieldName(Parcel in) { ... }
+
+ BiometricSourceType biometricSourceType = (BiometricSourceType) in.readTypedObject(BiometricSourceType.CREATOR);
+ int requestReason = in.readInt();
+
+ this.mBiometricSourceType = biometricSourceType;
+ com.android.internal.util.AnnotationValidations.validate(
+ NonNull.class, null, mBiometricSourceType);
+ this.mRequestReason = requestReason;
+ com.android.internal.util.AnnotationValidations.validate(
+ BiometricRequestConstants.RequestReason.class, null, mRequestReason);
+
+ // onConstructed(); // You can define this method to get a callback
+ }
+
+ @DataClass.Generated.Member
+ public static final @NonNull Parcelable.Creator<AuthenticationStartedInfo> CREATOR
+ = new Parcelable.Creator<AuthenticationStartedInfo>() {
+ @Override
+ public AuthenticationStartedInfo[] newArray(int size) {
+ return new AuthenticationStartedInfo[size];
+ }
+
+ @Override
+ public AuthenticationStartedInfo createFromParcel(@NonNull Parcel in) {
+ return new AuthenticationStartedInfo(in);
+ }
+ };
+
+ /**
+ * A builder for {@link AuthenticationStartedInfo}
+ */
+ @SuppressWarnings("WeakerAccess")
+ @DataClass.Generated.Member
+ public static final class Builder {
+
+ private @NonNull BiometricSourceType mBiometricSourceType;
+ private @BiometricRequestConstants.RequestReason int mRequestReason;
+
+ private long mBuilderFieldsSet = 0L;
+
+ /**
+ * Creates a new Builder.
+ *
+ * @param biometricSourceType
+ * Identifies {@link BiometricSourceType} of authentication.
+ * @param requestReason
+ * Indicates reason from {@link BiometricRequestConstants.RequestReason} for
+ * requesting authentication.
+ */
+ public Builder(
+ @NonNull BiometricSourceType biometricSourceType,
+ @BiometricRequestConstants.RequestReason int requestReason) {
+ mBiometricSourceType = biometricSourceType;
+ com.android.internal.util.AnnotationValidations.validate(
+ NonNull.class, null, mBiometricSourceType);
+ mRequestReason = requestReason;
+ com.android.internal.util.AnnotationValidations.validate(
+ BiometricRequestConstants.RequestReason.class, null, mRequestReason);
+ }
+
+ /**
+ * Identifies {@link BiometricSourceType} of authentication.
+ */
+ @DataClass.Generated.Member
+ public @NonNull Builder setBiometricSourceType(@NonNull BiometricSourceType value) {
+ checkNotUsed();
+ mBuilderFieldsSet |= 0x1;
+ mBiometricSourceType = value;
+ return this;
+ }
+
+ /**
+ * Indicates reason from {@link BiometricRequestConstants.RequestReason} for
+ * requesting authentication.
+ */
+ @DataClass.Generated.Member
+ public @NonNull Builder setRequestReason(@BiometricRequestConstants.RequestReason int value) {
+ checkNotUsed();
+ mBuilderFieldsSet |= 0x2;
+ mRequestReason = value;
+ return this;
+ }
+
+ /** Builds the instance. This builder should not be touched after calling this! */
+ public @NonNull AuthenticationStartedInfo build() {
+ checkNotUsed();
+ mBuilderFieldsSet |= 0x4; // Mark builder used
+
+ AuthenticationStartedInfo o = new AuthenticationStartedInfo(
+ mBiometricSourceType,
+ mRequestReason);
+ return o;
+ }
+
+ private void checkNotUsed() {
+ if ((mBuilderFieldsSet & 0x4) != 0) {
+ throw new IllegalStateException(
+ "This Builder should not be reused. Use a new Builder instance instead");
+ }
+ }
+ }
+
+ @DataClass.Generated(
+ time = 1713305495570L,
+ codegenVersion = "1.0.23",
+ sourceFile = "frameworks/base/core/java/android/hardware/biometrics/events/AuthenticationStartedInfo.java",
+ inputSignatures = "private final @android.annotation.NonNull android.hardware.biometrics.BiometricSourceType mBiometricSourceType\nprivate final @android.hardware.biometrics.BiometricRequestConstants.RequestReason int mRequestReason\nclass AuthenticationStartedInfo extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genParcelable=true, genAidl=true, genBuilder=true, genSetters=true, genEqualsHashCode=true)")
+ @Deprecated
+ private void __metadata() {}
+
+
+ //@formatter:on
+ // End of generated code
+
+}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/SettingsClockSize.kt b/core/java/android/hardware/biometrics/events/AuthenticationStoppedInfo.aidl
similarity index 76%
copy from packages/SystemUI/src/com/android/systemui/keyguard/shared/model/SettingsClockSize.kt
copy to core/java/android/hardware/biometrics/events/AuthenticationStoppedInfo.aidl
index c6b0f58..2414c5a 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/SettingsClockSize.kt
+++ b/core/java/android/hardware/biometrics/events/AuthenticationStoppedInfo.aidl
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2023 The Android Open Source Project
+ * Copyright (C) 2024 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -12,12 +12,8 @@
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
- *
*/
-package com.android.systemui.keyguard.shared.model
+package android.hardware.biometrics.events;
-enum class SettingsClockSize {
- DYNAMIC,
- SMALL,
-}
+parcelable AuthenticationStoppedInfo;
diff --git a/core/java/android/hardware/biometrics/events/AuthenticationStoppedInfo.java b/core/java/android/hardware/biometrics/events/AuthenticationStoppedInfo.java
new file mode 100644
index 0000000..43ed2ec
--- /dev/null
+++ b/core/java/android/hardware/biometrics/events/AuthenticationStoppedInfo.java
@@ -0,0 +1,258 @@
+/*
+ * 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.hardware.biometrics.events;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.hardware.biometrics.BiometricRequestConstants;
+import android.hardware.biometrics.BiometricSourceType;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import com.android.internal.util.DataClass;
+
+/**
+ * Information about a request to stop biometric authentication
+ * @hide
+ */
+@DataClass(
+ genParcelable = true,
+ genAidl = true,
+ genBuilder = true,
+ genSetters = true,
+ genEqualsHashCode = true
+)
+public final class AuthenticationStoppedInfo implements Parcelable {
+ /** Identifies {@link BiometricSourceType} of authentication. */
+ @NonNull
+ private final BiometricSourceType mBiometricSourceType;
+
+ /** Indicates reason from {@link BiometricRequestConstants.RequestReason} for
+ * requesting authentication. */
+ @BiometricRequestConstants.RequestReason
+ private final int mRequestReason;
+
+
+
+ // Code below generated by codegen v1.0.23.
+ //
+ // DO NOT MODIFY!
+ // CHECKSTYLE:OFF Generated code
+ //
+ // To regenerate run:
+ // $ codegen $ANDROID_BUILD_TOP/frameworks/base/core/java/android/hardware/biometrics/events/AuthenticationStoppedInfo.java
+ //
+ // To exclude the generated code from IntelliJ auto-formatting enable (one-time):
+ // Settings > Editor > Code Style > Formatter Control
+ //@formatter:off
+
+
+ @DataClass.Generated.Member
+ /* package-private */ AuthenticationStoppedInfo(
+ @NonNull BiometricSourceType biometricSourceType,
+ @BiometricRequestConstants.RequestReason int requestReason) {
+ this.mBiometricSourceType = biometricSourceType;
+ com.android.internal.util.AnnotationValidations.validate(
+ NonNull.class, null, mBiometricSourceType);
+ this.mRequestReason = requestReason;
+ com.android.internal.util.AnnotationValidations.validate(
+ BiometricRequestConstants.RequestReason.class, null, mRequestReason);
+
+ // onConstructed(); // You can define this method to get a callback
+ }
+
+ /**
+ * Identifies {@link BiometricSourceType} of authentication.
+ */
+ @DataClass.Generated.Member
+ public @NonNull BiometricSourceType getBiometricSourceType() {
+ return mBiometricSourceType;
+ }
+
+ /**
+ * Indicates reason from {@link BiometricRequestConstants.RequestReason} for
+ * requesting authentication.
+ */
+ @DataClass.Generated.Member
+ public @BiometricRequestConstants.RequestReason int getRequestReason() {
+ return mRequestReason;
+ }
+
+ @Override
+ @DataClass.Generated.Member
+ public boolean equals(@Nullable Object o) {
+ // You can override field equality logic by defining either of the methods like:
+ // boolean fieldNameEquals(AuthenticationStoppedInfo other) { ... }
+ // boolean fieldNameEquals(FieldType otherValue) { ... }
+
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ @SuppressWarnings("unchecked")
+ AuthenticationStoppedInfo that = (AuthenticationStoppedInfo) o;
+ //noinspection PointlessBooleanExpression
+ return true
+ && java.util.Objects.equals(mBiometricSourceType, that.mBiometricSourceType)
+ && mRequestReason == that.mRequestReason;
+ }
+
+ @Override
+ @DataClass.Generated.Member
+ public int hashCode() {
+ // You can override field hashCode logic by defining methods like:
+ // int fieldNameHashCode() { ... }
+
+ int _hash = 1;
+ _hash = 31 * _hash + java.util.Objects.hashCode(mBiometricSourceType);
+ _hash = 31 * _hash + mRequestReason;
+ return _hash;
+ }
+
+ @Override
+ @DataClass.Generated.Member
+ public void writeToParcel(@NonNull Parcel dest, int flags) {
+ // You can override field parcelling by defining methods like:
+ // void parcelFieldName(Parcel dest, int flags) { ... }
+
+ dest.writeTypedObject(mBiometricSourceType, flags);
+ dest.writeInt(mRequestReason);
+ }
+
+ @Override
+ @DataClass.Generated.Member
+ public int describeContents() { return 0; }
+
+ /** @hide */
+ @SuppressWarnings({"unchecked", "RedundantCast"})
+ @DataClass.Generated.Member
+ /* package-private */ AuthenticationStoppedInfo(@NonNull Parcel in) {
+ // You can override field unparcelling by defining methods like:
+ // static FieldType unparcelFieldName(Parcel in) { ... }
+
+ BiometricSourceType biometricSourceType = (BiometricSourceType) in.readTypedObject(BiometricSourceType.CREATOR);
+ int requestReason = in.readInt();
+
+ this.mBiometricSourceType = biometricSourceType;
+ com.android.internal.util.AnnotationValidations.validate(
+ NonNull.class, null, mBiometricSourceType);
+ this.mRequestReason = requestReason;
+ com.android.internal.util.AnnotationValidations.validate(
+ BiometricRequestConstants.RequestReason.class, null, mRequestReason);
+
+ // onConstructed(); // You can define this method to get a callback
+ }
+
+ @DataClass.Generated.Member
+ public static final @NonNull Parcelable.Creator<AuthenticationStoppedInfo> CREATOR
+ = new Parcelable.Creator<AuthenticationStoppedInfo>() {
+ @Override
+ public AuthenticationStoppedInfo[] newArray(int size) {
+ return new AuthenticationStoppedInfo[size];
+ }
+
+ @Override
+ public AuthenticationStoppedInfo createFromParcel(@NonNull Parcel in) {
+ return new AuthenticationStoppedInfo(in);
+ }
+ };
+
+ /**
+ * A builder for {@link AuthenticationStoppedInfo}
+ */
+ @SuppressWarnings("WeakerAccess")
+ @DataClass.Generated.Member
+ public static final class Builder {
+
+ private @NonNull BiometricSourceType mBiometricSourceType;
+ private @BiometricRequestConstants.RequestReason int mRequestReason;
+
+ private long mBuilderFieldsSet = 0L;
+
+ /**
+ * Creates a new Builder.
+ *
+ * @param biometricSourceType
+ * Identifies {@link BiometricSourceType} of authentication.
+ * @param requestReason
+ * Indicates reason from {@link BiometricRequestConstants.RequestReason} for
+ * requesting authentication.
+ */
+ public Builder(
+ @NonNull BiometricSourceType biometricSourceType,
+ @BiometricRequestConstants.RequestReason int requestReason) {
+ mBiometricSourceType = biometricSourceType;
+ com.android.internal.util.AnnotationValidations.validate(
+ NonNull.class, null, mBiometricSourceType);
+ mRequestReason = requestReason;
+ com.android.internal.util.AnnotationValidations.validate(
+ BiometricRequestConstants.RequestReason.class, null, mRequestReason);
+ }
+
+ /**
+ * Identifies {@link BiometricSourceType} of authentication.
+ */
+ @DataClass.Generated.Member
+ public @NonNull Builder setBiometricSourceType(@NonNull BiometricSourceType value) {
+ checkNotUsed();
+ mBuilderFieldsSet |= 0x1;
+ mBiometricSourceType = value;
+ return this;
+ }
+
+ /**
+ * Indicates reason from {@link BiometricRequestConstants.RequestReason} for
+ * requesting authentication.
+ */
+ @DataClass.Generated.Member
+ public @NonNull Builder setRequestReason(@BiometricRequestConstants.RequestReason int value) {
+ checkNotUsed();
+ mBuilderFieldsSet |= 0x2;
+ mRequestReason = value;
+ return this;
+ }
+
+ /** Builds the instance. This builder should not be touched after calling this! */
+ public @NonNull AuthenticationStoppedInfo build() {
+ checkNotUsed();
+ mBuilderFieldsSet |= 0x4; // Mark builder used
+
+ AuthenticationStoppedInfo o = new AuthenticationStoppedInfo(
+ mBiometricSourceType,
+ mRequestReason);
+ return o;
+ }
+
+ private void checkNotUsed() {
+ if ((mBuilderFieldsSet & 0x4) != 0) {
+ throw new IllegalStateException(
+ "This Builder should not be reused. Use a new Builder instance instead");
+ }
+ }
+ }
+
+ @DataClass.Generated(
+ time = 1713305502581L,
+ codegenVersion = "1.0.23",
+ sourceFile = "frameworks/base/core/java/android/hardware/biometrics/events/AuthenticationStoppedInfo.java",
+ inputSignatures = "private final @android.annotation.NonNull android.hardware.biometrics.BiometricSourceType mBiometricSourceType\nprivate final @android.hardware.biometrics.BiometricRequestConstants.RequestReason int mRequestReason\nclass AuthenticationStoppedInfo extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genParcelable=true, genAidl=true, genBuilder=true, genSetters=true, genEqualsHashCode=true)")
+ @Deprecated
+ private void __metadata() {}
+
+
+ //@formatter:on
+ // End of generated code
+
+}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/SettingsClockSize.kt b/core/java/android/hardware/biometrics/events/AuthenticationSucceededInfo.aidl
similarity index 76%
copy from packages/SystemUI/src/com/android/systemui/keyguard/shared/model/SettingsClockSize.kt
copy to core/java/android/hardware/biometrics/events/AuthenticationSucceededInfo.aidl
index c6b0f58..21cc085 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/SettingsClockSize.kt
+++ b/core/java/android/hardware/biometrics/events/AuthenticationSucceededInfo.aidl
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2023 The Android Open Source Project
+ * Copyright (C) 2024 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -12,12 +12,8 @@
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
- *
*/
-package com.android.systemui.keyguard.shared.model
+package android.hardware.biometrics.events;
-enum class SettingsClockSize {
- DYNAMIC,
- SMALL,
-}
+parcelable AuthenticationSucceededInfo;
diff --git a/core/java/android/hardware/biometrics/events/AuthenticationSucceededInfo.java b/core/java/android/hardware/biometrics/events/AuthenticationSucceededInfo.java
new file mode 100644
index 0000000..425966d
--- /dev/null
+++ b/core/java/android/hardware/biometrics/events/AuthenticationSucceededInfo.java
@@ -0,0 +1,335 @@
+/*
+ * 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.hardware.biometrics.events;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.hardware.biometrics.BiometricRequestConstants;
+import android.hardware.biometrics.BiometricSourceType;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import com.android.internal.util.DataClass;
+
+/**
+ * Information about a successful biometric authentication.
+ * @hide
+ */
+@DataClass(
+ genParcelable = true,
+ genAidl = true,
+ genBuilder = true,
+ genSetters = true,
+ genEqualsHashCode = true
+)
+public final class AuthenticationSucceededInfo implements Parcelable {
+ /** Identifies {@link BiometricSourceType} of authentication. */
+ @NonNull
+ private final BiometricSourceType mBiometricSourceType;
+
+ /** Indicates reason from {@link BiometricRequestConstants.RequestReason} for
+ * requesting authentication. */
+ @BiometricRequestConstants.RequestReason
+ private final int mRequestReason;
+
+ /**
+ * Indicates whether auth was from strong biometric.
+ */
+ private final boolean mIsStrongBiometric;
+
+ /**
+ * The user id for the requested authentication
+ */
+ private final int mUserId;
+
+
+
+ // Code below generated by codegen v1.0.23.
+ //
+ // DO NOT MODIFY!
+ // CHECKSTYLE:OFF Generated code
+ //
+ // To regenerate run:
+ // $ codegen $ANDROID_BUILD_TOP/frameworks/base/core/java/android/hardware/biometrics/events/AuthenticationSucceededInfo.java
+ //
+ // To exclude the generated code from IntelliJ auto-formatting enable (one-time):
+ // Settings > Editor > Code Style > Formatter Control
+ //@formatter:off
+
+
+ @DataClass.Generated.Member
+ /* package-private */ AuthenticationSucceededInfo(
+ @NonNull BiometricSourceType biometricSourceType,
+ @BiometricRequestConstants.RequestReason int requestReason,
+ boolean isStrongBiometric,
+ int userId) {
+ this.mBiometricSourceType = biometricSourceType;
+ com.android.internal.util.AnnotationValidations.validate(
+ NonNull.class, null, mBiometricSourceType);
+ this.mRequestReason = requestReason;
+ com.android.internal.util.AnnotationValidations.validate(
+ BiometricRequestConstants.RequestReason.class, null, mRequestReason);
+ this.mIsStrongBiometric = isStrongBiometric;
+ this.mUserId = userId;
+
+ // onConstructed(); // You can define this method to get a callback
+ }
+
+ /**
+ * Identifies {@link BiometricSourceType} of authentication.
+ */
+ @DataClass.Generated.Member
+ public @NonNull BiometricSourceType getBiometricSourceType() {
+ return mBiometricSourceType;
+ }
+
+ /**
+ * Indicates reason from {@link BiometricRequestConstants.RequestReason} for
+ * requesting authentication.
+ */
+ @DataClass.Generated.Member
+ public @BiometricRequestConstants.RequestReason int getRequestReason() {
+ return mRequestReason;
+ }
+
+ /**
+ * Indicates whether auth was from strong biometric.
+ */
+ @DataClass.Generated.Member
+ public boolean isIsStrongBiometric() {
+ return mIsStrongBiometric;
+ }
+
+ /**
+ * The user id for the requested authentication
+ */
+ @DataClass.Generated.Member
+ public int getUserId() {
+ return mUserId;
+ }
+
+ @Override
+ @DataClass.Generated.Member
+ public boolean equals(@Nullable Object o) {
+ // You can override field equality logic by defining either of the methods like:
+ // boolean fieldNameEquals(AuthenticationSucceededInfo other) { ... }
+ // boolean fieldNameEquals(FieldType otherValue) { ... }
+
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ @SuppressWarnings("unchecked")
+ AuthenticationSucceededInfo that = (AuthenticationSucceededInfo) o;
+ //noinspection PointlessBooleanExpression
+ return true
+ && java.util.Objects.equals(mBiometricSourceType, that.mBiometricSourceType)
+ && mRequestReason == that.mRequestReason
+ && mIsStrongBiometric == that.mIsStrongBiometric
+ && mUserId == that.mUserId;
+ }
+
+ @Override
+ @DataClass.Generated.Member
+ public int hashCode() {
+ // You can override field hashCode logic by defining methods like:
+ // int fieldNameHashCode() { ... }
+
+ int _hash = 1;
+ _hash = 31 * _hash + java.util.Objects.hashCode(mBiometricSourceType);
+ _hash = 31 * _hash + mRequestReason;
+ _hash = 31 * _hash + Boolean.hashCode(mIsStrongBiometric);
+ _hash = 31 * _hash + mUserId;
+ return _hash;
+ }
+
+ @Override
+ @DataClass.Generated.Member
+ public void writeToParcel(@NonNull Parcel dest, int flags) {
+ // You can override field parcelling by defining methods like:
+ // void parcelFieldName(Parcel dest, int flags) { ... }
+
+ byte flg = 0;
+ if (mIsStrongBiometric) flg |= 0x4;
+ dest.writeByte(flg);
+ dest.writeTypedObject(mBiometricSourceType, flags);
+ dest.writeInt(mRequestReason);
+ dest.writeInt(mUserId);
+ }
+
+ @Override
+ @DataClass.Generated.Member
+ public int describeContents() { return 0; }
+
+ /** @hide */
+ @SuppressWarnings({"unchecked", "RedundantCast"})
+ @DataClass.Generated.Member
+ /* package-private */ AuthenticationSucceededInfo(@NonNull Parcel in) {
+ // You can override field unparcelling by defining methods like:
+ // static FieldType unparcelFieldName(Parcel in) { ... }
+
+ byte flg = in.readByte();
+ boolean isStrongBiometric = (flg & 0x4) != 0;
+ BiometricSourceType biometricSourceType = (BiometricSourceType) in.readTypedObject(BiometricSourceType.CREATOR);
+ int requestReason = in.readInt();
+ int userId = in.readInt();
+
+ this.mBiometricSourceType = biometricSourceType;
+ com.android.internal.util.AnnotationValidations.validate(
+ NonNull.class, null, mBiometricSourceType);
+ this.mRequestReason = requestReason;
+ com.android.internal.util.AnnotationValidations.validate(
+ BiometricRequestConstants.RequestReason.class, null, mRequestReason);
+ this.mIsStrongBiometric = isStrongBiometric;
+ this.mUserId = userId;
+
+ // onConstructed(); // You can define this method to get a callback
+ }
+
+ @DataClass.Generated.Member
+ public static final @NonNull Parcelable.Creator<AuthenticationSucceededInfo> CREATOR
+ = new Parcelable.Creator<AuthenticationSucceededInfo>() {
+ @Override
+ public AuthenticationSucceededInfo[] newArray(int size) {
+ return new AuthenticationSucceededInfo[size];
+ }
+
+ @Override
+ public AuthenticationSucceededInfo createFromParcel(@NonNull Parcel in) {
+ return new AuthenticationSucceededInfo(in);
+ }
+ };
+
+ /**
+ * A builder for {@link AuthenticationSucceededInfo}
+ */
+ @SuppressWarnings("WeakerAccess")
+ @DataClass.Generated.Member
+ public static final class Builder {
+
+ private @NonNull BiometricSourceType mBiometricSourceType;
+ private @BiometricRequestConstants.RequestReason int mRequestReason;
+ private boolean mIsStrongBiometric;
+ private int mUserId;
+
+ private long mBuilderFieldsSet = 0L;
+
+ /**
+ * Creates a new Builder.
+ *
+ * @param biometricSourceType
+ * Identifies {@link BiometricSourceType} of authentication.
+ * @param requestReason
+ * Indicates reason from {@link BiometricRequestConstants.RequestReason} for
+ * requesting authentication.
+ * @param isStrongBiometric
+ * Indicates whether auth was from strong biometric.
+ * @param userId
+ * The user id for the requested authentication
+ */
+ public Builder(
+ @NonNull BiometricSourceType biometricSourceType,
+ @BiometricRequestConstants.RequestReason int requestReason,
+ boolean isStrongBiometric,
+ int userId) {
+ mBiometricSourceType = biometricSourceType;
+ com.android.internal.util.AnnotationValidations.validate(
+ NonNull.class, null, mBiometricSourceType);
+ mRequestReason = requestReason;
+ com.android.internal.util.AnnotationValidations.validate(
+ BiometricRequestConstants.RequestReason.class, null, mRequestReason);
+ mIsStrongBiometric = isStrongBiometric;
+ mUserId = userId;
+ }
+
+ /**
+ * Identifies {@link BiometricSourceType} of authentication.
+ */
+ @DataClass.Generated.Member
+ public @NonNull Builder setBiometricSourceType(@NonNull BiometricSourceType value) {
+ checkNotUsed();
+ mBuilderFieldsSet |= 0x1;
+ mBiometricSourceType = value;
+ return this;
+ }
+
+ /**
+ * Indicates reason from {@link BiometricRequestConstants.RequestReason} for
+ * requesting authentication.
+ */
+ @DataClass.Generated.Member
+ public @NonNull Builder setRequestReason(@BiometricRequestConstants.RequestReason int value) {
+ checkNotUsed();
+ mBuilderFieldsSet |= 0x2;
+ mRequestReason = value;
+ return this;
+ }
+
+ /**
+ * Indicates whether auth was from strong biometric.
+ */
+ @DataClass.Generated.Member
+ public @NonNull Builder setIsStrongBiometric(boolean value) {
+ checkNotUsed();
+ mBuilderFieldsSet |= 0x4;
+ mIsStrongBiometric = value;
+ return this;
+ }
+
+ /**
+ * The user id for the requested authentication
+ */
+ @DataClass.Generated.Member
+ public @NonNull Builder setUserId(int value) {
+ checkNotUsed();
+ mBuilderFieldsSet |= 0x8;
+ mUserId = value;
+ return this;
+ }
+
+ /** Builds the instance. This builder should not be touched after calling this! */
+ public @NonNull AuthenticationSucceededInfo build() {
+ checkNotUsed();
+ mBuilderFieldsSet |= 0x10; // Mark builder used
+
+ AuthenticationSucceededInfo o = new AuthenticationSucceededInfo(
+ mBiometricSourceType,
+ mRequestReason,
+ mIsStrongBiometric,
+ mUserId);
+ return o;
+ }
+
+ private void checkNotUsed() {
+ if ((mBuilderFieldsSet & 0x10) != 0) {
+ throw new IllegalStateException(
+ "This Builder should not be reused. Use a new Builder instance instead");
+ }
+ }
+ }
+
+ @DataClass.Generated(
+ time = 1713305509212L,
+ codegenVersion = "1.0.23",
+ sourceFile = "frameworks/base/core/java/android/hardware/biometrics/events/AuthenticationSucceededInfo.java",
+ inputSignatures = "private final @android.annotation.NonNull android.hardware.biometrics.BiometricSourceType mBiometricSourceType\nprivate final @android.hardware.biometrics.BiometricRequestConstants.RequestReason int mRequestReason\nprivate final boolean mIsStrongBiometric\nprivate final int mUserId\nclass AuthenticationSucceededInfo extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genParcelable=true, genAidl=true, genBuilder=true, genSetters=true, genEqualsHashCode=true)")
+ @Deprecated
+ private void __metadata() {}
+
+
+ //@formatter:on
+ // End of generated code
+
+}
diff --git a/core/java/android/hardware/biometrics/flags.aconfig b/core/java/android/hardware/biometrics/flags.aconfig
index 9836eec..4284ad0 100644
--- a/core/java/android/hardware/biometrics/flags.aconfig
+++ b/core/java/android/hardware/biometrics/flags.aconfig
@@ -1,4 +1,5 @@
package: "android.hardware.biometrics"
+container: "system"
flag {
name: "last_authentication_time"
diff --git a/core/java/android/hardware/devicestate/feature/flags.aconfig b/core/java/android/hardware/devicestate/feature/flags.aconfig
index e474603..12d3f94 100644
--- a/core/java/android/hardware/devicestate/feature/flags.aconfig
+++ b/core/java/android/hardware/devicestate/feature/flags.aconfig
@@ -1,4 +1,5 @@
package: "android.hardware.devicestate.feature.flags"
+container: "system"
flag {
name: "device_state_property_api"
diff --git a/core/java/android/hardware/flags/overlayproperties_flags.aconfig b/core/java/android/hardware/flags/overlayproperties_flags.aconfig
index 1165e65..6c86108 100644
--- a/core/java/android/hardware/flags/overlayproperties_flags.aconfig
+++ b/core/java/android/hardware/flags/overlayproperties_flags.aconfig
@@ -1,4 +1,5 @@
package: "android.hardware.flags"
+container: "system"
flag {
name: "overlayproperties_class_api"
diff --git a/core/java/android/hardware/input/IInputManager.aidl b/core/java/android/hardware/input/IInputManager.aidl
index 2d474d6..1c37aa2 100644
--- a/core/java/android/hardware/input/IInputManager.aidl
+++ b/core/java/android/hardware/input/IInputManager.aidl
@@ -165,17 +165,10 @@
// static association for the cleared input port will be restored.
void removePortAssociation(in String inputPort);
- // Add a runtime association between the input device and display, using device's descriptor.
- void addUniqueIdAssociationByDescriptor(in String inputDeviceDescriptor,
- in String displayUniqueId);
- // Remove the runtime association between the input device and display, using device's
- // descriptor.
- void removeUniqueIdAssociationByDescriptor(in String inputDeviceDescriptor);
-
- // Add a runtime association between the input device and display, using device's port.
- void addUniqueIdAssociationByPort(in String inputPort, in String displayUniqueId);
- // Remove the runtime association between the input device and display, using device's port.
- void removeUniqueIdAssociationByPort(in String inputPort);
+ // Add a runtime association between the input device and display.
+ void addUniqueIdAssociation(in String inputPort, in String displayUniqueId);
+ // Remove the runtime association between the input device and display.
+ void removeUniqueIdAssociation(in String inputPort);
InputSensorInfo[] getSensorList(int deviceId);
diff --git a/core/java/android/hardware/input/InputManager.java b/core/java/android/hardware/input/InputManager.java
index 4dda2c7..f949158 100644
--- a/core/java/android/hardware/input/InputManager.java
+++ b/core/java/android/hardware/input/InputManager.java
@@ -17,7 +17,6 @@
package android.hardware.input;
import static com.android.input.flags.Flags.FLAG_INPUT_DEVICE_VIEW_BEHAVIOR_API;
-import static com.android.input.flags.Flags.FLAG_DEVICE_ASSOCIATIONS;
import static com.android.hardware.input.Flags.keyboardLayoutPreviewFlag;
import android.Manifest;
@@ -1055,14 +1054,13 @@
/**
* Add a runtime association between the input port and the display port. This overrides any
* static associations.
- * @param inputPort the port of the input device
- * @param displayPort the physical port of the associated display
+ * @param inputPort The port of the input device.
+ * @param displayPort The physical port of the associated display.
* <p>
* Requires {@link android.Manifest.permission#ASSOCIATE_INPUT_DEVICE_TO_DISPLAY}.
* </p>
* @hide
*/
- @RequiresPermission(android.Manifest.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY)
public void addPortAssociation(@NonNull String inputPort, int displayPort) {
try {
mIm.addPortAssociation(inputPort, displayPort);
@@ -1074,13 +1072,12 @@
/**
* Remove the runtime association between the input port and the display port. Any existing
* static association for the cleared input port will be restored.
- * @param inputPort the port of the input device to be cleared
+ * @param inputPort The port of the input device to be cleared.
* <p>
* Requires {@link android.Manifest.permission#ASSOCIATE_INPUT_DEVICE_TO_DISPLAY}.
* </p>
* @hide
*/
- @RequiresPermission(android.Manifest.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY)
public void removePortAssociation(@NonNull String inputPort) {
try {
mIm.removePortAssociation(inputPort);
@@ -1092,74 +1089,30 @@
/**
* Add a runtime association between the input port and display, by unique id. Input ports are
* expected to be unique.
- * @param inputPort the port of the input device
- * @param displayUniqueId the unique id of the associated display
+ * @param inputPort The port of the input device.
+ * @param displayUniqueId The unique id of the associated display.
* <p>
* Requires {@link android.Manifest.permission#ASSOCIATE_INPUT_DEVICE_TO_DISPLAY}.
* </p>
* @hide
*/
- @FlaggedApi(FLAG_DEVICE_ASSOCIATIONS)
- @RequiresPermission(android.Manifest.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY)
@TestApi
- public void addUniqueIdAssociationByPort(@NonNull String inputPort,
+ public void addUniqueIdAssociation(@NonNull String inputPort,
@NonNull String displayUniqueId) {
- mGlobal.addUniqueIdAssociationByPort(inputPort, displayUniqueId);
+ mGlobal.addUniqueIdAssociation(inputPort, displayUniqueId);
}
/**
* Removes a runtime association between the input device and display.
- * @param inputPort the port of the input device
+ * @param inputPort The port of the input device.
* <p>
* Requires {@link android.Manifest.permission#ASSOCIATE_INPUT_DEVICE_TO_DISPLAY}.
* </p>
* @hide
*/
- @FlaggedApi(FLAG_DEVICE_ASSOCIATIONS)
- @RequiresPermission(android.Manifest.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY)
@TestApi
- public void removeUniqueIdAssociationByPort(@NonNull String inputPort) {
- mGlobal.removeUniqueIdAssociationByPort(inputPort);
- }
-
- /**
- * Add a runtime association between the input device name and display, by descriptor. Input
- * device descriptors are expected to be unique per physical device, though one physical
- * device can have multiple virtual input devices that possess the same descriptor.
- * E.g. a keyboard with built in trackpad will be 2 different input devices with the same
- * descriptor.
- * @param inputDeviceDescriptor the descriptor of the input device
- * @param displayUniqueId the unique id of the associated display
- * <p>
- * Requires {@link android.Manifest.permissions.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY}.
- * </p>
- * @hide
- */
- @FlaggedApi(FLAG_DEVICE_ASSOCIATIONS)
- @RequiresPermission(android.Manifest.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY)
- @TestApi
- public void addUniqueIdAssociationByDescriptor(@NonNull String inputDeviceDescriptor,
- @NonNull String displayUniqueId) {
- mGlobal.addUniqueIdAssociationByDescriptor(inputDeviceDescriptor, displayUniqueId);
- }
-
- /**
- * Removes a runtime association between the input device and display.
- }
-
- /**
- * Removes a runtime association between the input device and display.
- * @param inputDeviceDescriptor the descriptor of the input device
- * <p>
- * Requires {@link android.Manifest.permissions.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY}.
- * </p>
- * @hide
- */
- @FlaggedApi(FLAG_DEVICE_ASSOCIATIONS)
- @RequiresPermission(android.Manifest.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY)
- @TestApi
- public void removeUniqueIdAssociationByDescriptor(@NonNull String inputDeviceDescriptor) {
- mGlobal.removeUniqueIdAssociationByDescriptor(inputDeviceDescriptor);
+ public void removeUniqueIdAssociation(@NonNull String inputPort) {
+ mGlobal.removeUniqueIdAssociation(inputPort);
}
/**
diff --git a/core/java/android/hardware/input/InputManagerGlobal.java b/core/java/android/hardware/input/InputManagerGlobal.java
index 1d253d9..7b29666 100644
--- a/core/java/android/hardware/input/InputManagerGlobal.java
+++ b/core/java/android/hardware/input/InputManagerGlobal.java
@@ -1467,46 +1467,22 @@
}
/**
- * @see InputManager#addUniqueIdAssociationByPort(String, String)
+ * @see InputManager#addUniqueIdAssociation(String, String)
*/
- public void addUniqueIdAssociationByPort(@NonNull String inputPort,
- @NonNull String displayUniqueId) {
+ public void addUniqueIdAssociation(@NonNull String inputPort, @NonNull String displayUniqueId) {
try {
- mIm.addUniqueIdAssociationByPort(inputPort, displayUniqueId);
+ mIm.addUniqueIdAssociation(inputPort, displayUniqueId);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
/**
- * @see InputManager#removeUniqueIdAssociationByPort(String)
+ * @see InputManager#removeUniqueIdAssociation(String)
*/
- public void removeUniqueIdAssociationByPort(@NonNull String inputPort) {
+ public void removeUniqueIdAssociation(@NonNull String inputPort) {
try {
- mIm.removeUniqueIdAssociationByPort(inputPort);
- } catch (RemoteException e) {
- throw e.rethrowFromSystemServer();
- }
- }
-
- /**
- * @see InputManager#addUniqueIdAssociationByDescriptor(String, String)
- */
- public void addUniqueIdAssociationByDescriptor(@NonNull String inputDeviceDescriptor,
- @NonNull String displayUniqueId) {
- try {
- mIm.addUniqueIdAssociationByDescriptor(inputDeviceDescriptor, displayUniqueId);
- } catch (RemoteException e) {
- throw e.rethrowFromSystemServer();
- }
- }
-
- /**
- * @see InputManager#removeUniqueIdAssociationByDescriptor(String)
- */
- public void removeUniqueIdAssociationByDescriptor(@NonNull String inputDeviceDescriptor) {
- try {
- mIm.removeUniqueIdAssociationByDescriptor(inputDeviceDescriptor);
+ mIm.removeUniqueIdAssociation(inputPort);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
diff --git a/core/java/android/hardware/input/input_framework.aconfig b/core/java/android/hardware/input/input_framework.aconfig
index 9684e64..ed536ce 100644
--- a/core/java/android/hardware/input/input_framework.aconfig
+++ b/core/java/android/hardware/input/input_framework.aconfig
@@ -1,4 +1,5 @@
package: "com.android.hardware.input"
+container: "system"
# Project link: https://gantry.corp.google.com/projects/android_platform_input_native/changes
diff --git a/core/java/android/hardware/radio/flags.aconfig b/core/java/android/hardware/radio/flags.aconfig
index d0d10c1..c9ab62d 100644
--- a/core/java/android/hardware/radio/flags.aconfig
+++ b/core/java/android/hardware/radio/flags.aconfig
@@ -1,4 +1,5 @@
package: "android.hardware.radio"
+container: "system"
flag {
name: "hd_radio_improved"
diff --git a/core/java/android/hardware/usb/flags/system_sw_usb_flags.aconfig b/core/java/android/hardware/usb/flags/system_sw_usb_flags.aconfig
index fac02ce..967fc42 100644
--- a/core/java/android/hardware/usb/flags/system_sw_usb_flags.aconfig
+++ b/core/java/android/hardware/usb/flags/system_sw_usb_flags.aconfig
@@ -1,4 +1,5 @@
package: "android.hardware.usb.flags"
+container: "system"
flag {
name: "enable_usb_data_compliance_warning"
diff --git a/core/java/android/hardware/usb/flags/usb_framework_flags.aconfig b/core/java/android/hardware/usb/flags/usb_framework_flags.aconfig
index 3dd746c..94df160 100644
--- a/core/java/android/hardware/usb/flags/usb_framework_flags.aconfig
+++ b/core/java/android/hardware/usb/flags/usb_framework_flags.aconfig
@@ -1,4 +1,5 @@
package: "android.hardware.usb.flags"
+container: "system"
flag {
name: "enable_is_pd_compliant_api"
diff --git a/core/java/android/inputmethodservice/InputMethodService.java b/core/java/android/inputmethodservice/InputMethodService.java
index cbfc5d1..278e863 100644
--- a/core/java/android/inputmethodservice/InputMethodService.java
+++ b/core/java/android/inputmethodservice/InputMethodService.java
@@ -765,6 +765,7 @@
private boolean mSystemCallingShowSoftInput;
private boolean mSystemCallingHideSoftInput;
+ private boolean mSimultaneousStylusAndTouchEnabled;
/**
* {@inheritDoc}
@@ -1129,9 +1130,11 @@
mShowInputRequested = false;
mInkWindow.show();
+ mSimultaneousStylusAndTouchEnabled =
+ com.android.input.flags.Flags.enableMultiDeviceInput();
// deliver previous @param stylusEvents
- stylusEvents.forEach(InputMethodService.this::onStylusHandwritingMotionEvent);
+ stylusEvents.forEach(this::deliverStylusHandwritingMotionEvent);
// create receiver for channel
mHandwritingEventReceiver = new InputEventReceiver(channel, Looper.getMainLooper()) {
@@ -1139,10 +1142,15 @@
public void onInputEvent(InputEvent event) {
boolean handled = false;
try {
- if (!(event instanceof MotionEvent)) {
+ if (!(event instanceof MotionEvent motionEvent)) {
return;
}
- onStylusHandwritingMotionEvent((MotionEvent) event);
+ if (!motionEvent.isStylusPointer()) {
+ // Handwriting surface is touchable, we don't want these touch events
+ // to get to the IME.
+ return;
+ }
+ deliverStylusHandwritingMotionEvent(motionEvent);
scheduleHandwritingSessionTimeout();
handled = true;
} finally {
@@ -1153,6 +1161,27 @@
scheduleHandwritingSessionTimeout();
}
+ private void deliverStylusHandwritingMotionEvent(MotionEvent motionEvent) {
+ onStylusHandwritingMotionEvent(motionEvent);
+ if (!mSimultaneousStylusAndTouchEnabled) {
+ return;
+ }
+ switch (motionEvent.getAction()) {
+ case MotionEvent.ACTION_DOWN:
+ // Consume and ignore all touches while stylus is down to prevent
+ // accidental touches from going to the app while writing.
+ mPrivOps.setHandwritingSurfaceNotTouchable(false);
+ break;
+ case MotionEvent.ACTION_UP:
+ case MotionEvent.ACTION_CANCEL:
+ // Go back to only consuming stylus events so that the user
+ // can continue to interact with the app using touch
+ // when the stylus is not down.
+ mPrivOps.setHandwritingSurfaceNotTouchable(true);
+ break;
+ }
+ }
+
/**
* {@inheritDoc}
* @hide
diff --git a/core/java/android/net/flags.aconfig b/core/java/android/net/flags.aconfig
index 3544a69..048c50e 100644
--- a/core/java/android/net/flags.aconfig
+++ b/core/java/android/net/flags.aconfig
@@ -1,4 +1,5 @@
package: "android.net.platform.flags"
+container: "system"
# This file contains aconfig flags used from platform code
# Flags used for module APIs must be in aconfig files under each modules
diff --git a/core/java/android/net/thread/flags.aconfig b/core/java/android/net/thread/flags.aconfig
index ef798ad..afb982b 100644
--- a/core/java/android/net/thread/flags.aconfig
+++ b/core/java/android/net/thread/flags.aconfig
@@ -1,4 +1,5 @@
package: "com.android.net.thread.platform.flags"
+container: "system"
# This file contains aconfig flags used from platform code
# Flags used for module APIs must be in aconfig files under each modules
diff --git a/core/java/android/net/vcn/flags.aconfig b/core/java/android/net/vcn/flags.aconfig
index 6fde398..fea2c25 100644
--- a/core/java/android/net/vcn/flags.aconfig
+++ b/core/java/android/net/vcn/flags.aconfig
@@ -1,4 +1,5 @@
package: "android.net.vcn"
+container: "system"
flag {
name: "safe_mode_config"
diff --git a/core/java/android/os/IHintManager.aidl b/core/java/android/os/IHintManager.aidl
index d97ea54..e057a85 100644
--- a/core/java/android/os/IHintManager.aidl
+++ b/core/java/android/os/IHintManager.aidl
@@ -18,16 +18,21 @@
package android.os;
import android.os.IHintSession;
+import android.hardware.power.SessionConfig;
+import android.hardware.power.SessionTag;
/** {@hide} */
interface IHintManager {
/**
* Creates a {@link Session} for the given set of threads and associates to a binder token.
+ * Returns a config if creation is not supported, and HMS had to use the
+ * legacy creation method.
*/
- IHintSession createHintSession(in IBinder token, in int[] tids, long durationNanos);
+ IHintSession createHintSessionWithConfig(in IBinder token, in int[] threadIds,
+ in long durationNanos, in SessionTag tag, out @nullable SessionConfig config);
/**
- * Get preferred rate limit in nano second.
+ * Get preferred rate limit in nanoseconds.
*/
long getHintSessionPreferredRate();
diff --git a/core/java/android/os/connectivity/WifiActivityEnergyInfo.java b/core/java/android/os/connectivity/WifiActivityEnergyInfo.java
index ad74a9f..2ceb1c7 100644
--- a/core/java/android/os/connectivity/WifiActivityEnergyInfo.java
+++ b/core/java/android/os/connectivity/WifiActivityEnergyInfo.java
@@ -37,8 +37,10 @@
* real-time.
* @hide
*/
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
@SystemApi
public final class WifiActivityEnergyInfo implements Parcelable {
+ private static final long DEFERRED_ENERGY_ESTIMATE = -1;
@ElapsedRealtimeLong
private final long mTimeSinceBootMillis;
@StackState
@@ -52,7 +54,7 @@
@IntRange(from = 0)
private final long mControllerIdleDurationMillis;
@IntRange(from = 0)
- private final long mControllerEnergyUsedMicroJoules;
+ private long mControllerEnergyUsedMicroJoules;
/** @hide */
@Retention(RetentionPolicy.SOURCE)
@@ -99,9 +101,10 @@
rxDurationMillis,
scanDurationMillis,
idleDurationMillis,
- calculateEnergyMicroJoules(txDurationMillis, rxDurationMillis, idleDurationMillis));
+ DEFERRED_ENERGY_ESTIMATE);
}
+ @android.ravenwood.annotation.RavenwoodReplace
private static long calculateEnergyMicroJoules(
long txDurationMillis, long rxDurationMillis, long idleDurationMillis) {
final Context context = ActivityThread.currentActivityThread().getSystemContext();
@@ -125,6 +128,11 @@
* voltage);
}
+ private static long calculateEnergyMicroJoules$ravenwood(long txDurationMillis,
+ long rxDurationMillis, long idleDurationMillis) {
+ return 0;
+ }
+
/** @hide */
public WifiActivityEnergyInfo(
@ElapsedRealtimeLong long timeSinceBootMillis,
@@ -152,7 +160,7 @@
+ " mControllerRxDurationMillis=" + mControllerRxDurationMillis
+ " mControllerScanDurationMillis=" + mControllerScanDurationMillis
+ " mControllerIdleDurationMillis=" + mControllerIdleDurationMillis
- + " mControllerEnergyUsedMicroJoules=" + mControllerEnergyUsedMicroJoules
+ + " mControllerEnergyUsedMicroJoules=" + getControllerEnergyUsedMicroJoules()
+ " }";
}
@@ -231,6 +239,11 @@
/** Get the energy consumed by Wifi, in microjoules. */
@IntRange(from = 0)
public long getControllerEnergyUsedMicroJoules() {
+ if (mControllerEnergyUsedMicroJoules == DEFERRED_ENERGY_ESTIMATE) {
+ mControllerEnergyUsedMicroJoules = calculateEnergyMicroJoules(
+ mControllerTxDurationMillis, mControllerRxDurationMillis,
+ mControllerIdleDurationMillis);
+ }
return mControllerEnergyUsedMicroJoules;
}
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/IPermissionManager.aidl b/core/java/android/permission/IPermissionManager.aidl
index 3b59901..55011e5 100644
--- a/core/java/android/permission/IPermissionManager.aidl
+++ b/core/java/android/permission/IPermissionManager.aidl
@@ -98,7 +98,7 @@
IBinder registerAttributionSource(in AttributionSourceState source);
- int getNumRegisteredAttributionSources(int uid);
+ int getRegisteredAttributionSourceCount(int uid);
boolean isRegisteredAttributionSource(in AttributionSourceState source);
diff --git a/core/java/android/permission/PermissionManager.java b/core/java/android/permission/PermissionManager.java
index 2daf4ac..55bb430 100644
--- a/core/java/android/permission/PermissionManager.java
+++ b/core/java/android/permission/PermissionManager.java
@@ -1680,9 +1680,9 @@
* @hide
*/
@RequiresPermission(Manifest.permission.UPDATE_APP_OPS_STATS)
- public int getNumRegisteredAttributionSourcesForTest(int uid) {
+ public int getRegisteredAttributionSourceCountForTest(int uid) {
try {
- return mPermissionManager.getNumRegisteredAttributionSources(uid);
+ return mPermissionManager.getRegisteredAttributionSourceCount(uid);
} catch (RemoteException e) {
e.rethrowFromSystemServer();
}
diff --git a/core/java/android/permission/flags.aconfig b/core/java/android/permission/flags.aconfig
index abb4917..6b5e17d 100644
--- a/core/java/android/permission/flags.aconfig
+++ b/core/java/android/permission/flags.aconfig
@@ -1,4 +1,5 @@
package: "android.permission.flags"
+container: "system"
flag {
name: "device_aware_permission_apis_enabled"
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 6ad7422..16649e8 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -686,25 +686,6 @@
"android.settings.MANAGE_APP_LONG_RUNNING_JOBS";
/**
- * Activity Action: Show settings to allow configuration of
- * {@link Manifest.permission#RUN_BACKUP_JOBS} permission.
- *
- * Input: Optionally, the Intent's data URI can specify the application package name to
- * directly invoke the management GUI specific to the package name. For example
- * "package:com.my.app".
- * <p>
- * Output: When a package data uri is passed as input, the activity result is set to
- * {@link android.app.Activity#RESULT_OK} if the permission was granted to the app. Otherwise,
- * the result is set to {@link android.app.Activity#RESULT_CANCELED}.
- *
- * @hide
- */
- @FlaggedApi(Flags.FLAG_BACKUP_TASKS_SETTINGS_SCREEN)
- @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
- public static final String ACTION_REQUEST_RUN_BACKUP_JOBS =
- "android.settings.REQUEST_RUN_BACKUP_JOBS";
-
- /**
* Activity Action: Show settings to allow configuration of cross-profile access for apps
*
* Input: Optionally, the Intent's data URI can specify the application package name to
diff --git a/core/java/android/provider/flags.aconfig b/core/java/android/provider/flags.aconfig
index d0cef83..77353c2 100644
--- a/core/java/android/provider/flags.aconfig
+++ b/core/java/android/provider/flags.aconfig
@@ -1,4 +1,5 @@
package: "android.provider"
+container: "system"
flag {
name: "a11y_standalone_fab_enabled"
diff --git a/core/java/android/security/flags.aconfig b/core/java/android/security/flags.aconfig
index 7f5b550..02e787b 100644
--- a/core/java/android/security/flags.aconfig
+++ b/core/java/android/security/flags.aconfig
@@ -1,4 +1,5 @@
package: "android.security"
+container: "system"
flag {
name: "certificate_transparency_configuration"
diff --git a/core/java/android/security/responsible_apis_flags.aconfig b/core/java/android/security/responsible_apis_flags.aconfig
index 548f8aa..c7d951b 100644
--- a/core/java/android/security/responsible_apis_flags.aconfig
+++ b/core/java/android/security/responsible_apis_flags.aconfig
@@ -1,4 +1,5 @@
package: "android.security"
+container: "system"
flag {
name: "extend_ecm_to_all_settings"
diff --git a/core/java/android/service/appprediction/flags/flags.aconfig b/core/java/android/service/appprediction/flags/flags.aconfig
index 7f9764e..953bc44 100644
--- a/core/java/android/service/appprediction/flags/flags.aconfig
+++ b/core/java/android/service/appprediction/flags/flags.aconfig
@@ -1,4 +1,5 @@
package: "android.service.appprediction.flags"
+container: "system"
flag {
name: "service_features_api"
diff --git a/core/java/android/service/autofill/AutofillService.java b/core/java/android/service/autofill/AutofillService.java
index e6a84df..269839b 100644
--- a/core/java/android/service/autofill/AutofillService.java
+++ b/core/java/android/service/autofill/AutofillService.java
@@ -37,7 +37,6 @@
import android.view.autofill.AutofillId;
import android.view.autofill.AutofillManager;
import android.view.autofill.AutofillValue;
-import android.view.autofill.IAutoFillManagerClient;
import com.android.internal.os.IResultReceiver;
@@ -642,7 +641,7 @@
@Override
public void onFillCredentialRequest(FillRequest request, IFillCallback callback,
- IAutoFillManagerClient autofillClientCallback) {
+ IBinder autofillClientCallback) {
ICancellationSignal transport = CancellationSignal.createTransport();
try {
callback.onCancellable(transport);
@@ -724,7 +723,7 @@
*/
public void onFillCredentialRequest(@NonNull FillRequest request,
@NonNull CancellationSignal cancellationSignal, @NonNull FillCallback callback,
- @NonNull IAutoFillManagerClient autofillClientCallback) {}
+ @NonNull IBinder autofillClientCallback) {}
/**
* Called by the Android system to convert a credential manager response to a dataset
diff --git a/core/java/android/service/autofill/IAutoFillService.aidl b/core/java/android/service/autofill/IAutoFillService.aidl
index 2c2feae..3b64b8a 100644
--- a/core/java/android/service/autofill/IAutoFillService.aidl
+++ b/core/java/android/service/autofill/IAutoFillService.aidl
@@ -16,13 +16,13 @@
package android.service.autofill;
+import android.os.IBinder;
import android.service.autofill.ConvertCredentialRequest;
import android.service.autofill.IConvertCredentialCallback;
import android.service.autofill.FillRequest;
import android.service.autofill.IFillCallback;
import android.service.autofill.ISaveCallback;
import android.service.autofill.SaveRequest;
-import android.view.autofill.IAutoFillManagerClient;
import com.android.internal.os.IResultReceiver;
/**
@@ -34,7 +34,7 @@
void onConnectedStateChanged(boolean connected);
void onFillRequest(in FillRequest request, in IFillCallback callback);
void onFillCredentialRequest(in FillRequest request, in IFillCallback callback,
- in IAutoFillManagerClient client);
+ in IBinder client);
void onSaveRequest(in SaveRequest request, in ISaveCallback callback);
void onSavedPasswordCountRequest(in IResultReceiver receiver);
void onConvertCredentialRequest(in ConvertCredentialRequest convertCredentialRequest, in IConvertCredentialCallback convertCredentialCallback);
diff --git a/core/java/android/service/chooser/flags.aconfig b/core/java/android/service/chooser/flags.aconfig
index a3eff3b..d6425c3 100644
--- a/core/java/android/service/chooser/flags.aconfig
+++ b/core/java/android/service/chooser/flags.aconfig
@@ -1,4 +1,5 @@
package: "android.service.chooser"
+container: "system"
flag {
name: "chooser_album_text"
diff --git a/core/java/android/service/controls/flags/flags.aconfig b/core/java/android/service/controls/flags/flags.aconfig
index 197f1bc..6f3a67d 100644
--- a/core/java/android/service/controls/flags/flags.aconfig
+++ b/core/java/android/service/controls/flags/flags.aconfig
@@ -1,4 +1,5 @@
package: "android.service.controls.flags"
+container: "system"
flag {
name: "home_panel_dream"
diff --git a/core/java/android/service/dreams/DreamOverlayService.java b/core/java/android/service/dreams/DreamOverlayService.java
index 9a02b74b..5da0cb4 100644
--- a/core/java/android/service/dreams/DreamOverlayService.java
+++ b/core/java/android/service/dreams/DreamOverlayService.java
@@ -79,6 +79,11 @@
mService.endDream(this);
}
+ @Override
+ public void comeToFront() {
+ mService.comeToFront(this);
+ }
+
private void onExitRequested() {
try {
mDreamOverlayCallback.onExitRequested();
@@ -130,6 +135,16 @@
});
}
+ private void comeToFront(OverlayClient client) {
+ mExecutor.execute(() -> {
+ if (mCurrentClient != client) {
+ return;
+ }
+
+ onComeToFront();
+ });
+ }
+
private IDreamOverlay mDreamOverlay = new IDreamOverlay.Stub() {
@Override
public void getClient(IDreamOverlayClientCallback callback) {
@@ -190,6 +205,13 @@
public void onWakeUp() {}
/**
+ * This method is overridden by implementations to handle when the dream is coming to the front
+ * (after having lost focus to something on top of it).
+ * @hide
+ */
+ public void onComeToFront() {}
+
+ /**
* This method is overridden by implementations to handle when the dream has ended. There may
* be earlier signals leading up to this step, such as @{@link #onWakeUp(Runnable)}.
*
diff --git a/core/java/android/service/dreams/DreamService.java b/core/java/android/service/dreams/DreamService.java
index 353828c..c26d83c 100644
--- a/core/java/android/service/dreams/DreamService.java
+++ b/core/java/android/service/dreams/DreamService.java
@@ -18,6 +18,7 @@
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
import static android.service.dreams.Flags.dreamHandlesConfirmKeys;
+import static android.service.dreams.Flags.dreamTracksFocus;
import android.annotation.FlaggedApi;
import android.annotation.IdRes;
@@ -52,6 +53,7 @@
import android.os.RemoteException;
import android.os.ServiceManager;
import android.service.controls.flags.Flags;
+import android.service.dreams.utils.DreamAccessibility;
import android.util.AttributeSet;
import android.util.Log;
import android.util.MathUtils;
@@ -273,6 +275,7 @@
private boolean mDebug = false;
private ComponentName mDreamComponent;
+ private DreamAccessibility mDreamAccessibility;
private boolean mShouldShowComplications;
private DreamServiceWrapper mDreamServiceWrapper;
@@ -455,6 +458,15 @@
/** {@inheritDoc} */
@Override
public void onWindowFocusChanged(boolean hasFocus) {
+ if (!dreamTracksFocus()) {
+ return;
+ }
+
+ try {
+ mDreamManager.onDreamFocusChanged(hasFocus);
+ } catch (RemoteException ex) {
+ // system server died
+ }
}
/** {@inheritDoc} */
@@ -664,6 +676,7 @@
*/
public void setInteractive(boolean interactive) {
mInteractive = interactive;
+ updateAccessibilityMessage();
}
/**
@@ -1149,6 +1162,19 @@
wakeUp(false);
}
+ /**
+ * Tells the dream to come to the front (which in turn tells the overlay to come to the front).
+ */
+ private void comeToFront() {
+ mOverlayConnection.addConsumer(overlay -> {
+ try {
+ overlay.comeToFront();
+ } catch (RemoteException e) {
+ Log.e(mTag, "could not tell overlay to come to front:" + e);
+ }
+ });
+ }
+
private void wakeUp(boolean fromSystem) {
if (mDebug) {
Slog.v(mTag, "wakeUp(): fromSystem=" + fromSystem + ", mWaking=" + mWaking
@@ -1430,7 +1456,7 @@
// Hide all insets when the dream is showing
mWindow.getDecorView().getWindowInsetsController().hide(WindowInsets.Type.systemBars());
mWindow.setDecorFitsSystemWindows(false);
-
+ updateAccessibilityMessage();
mWindow.getDecorView().addOnAttachStateChangeListener(
new View.OnAttachStateChangeListener() {
private Consumer<IDreamOverlayClient> mDreamStartOverlayConsumer;
@@ -1477,6 +1503,15 @@
});
}
+ private void updateAccessibilityMessage() {
+ if (mWindow == null) return;
+ if (mDreamAccessibility == null) {
+ final View rootView = mWindow.getDecorView();
+ mDreamAccessibility = new DreamAccessibility(this, rootView);
+ }
+ mDreamAccessibility.updateAccessibilityConfiguration(isInteractive());
+ }
+
private boolean getWindowFlagValue(int flag, boolean defaultValue) {
return mWindow == null ? defaultValue : (mWindow.getAttributes().flags & flag) != 0;
}
@@ -1596,6 +1631,15 @@
public void wakeUp() {
mHandler.post(() -> DreamService.this.wakeUp(true /*fromSystem*/));
}
+
+ @Override
+ public void comeToFront() {
+ if (!dreamTracksFocus()) {
+ return;
+ }
+
+ mHandler.post(DreamService.this::comeToFront);
+ }
}
/** @hide */
diff --git a/core/java/android/service/dreams/IDreamManager.aidl b/core/java/android/service/dreams/IDreamManager.aidl
index e45384f..85f0368 100644
--- a/core/java/android/service/dreams/IDreamManager.aidl
+++ b/core/java/android/service/dreams/IDreamManager.aidl
@@ -48,4 +48,5 @@
void setSystemDreamComponent(in ComponentName componentName);
void registerDreamOverlayService(in ComponentName componentName);
void startDreamActivity(in Intent intent);
+ void onDreamFocusChanged(in boolean hasFocus);
}
diff --git a/core/java/android/service/dreams/IDreamOverlayClient.aidl b/core/java/android/service/dreams/IDreamOverlayClient.aidl
index 78b7280..5054d4d 100644
--- a/core/java/android/service/dreams/IDreamOverlayClient.aidl
+++ b/core/java/android/service/dreams/IDreamOverlayClient.aidl
@@ -42,4 +42,7 @@
/** Called when the dream has ended. */
void endDream();
+
+ /** Called when the dream is coming to the front. */
+ void comeToFront();
}
diff --git a/core/java/android/service/dreams/IDreamService.aidl b/core/java/android/service/dreams/IDreamService.aidl
index 8b5d875..2e2651b 100644
--- a/core/java/android/service/dreams/IDreamService.aidl
+++ b/core/java/android/service/dreams/IDreamService.aidl
@@ -25,4 +25,5 @@
void attach(IBinder windowToken, boolean canDoze, boolean isPreviewMode, IRemoteCallback started);
void detach();
void wakeUp();
+ void comeToFront();
}
diff --git a/core/java/android/service/dreams/flags.aconfig b/core/java/android/service/dreams/flags.aconfig
index cca4937..0a458bc 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"
@@ -18,3 +19,10 @@
purpose: PURPOSE_BUGFIX
}
}
+
+flag {
+ name: "dream_tracks_focus"
+ namespace: "communal"
+ description: "This flag enables the ability for dreams to track whether or not they have focus"
+ bug: "331798001"
+}
diff --git a/core/java/android/service/dreams/utils/DreamAccessibility.java b/core/java/android/service/dreams/utils/DreamAccessibility.java
new file mode 100644
index 0000000..c38f41b
--- /dev/null
+++ b/core/java/android/service/dreams/utils/DreamAccessibility.java
@@ -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 android.service.dreams.utils;
+
+import android.annotation.NonNull;
+import android.content.Context;
+import android.view.View;
+import android.view.accessibility.AccessibilityNodeInfo;
+
+import com.android.internal.R;
+
+/**
+ * {@link DreamAccessibility} allows customization of accessibility
+ * actions for the root view of the dream overlay.
+ * @hide
+ */
+public class DreamAccessibility {
+ private final Context mContext;
+ private final View mView;
+ private final View.AccessibilityDelegate mAccessibilityDelegate;
+
+ public DreamAccessibility(@NonNull Context context, @NonNull View view) {
+ mContext = context;
+ mView = view;
+ mAccessibilityDelegate = createNewAccessibilityDelegate(mContext);
+ }
+
+ /**
+ * @param interactive
+ * Removes and add accessibility configuration depending if the dream is interactive or not
+ */
+ public void updateAccessibilityConfiguration(Boolean interactive) {
+ if (!interactive) {
+ addAccessibilityConfiguration();
+ } else {
+ removeCustomAccessibilityAction();
+ }
+ }
+
+ /**
+ * Configures the accessibility actions for the given root view.
+ */
+ private void addAccessibilityConfiguration() {
+ mView.setAccessibilityDelegate(mAccessibilityDelegate);
+ }
+
+ /**
+ * Removes Configured the accessibility actions for the given root view.
+ */
+ private void removeCustomAccessibilityAction() {
+ if (mView.getAccessibilityDelegate() == mAccessibilityDelegate) {
+ mView.setAccessibilityDelegate(null);
+ }
+ }
+
+ private View.AccessibilityDelegate createNewAccessibilityDelegate(Context context) {
+ return new View.AccessibilityDelegate() {
+ @Override
+ public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) {
+ super.onInitializeAccessibilityNodeInfo(host, info);
+ for (AccessibilityNodeInfo.AccessibilityAction action : info.getActionList()) {
+ if (action.getId() == AccessibilityNodeInfo.ACTION_CLICK) {
+ info.removeAction(action);
+ break;
+ }
+ }
+ info.addAction(new AccessibilityNodeInfo.AccessibilityAction(
+ AccessibilityNodeInfo.ACTION_CLICK,
+ context.getResources().getString(R.string.dream_accessibility_action_click)
+ ));
+ }
+ };
+ }
+}
diff --git a/core/java/android/service/notification/ZenPolicy.java b/core/java/android/service/notification/ZenPolicy.java
index 786d768..1d7091c 100644
--- a/core/java/android/service/notification/ZenPolicy.java
+++ b/core/java/android/service/notification/ZenPolicy.java
@@ -349,23 +349,29 @@
/**
* Indicates no explicit setting for which channels may bypass DND when this policy is active.
* Defaults to {@link #CHANNEL_POLICY_PRIORITY}.
+ *
+ * @hide
*/
@FlaggedApi(Flags.FLAG_MODES_API)
- private static final int CHANNEL_POLICY_UNSET = 0;
+ public static final int CHANNEL_POLICY_UNSET = 0;
/**
* Indicates that channels marked as {@link NotificationChannel#canBypassDnd()} can bypass DND
* when this policy is active.
+ *
+ * @hide
*/
@FlaggedApi(Flags.FLAG_MODES_API)
- private static final int CHANNEL_POLICY_PRIORITY = 1;
+ public static final int CHANNEL_POLICY_PRIORITY = 1;
/**
* Indicates that no channels can bypass DND when this policy is active, even those marked as
* {@link NotificationChannel#canBypassDnd()}.
+ *
+ * @hide
*/
@FlaggedApi(Flags.FLAG_MODES_API)
- private static final int CHANNEL_POLICY_NONE = 2;
+ public static final int CHANNEL_POLICY_NONE = 2;
/** @hide */
public ZenPolicy() {
@@ -564,6 +570,13 @@
}
/**
+ * @hide
+ */
+ public @ChannelType int getAllowedChannels() {
+ return mAllowChannels;
+ }
+
+ /**
* Whether this policy allows {@link NotificationChannel channels} marked as
* {@link NotificationChannel#canBypassDnd()} to bypass DND. If {@link #STATE_ALLOW}, these
* channels may bypass; if {@link #STATE_DISALLOW}, then even notifications from channels
@@ -999,6 +1012,12 @@
mZenPolicy.mAllowChannels = allow ? CHANNEL_POLICY_PRIORITY : CHANNEL_POLICY_NONE;
return this;
}
+
+ /** @hide */
+ public @NonNull Builder allowChannels(@ChannelType int channelType) {
+ mZenPolicy.mAllowChannels = channelType;
+ return this;
+ }
}
@Override
diff --git a/core/java/android/service/notification/flags.aconfig b/core/java/android/service/notification/flags.aconfig
index 35cd3ed..c5b4b41 100644
--- a/core/java/android/service/notification/flags.aconfig
+++ b/core/java/android/service/notification/flags.aconfig
@@ -1,5 +1,6 @@
package: "android.service.notification"
container: "system"
+container: "system"
flag {
name: "ranking_update_ashmem"
@@ -14,7 +15,17 @@
namespace: "systemui"
description: "This flag controls the redacting of sensitive notifications from untrusted NotificationListenerServices"
bug: "306271190"
+}
+
+flag {
+ name: "redact_sensitive_notifications_big_text_style"
is_exported: true
+ namespace: "systemui"
+ description: "This flag controls the redacting of BigTextStyle fields in sensitive notifications"
+ bug: "335488909"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
}
flag {
diff --git a/core/java/android/service/voice/flags/flags.aconfig b/core/java/android/service/voice/flags/flags.aconfig
index 1ae7d8c..357cb47 100644
--- a/core/java/android/service/voice/flags/flags.aconfig
+++ b/core/java/android/service/voice/flags/flags.aconfig
@@ -1,4 +1,5 @@
package: "android.service.voice.flags"
+container: "system"
flag {
name: "allow_training_data_egress_from_hds"
diff --git a/core/java/android/speech/flags/speech_flags.aconfig b/core/java/android/speech/flags/speech_flags.aconfig
index fa33592..2a42357 100644
--- a/core/java/android/speech/flags/speech_flags.aconfig
+++ b/core/java/android/speech/flags/speech_flags.aconfig
@@ -1,4 +1,5 @@
package: "android.speech.flags"
+container: "system"
flag {
name: "multilang_extra_launch"
diff --git a/core/java/android/telephony/PhoneStateListener.java b/core/java/android/telephony/PhoneStateListener.java
index fb57921..4281da1 100644
--- a/core/java/android/telephony/PhoneStateListener.java
+++ b/core/java/android/telephony/PhoneStateListener.java
@@ -1685,6 +1685,10 @@
public final void onSimultaneousCallingStateChanged(int[] subIds) {
// not supported on the deprecated interface - Use TelephonyCallback instead
}
+
+ public final void onCarrierRoamingNtnModeChanged(boolean active) {
+ // not supported on the deprecated interface - Use TelephonyCallback instead
+ }
}
private void log(String s) {
diff --git a/core/java/android/telephony/TelephonyCallback.java b/core/java/android/telephony/TelephonyCallback.java
index dc6a035..b8b84d9 100644
--- a/core/java/android/telephony/TelephonyCallback.java
+++ b/core/java/android/telephony/TelephonyCallback.java
@@ -644,6 +644,15 @@
public static final int EVENT_SIMULTANEOUS_CELLULAR_CALLING_SUBSCRIPTIONS_CHANGED = 41;
/**
+ * Event for listening to changes in carrier roaming non-terrestrial network mode.
+ *
+ * @see CarrierRoamingNtnModeListener
+ *
+ * @hide
+ */
+ public static final int EVENT_CARRIER_ROAMING_NTN_MODE_CHANGED = 42;
+
+ /**
* @hide
*/
@IntDef(prefix = {"EVENT_"}, value = {
@@ -687,7 +696,8 @@
EVENT_TRIGGER_NOTIFY_ANBR,
EVENT_MEDIA_QUALITY_STATUS_CHANGED,
EVENT_EMERGENCY_CALLBACK_MODE_CHANGED,
- EVENT_SIMULTANEOUS_CELLULAR_CALLING_SUBSCRIPTIONS_CHANGED
+ EVENT_SIMULTANEOUS_CELLULAR_CALLING_SUBSCRIPTIONS_CHANGED,
+ EVENT_CARRIER_ROAMING_NTN_MODE_CHANGED
})
@Retention(RetentionPolicy.SOURCE)
public @interface TelephonyEvent {
@@ -1686,6 +1696,24 @@
}
/**
+ * Interface for carrier roaming non-terrestrial network listener.
+ *
+ * @hide
+ */
+ public interface CarrierRoamingNtnModeListener {
+ /**
+ * Callback invoked when carrier roaming non-terrestrial network mode changes.
+ *
+ * @param active {@code true} If the device is connected to carrier roaming
+ * non-terrestrial network or was connected within the
+ * {CarrierConfigManager
+ * #KEY_SATELLITE_CONNECTION_HYSTERESIS_SEC_INT} duration,
+ * {code false} otherwise.
+ */
+ void onCarrierRoamingNtnModeChanged(boolean active);
+ }
+
+ /**
* The callback methods need to be called on the handler thread where
* this object was created. If the binder did that for us it'd be nice.
* <p>
@@ -2086,5 +2114,16 @@
Binder.withCleanCallingIdentity(
() -> mExecutor.execute(() -> listener.onCallBackModeStopped(type, reason)));
}
+
+ public void onCarrierRoamingNtnModeChanged(boolean active) {
+ if (!Flags.carrierEnabledSatelliteFlag()) return;
+
+ CarrierRoamingNtnModeListener listener =
+ (CarrierRoamingNtnModeListener) mTelephonyCallbackWeakRef.get();
+ if (listener == null) return;
+
+ Binder.withCleanCallingIdentity(
+ () -> mExecutor.execute(() -> listener.onCarrierRoamingNtnModeChanged(active)));
+ }
}
}
diff --git a/core/java/android/telephony/TelephonyRegistryManager.java b/core/java/android/telephony/TelephonyRegistryManager.java
index d39c4ce..6160fdb 100644
--- a/core/java/android/telephony/TelephonyRegistryManager.java
+++ b/core/java/android/telephony/TelephonyRegistryManager.java
@@ -1073,6 +1073,24 @@
}
/**
+ * Notify external listeners that carrier roaming non-terrestrial network mode changed.
+ * @param subId subscription ID.
+ * @param active {@code true} If the device is connected to carrier roaming
+ * non-terrestrial network or was connected within the
+ * {CarrierConfigManager#KEY_SATELLITE_CONNECTION_HYSTERESIS_SEC_INT}
+ * duration, {code false} otherwise.
+ * @hide
+ */
+ public void notifyCarrierRoamingNtnModeChanged(int subId, boolean active) {
+ try {
+ sRegistry.notifyCarrierRoamingNtnModeChanged(subId, active);
+ } catch (RemoteException ex) {
+ // system server crash
+ throw ex.rethrowFromSystemServer();
+ }
+ }
+
+ /**
* Processes potential event changes from the provided {@link TelephonyCallback}.
*
* @param telephonyCallback callback for monitoring callback changes to the telephony state.
@@ -1224,6 +1242,10 @@
eventList.add(
TelephonyCallback.EVENT_SIMULTANEOUS_CELLULAR_CALLING_SUBSCRIPTIONS_CHANGED);
}
+
+ if (telephonyCallback instanceof TelephonyCallback.CarrierRoamingNtnModeListener) {
+ eventList.add(TelephonyCallback.EVENT_CARRIER_ROAMING_NTN_MODE_CHANGED);
+ }
return eventList;
}
diff --git a/core/java/android/text/MeasuredParagraph.java b/core/java/android/text/MeasuredParagraph.java
index 38aeb37..161a79b 100644
--- a/core/java/android/text/MeasuredParagraph.java
+++ b/core/java/android/text/MeasuredParagraph.java
@@ -30,6 +30,8 @@
import android.graphics.Rect;
import android.graphics.text.LineBreakConfig;
import android.graphics.text.MeasuredText;
+import android.icu.lang.UCharacter;
+import android.icu.lang.UCharacterDirection;
import android.icu.text.Bidi;
import android.text.AutoGrowArray.ByteArray;
import android.text.AutoGrowArray.FloatArray;
@@ -711,7 +713,12 @@
// check the paragraph count here and replace the CR letters and re-calculate
// BiDi again.
for (int i = 0; i < mTextLength; ++i) {
- if (mCopiedBuffer[i] == '\r') {
+ if (Character.isSurrogate(mCopiedBuffer[i])) {
+ // All block separators are in BMP.
+ continue;
+ }
+ if (UCharacter.getDirection(mCopiedBuffer[i])
+ == UCharacterDirection.BLOCK_SEPARATOR) {
mCopiedBuffer[i] = OBJECT_REPLACEMENT_CHARACTER;
}
}
diff --git a/core/java/android/text/TextLine.java b/core/java/android/text/TextLine.java
index bde9c77..3015791 100644
--- a/core/java/android/text/TextLine.java
+++ b/core/java/android/text/TextLine.java
@@ -477,7 +477,12 @@
}
drawBounds.setEmpty();
float w = measure(mLen, false, fmi, drawBounds, lineInfo);
- float boundsWidth = drawBounds.width();
+ float boundsWidth;
+ if (w >= 0) {
+ boundsWidth = Math.max(drawBounds.right, w) - Math.min(0, drawBounds.left);
+ } else {
+ boundsWidth = Math.max(drawBounds.right, 0) - Math.min(w, drawBounds.left);
+ }
if (Math.abs(w) > boundsWidth) {
return w;
} else {
diff --git a/core/java/android/text/flags/flags.aconfig b/core/java/android/text/flags/flags.aconfig
index 24035af..a8a0c5b 100644
--- a/core/java/android/text/flags/flags.aconfig
+++ b/core/java/android/text/flags/flags.aconfig
@@ -1,4 +1,5 @@
package: "com.android.text.flags"
+container: "system"
flag {
name: "vendor_custom_locale_fallback"
diff --git a/core/java/android/tracing/flags.aconfig b/core/java/android/tracing/flags.aconfig
index 1815f14..c50c384 100644
--- a/core/java/android/tracing/flags.aconfig
+++ b/core/java/android/tracing/flags.aconfig
@@ -1,4 +1,5 @@
package: "android.tracing"
+container: "system"
flag {
name: "perfetto_transition_tracing"
diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl
index 51d7caa..65d9b3a 100644
--- a/core/java/android/view/IWindowManager.aidl
+++ b/core/java/android/view/IWindowManager.aidl
@@ -291,6 +291,15 @@
int getDefaultDisplayRotation();
/**
+ * Retrieve the display user rotation.
+ * @param displayId Id of the display
+ * @return Rotation one of {@link android.view.Surface#ROTATION_0},
+ * {@link android.view.Surface#ROTATION_90}, {@link android.view.Surface#ROTATION_180},
+ * {@link android.view.Surface#ROTATION_270} or -1 if display is not found.
+ */
+ int getDisplayUserRotation(int displayId);
+
+ /**
* Watch the rotation of the specified screen. Returns the current rotation,
* calls back when it changes.
*/
diff --git a/core/java/android/view/ImeBackAnimationController.java b/core/java/android/view/ImeBackAnimationController.java
index 665fac1..ed049b5 100644
--- a/core/java/android/view/ImeBackAnimationController.java
+++ b/core/java/android/view/ImeBackAnimationController.java
@@ -18,6 +18,7 @@
import static android.view.InsetsController.ANIMATION_TYPE_USER;
import static android.view.WindowInsets.Type.ime;
+import static android.view.WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN;
import static android.view.WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE;
import static android.view.WindowManager.LayoutParams.SOFT_INPUT_MASK_ADJUST;
@@ -31,9 +32,12 @@
import android.view.animation.BackGestureInterpolator;
import android.view.animation.Interpolator;
import android.view.animation.PathInterpolator;
+import android.view.inputmethod.ImeTracker;
import android.window.BackEvent;
import android.window.OnBackAnimationCallback;
+import com.android.internal.inputmethod.SoftInputShowHideReason;
+
/**
* Controller for IME predictive back animation
*
@@ -57,6 +61,7 @@
private float mLastProgress = 0f;
private boolean mTriggerBack = false;
private boolean mIsPreCommitAnimationInProgress = false;
+ private int mStartRootScrollY = 0;
public ImeBackAnimationController(ViewRootImpl viewRoot) {
mInsetsController = viewRoot.getInsetsController();
@@ -93,6 +98,7 @@
public void onReady(@NonNull WindowInsetsAnimationController controller,
@WindowInsets.Type.InsetsType int types) {
mWindowInsetsAnimationController = controller;
+ if (isAdjustPan()) mStartRootScrollY = mViewRoot.mScrollY;
if (mIsPreCommitAnimationInProgress) {
setPreCommitProgress(mLastProgress);
} else {
@@ -143,6 +149,10 @@
float imeHeight = shownY - hiddenY;
float interpolatedProgress = BACK_GESTURE.getInterpolation(progress);
int newY = (int) (imeHeight - interpolatedProgress * (imeHeight * PEEK_FRACTION));
+ if (mStartRootScrollY != 0) {
+ mViewRoot.setScrollY(
+ (int) (mStartRootScrollY * (1 - interpolatedProgress * PEEK_FRACTION)));
+ }
mWindowInsetsAnimationController.setInsetsAndAlpha(Insets.of(0, 0, 0, newY), 1f,
progress);
}
@@ -192,6 +202,37 @@
mPostCommitAnimator.setDuration(
triggerBack ? POST_COMMIT_DURATION_MS : POST_COMMIT_CANCEL_DURATION_MS);
mPostCommitAnimator.start();
+ if (triggerBack) {
+ mInsetsController.setPredictiveBackImeHideAnimInProgress(true);
+ notifyHideIme();
+ }
+ if (mStartRootScrollY != 0) {
+ // RootView is panned, ensure that it is scrolled back to the intended scroll position
+ if (triggerBack) {
+ // requesting ime as invisible
+ mInsetsController.setRequestedVisibleTypes(0, ime());
+ // changes the animation state and notifies RootView of changed insets, which
+ // causes it to reset its scrollY to 0f (animated)
+ mInsetsController.onAnimationStateChanged(ime(), /*running*/ true);
+ } else {
+ // This causes RootView to update its scroll back to the panned position
+ mInsetsController.getHost().notifyInsetsChanged();
+ }
+ }
+ }
+
+ private void notifyHideIme() {
+ ImeTracker.Token statsToken = ImeTracker.forLogging().onStart(ImeTracker.TYPE_HIDE,
+ ImeTracker.ORIGIN_CLIENT,
+ SoftInputShowHideReason.HIDE_SOFT_INPUT_REQUEST_HIDE_WITH_CONTROL, true);
+ // This notifies the IME that it is being hidden. In response, the IME will unregister the
+ // animation callback, such that new back gestures happening during the post-commit phase of
+ // the hide animation can already dispatch to a new callback.
+ // Note that the IME will call hide() in InsetsController. InsetsController will not animate
+ // that hide request if it sees that ImeBackAnimationController is already animating
+ // the IME away
+ mInsetsController.getHost().getInputMethodManager()
+ .notifyImeHidden(mInsetsController.getHost().getWindowToken(), statsToken);
}
private void reset() {
@@ -200,6 +241,8 @@
mLastProgress = 0f;
mTriggerBack = false;
mIsPreCommitAnimationInProgress = false;
+ mInsetsController.setPredictiveBackImeHideAnimInProgress(false);
+ mStartRootScrollY = 0;
}
private void resetPostCommitAnimator() {
@@ -214,6 +257,11 @@
== SOFT_INPUT_ADJUST_RESIZE;
}
+ private boolean isAdjustPan() {
+ return (mViewRoot.mWindowAttributes.softInputMode & SOFT_INPUT_MASK_ADJUST)
+ == SOFT_INPUT_ADJUST_PAN;
+ }
+
private boolean isHideAnimationInProgress() {
return mPostCommitAnimator != null && mTriggerBack;
}
diff --git a/core/java/android/view/ImeInsetsSourceConsumer.java b/core/java/android/view/ImeInsetsSourceConsumer.java
index 6caf4d6..62dbc39 100644
--- a/core/java/android/view/ImeInsetsSourceConsumer.java
+++ b/core/java/android/view/ImeInsetsSourceConsumer.java
@@ -66,7 +66,12 @@
"ImeInsetsSourceConsumer#onAnimationFinished",
mController.getHost().getInputMethodManager(), null /* icProto */);
}
- final boolean insetsChanged = super.onAnimationStateChanged(running);
+ boolean insetsChanged = super.onAnimationStateChanged(running);
+ if (running && !isShowRequested() && mController.isPredictiveBackImeHideAnimInProgress()) {
+ // IME predictive back animation switched from pre-commit to post-commit.
+ insetsChanged |= applyLocalVisibilityOverride();
+ }
+
if (!isShowRequested()) {
mIsRequestedVisibleAwaitingLeash = false;
if (!running && !mHasPendingRequest) {
@@ -243,7 +248,8 @@
* {@link InputMethodManager#showSoftInput(View, int)} is called.
*/
public void onShowRequested() {
- if (mAnimationState == ANIMATION_STATE_HIDE) {
+ if (mAnimationState == ANIMATION_STATE_HIDE
+ || mController.isPredictiveBackImeHideAnimInProgress()) {
mHasPendingRequest = true;
}
}
diff --git a/core/java/android/view/InsetsController.java b/core/java/android/view/InsetsController.java
index 1f6ceca..6c90011 100644
--- a/core/java/android/view/InsetsController.java
+++ b/core/java/android/view/InsetsController.java
@@ -651,6 +651,7 @@
private @Appearance int mAppearanceControlled;
private @Appearance int mAppearanceFromResource;
private boolean mBehaviorControlled;
+ private boolean mIsPredictiveBackImeHideAnimInProgress;
private final Runnable mPendingControlTimeout = this::abortPendingImeControlRequest;
private final ArrayList<OnControllableInsetsChangedListener> mControllableInsetsChangedListeners
@@ -1027,6 +1028,14 @@
reportRequestedVisibleTypes();
}
+ void setPredictiveBackImeHideAnimInProgress(boolean isInProgress) {
+ mIsPredictiveBackImeHideAnimInProgress = isInProgress;
+ }
+
+ boolean isPredictiveBackImeHideAnimInProgress() {
+ return mIsPredictiveBackImeHideAnimInProgress;
+ }
+
@Override
public void show(@InsetsType int types) {
show(types, false /* fromIme */, null /* statsToken */);
@@ -1090,7 +1099,8 @@
}
continue;
}
- if (fromIme && animationType == ANIMATION_TYPE_USER) {
+ if (fromIme && animationType == ANIMATION_TYPE_USER
+ && !mIsPredictiveBackImeHideAnimInProgress) {
// App is already controlling the IME, don't cancel it.
if (isIme) {
ImeTracker.forLogging().onFailed(
@@ -1186,7 +1196,8 @@
}
}
if (!requestedVisible && animationType == ANIMATION_TYPE_NONE
- || animationType == ANIMATION_TYPE_HIDE) {
+ || animationType == ANIMATION_TYPE_HIDE || (animationType
+ == ANIMATION_TYPE_USER && mIsPredictiveBackImeHideAnimInProgress)) {
// no-op: already hidden or animating out (because window visibility is
// applied before starting animation).
if (isImeAnimation) {
@@ -1609,7 +1620,7 @@
onAnimationStateChanged(removedTypes, false /* running */);
}
- private void onAnimationStateChanged(@InsetsType int types, boolean running) {
+ void onAnimationStateChanged(@InsetsType int types, boolean running) {
boolean insetsChanged = false;
for (int i = mSourceConsumers.size() - 1; i >= 0; i--) {
final InsetsSourceConsumer consumer = mSourceConsumers.valueAt(i);
diff --git a/core/java/android/view/TextureView.java b/core/java/android/view/TextureView.java
index 5466bf5..ebc86ee 100644
--- a/core/java/android/view/TextureView.java
+++ b/core/java/android/view/TextureView.java
@@ -202,6 +202,14 @@
// Set by native code, do not write!
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
private long mNativeWindow;
+ // Used for VRR detecting "normal" frame rate rather than "high". This is the previous
+ // interval for drawing. This can be removed when NORMAL is the default rate for Views.
+ // (b/329156944)
+ private long mMinusTwoFrameIntervalMillis = 0;
+ // Used for VRR detecting "normal" frame rate rather than "high". This is the last
+ // frame time for drawing. This can be removed when NORMAL is the default rate for Views.
+ // (b/329156944)
+ private long mLastFrameTimeMillis = 0;
/**
* Creates a new TextureView.
@@ -890,12 +898,26 @@
*/
@Override
protected int calculateFrameRateCategory() {
- if (mMinusTwoFrameIntervalMillis > 15 && mMinusOneFrameIntervalMillis > 15) {
+ long now = getDrawingTime();
+ // This isn't necessary when the default frame rate is NORMAL (b/329156944)
+ if (mMinusTwoFrameIntervalMillis > 15 && (now - mLastFrameTimeMillis) > 15) {
return FRAME_RATE_CATEGORY_NORMAL;
}
return super.calculateFrameRateCategory();
}
+ /**
+ * @hide
+ */
+ @Override
+ protected void votePreferredFrameRate() {
+ super.votePreferredFrameRate();
+ // This isn't necessary when the default frame rate is NORMAL (b/329156944)
+ long now = getDrawingTime();
+ mMinusTwoFrameIntervalMillis = now - mLastFrameTimeMillis;
+ mLastFrameTimeMillis = now;
+ }
+
@UnsupportedAppUsage
private final SurfaceTexture.OnFrameAvailableListener mUpdateListener =
surfaceTexture -> {
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 4c4a22c..a355f55 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -911,6 +911,12 @@
private static final String AUTOFILL_LOG_TAG = "View.Autofill";
/**
+ * The logging tag used by this class when logging verbose and chatty (high volume)
+ * autofill-related messages.
+ */
+ private static final String AUTOFILL_CHATTY_LOG_TAG = "View.Autofill.Chatty";
+
+ /**
* The logging tag used by this class when logging content capture-related messages.
*/
private static final String CONTENT_CAPTURE_LOG_TAG = "View.ContentCapture";
@@ -1133,7 +1139,7 @@
private static final int FOCUSABLE_MASK = 0x00000011;
/**
- * This view will adjust its padding to fit sytem windows (e.g. status bar)
+ * This view will adjust its padding to fit system windows (e.g. status bar)
*/
private static final int FITS_SYSTEM_WINDOWS = 0x00000002;
@@ -5764,23 +5770,10 @@
static final float MAX_FRAME_RATE = 140;
- private static final int INFREQUENT_UPDATE_INTERVAL_MILLIS = 100;
- private static final int INFREQUENT_UPDATE_COUNTS = 2;
-
// The preferred frame rate of the view that is mainly used for
// touch boosting, view velocity handling, and TextureView.
private float mPreferredFrameRate = REQUESTED_FRAME_RATE_CATEGORY_DEFAULT;
- private int mInfrequentUpdateCount = 0;
- private long mLastUpdateTimeMillis = 0;
- /**
- * @hide
- */
- protected int mMinusOneFrameIntervalMillis = 0;
- /**
- * @hide
- */
- protected int mMinusTwoFrameIntervalMillis = 0;
private int mLastFrameRateCategory = FRAME_RATE_CATEGORY_NO_PREFERENCE;
@FlaggedApi(FLAG_TOOLKIT_SET_FRAME_RATE_READ_ONLY)
@@ -8704,8 +8697,8 @@
@CallSuper
protected void onFocusChanged(boolean gainFocus, @FocusDirection int direction,
@Nullable Rect previouslyFocusedRect) {
- if (DBG) {
- Log.d(VIEW_LOG_TAG, "onFocusChanged() entered. gainFocus: "
+ if (Log.isLoggable(AUTOFILL_CHATTY_LOG_TAG, Log.VERBOSE)) {
+ Log.v(AUTOFILL_CHATTY_LOG_TAG, "onFocusChanged() entered. gainFocus: "
+ gainFocus);
}
if (gainFocus) {
@@ -8773,8 +8766,8 @@
if (canNotifyAutofillEnterExitEvent()) {
AutofillManager afm = getAutofillManager();
if (afm != null) {
- if (DBG) {
- Log.d(VIEW_LOG_TAG, this + " afm is not null");
+ if (Log.isLoggable(AUTOFILL_CHATTY_LOG_TAG, Log.VERBOSE)) {
+ Log.v(AUTOFILL_CHATTY_LOG_TAG, this + " afm is not null");
}
if (enter) {
// We have not been laid out yet, hence cannot evaluate
@@ -8787,8 +8780,8 @@
// animation beginning. On the time, the view is not visible
// to the user. And then as the animation progresses, the view
// becomes visible to the user.
- if (DBG) {
- Log.d(VIEW_LOG_TAG,
+ if (Log.isLoggable(AUTOFILL_CHATTY_LOG_TAG, Log.VERBOSE)) {
+ Log.v(AUTOFILL_CHATTY_LOG_TAG,
"notifyEnterOrExitForAutoFillIfNeeded:"
+ " isLaidOut(): " + isLaidOut()
+ " isVisibleToUser(): " + isVisibleToUser()
@@ -11020,28 +11013,28 @@
}
private boolean isAutofillable() {
- if (DBG) {
- Log.d(VIEW_LOG_TAG, "isAutofillable() entered.");
+ if (Log.isLoggable(AUTOFILL_CHATTY_LOG_TAG, Log.VERBOSE)) {
+ Log.v(AUTOFILL_CHATTY_LOG_TAG, "isAutofillable() entered.");
}
if (getAutofillType() == AUTOFILL_TYPE_NONE) {
- if (DBG) {
- Log.d(VIEW_LOG_TAG, "getAutofillType() returns AUTOFILL_TYPE_NONE");
+ if (Log.isLoggable(AUTOFILL_CHATTY_LOG_TAG, Log.VERBOSE)) {
+ Log.v(AUTOFILL_CHATTY_LOG_TAG, "getAutofillType() returns AUTOFILL_TYPE_NONE");
}
return false;
}
final AutofillManager afm = getAutofillManager();
if (afm == null) {
- if (DBG) {
- Log.d(VIEW_LOG_TAG, "AutofillManager is null");
+ if (Log.isLoggable(AUTOFILL_CHATTY_LOG_TAG, Log.VERBOSE)) {
+ Log.v(AUTOFILL_CHATTY_LOG_TAG, "AutofillManager is null");
}
return false;
}
// Check whether view is not part of an activity. If it's not, return false.
if (getAutofillViewId() <= LAST_APP_AUTOFILL_ID) {
- if (DBG) {
- Log.d(VIEW_LOG_TAG, "getAutofillViewId()<=LAST_APP_AUTOFILL_ID");
+ if (Log.isLoggable(AUTOFILL_CHATTY_LOG_TAG, Log.VERBOSE)) {
+ Log.v(AUTOFILL_CHATTY_LOG_TAG, "getAutofillViewId()<=LAST_APP_AUTOFILL_ID");
}
return false;
}
@@ -11052,8 +11045,9 @@
if ((isImportantForAutofill() && afm.isTriggerFillRequestOnFilteredImportantViewsEnabled())
|| (!isImportantForAutofill()
&& afm.isTriggerFillRequestOnUnimportantViewEnabled())) {
- if (DBG) {
- Log.d(VIEW_LOG_TAG, "isImportantForAutofill(): " + isImportantForAutofill()
+ if (Log.isLoggable(AUTOFILL_CHATTY_LOG_TAG, Log.VERBOSE)) {
+ Log.v(AUTOFILL_CHATTY_LOG_TAG,
+ "isImportantForAutofill(): " + isImportantForAutofill()
+ "afm.isAutofillable(): " + afm.isAutofillable(this));
}
return afm.isAutofillable(this) ? true : notifyAugmentedAutofillIfNeeded(afm);
@@ -11061,8 +11055,8 @@
// If the previous condition is not met, fall back to the previous way to trigger fill
// request based on autofill importance instead.
- if (DBG) {
- Log.d(VIEW_LOG_TAG, "isImportantForAutofill(): " + isImportantForAutofill());
+ if (Log.isLoggable(AUTOFILL_CHATTY_LOG_TAG, Log.VERBOSE)) {
+ Log.v(AUTOFILL_CHATTY_LOG_TAG, "isImportantForAutofill(): " + isImportantForAutofill());
}
return isImportantForAutofill() ? true : notifyAugmentedAutofillIfNeeded(afm);
}
@@ -11078,8 +11072,8 @@
/** @hide */
public boolean canNotifyAutofillEnterExitEvent() {
- if (DBG) {
- Log.d(VIEW_LOG_TAG, "canNotifyAutofillEnterExitEvent() entered. "
+ if (Log.isLoggable(AUTOFILL_CHATTY_LOG_TAG, Log.VERBOSE)) {
+ Log.v(AUTOFILL_CHATTY_LOG_TAG, "canNotifyAutofillEnterExitEvent() entered. "
+ " isAutofillable(): " + isAutofillable()
+ " isAttachedToWindow(): " + isAttachedToWindow());
}
@@ -23651,7 +23645,6 @@
if (sToolkitSetFrameRateReadOnlyFlagValue
&& sToolkitFrameRateViewEnablingReadOnlyFlagValue) {
votePreferredFrameRate();
- updateInfrequentCount();
}
mPrivateFlags4 = (mPrivateFlags4 & ~PFLAG4_HAS_MOVED) | PFLAG4_HAS_DRAWN;
@@ -32835,6 +32828,13 @@
SENSITIVE_CONTENT_AUTOFILL_HINTS.add(View.AUTOFILL_HINT_USERNAME);
SENSITIVE_CONTENT_AUTOFILL_HINTS.add(View.AUTOFILL_HINT_PASSWORD_AUTO);
SENSITIVE_CONTENT_AUTOFILL_HINTS.add(View.AUTOFILL_HINT_PASSWORD);
+ SENSITIVE_CONTENT_AUTOFILL_HINTS.add(View.AUTOFILL_HINT_CREDIT_CARD_NUMBER);
+ SENSITIVE_CONTENT_AUTOFILL_HINTS.add(View.AUTOFILL_HINT_CREDIT_CARD_SECURITY_CODE);
+ SENSITIVE_CONTENT_AUTOFILL_HINTS.add(View.AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DATE);
+ SENSITIVE_CONTENT_AUTOFILL_HINTS.add(View.AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DAY);
+ SENSITIVE_CONTENT_AUTOFILL_HINTS.add(View.AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_MONTH);
+ SENSITIVE_CONTENT_AUTOFILL_HINTS.add(View.AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_YEAR);
+ SENSITIVE_CONTENT_AUTOFILL_HINTS.add(View.AUTOFILL_HINT_CREDENTIAL_MANAGER);
}
/**
@@ -33903,15 +33903,15 @@
* @hide
*/
protected int calculateFrameRateCategory() {
- if (mMinusTwoFrameIntervalMillis + mMinusOneFrameIntervalMillis
- < INFREQUENT_UPDATE_INTERVAL_MILLIS) {
- return mSizeBasedFrameRateCategoryAndReason;
+ int category;
+ switch (getViewRootImpl().intermittentUpdateState()) {
+ case ViewRootImpl.INTERMITTENT_STATE_INTERMITTENT ->
+ category = FRAME_RATE_CATEGORY_NORMAL | FRAME_RATE_CATEGORY_REASON_INTERMITTENT;
+ case ViewRootImpl.INTERMITTENT_STATE_NOT_INTERMITTENT ->
+ category = mSizeBasedFrameRateCategoryAndReason;
+ default -> category = mLastFrameRateCategory;
}
-
- if (mInfrequentUpdateCount == INFREQUENT_UPDATE_COUNTS) {
- return FRAME_RATE_CATEGORY_NORMAL | FRAME_RATE_CATEGORY_REASON_INTERMITTENT;
- }
- return mLastFrameRateCategory;
+ return category;
}
/**
@@ -33922,76 +33922,99 @@
protected void votePreferredFrameRate() {
// use toolkitSetFrameRate flag to gate the change
ViewRootImpl viewRootImpl = getViewRootImpl();
- int width = mRight - mLeft;
- int height = mBottom - mTop;
-
- if (viewRootImpl != null && (width != 0 && height != 0)) {
- if (viewRootImpl.shouldCheckFrameRate(mPreferredFrameRate > 0f)) {
- float velocityFrameRate = 0f;
- if (mAttachInfo.mViewVelocityApi) {
- float velocity = mFrameContentVelocity;
-
- if (velocity < 0f
- && (mPrivateFlags4 & (PFLAG4_HAS_MOVED | PFLAG4_HAS_DRAWN)) == (
- PFLAG4_HAS_MOVED | PFLAG4_HAS_DRAWN)
- && mParent instanceof View
- && ((View) mParent).mFrameContentVelocity <= 0
- ) {
- // This current calculation is very simple. If something on the screen
- // moved, then it votes for the highest velocity.
- velocityFrameRate = MAX_FRAME_RATE;
- } else if (velocity > 0f) {
- velocityFrameRate = convertVelocityToFrameRate(velocity);
- }
- }
- if (velocityFrameRate > 0f || mPreferredFrameRate > 0f) {
- int compatibility = FRAME_RATE_COMPATIBILITY_GTE;
- float frameRate = velocityFrameRate;
- if (mPreferredFrameRate > velocityFrameRate) {
- compatibility = FRAME_RATE_COMPATIBILITY_FIXED_SOURCE;
- frameRate = mPreferredFrameRate;
- }
- viewRootImpl.votePreferredFrameRate(frameRate, compatibility);
- }
+ if (viewRootImpl == null) {
+ return; // can't vote if not connected
+ }
+ float velocity = mFrameContentVelocity;
+ float frameRate = mPreferredFrameRate;
+ ViewParent parent = mParent;
+ if (velocity <= 0 && Float.isNaN(frameRate)) {
+ // The most common case is when nothing is set, so this special case is called
+ // often.
+ if (mAttachInfo.mViewVelocityApi
+ && (mPrivateFlags4 & (PFLAG4_HAS_MOVED | PFLAG4_HAS_DRAWN)) == (
+ PFLAG4_HAS_MOVED | PFLAG4_HAS_DRAWN)
+ && viewRootImpl.shouldCheckFrameRate(false)
+ && parent instanceof View
+ && ((View) parent).mFrameContentVelocity <= 0) {
+ viewRootImpl.votePreferredFrameRate(MAX_FRAME_RATE, FRAME_RATE_COMPATIBILITY_GTE);
}
- if (!willNotDraw() && isDirty() && viewRootImpl.shouldCheckFrameRateCategory()) {
- if (sToolkitMetricsForFrameRateDecisionFlagValue) {
- float sizePercentage = width * height / mAttachInfo.mDisplayPixelCount;
- viewRootImpl.recordViewPercentage(sizePercentage);
- }
-
- int frameRateCategory = FRAME_RATE_CATEGORY_NO_PREFERENCE;
- if (Float.isNaN(mPreferredFrameRate)) {
- frameRateCategory = calculateFrameRateCategory();
- } else if (mPreferredFrameRate < 0) {
- switch ((int) mPreferredFrameRate) {
- case (int) REQUESTED_FRAME_RATE_CATEGORY_NO_PREFERENCE ->
- frameRateCategory = FRAME_RATE_CATEGORY_NO_PREFERENCE
- | FRAME_RATE_CATEGORY_REASON_REQUESTED;
- case (int) REQUESTED_FRAME_RATE_CATEGORY_LOW ->
- frameRateCategory = FRAME_RATE_CATEGORY_LOW
- | FRAME_RATE_CATEGORY_REASON_REQUESTED;
- case (int) REQUESTED_FRAME_RATE_CATEGORY_NORMAL ->
- frameRateCategory = FRAME_RATE_CATEGORY_NORMAL
- | FRAME_RATE_CATEGORY_REASON_REQUESTED;
- case (int) REQUESTED_FRAME_RATE_CATEGORY_HIGH ->
- frameRateCategory = FRAME_RATE_CATEGORY_HIGH
- | FRAME_RATE_CATEGORY_REASON_REQUESTED;
- default -> {
- // invalid frame rate, use default
- int category = sToolkitFrameRateDefaultNormalReadOnlyFlagValue
- ? FRAME_RATE_CATEGORY_NORMAL : FRAME_RATE_CATEGORY_HIGH;
- frameRateCategory = category
- | FRAME_RATE_CATEGORY_REASON_INVALID;
- }
- }
- }
-
+ if (!willNotDraw() && viewRootImpl.shouldCheckFrameRateCategory()) {
+ int frameRateCategory = calculateFrameRateCategory();
int category = frameRateCategory & ~FRAME_RATE_CATEGORY_REASON_MASK;
int reason = frameRateCategory & FRAME_RATE_CATEGORY_REASON_MASK;
viewRootImpl.votePreferredFrameRateCategory(category, reason, this);
mLastFrameRateCategory = frameRateCategory;
}
+ return;
+ }
+ if (viewRootImpl.shouldCheckFrameRate(frameRate > 0f)) {
+ float velocityFrameRate = 0f;
+ if (mAttachInfo.mViewVelocityApi) {
+ if (velocity < 0f
+ && (mPrivateFlags4 & (PFLAG4_HAS_MOVED | PFLAG4_HAS_DRAWN)) == (
+ PFLAG4_HAS_MOVED | PFLAG4_HAS_DRAWN)
+ && mParent instanceof View
+ && ((View) mParent).mFrameContentVelocity <= 0
+ ) {
+ // This current calculation is very simple. If something on the screen
+ // moved, then it votes for the highest velocity.
+ velocityFrameRate = MAX_FRAME_RATE;
+ } else if (velocity > 0f) {
+ velocityFrameRate = convertVelocityToFrameRate(velocity);
+ }
+ }
+ if (velocityFrameRate > 0f || frameRate > 0f) {
+ int compatibility;
+ if (frameRate >= velocityFrameRate) {
+ compatibility = FRAME_RATE_COMPATIBILITY_FIXED_SOURCE;
+ } else {
+ compatibility = FRAME_RATE_COMPATIBILITY_GTE;
+ frameRate = velocityFrameRate;
+ }
+ viewRootImpl.votePreferredFrameRate(frameRate, compatibility);
+ }
+ }
+
+ if (!willNotDraw() && viewRootImpl.shouldCheckFrameRateCategory()) {
+ if (sToolkitMetricsForFrameRateDecisionFlagValue) {
+ int width = mRight - mLeft;
+ int height = mBottom - mTop;
+ float sizePercentage = width * height / mAttachInfo.mDisplayPixelCount;
+ viewRootImpl.recordViewPercentage(sizePercentage);
+ }
+
+ int frameRateCategory = FRAME_RATE_CATEGORY_NO_PREFERENCE;
+ if (Float.isNaN(frameRate)) {
+ frameRateCategory = calculateFrameRateCategory();
+ } else if (frameRate < 0) {
+ switch ((int) frameRate) {
+ case (int) REQUESTED_FRAME_RATE_CATEGORY_NO_PREFERENCE ->
+ frameRateCategory = FRAME_RATE_CATEGORY_NO_PREFERENCE
+ | FRAME_RATE_CATEGORY_REASON_REQUESTED;
+ case (int) REQUESTED_FRAME_RATE_CATEGORY_LOW ->
+ frameRateCategory = FRAME_RATE_CATEGORY_LOW
+ | FRAME_RATE_CATEGORY_REASON_REQUESTED;
+ case (int) REQUESTED_FRAME_RATE_CATEGORY_NORMAL ->
+ frameRateCategory = FRAME_RATE_CATEGORY_NORMAL
+ | FRAME_RATE_CATEGORY_REASON_REQUESTED;
+ case (int) REQUESTED_FRAME_RATE_CATEGORY_HIGH ->
+ frameRateCategory = FRAME_RATE_CATEGORY_HIGH
+ | FRAME_RATE_CATEGORY_REASON_REQUESTED;
+ default -> {
+ // invalid frame rate, use default
+ int category = sToolkitFrameRateDefaultNormalReadOnlyFlagValue
+ ? FRAME_RATE_CATEGORY_NORMAL : FRAME_RATE_CATEGORY_HIGH;
+ frameRateCategory = category
+ | FRAME_RATE_CATEGORY_REASON_INVALID;
+ }
+ }
+ }
+
+ int category = frameRateCategory & ~FRAME_RATE_CATEGORY_REASON_MASK;
+ int reason = frameRateCategory & FRAME_RATE_CATEGORY_REASON_MASK;
+ viewRootImpl.votePreferredFrameRateCategory(category, reason, this);
+ mLastFrameRateCategory = frameRateCategory;
}
}
@@ -34074,33 +34097,4 @@
}
return 0;
}
-
- /**
- * This function is mainly used for migrating infrequent layer logic
- * from SurfaceFlinger to Toolkit.
- * The infrequent layer logic includes:
- * - NORMAL for infrequent update: FT2-FT1 > 100 && FT3-FT2 > 100.
- * - HIGH/NORMAL based on size for frequent update: (FT3-FT2) + (FT2 - FT1) < 100.
- * - otherwise, use the previous category value.
- */
- private void updateInfrequentCount() {
- if (!willNotDraw()) {
- long currentTimeMillis = getDrawingTime();
- int timeIntervalMillis =
- (int) Math.min(Integer.MAX_VALUE, currentTimeMillis - mLastUpdateTimeMillis);
- mMinusTwoFrameIntervalMillis = mMinusOneFrameIntervalMillis;
- mMinusOneFrameIntervalMillis = timeIntervalMillis;
-
- mLastUpdateTimeMillis = currentTimeMillis;
- if (mMinusTwoFrameIntervalMillis >= 30 && timeIntervalMillis < 2) {
- return;
- }
- if (timeIntervalMillis >= INFREQUENT_UPDATE_INTERVAL_MILLIS) {
- mInfrequentUpdateCount = mInfrequentUpdateCount == INFREQUENT_UPDATE_COUNTS
- ? mInfrequentUpdateCount : mInfrequentUpdateCount + 1;
- } else {
- mInfrequentUpdateCount = 0;
- }
- }
- }
}
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index a8619ab..3f078c8 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -392,6 +392,26 @@
private static final int UNSET_SYNC_ID = -1;
+ private static final int INFREQUENT_UPDATE_INTERVAL_MILLIS = 100;
+ private static final int INFREQUENT_UPDATE_COUNTS = 2;
+
+ /**
+ * The {@link #intermittentUpdateState()} value when the ViewRootImpl isn't intermittent.
+ */
+ public static final int INTERMITTENT_STATE_NOT_INTERMITTENT = 1;
+
+ /**
+ * The {@link #intermittentUpdateState()} value when the ViewRootImpl is transitioning either
+ * to or from intermittent to not intermittent. This indicates that the frame rate shouldn't
+ * change.
+ */
+ public static final int INTERMITTENT_STATE_IN_TRANSITION = -1;
+
+ /**
+ * The {@link #intermittentUpdateState()} value when the ViewRootImpl is intermittent.
+ */
+ public static final int INTERMITTENT_STATE_INTERMITTENT = 0;
+
/**
* Minimum time to wait before reporting changes to keep clear areas.
*/
@@ -623,6 +643,15 @@
// Is the stylus pointer icon enabled
private final boolean mIsStylusPointerIconEnabled;
+ // VRR check for number of infrequent updates
+ private int mInfrequentUpdateCount = 0;
+ // VRR time of last update
+ private long mLastUpdateTimeMillis = 0;
+ // VRR interval since the previous
+ private int mMinusOneFrameIntervalMillis = 0;
+ // VRR interval between the previous and the frame before
+ private int mMinusTwoFrameIntervalMillis = 0;
+
/**
* Update the Choreographer's FrameInfo object with the timing information for the current
* ViewRootImpl instance. Erase the data in the current ViewFrameInfo to prepare for the next
@@ -1068,6 +1097,7 @@
// Used to check if there is a message in the message queue
// for idleness handling.
private boolean mHasIdledMessage = false;
+ private boolean mDrawnThisFrame = false;
// Used to check if there is a conflict between different frame rate voting.
// Take 24 and 30 as an example, 24 is not a divisor of 30.
// We consider there is a conflict.
@@ -4220,25 +4250,29 @@
// For the variable refresh rate project.
// We set the preferred frame rate and frame rate category at the end of performTraversals
// when the values are applicable.
- setCategoryFromCategoryCounts();
- setPreferredFrameRate(mPreferredFrameRate);
- setPreferredFrameRateCategory(mPreferredFrameRateCategory);
- if (!mIsFrameRateConflicted) {
- mHandler.removeMessages(MSG_FRAME_RATE_SETTING);
- mHandler.sendEmptyMessageDelayed(MSG_FRAME_RATE_SETTING,
- FRAME_RATE_SETTING_REEVALUATE_TIME);
+ if (mDrawnThisFrame) {
+ mDrawnThisFrame = false;
+ updateInfrequentCount();
+ setCategoryFromCategoryCounts();
+ setPreferredFrameRate(mPreferredFrameRate);
+ setPreferredFrameRateCategory(mPreferredFrameRateCategory);
+ if (!mIsFrameRateConflicted) {
+ mHandler.removeMessages(MSG_FRAME_RATE_SETTING);
+ mHandler.sendEmptyMessageDelayed(MSG_FRAME_RATE_SETTING,
+ FRAME_RATE_SETTING_REEVALUATE_TIME);
+ }
+ checkIdleness();
+ mFrameRateCategoryHighCount = mFrameRateCategoryHighCount > 0
+ ? mFrameRateCategoryHighCount - 1 : mFrameRateCategoryHighCount;
+ mFrameRateCategoryNormalCount = mFrameRateCategoryNormalCount > 0
+ ? mFrameRateCategoryNormalCount - 1 : mFrameRateCategoryNormalCount;
+ mFrameRateCategoryLowCount = mFrameRateCategoryLowCount > 0
+ ? mFrameRateCategoryLowCount - 1 : mFrameRateCategoryLowCount;
+ mPreferredFrameRateCategory = FRAME_RATE_CATEGORY_DEFAULT;
+ mPreferredFrameRate = -1;
+ mIsFrameRateConflicted = false;
+ mFrameRateCategoryChangeReason = FRAME_RATE_CATEGORY_REASON_UNKNOWN;
}
- checkIdleness();
- mFrameRateCategoryHighCount = mFrameRateCategoryHighCount > 0
- ? mFrameRateCategoryHighCount - 1 : mFrameRateCategoryHighCount;
- mFrameRateCategoryNormalCount = mFrameRateCategoryNormalCount > 0
- ? mFrameRateCategoryNormalCount - 1 : mFrameRateCategoryNormalCount;
- mFrameRateCategoryLowCount = mFrameRateCategoryLowCount > 0
- ? mFrameRateCategoryLowCount - 1 : mFrameRateCategoryLowCount;
- mPreferredFrameRateCategory = FRAME_RATE_CATEGORY_DEFAULT;
- mPreferredFrameRate = -1;
- mIsFrameRateConflicted = false;
- mFrameRateCategoryChangeReason = FRAME_RATE_CATEGORY_REASON_UNKNOWN;
}
private void createSyncIfNeeded() {
@@ -5918,6 +5952,13 @@
return handled;
}
+ void setScrollY(int scrollY) {
+ if (mScroller != null) {
+ mScroller.abortAnimation();
+ }
+ mScrollY = scrollY;
+ }
+
/**
* @hide
*/
@@ -12516,6 +12557,15 @@
* Sets the mPreferredFrameRateCategory from the high, high_hint, normal, and low counts.
*/
private void setCategoryFromCategoryCounts() {
+ switch (mPreferredFrameRateCategory) {
+ case FRAME_RATE_CATEGORY_LOW -> mFrameRateCategoryLowCount = FRAME_RATE_CATEGORY_COUNT;
+ case FRAME_RATE_CATEGORY_NORMAL ->
+ mFrameRateCategoryNormalCount = FRAME_RATE_CATEGORY_COUNT;
+ case FRAME_RATE_CATEGORY_HIGH_HINT ->
+ mFrameRateCategoryHighHintCount = FRAME_RATE_CATEGORY_COUNT;
+ case FRAME_RATE_CATEGORY_HIGH ->
+ mFrameRateCategoryHighCount = FRAME_RATE_CATEGORY_COUNT;
+ }
if (mFrameRateCategoryHighCount > 0) {
mPreferredFrameRateCategory = FRAME_RATE_CATEGORY_HIGH;
} else if (mFrameRateCategoryHighHintCount > 0) {
@@ -12661,21 +12711,31 @@
*/
@VisibleForTesting(visibility = VisibleForTesting.Visibility.PROTECTED)
public void votePreferredFrameRateCategory(int frameRateCategory, int reason, View view) {
- switch (frameRateCategory) {
- case FRAME_RATE_CATEGORY_LOW -> mFrameRateCategoryLowCount = FRAME_RATE_CATEGORY_COUNT;
- case FRAME_RATE_CATEGORY_NORMAL ->
- mFrameRateCategoryNormalCount = FRAME_RATE_CATEGORY_COUNT;
- case FRAME_RATE_CATEGORY_HIGH_HINT ->
- mFrameRateCategoryHighHintCount = FRAME_RATE_CATEGORY_COUNT;
- case FRAME_RATE_CATEGORY_HIGH ->
- mFrameRateCategoryHighCount = FRAME_RATE_CATEGORY_COUNT;
- }
if (frameRateCategory > mPreferredFrameRateCategory) {
mPreferredFrameRateCategory = frameRateCategory;
mFrameRateCategoryChangeReason = reason;
- mFrameRateCategoryView = view == null ? "-" : view.getClass().getSimpleName();
+// mFrameRateCategoryView = view == null ? "-" : view.getClass().getSimpleName();
}
mHasInvalidation = true;
+ mDrawnThisFrame = true;
+ }
+
+ /**
+ * Returns {@link #INTERMITTENT_STATE_INTERMITTENT} when the ViewRootImpl has only been
+ * updated intermittently, {@link #INTERMITTENT_STATE_NOT_INTERMITTENT} when it is
+ * not updated intermittently, and {@link #INTERMITTENT_STATE_IN_TRANSITION} when it
+ * is transitioning between {@link #INTERMITTENT_STATE_NOT_INTERMITTENT} and
+ * {@link #INTERMITTENT_STATE_INTERMITTENT}.
+ */
+ int intermittentUpdateState() {
+ if (mMinusOneFrameIntervalMillis + mMinusTwoFrameIntervalMillis
+ < INFREQUENT_UPDATE_INTERVAL_MILLIS) {
+ return INTERMITTENT_STATE_NOT_INTERMITTENT;
+ }
+ if (mInfrequentUpdateCount == INFREQUENT_UPDATE_COUNTS) {
+ return INTERMITTENT_STATE_INTERMITTENT;
+ }
+ return INTERMITTENT_STATE_IN_TRANSITION;
}
/**
@@ -12730,6 +12790,8 @@
mFrameRateCategoryHighCount = FRAME_RATE_CATEGORY_COUNT;
mFrameRateCategoryChangeReason = FRAME_RATE_CATEGORY_REASON_VELOCITY;
mFrameRateCategoryView = null;
+ mHasInvalidation = true;
+ mDrawnThisFrame = true;
return;
}
}
@@ -12761,6 +12823,7 @@
mPreferredFrameRate = nextFrameRate;
mFrameRateCompatibility = nextFrameRateCompatibility;
mHasInvalidation = true;
+ mDrawnThisFrame = true;
}
/**
@@ -12894,4 +12957,29 @@
mHandler.removeMessages(MSG_CHECK_INVALIDATION_IDLE);
mHandler.removeMessages(MSG_FRAME_RATE_SETTING);
}
+
+ /**
+ * This function is mainly used for migrating infrequent layer logic
+ * from SurfaceFlinger to Toolkit.
+ * The infrequent layer logic includes:
+ * - NORMAL for infrequent update: FT2-FT1 > 100 && FT3-FT2 > 100.
+ * - HIGH/NORMAL based on size for frequent update: (FT3-FT2) + (FT2 - FT1) < 100.
+ * - otherwise, use the previous category value.
+ */
+ private void updateInfrequentCount() {
+ long currentTimeMillis = mAttachInfo.mDrawingTime;
+ int timeIntervalMillis =
+ (int) Math.min(Integer.MAX_VALUE, currentTimeMillis - mLastUpdateTimeMillis);
+ mMinusTwoFrameIntervalMillis = mMinusOneFrameIntervalMillis;
+ mMinusOneFrameIntervalMillis = timeIntervalMillis;
+
+ mLastUpdateTimeMillis = currentTimeMillis;
+ if (timeIntervalMillis >= INFREQUENT_UPDATE_INTERVAL_MILLIS) {
+ int infrequentUpdateCount = mInfrequentUpdateCount;
+ mInfrequentUpdateCount = infrequentUpdateCount == INFREQUENT_UPDATE_COUNTS
+ ? infrequentUpdateCount : infrequentUpdateCount + 1;
+ } else {
+ mInfrequentUpdateCount = 0;
+ }
+ }
}
diff --git a/core/java/android/view/ViewStructure.java b/core/java/android/view/ViewStructure.java
index 6c852c3..86e5bea 100644
--- a/core/java/android/view/ViewStructure.java
+++ b/core/java/android/view/ViewStructure.java
@@ -76,6 +76,21 @@
"android.view.ViewStructure.extra.FIRST_ACTIVE_POSITION";
/**
+ * Key used for writing the type of the view that generated the virtual structure of its
+ * children.
+ *
+ * For example, if the virtual structure is generated by a webview, the value would be
+ * "WebView". If the virtual structure is generated by a compose view, then the value would be
+ * "ComposeView". The value is of type String.
+ *
+ * This value is added to mainly help with debugging purpose.
+ *
+ * @hide
+ */
+ public static final String EXTRA_VIRTUAL_STRUCTURE_TYPE =
+ "android.view.ViewStructure.extra.VIRTUAL_STRUCTURE_TYPE";
+
+ /**
* Set the identifier for this view.
*
* @param id The view's identifier, as per {@link View#getId View.getId()}.
diff --git a/core/java/android/view/accessibility/flags/accessibility_flags.aconfig b/core/java/android/view/accessibility/flags/accessibility_flags.aconfig
index c9d99d1..da2bf9d 100644
--- a/core/java/android/view/accessibility/flags/accessibility_flags.aconfig
+++ b/core/java/android/view/accessibility/flags/accessibility_flags.aconfig
@@ -1,4 +1,5 @@
package: "android.view.accessibility"
+container: "system"
# NOTE: Keep alphabetized to help limit merge conflicts from multiple simultaneous editors.
diff --git a/core/java/android/view/contentcapture/flags/content_capture_flags.aconfig b/core/java/android/view/contentcapture/flags/content_capture_flags.aconfig
index 3c15518..416a877 100644
--- a/core/java/android/view/contentcapture/flags/content_capture_flags.aconfig
+++ b/core/java/android/view/contentcapture/flags/content_capture_flags.aconfig
@@ -1,4 +1,5 @@
package: "android.view.contentcapture.flags"
+container: "system"
flag {
name: "run_on_background_thread_enabled"
diff --git a/core/java/android/view/contentprotection/flags/content_protection_flags.aconfig b/core/java/android/view/contentprotection/flags/content_protection_flags.aconfig
index 4de0f29..b3bd92b 100644
--- a/core/java/android/view/contentprotection/flags/content_protection_flags.aconfig
+++ b/core/java/android/view/contentprotection/flags/content_protection_flags.aconfig
@@ -1,4 +1,5 @@
package: "android.view.contentprotection.flags"
+container: "system"
flag {
name: "blocklist_update_enabled"
diff --git a/core/java/android/view/flags/refresh_rate_flags.aconfig b/core/java/android/view/flags/refresh_rate_flags.aconfig
index 1047131..d0fe3e0 100644
--- a/core/java/android/view/flags/refresh_rate_flags.aconfig
+++ b/core/java/android/view/flags/refresh_rate_flags.aconfig
@@ -1,4 +1,5 @@
package: "android.view.flags"
+container: "system"
flag {
name: "view_velocity_api"
diff --git a/core/java/android/view/flags/scroll_feedback_flags.aconfig b/core/java/android/view/flags/scroll_feedback_flags.aconfig
index a7c4104..338037f 100644
--- a/core/java/android/view/flags/scroll_feedback_flags.aconfig
+++ b/core/java/android/view/flags/scroll_feedback_flags.aconfig
@@ -1,4 +1,5 @@
package: "android.view.flags"
+container: "system"
flag {
namespace: "toolkit"
diff --git a/core/java/android/view/flags/view_flags.aconfig b/core/java/android/view/flags/view_flags.aconfig
index 486c2ab..33b29c7 100644
--- a/core/java/android/view/flags/view_flags.aconfig
+++ b/core/java/android/view/flags/view_flags.aconfig
@@ -1,4 +1,5 @@
package: "android.view.flags"
+container: "system"
flag {
name: "enable_surface_native_alloc_registration_ro"
diff --git a/core/java/android/view/flags/window_insets.aconfig b/core/java/android/view/flags/window_insets.aconfig
index bf6df5c..bedb7d5 100644
--- a/core/java/android/view/flags/window_insets.aconfig
+++ b/core/java/android/view/flags/window_insets.aconfig
@@ -1,4 +1,5 @@
package: "android.view.flags"
+container: "system"
flag {
name: "customizable_window_headers"
diff --git a/core/java/android/view/inputmethod/flags.aconfig b/core/java/android/view/inputmethod/flags.aconfig
index 0d19746..d79903b 100644
--- a/core/java/android/view/inputmethod/flags.aconfig
+++ b/core/java/android/view/inputmethod/flags.aconfig
@@ -1,4 +1,5 @@
package: "android.view.inputmethod"
+container: "system"
flag {
name: "refactor_insets_controller"
diff --git a/core/java/android/webkit/flags.aconfig b/core/java/android/webkit/flags.aconfig
index 2d834a8..defe61e 100644
--- a/core/java/android/webkit/flags.aconfig
+++ b/core/java/android/webkit/flags.aconfig
@@ -1,4 +1,5 @@
package: "android.webkit"
+container: "system"
flag {
name: "update_service_ipc_wrapper"
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index fbb5116..fb1c331 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -11254,8 +11254,10 @@
width = des;
} else {
if (mUseBoundsForWidth) {
- width = Math.max(boring.width,
- (int) Math.ceil(boring.getDrawingBoundingBox().width()));
+ RectF bbox = boring.getDrawingBoundingBox();
+ float rightMax = Math.max(bbox.right, boring.width);
+ float leftMin = Math.min(bbox.left, 0);
+ width = Math.max(boring.width, (int) Math.ceil(rightMax - leftMin));
} else {
width = boring.width;
}
diff --git a/core/java/android/widget/flags/differential_motion_fling_flags.aconfig b/core/java/android/widget/flags/differential_motion_fling_flags.aconfig
index 79cfe56..a0a391e 100644
--- a/core/java/android/widget/flags/differential_motion_fling_flags.aconfig
+++ b/core/java/android/widget/flags/differential_motion_fling_flags.aconfig
@@ -1,4 +1,5 @@
package: "android.widget.flags"
+container: "system"
flag {
namespace: "toolkit"
diff --git a/core/java/android/widget/flags/notification_widget_flags.aconfig b/core/java/android/widget/flags/notification_widget_flags.aconfig
index 515fa55..95794f3 100644
--- a/core/java/android/widget/flags/notification_widget_flags.aconfig
+++ b/core/java/android/widget/flags/notification_widget_flags.aconfig
@@ -1,4 +1,5 @@
package: "android.widget.flags"
+container: "system"
flag {
name: "notif_linearlayout_optimized"
diff --git a/core/java/android/window/TaskFragmentOperation.java b/core/java/android/window/TaskFragmentOperation.java
index 43df4f9..d0f3c3e 100644
--- a/core/java/android/window/TaskFragmentOperation.java
+++ b/core/java/android/window/TaskFragmentOperation.java
@@ -195,12 +195,6 @@
@Nullable
private final TaskFragmentAnimationParams mAnimationParams;
- private final boolean mIsolatedNav;
-
- private final boolean mDimOnTask;
-
- private final boolean mMoveToBottomIfClearWhenLaunch;
-
private final boolean mBooleanValue;
@Nullable
@@ -211,7 +205,6 @@
@Nullable IBinder activityToken, @Nullable Intent activityIntent,
@Nullable Bundle bundle, @Nullable IBinder secondaryFragmentToken,
@Nullable TaskFragmentAnimationParams animationParams,
- boolean isolatedNav, boolean dimOnTask, boolean moveToBottomIfClearWhenLaunch,
boolean booleanValue, @Nullable SurfaceControl.Transaction surfaceTransaction) {
mOpType = opType;
mTaskFragmentCreationParams = taskFragmentCreationParams;
@@ -220,9 +213,6 @@
mBundle = bundle;
mSecondaryFragmentToken = secondaryFragmentToken;
mAnimationParams = animationParams;
- mIsolatedNav = isolatedNav;
- mDimOnTask = dimOnTask;
- mMoveToBottomIfClearWhenLaunch = moveToBottomIfClearWhenLaunch;
mBooleanValue = booleanValue;
mSurfaceTransaction = surfaceTransaction;
}
@@ -235,9 +225,6 @@
mBundle = in.readBundle(getClass().getClassLoader());
mSecondaryFragmentToken = in.readStrongBinder();
mAnimationParams = in.readTypedObject(TaskFragmentAnimationParams.CREATOR);
- mIsolatedNav = in.readBoolean();
- mDimOnTask = in.readBoolean();
- mMoveToBottomIfClearWhenLaunch = in.readBoolean();
mBooleanValue = in.readBoolean();
mSurfaceTransaction = in.readTypedObject(SurfaceControl.Transaction.CREATOR);
}
@@ -251,9 +238,6 @@
dest.writeBundle(mBundle);
dest.writeStrongBinder(mSecondaryFragmentToken);
dest.writeTypedObject(mAnimationParams, flags);
- dest.writeBoolean(mIsolatedNav);
- dest.writeBoolean(mDimOnTask);
- dest.writeBoolean(mMoveToBottomIfClearWhenLaunch);
dest.writeBoolean(mBooleanValue);
dest.writeTypedObject(mSurfaceTransaction, flags);
}
@@ -328,29 +312,6 @@
return mAnimationParams;
}
- /**
- * Returns whether the activity navigation on this TaskFragment is isolated. This is only
- * useful when the op type is {@link OP_TYPE_SET_ISOLATED_NAVIGATION}.
- */
- public boolean isIsolatedNav() {
- return mIsolatedNav;
- }
-
- /**
- * Returns whether the dim layer should apply on the parent Task.
- */
- public boolean isDimOnTask() {
- return mDimOnTask;
- }
-
- /**
- * Returns whether the TaskFragment should move to bottom of task when any activity below it
- * is launched in clear top mode.
- */
- public boolean isMoveToBottomIfClearWhenLaunch() {
- return mMoveToBottomIfClearWhenLaunch;
- }
-
/** Returns the boolean value for this operation. */
public boolean getBooleanValue() {
return mBooleanValue;
@@ -389,9 +350,6 @@
if (mAnimationParams != null) {
sb.append(", animationParams=").append(mAnimationParams);
}
- sb.append(", isolatedNav=").append(mIsolatedNav);
- sb.append(", dimOnTask=").append(mDimOnTask);
- sb.append(", moveToBottomIfClearWhenLaunch=").append(mMoveToBottomIfClearWhenLaunch);
sb.append(", booleanValue=").append(mBooleanValue);
if (mSurfaceTransaction != null) {
sb.append(", surfaceTransaction=").append(mSurfaceTransaction);
@@ -404,8 +362,8 @@
@Override
public int hashCode() {
return Objects.hash(mOpType, mTaskFragmentCreationParams, mActivityToken, mActivityIntent,
- mBundle, mSecondaryFragmentToken, mAnimationParams, mIsolatedNav, mDimOnTask,
- mMoveToBottomIfClearWhenLaunch, mBooleanValue, mSurfaceTransaction);
+ mBundle, mSecondaryFragmentToken, mAnimationParams, mBooleanValue,
+ mSurfaceTransaction);
}
@Override
@@ -421,9 +379,6 @@
&& Objects.equals(mBundle, other.mBundle)
&& Objects.equals(mSecondaryFragmentToken, other.mSecondaryFragmentToken)
&& Objects.equals(mAnimationParams, other.mAnimationParams)
- && mIsolatedNav == other.mIsolatedNav
- && mDimOnTask == other.mDimOnTask
- && mMoveToBottomIfClearWhenLaunch == other.mMoveToBottomIfClearWhenLaunch
&& mBooleanValue == other.mBooleanValue
&& Objects.equals(mSurfaceTransaction, other.mSurfaceTransaction);
}
@@ -457,12 +412,6 @@
@Nullable
private TaskFragmentAnimationParams mAnimationParams;
- private boolean mIsolatedNav;
-
- private boolean mDimOnTask;
-
- private boolean mMoveToBottomIfClearWhenLaunch;
-
private boolean mBooleanValue;
@Nullable
@@ -531,36 +480,7 @@
}
/**
- * Sets the activity navigation of this TaskFragment to be isolated.
- */
- @NonNull
- public Builder setIsolatedNav(boolean isolatedNav) {
- mIsolatedNav = isolatedNav;
- return this;
- }
-
- /**
- * Sets the dimming to apply on the parent Task if any.
- */
- @NonNull
- public Builder setDimOnTask(boolean dimOnTask) {
- mDimOnTask = dimOnTask;
- return this;
- }
-
- /**
- * Sets whether the TaskFragment should move to bottom of task when any activity below it
- * is launched in clear top mode.
- */
- @NonNull
- public Builder setMoveToBottomIfClearWhenLaunch(boolean moveToBottomIfClearWhenLaunch) {
- mMoveToBottomIfClearWhenLaunch = moveToBottomIfClearWhenLaunch;
- return this;
- }
-
- /**
* Sets the boolean value for this operation.
- * TODO(b/327338038) migrate other boolean values to use shared mBooleanValue
*/
@NonNull
public Builder setBooleanValue(boolean booleanValue) {
@@ -588,8 +508,7 @@
public TaskFragmentOperation build() {
return new TaskFragmentOperation(mOpType, mTaskFragmentCreationParams, mActivityToken,
mActivityIntent, mBundle, mSecondaryFragmentToken, mAnimationParams,
- mIsolatedNav, mDimOnTask, mMoveToBottomIfClearWhenLaunch, mBooleanValue,
- mSurfaceTransaction);
+ mBooleanValue, mSurfaceTransaction);
}
}
}
diff --git a/core/java/android/window/TaskOrganizer.java b/core/java/android/window/TaskOrganizer.java
index 6d36b57..b9ffdbc 100644
--- a/core/java/android/window/TaskOrganizer.java
+++ b/core/java/android/window/TaskOrganizer.java
@@ -24,7 +24,7 @@
import android.annotation.SuppressLint;
import android.annotation.TestApi;
import android.app.ActivityManager;
-import android.app.AppCompatTaskInfo.CameraCompatControlState;
+import android.app.CameraCompatTaskInfo.CameraCompatControlState;
import android.os.IBinder;
import android.os.RemoteException;
import android.view.SurfaceControl;
diff --git a/core/java/android/window/WindowTokenClient.java b/core/java/android/window/WindowTokenClient.java
index 1ffb4ff..cc54a93 100644
--- a/core/java/android/window/WindowTokenClient.java
+++ b/core/java/android/window/WindowTokenClient.java
@@ -19,6 +19,8 @@
import static android.window.ConfigurationHelper.isDifferentDisplay;
import static android.window.ConfigurationHelper.shouldUpdateResources;
+import static com.android.window.flags.Flags.windowTokenConfigThreadSafe;
+
import android.annotation.AnyThread;
import android.annotation.MainThread;
import android.annotation.NonNull;
@@ -144,9 +146,8 @@
if (context == null) {
return;
}
- if (shouldReportConfigChange) {
- // Only report to ClientTransactionListenerController when shouldReportConfigChange,
- // which is on the MainThread.
+ if (shouldReportConfigChange && windowTokenConfigThreadSafe()) {
+ // Only report to ClientTransactionListenerController when shouldReportConfigChange.
final ClientTransactionListenerController controller =
getClientTransactionListenerController();
controller.onContextConfigurationPreChanged(context);
diff --git a/core/java/android/window/flags/accessibility.aconfig b/core/java/android/window/flags/accessibility.aconfig
index 368c609..733e3db 100644
--- a/core/java/android/window/flags/accessibility.aconfig
+++ b/core/java/android/window/flags/accessibility.aconfig
@@ -1,4 +1,5 @@
package: "com.android.window.flags"
+container: "system"
flag {
name: "do_not_check_intersection_when_non_magnifiable_window_transitions"
diff --git a/core/java/android/window/flags/large_screen_experiences_app_compat.aconfig b/core/java/android/window/flags/large_screen_experiences_app_compat.aconfig
index fa0dab0..98ff3c6 100644
--- a/core/java/android/window/flags/large_screen_experiences_app_compat.aconfig
+++ b/core/java/android/window/flags/large_screen_experiences_app_compat.aconfig
@@ -1,4 +1,5 @@
package: "com.android.window.flags"
+container: "system"
flag {
name: "allows_screen_size_decoupled_from_status_bar_and_cutout"
diff --git a/core/java/android/window/flags/lse_desktop_experience.aconfig b/core/java/android/window/flags/lse_desktop_experience.aconfig
index 65e5f1a..55927cc 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"
@@ -56,3 +57,10 @@
description: "Enables desktop wallpaper activity to show wallpaper in the desktop mode"
bug: "309014605"
}
+
+flag {
+ name: "enable_desktop_windowing_immersive_handle_hiding"
+ namespace: "lse_desktop_experience"
+ description: "Hides the App Handle when in fullscreen immersive mode"
+ bug: "336368019"
+}
diff --git a/core/java/android/window/flags/responsible_apis.aconfig b/core/java/android/window/flags/responsible_apis.aconfig
index 94c72c6..33af486 100644
--- a/core/java/android/window/flags/responsible_apis.aconfig
+++ b/core/java/android/window/flags/responsible_apis.aconfig
@@ -1,4 +1,5 @@
package: "com.android.window.flags"
+container: "system"
flag {
name: "bal_require_opt_in_by_pending_intent_creator"
diff --git a/core/java/android/window/flags/wallpaper_manager.aconfig b/core/java/android/window/flags/wallpaper_manager.aconfig
index edf90b5..150b04e 100644
--- a/core/java/android/window/flags/wallpaper_manager.aconfig
+++ b/core/java/android/window/flags/wallpaper_manager.aconfig
@@ -1,4 +1,5 @@
package: "com.android.window.flags"
+container: "system"
flag {
name: "always_update_wallpaper_permission"
diff --git a/core/java/android/window/flags/window_surfaces.aconfig b/core/java/android/window/flags/window_surfaces.aconfig
index 5c31048..460df31 100644
--- a/core/java/android/window/flags/window_surfaces.aconfig
+++ b/core/java/android/window/flags/window_surfaces.aconfig
@@ -1,4 +1,5 @@
package: "com.android.window.flags"
+container: "system"
# Project link: https://gantry.corp.google.com/projects/android_platform_window_surfaces/changes
diff --git a/core/java/android/window/flags/windowing_frontend.aconfig b/core/java/android/window/flags/windowing_frontend.aconfig
index e2efff3..87c47da 100644
--- a/core/java/android/window/flags/windowing_frontend.aconfig
+++ b/core/java/android/window/flags/windowing_frontend.aconfig
@@ -1,4 +1,5 @@
package: "com.android.window.flags"
+container: "system"
flag {
name: "nav_bar_transparent_by_default"
diff --git a/core/java/android/window/flags/windowing_sdk.aconfig b/core/java/android/window/flags/windowing_sdk.aconfig
index e49089d..001ed79 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
@@ -92,6 +93,16 @@
flag {
namespace: "windowing_sdk"
+ name: "window_token_config_thread_safe"
+ description: "Ensure the Configuration pre/post changed is thread safe"
+ bug: "334285008"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
+
+flag {
+ namespace: "windowing_sdk"
name: "always_defer_transition_when_apply_wct"
description: "Report error when defer transition fails when it should not"
bug: "335562144"
diff --git a/core/java/com/android/internal/inputmethod/IInputMethodPrivilegedOperations.aidl b/core/java/com/android/internal/inputmethod/IInputMethodPrivilegedOperations.aidl
index 457b9dd..63623c7 100644
--- a/core/java/com/android/internal/inputmethod/IInputMethodPrivilegedOperations.aidl
+++ b/core/java/com/android/internal/inputmethod/IInputMethodPrivilegedOperations.aidl
@@ -49,4 +49,5 @@
void onStylusHandwritingReady(int requestId, int pid);
void resetStylusHandwriting(int requestId);
void switchKeyboardLayoutAsync(int direction);
+ void setHandwritingSurfaceNotTouchable(boolean notTouchable);
}
diff --git a/core/java/com/android/internal/inputmethod/InputMethodPrivilegedOperations.java b/core/java/com/android/internal/inputmethod/InputMethodPrivilegedOperations.java
index 635a227..72c41be 100644
--- a/core/java/com/android/internal/inputmethod/InputMethodPrivilegedOperations.java
+++ b/core/java/com/android/internal/inputmethod/InputMethodPrivilegedOperations.java
@@ -144,6 +144,24 @@
}
/**
+ * Calls {@link IInputMethodPrivilegedOperations#setHandwritingSurfaceNotTouchable(boolean)}.
+ *
+ * @param notTouchable {@code true} to make handwriting surface not-touchable (pass-through).
+ */
+ @AnyThread
+ public void setHandwritingSurfaceNotTouchable(boolean notTouchable) {
+ final IInputMethodPrivilegedOperations ops = mOps.getAndWarnIfNull();
+ if (ops == null) {
+ return;
+ }
+ try {
+ ops.setHandwritingSurfaceNotTouchable(notTouchable);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
* Calls {@link IInputMethodPrivilegedOperations#createInputContentUriToken(Uri, String,
* AndroidFuture)}.
*
diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java
index 5297006..b9cc457 100644
--- a/core/java/com/android/internal/os/ZygoteInit.java
+++ b/core/java/com/android/internal/os/ZygoteInit.java
@@ -397,6 +397,14 @@
null /*declaringPackage*/, null /*dependentPackages*/, null /*dependencies*/,
false /*isNative*/));
+ if (Flags.enableApacheHttpLegacyPreload()) {
+ libs.add(new SharedLibraryInfo(
+ "/system/framework/org.apache.http.legacy.jar", null /*packageName*/,
+ null /*codePaths*/, null /*name*/, 0 /*version*/,
+ SharedLibraryInfo.TYPE_BUILTIN, null /*declaringPackage*/,
+ null /*dependentPackages*/, null /*dependencies*/, false /*isNative*/));
+ }
+
// WindowManager Extensions is an optional shared library that is required for WindowManager
// Jetpack to fully function. Since it is a widely used library, preload it to improve apps
// startup performance.
diff --git a/core/java/com/android/internal/os/flags.aconfig b/core/java/com/android/internal/os/flags.aconfig
new file mode 100644
index 0000000..c8d6810
--- /dev/null
+++ b/core/java/com/android/internal/os/flags.aconfig
@@ -0,0 +1,11 @@
+package: "com.android.internal.os"
+container: "system"
+
+flag {
+ name: "enable_apache_http_legacy_preload"
+ namespace: "system_performance"
+ description: "Enables zygote preload of non-BCP org.apache.http.legacy.jar library."
+ # Fixed read-only is required as the flag is read during zygote init.
+ is_fixed_read_only: true
+ bug: "241474956"
+}
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 b6558cb..b3e1df1 100644
--- a/core/java/com/android/internal/protolog/PerfettoProtoLogImpl.java
+++ b/core/java/com/android/internal/protolog/PerfettoProtoLogImpl.java
@@ -16,34 +16,34 @@
package com.android.internal.protolog;
-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 static android.internal.perfetto.protos.InternedDataOuterClass.InternedData.PROTOLOG_STACKTRACE;
+import static android.internal.perfetto.protos.InternedDataOuterClass.InternedData.PROTOLOG_STRING_ARGS;
+import static android.internal.perfetto.protos.ProfileCommon.InternedString.IID;
+import static android.internal.perfetto.protos.ProfileCommon.InternedString.STR;
+import static android.internal.perfetto.protos.Protolog.ProtoLogMessage.BOOLEAN_PARAMS;
+import static android.internal.perfetto.protos.Protolog.ProtoLogMessage.DOUBLE_PARAMS;
+import static android.internal.perfetto.protos.Protolog.ProtoLogMessage.MESSAGE_ID;
+import static android.internal.perfetto.protos.Protolog.ProtoLogMessage.SINT64_PARAMS;
+import static android.internal.perfetto.protos.Protolog.ProtoLogMessage.STACKTRACE_IID;
+import static android.internal.perfetto.protos.Protolog.ProtoLogMessage.STR_PARAM_IIDS;
+import static android.internal.perfetto.protos.Protolog.ProtoLogViewerConfig.GROUPS;
+import static android.internal.perfetto.protos.Protolog.ProtoLogViewerConfig.Group.ID;
+import static android.internal.perfetto.protos.Protolog.ProtoLogViewerConfig.Group.NAME;
+import static android.internal.perfetto.protos.Protolog.ProtoLogViewerConfig.Group.TAG;
+import static android.internal.perfetto.protos.Protolog.ProtoLogViewerConfig.MESSAGES;
+import static android.internal.perfetto.protos.Protolog.ProtoLogViewerConfig.MessageData.GROUP_ID;
+import static android.internal.perfetto.protos.Protolog.ProtoLogViewerConfig.MessageData.LEVEL;
+import static android.internal.perfetto.protos.Protolog.ProtoLogViewerConfig.MessageData.MESSAGE;
+import static android.internal.perfetto.protos.TracePacketOuterClass.TracePacket.INTERNED_DATA;
+import static android.internal.perfetto.protos.TracePacketOuterClass.TracePacket.PROTOLOG_MESSAGE;
+import static android.internal.perfetto.protos.TracePacketOuterClass.TracePacket.PROTOLOG_VIEWER_CONFIG;
+import static android.internal.perfetto.protos.TracePacketOuterClass.TracePacket.SEQUENCE_FLAGS;
+import static android.internal.perfetto.protos.TracePacketOuterClass.TracePacket.SEQ_INCREMENTAL_STATE_CLEARED;
+import static android.internal.perfetto.protos.TracePacketOuterClass.TracePacket.SEQ_NEEDS_INCREMENTAL_STATE;
+import static android.internal.perfetto.protos.TracePacketOuterClass.TracePacket.TIMESTAMP;
import android.annotation.Nullable;
-import android.internal.perfetto.protos.PerfettoTrace.ProtoLogViewerConfig.MessageData;
+import android.internal.perfetto.protos.Protolog.ProtoLogViewerConfig.MessageData;
import android.os.ShellCommand;
import android.os.SystemClock;
import android.os.Trace;
diff --git a/core/java/com/android/internal/protolog/ProtoLogDataSource.java b/core/java/com/android/internal/protolog/ProtoLogDataSource.java
index e79bf36..6ab79b9 100644
--- a/core/java/com/android/internal/protolog/ProtoLogDataSource.java
+++ b/core/java/com/android/internal/protolog/ProtoLogDataSource.java
@@ -16,14 +16,16 @@
package com.android.internal.protolog;
-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 static android.internal.perfetto.protos.ProtologConfig.ProtoLogConfig.DEFAULT;
+import static android.internal.perfetto.protos.ProtologConfig.ProtoLogConfig.ENABLE_ALL;
+import static android.internal.perfetto.protos.ProtologConfig.ProtoLogConfig.GROUP_OVERRIDES;
+import static android.internal.perfetto.protos.ProtologConfig.ProtoLogConfig.TRACING_MODE;
+import static android.internal.perfetto.protos.ProtologConfig.ProtoLogGroup.COLLECT_STACKTRACE;
+import static android.internal.perfetto.protos.ProtologConfig.ProtoLogGroup.GROUP_NAME;
+import static android.internal.perfetto.protos.ProtologConfig.ProtoLogGroup.LOG_FROM;
-import android.internal.perfetto.protos.PerfettoTrace;
+import android.internal.perfetto.protos.DataSourceConfigOuterClass.DataSourceConfig;
+import android.internal.perfetto.protos.ProtologCommon;
import android.tracing.perfetto.CreateIncrementalStateArgs;
import android.tracing.perfetto.CreateTlsStateArgs;
import android.tracing.perfetto.DataSource;
@@ -65,7 +67,7 @@
try {
while (configStream.nextField() != ProtoInputStream.NO_MORE_FIELDS) {
try {
- if (configStream.getFieldNumber() == (int) PROTOLOG_CONFIG) {
+ if (configStream.getFieldNumber() == (int) DataSourceConfig.PROTOLOG_CONFIG) {
if (config != null) {
throw new RuntimeException("ProtoLog config already set in loop");
}
@@ -179,7 +181,7 @@
private ProtoLogConfig readProtoLogConfig(ProtoInputStream configStream)
throws IOException {
- final long config_token = configStream.start(PROTOLOG_CONFIG);
+ final long config_token = configStream.start(DataSourceConfig.PROTOLOG_CONFIG);
LogLevel defaultLogFromLevel = LogLevel.WTF;
final Map<String, GroupConfig> groupConfigs = new HashMap<>();
@@ -188,9 +190,9 @@
if (configStream.getFieldNumber() == (int) TRACING_MODE) {
int tracingMode = configStream.readInt(TRACING_MODE);
switch (tracingMode) {
- case PerfettoTrace.ProtoLogConfig.DEFAULT:
+ case DEFAULT:
break;
- case PerfettoTrace.ProtoLogConfig.ENABLE_ALL:
+ case ENABLE_ALL:
defaultLogFromLevel = LogLevel.DEBUG;
break;
default:
@@ -210,27 +212,27 @@
if (configStream.getFieldNumber() == (int) LOG_FROM) {
final int logFromInt = configStream.readInt(LOG_FROM);
switch (logFromInt) {
- case (PerfettoTrace.PROTOLOG_LEVEL_DEBUG): {
+ case (ProtologCommon.PROTOLOG_LEVEL_DEBUG): {
logFromLevel = LogLevel.DEBUG;
break;
}
- case (PerfettoTrace.PROTOLOG_LEVEL_VERBOSE): {
+ case (ProtologCommon.PROTOLOG_LEVEL_VERBOSE): {
logFromLevel = LogLevel.VERBOSE;
break;
}
- case (PerfettoTrace.PROTOLOG_LEVEL_INFO): {
+ case (ProtologCommon.PROTOLOG_LEVEL_INFO): {
logFromLevel = LogLevel.INFO;
break;
}
- case (PerfettoTrace.PROTOLOG_LEVEL_WARN): {
+ case (ProtologCommon.PROTOLOG_LEVEL_WARN): {
logFromLevel = LogLevel.WARN;
break;
}
- case (PerfettoTrace.PROTOLOG_LEVEL_ERROR): {
+ case (ProtologCommon.PROTOLOG_LEVEL_ERROR): {
logFromLevel = LogLevel.ERROR;
break;
}
- case (PerfettoTrace.PROTOLOG_LEVEL_WTF): {
+ case (ProtologCommon.PROTOLOG_LEVEL_WTF): {
logFromLevel = LogLevel.WTF;
break;
}
diff --git a/core/java/com/android/internal/protolog/ProtoLogViewerConfigReader.java b/core/java/com/android/internal/protolog/ProtoLogViewerConfigReader.java
index 88a7b54..b7b2424 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 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 static android.internal.perfetto.protos.Protolog.ProtoLogViewerConfig.MESSAGES;
+import static android.internal.perfetto.protos.Protolog.ProtoLogViewerConfig.MessageData.MESSAGE;
+import static android.internal.perfetto.protos.Protolog.ProtoLogViewerConfig.MessageData.MESSAGE_ID;
import android.util.ArrayMap;
import android.util.proto.ProtoInputStream;
diff --git a/core/java/com/android/internal/telephony/IPhoneStateListener.aidl b/core/java/com/android/internal/telephony/IPhoneStateListener.aidl
index 969f95d..792c223 100644
--- a/core/java/com/android/internal/telephony/IPhoneStateListener.aidl
+++ b/core/java/com/android/internal/telephony/IPhoneStateListener.aidl
@@ -81,4 +81,5 @@
void onCallBackModeStarted(int type);
void onCallBackModeStopped(int type, int reason);
void onSimultaneousCallingStateChanged(in int[] subIds);
+ void onCarrierRoamingNtnModeChanged(in boolean active);
}
diff --git a/core/java/com/android/internal/telephony/ITelephonyRegistry.aidl b/core/java/com/android/internal/telephony/ITelephonyRegistry.aidl
index 0203ea4..04332cd 100644
--- a/core/java/com/android/internal/telephony/ITelephonyRegistry.aidl
+++ b/core/java/com/android/internal/telephony/ITelephonyRegistry.aidl
@@ -120,4 +120,5 @@
void notifyCallbackModeStarted(int phoneId, int subId, int type);
void notifyCallbackModeStopped(int phoneId, int subId, int type, int reason);
+ void notifyCarrierRoamingNtnModeChanged(int subId, in boolean active);
}
diff --git a/core/jni/com_android_internal_content_FileSystemUtils.cpp b/core/jni/com_android_internal_content_FileSystemUtils.cpp
index 01920de..31f4e64 100644
--- a/core/jni/com_android_internal_content_FileSystemUtils.cpp
+++ b/core/jni/com_android_internal_content_FileSystemUtils.cpp
@@ -21,6 +21,7 @@
#include <android-base/file.h>
#include <android-base/hex.h>
#include <android-base/unique_fd.h>
+#include <bionic/macros.h>
#include <elf.h>
#include <errno.h>
#include <fcntl.h>
@@ -35,10 +36,45 @@
#include <fstream>
#include <vector>
+using android::base::borrowed_fd;
using android::base::HexString;
using android::base::ReadFullyAtOffset;
namespace android {
+
+bool punchWithBlockAlignment(borrowed_fd fd, uint64_t start, uint64_t length, uint64_t blockSize) {
+ uint64_t end;
+ if (__builtin_add_overflow(start, length, &end)) {
+ ALOGE("Overflow occurred when calculating end");
+ return false;
+ }
+
+ start = align_up(start, blockSize);
+ end = align_down(end, blockSize);
+
+ uint64_t alignedLength;
+ if (__builtin_sub_overflow(end, start, &alignedLength)) {
+ ALOGE("Overflow occurred when calculating length");
+ return false;
+ }
+
+ if (alignedLength < blockSize) {
+ ALOGW("Skipping punching hole as aligned length is less than block size");
+ return false;
+ }
+
+ ALOGD("Punching hole in file - start: %" PRIu64 " len:%" PRIu64 "", start, alignedLength);
+
+ int result =
+ fallocate(fd.get(), FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, start, alignedLength);
+ if (result < 0) {
+ ALOGE("fallocate failed to punch hole, error:%d", errno);
+ return false;
+ }
+
+ return true;
+}
+
bool punchHoles(const char *filePath, const uint64_t offset,
const std::vector<Elf64_Phdr> &programHeaders) {
struct stat64 beforePunch;
@@ -96,6 +132,8 @@
continue;
}
+ // if we have a uncompressed file which is being opened from APK, use the offset to
+ // punch native lib inside Apk.
uint64_t punchStartOffset;
if (__builtin_add_overflow(offset, punchOffset, &punchStartOffset)) {
ALOGE("Overflow occurred when calculating length");
@@ -144,12 +182,7 @@
position = uncheckedChunkEnd;
}
- // if we have a uncompressed file which is being opened from APK, use the offset to
- // punch native lib inside Apk.
- int result = fallocate(fd, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, punchStartOffset,
- punchLen);
- if (result < 0) {
- ALOGE("fallocate failed to punch hole, error:%d", errno);
+ if (!punchWithBlockAlignment(fd, punchStartOffset, punchLen, blockSize)) {
return false;
}
}
@@ -298,13 +331,7 @@
return false;
}
- ALOGD("Punching hole in apk start: %" PRIu64 " len:%" PRIu64 "", punchOffset, punchLen);
-
- // Punch hole for this entire stretch.
- int result = fallocate(fd, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, punchOffset,
- punchLen);
- if (result < 0) {
- ALOGE("fallocate failed to punch hole inside apk, error:%d", errno);
+ if (!punchWithBlockAlignment(fd, punchOffset, punchLen, blockSize)) {
return false;
}
}
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 76d7a41..567844c 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -3250,7 +3250,7 @@
<!-- @SystemApi @hide Allows privileged applications to get details about hidden profile
users.
- @FlaggedApi("android.multiuser.flags.enable_permission_to_access_hidden_profiles") -->
+ @FlaggedApi("android.multiuser.enable_permission_to_access_hidden_profiles") -->
<permission
android:name="android.permission.ACCESS_HIDDEN_PROFILES_FULL"
android:protectionLevel="signature|privileged" />
@@ -7985,17 +7985,6 @@
<permission android:name="android.permission.RUN_USER_INITIATED_JOBS"
android:protectionLevel="normal"/>
- <!-- @FlaggedApi("android.app.job.backup_jobs_exemption")
- Gives applications with a <b>major use case</b> of backing-up or syncing content increased
- job execution allowance in order to complete the related work. The jobs must have a valid
- content URI trigger and network constraint set.
- <p>This is a special access permission that can be revoked by the system or the user.
- <p>Protection level: signature|privileged|appop
- @hide
- -->
- <permission android:name="android.permission.RUN_BACKUP_JOBS"
- android:protectionLevel="signature|privileged|appop"/>
-
<!-- Allows an app access to the installer provided app metadata.
@SystemApi
@hide
diff --git a/core/res/res/drawable/ic_android_satellite_24px.xml b/core/res/res/drawable/ic_android_satellite_24px.xml
new file mode 100644
index 0000000..15f2884
--- /dev/null
+++ b/core/res/res/drawable/ic_android_satellite_24px.xml
@@ -0,0 +1,10 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="960"
+ android:viewportHeight="960"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M487,600L392,505L346,551L376,580Q399,603 399,637Q399,671 376,694L333,737Q310,760 276.5,760Q243,760 220,737L103,620Q80,597 80,563.5Q80,530 103,507L146,464Q169,441 203,441Q237,441 260,464L289,494L335,448L160,273L273,160L448,335L493,290L464,260Q441,237 441,203Q441,169 464,146L507,103Q530,80 563.5,80Q597,80 620,103L737,220Q760,243 760,276.5Q760,310 737,333L694,376Q671,399 637,399Q603,399 580,376L550,347L505,392L600,487L487,600ZM520,880L520,800Q637,800 718.5,718.5Q800,637 800,520L880,520Q880,595 851.5,660.5Q823,726 774.5,774.5Q726,823 660.5,851.5Q595,880 520,880ZM520,720L520,640Q570,640 605,605Q640,570 640,520L720,520Q720,603 661.5,661.5Q603,720 520,720ZM520,203L550,233L593,190L563,160Q563,160 563,160Q563,160 563,160L520,203Q520,203 520,203Q520,203 520,203ZM160,563L190,593L233,550L203,520Q203,520 203,520Q203,520 203,520L160,563Q160,563 160,563Q160,563 160,563ZM637,320L680,277Q680,277 680,277Q680,277 680,277L650,247L607,290L637,320Q637,320 637,320Q637,320 637,320ZM277,680L320,637Q320,637 320,637Q320,637 320,637L290,607L247,650L277,680Q277,680 277,680Q277,680 277,680Z"/>
+</vector>
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index 0841861..058d19b 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Vingerafdruk word nie herken nie"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Vingerafdruk word nie herken nie"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Kan nie gesig herken nie. Gebruik eerder vingerafdruk."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Gesig nie herken nie. Gebruik eerder vingerafdruk."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"Vingerafdruk is gestaaf"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Gesig is gestaaf"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Gesig is gestaaf; druk asseblief bevestig"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"Vra PIN voordat jy ontspeld"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"Vra ontsluitpatroon voordat jy ontspeld"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"Vra wagwoord voordat jy ontspeld"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Geïnstalleer deur jou administrateur"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"Opgedateer deur jou administrateur"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Uitgevee deur jou administrateur"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"Werk 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Toets"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Gemeenskaplik"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"Appinhoud is weens sekuriteit van skermdeling verberg"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"Outomaties aan satelliet gekoppel"</string>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index 86df650..c5e6a33 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"ášá£áµ á á»á« á áá³ááá"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"ášá£áµ á á»á« á áá³ááá"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"áááá ááášáµ á áá°á»ááᢠá ááµá© ášá£áµ á á»á« áá ááá¢"</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"áá± á áá³áááᢠá ááµá© ášá£áµ á á»á« áá ááá¢"</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"ášá£áµ á á»á« áµááááááµ á°ášááá§á"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"ááµ á°ášááá§á"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"ááµ á°ášááá§áᣠá¥á£áá á ášááá¥á áá«á"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"ášáááá á ááµ áá á áá
"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"ášáááá á ááµ ášááµášáá» á¥ááá°-á¥ááµ á áá
"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"ášáááá á ááµ ášááá áá á áá
"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"á á¥ááµá á áµá°á³á³áª á°ááá"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"á á¥ááµá á áµá°á³á³áª á°áááá"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"á á¥ááµá á áµá°á³á³áª á°á°ááá"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"á¥áº"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"á¥á« 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"áášá«"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"ášáá«"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"áá°á
áááµ á²á£á ášáá°áá áªá« áááµ ášáá« áᜠááá«áµ á°á°á¥áá"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"ášá³á°áááµ áá á á«áµ-á°á á°áááá·á"</string>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index 185c3c6..d1c019f 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -666,7 +666,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"ÙÙ
ÙØªÙ
Ù Ø§ÙØªØ¹Ø±Ù٠عÙÙ Ø§ÙØšØµÙ
Ø©."</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"ÙÙ
ÙØªÙ
Ù Ø§ÙØªØ¹Ø±Ù٠عÙ٠ؚصÙ
Ø© Ø§ÙØ¥ØµØšØ¹."</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"ÙØªØ¹Ø°Ùر Ø§ÙØªØ¹Ø±Ù٠عÙ٠اÙÙØ¬Ù. استخدÙÙ
ؚصÙ
Ø© Ø§ÙØ¥ØµØšØ¹ ØšØ¯ÙØ§Ù Ù
٠ذÙÙ."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"ÙÙ
ÙØªÙ
Ø§ÙØªØ¹Ø±Ù٠عÙ٠اÙÙØ¬Ù. استخدÙÙ
ؚصÙ
Ø© إصؚعÙ."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"تÙ
Ù
ØµØ§Ø¯ÙØ© ؚصÙ
Ø© Ø§ÙØ¥ØµØšØ¹"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"تÙ
ÙØª Ù
ØµØ§Ø¯ÙØ© اÙÙØ¬Ù"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"تÙ
ÙØª Ù
ØµØ§Ø¯ÙØ© اÙÙØ¬ÙØ ÙÙØ±Ø¬Ù Ø§ÙØ¶ØºØ· عÙÙ \"تأÙÙØ¯\"."</string>
@@ -1900,7 +1900,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"Ø·ÙØš Ø¥Ø¯Ø®Ø§Ù Ø±ÙÙ
Ø§ÙØªØ¹Ø±ÙÙ Ø§ÙØŽØ®ØµÙ ÙØšÙ Ø¥Ø²Ø§ÙØ© Ø§ÙØªØ«ØšÙت"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"Ø·ÙØš Ø¥Ø¯Ø®Ø§Ù ÙÙØŽ ÙØªØ اÙÙÙÙ ÙØšÙ Ø¥Ø²Ø§ÙØ© Ø§ÙØªØ«ØšÙت"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"Ø·ÙØš Ø¥Ø¯Ø®Ø§Ù ÙÙÙ
Ø© اÙÙ
Ø±ÙØ± ÙØšÙ Ø¥Ø²Ø§ÙØ© Ø§ÙØªØ«ØšÙت"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"تÙ
Ø§ÙØªØ«ØšÙت ØšÙØ§Ø³Ø·Ø© اÙÙ
؎رÙ"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"تÙ
Ø§ÙØªØØ¯ÙØ« ØšÙØ§Ø³Ø·Ø© اÙÙ
؎رÙ"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"تÙ
Ø§ÙØØ°Ù ØšÙØ§Ø³Ø·Ø© اÙÙ
؎رÙ"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"ØØ³ÙÙØ§"</string>
@@ -2397,6 +2398,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"Ù
ÙÙ Ø§ÙØ¹Ù
Ù 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Ù
ÙÙ ØŽØ®ØµÙ ØªØ¬Ø±ÙØšÙ"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Ù
Ù٠؎خص٠Ù
؎ترÙ"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"تÙ
Ø¥Ø®ÙØ§Ø¡ Ù
ØØªÙÙ Ø§ÙØªØ·ØšÙ٠ؚعد ØªÙØ¹ÙÙ Ù
ÙØ²Ø© \"Ù
ØŽØ§Ø±ÙØ© Ø§ÙØŽØ§ØŽØ©\" ÙÙØÙØ§Øž عÙ٠أÙ
اÙÙ"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"تÙ
Ø§ÙØ§ØªØµØ§Ù تÙÙØ§ØŠÙÙØ§ ؚاÙÙÙ
ر Ø§ÙØµÙاعÙ"</string>
diff --git a/core/res/res/values-as/strings.xml b/core/res/res/values-as/strings.xml
index 618c581..e1a9a0a 100644
--- a/core/res/res/values-as/strings.xml
+++ b/core/res/res/values-as/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"àŠ«àŠ¿àŠàŠàŠŸà§°àŠªà§à§°àŠ¿àŠ£à§àŠ àŠàŠ¿àŠšàŠŸàŠà§àŠ€ àŠà§°àŠ¿àŠ¬ àŠªà§°àŠŸ àŠšàŠŸàŠ"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"àŠ«àŠ¿àŠàŠàŠŸà§°àŠªà§à§°àŠ¿àŠ£à§àŠ àŠàŠ¿àŠšàŠŸàŠà§àŠ€ àŠà§°àŠ¿àŠ¬ àŠªà§°àŠŸ àŠšàŠŸàŠ"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"àŠ®à§àŠàŠŸà§±àŠ¯àŠŒàŠ¬ àŠàŠ¿àŠšàŠ¿àŠ¬ àŠšà§à§±àŠŸà§°àŠ¿à¥€ àŠ«àŠ¿àŠàŠàŠŸà§°àŠªà§à§°àŠ¿àŠ£à§àŠ àŠ¬à§àŠ¯à§±àŠ¹àŠŸà§° àŠà§°àŠà¥€"</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"àŠ®à§àŠàŠŸà§±àŠ¯àŠŒàŠ¬ àŠàŠ¿àŠšàŠŸàŠà§àŠ€ àŠà§°àŠ¿àŠ¬ àŠªà§°àŠŸ àŠšàŠŸàŠà¥€ àŠàŠ¯àŠŒàŠŸà§° àŠªà§°àŠ¿à§±à§°à§àŠ€à§ àŠ«àŠ¿àŠàŠàŠŸà§°àŠªà§à§°àŠ¿àŠ£à§àŠ àŠ¬à§àŠ¯à§±àŠ¹àŠŸà§° àŠà§°àŠà¥€"</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"àŠ«àŠ¿àŠàŠàŠŸà§°àŠªà§à§°àŠ¿àŠ£à§àŠà§° àŠžàŠ€à§àŠ¯àŠŸàŠªàŠš àŠà§°àŠŸ àŠ¹’àŠ²"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"àŠ®à§àŠàŠ®àŠ£à§àŠ¡àŠ²à§° àŠ¬àŠ¿àŠ¶à§àŠ¬àŠŸàŠžàŠ¯à§àŠà§àŠ¯àŠ€àŠŸ àŠªà§à§°àŠ®àŠŸàŠ£à§àŠà§°àŠ£ àŠà§°àŠŸ àŠ¹’àŠ²"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"àŠ®à§àŠàŠ®àŠ£à§àŠ¡àŠ²à§° àŠ¬àŠ¿àŠ¶à§àŠ¬àŠŸàŠžàŠ¯à§àŠà§àŠ¯àŠ€àŠŸ àŠªà§à§°àŠ®àŠŸàŠ£à§àŠà§°àŠ£ àŠà§°àŠŸ àŠ¹’àŠ², àŠ
àŠšà§àŠà§à§°àй àŠà§°àŠ¿ ‘àŠšàŠ¿àŠ¶à§àŠàŠ¿àŠ€ àŠà§°àŠ’ àŠ¬à§àŠàŠŸàŠ®àŠà§ àŠàŠ¿àŠªàŠ"</string>
@@ -692,7 +692,7 @@
<string name="alternative_unlock_setup_notification_title" msgid="6241508547901933544">"àŠàŠšàŠ²àŠ àŠà§°àŠ¿àŠ¬àŠ²à§ àŠàŠš àŠàŠàŠŸ àŠàŠªàŠŸàŠ¯àŠŒ àŠ¬à§àŠ¯à§±àŠ¹àŠŸà§° àŠà§°àŠ¿ àŠàŠŸàŠàŠ"</string>
<string name="alternative_face_setup_notification_content" msgid="3384959224091897331">"àŠàŠªà§àŠšàŠŸà§° àŠàŠà§àŠ²àŠ¿àŠà§àŠàŠàŠŸ àŠ€àŠ¿àŠ€àŠ¿ àŠ¥àŠàŠŸà§° àŠŠà§°à§ àŠªà§°àŠ¿àŠžà§àŠ¥àŠ¿àŠ€àŠ¿àŠ€, àŠàŠªà§àŠšàŠŸà§° àŠ«àŠ¿àŠàŠàŠŸà§°àŠªà§à§°àŠ¿àŠ£à§àŠ àŠàŠ¿àŠšàŠŸàŠà§àŠ€ àŠà§°àŠ¿àŠ¬ àŠšà§à§±àŠŸà§°àŠ¿àŠ²à§ àŠ«à§’àŠ àŠàŠšàŠ²àŠ àŠžà§àŠ¬àŠ¿àŠ§àŠŸàŠà§ àŠ¬à§àŠ¯à§±àŠ¹àŠŸà§° àŠà§°àŠ"</string>
<string name="alternative_fp_setup_notification_content" msgid="7454096947415721639">"àŠªà§°à§àŠ¯àŠŸàŠªà§àŠ€ àŠªà§àŠ¹à§° àŠšàŠ¥àŠàŠŸà§° àŠŠà§°à§ àŠªà§°àŠ¿àŠžà§àŠ¥àŠ¿àŠ€àŠ¿àŠ€, àŠàŠªà§àŠšàŠŸà§° àŠ®à§àŠàŠŸà§±àŠ¯àŠŒàŠ¬ àŠàŠ¿àŠšàŠŸàŠà§àŠ€ àŠà§°àŠ¿àŠ¬ àŠšà§à§±àŠŸà§°àŠ¿àŠ²à§ àŠ«àŠ¿àŠàŠàŠŸà§°àŠªà§à§°àŠ¿àŠ£à§àŠ àŠàŠšàŠ²àŠ àŠžà§àŠ¬àŠ¿àŠ§àŠŸàŠà§ àŠ¬à§àŠ¯à§±àŠ¹àŠŸà§° àŠà§°àŠ"</string>
- <string name="face_recalibrate_notification_name" msgid="7311163114750748686">"àŠ«à§àŠ àŠàŠšàŠ²àŠ"</string>
+ <string name="face_recalibrate_notification_name" msgid="7311163114750748686">"àŠ«à§’àŠ àŠàŠšàŠ²àŠ"</string>
<string name="face_recalibrate_notification_title" msgid="2524791952735579082">"àŠ«à§àŠ àŠàŠšàŠ²àŠ àŠ¬à§àŠ¯à§±àŠ¹àŠŸà§° àŠà§°à§àŠàŠ€à§ àŠžàŠ®àŠžà§àŠ¯àŠŸ àŠ¹à§àŠà§"</string>
<string name="face_recalibrate_notification_content" msgid="3064513770251355594">"àŠàŠªà§àŠšàŠŸà§° àŠ®à§àŠàŠŸà§±àŠ¯àŠŒàŠ¬à§° àŠ®àŠ¡à§àвàŠà§ àŠ®àŠàŠ¿àŠ¬àŠ²à§ àŠàŠ¿àŠªàŠ, àŠ€àŠŸà§° àŠªàŠŸàŠàŠ€ àŠªà§àŠšà§° àŠàŠªà§àŠšàŠŸà§° àŠ®à§àŠàŠŸà§±àŠ¯àŠŒàŠ¬ àŠ¯à§àŠ àŠŠàŠ¿àŠ¯àŠŒàŠ"</string>
<string name="face_sensor_privacy_enabled" msgid="7407126963510598508">"àŠ«à§àŠ àŠàŠšàŠ²àŠ àŠžà§àŠ¬àŠ¿àŠ§àŠŸàŠà§ àŠ¬à§àŠ¯à§±àŠ¹àŠŸà§° àŠà§°àŠ¿àŠ¬àŠ²à§ àŠà§àŠàŠ¿àŠ > àŠà§àŠªàŠšà§àŠ¯àŠŒàŠ€àŠŸàŠ€ "<b>"àŠà§àŠ®à§à§°àŠŸà§° àŠàŠà§àŠžà§àŠ"</b>" àŠ
àŠš àŠà§°àŠ"</string>
@@ -1066,7 +1066,7 @@
<string name="keyguard_accessibility_expand_lock_area" msgid="4215280881346033434">"àŠàŠšàŠ²àŠ àŠà§àŠ·à§àŠ€à§à§° àŠ¬àŠ¿àŠžà§àŠ€àŠŸà§° àŠà§°àŠà¥€"</string>
<string name="keyguard_accessibility_slide_unlock" msgid="2968195219692413046">"àŠ¶à§àŠ²àŠŸàŠàŠ¡à§°àŠŠà§àŠ¬àŠŸà§°àŠŸ àŠàŠšàŠ²àŠà¥€"</string>
<string name="keyguard_accessibility_pattern_unlock" msgid="8669128146589233293">"àŠà§°à§àŠ¹àŠ¿à§°àŠŠà§àŠ¬àŠŸà§°àŠŸ àŠàŠšàŠ²àŠà¥€"</string>
- <string name="keyguard_accessibility_face_unlock" msgid="4533832120787386728">"àŠ«à§àŠ àŠàŠšàŠ²àŠà¥€"</string>
+ <string name="keyguard_accessibility_face_unlock" msgid="4533832120787386728">"àŠ«à§’àŠ àŠàŠšàŠ²àŠà¥€"</string>
<string name="keyguard_accessibility_pin_unlock" msgid="4020864007967340068">"àŠªàŠ¿àŠšà§°àŠŠà§àŠ¬àŠŸà§°àŠŸ àŠàŠšàŠ²àŠà¥€"</string>
<string name="keyguard_accessibility_sim_pin_unlock" msgid="4895939120871890557">"àŠàŠ¿àŠ® àŠªàŠ¿àŠš àŠàŠšàŠ²àŠà¥€"</string>
<string name="keyguard_accessibility_sim_puk_unlock" msgid="3459003464041899101">"àŠàŠ¿àŠ® àŠªàŠ¿àŠàŠàŠà§ àŠàŠšàŠ²àŠà¥€"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"àŠàŠšàŠªàŠ¿àŠš àŠà§°àŠŸà§° àŠªà§à§°à§àŠ¬à§ àŠªàŠ¿àŠš àŠŠàŠ¿àŠ¬àŠ²à§ àŠàŠàŠ"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"àŠàŠšàŠªàŠ¿àŠš àŠà§°àŠŸà§° àŠªà§à§°à§àŠ¬à§ àŠàŠšàŠ²àŠ àŠà§°à§àŠ¹àŠ¿ àŠŠàŠ¿àŠ¬àŠ²à§ àŠàŠàŠ"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"àŠàŠšàŠªàŠ¿àŠš àŠà§°àŠŸà§° àŠªà§à§°à§àŠ¬à§ àŠªàŠŸàŠà§±à§°à§àŠ¡ àŠŠàŠ¿àŠ¬àŠ²à§ àŠàŠàŠ"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"àŠàŠªà§àŠšàŠŸà§° àŠªà§à§°àŠ¶àŠŸàŠžàŠà§ àŠàŠšàŠ·à§àŠàв àŠà§°àŠ¿àŠà§"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"àŠàŠªà§àŠšàŠŸà§° àŠªà§à§°àŠ¶àŠŸàŠžàŠà§ àŠàŠªà§àŠ¡àŠ àŠà§°àŠ¿àŠà§"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"àŠàŠªà§àŠšàŠŸà§° àŠªà§à§°àŠ¶àŠŸàŠžàŠà§ àŠ®àŠàŠ¿àŠà§"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"àŠ àŠ¿àŠ àŠàŠà§"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"àŠà§°à§àŠ®àŠžà§àŠ¥àŠŸàŠš à§©"</string>
<string name="profile_label_test" msgid="9168641926186071947">"àŠªà§°à§àŠà§àŠ·àŠŸ"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"àŠ¶à§àЬà§àŠ¯àŠŒàŠŸà§° àŠà§°àŠŸ"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"àŠžà§à§°àŠà§àŠ·àŠŸà§° àŠ¬àŠŸàŠ¬à§ àŠàŠªà§° àŠžàŠ®àŠ² àŠžà§àŠà§à§°à§àŠ£ àŠ¶à§àЬà§àŠ¯àŠŒàŠŸà§° àŠà§°àŠŸà§° àŠªà§°àŠŸ àŠ²à§àŠà§à§±àŠŸàŠ à§°àŠàŠŸ àŠ¹à§àŠà§"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"àŠàŠªàŠà§à§°àŠ¹à§° àŠžà§àŠ€à§ àŠžà§àŠ¬àŠ¯àŠŒàŠàŠà§à§°àŠ¿àŠ¯àŠŒàŠàŠŸà§±à§ àŠžàŠàНà§àŠà§àŠ€ àŠ¹à§àŠà§"</string>
diff --git a/core/res/res/values-az/strings.xml b/core/res/res/values-az/strings.xml
index 643c5cb..7d9c831 100644
--- a/core/res/res/values-az/strings.xml
+++ b/core/res/res/values-az/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Barmaq izi tanınmır"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Barmaq izi tanınmır"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Tanımaq olmur. Barmaq izini iÅlÉdin."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Üz tanınmadı. Barmaq izindÉn istifadÉ edin."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"Barmaq izi doÄrulandı"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Üz doÄrulandı"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Üz tÉsdiq edildi, tÉsdiq düymÉsinÉ basın"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"Ayırmadan öncÉ PIN istÉnilsin"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"Qrafik açar istÉnilsin"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"Ayırmadan öncÉ parol istÉnilsin"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Admin tÉrÉfindÉn quraÅdırıldı"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"Admin tÉrÉfindÉn yenilÉndi"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Admin tÉrÉfindÉn silindi"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"İŠ3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Kommunal"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"GüvÉnlik üçün tÉtbiq kontenti ekran paylaÅımından gizlÉdildi"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"PeykÉ avtomatik qoÅulub"</string>
diff --git a/core/res/res/values-b+sr+Latn/strings.xml b/core/res/res/values-b+sr+Latn/strings.xml
index 06b6a13..5649c58 100644
--- a/core/res/res/values-b+sr+Latn/strings.xml
+++ b/core/res/res/values-b+sr+Latn/strings.xml
@@ -663,7 +663,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Otisak prsta nije prepoznat"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Otisak prsta nije prepoznat"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Lice nije prepoznato. Koristite otisak prsta."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Lice nije prepoznato. Koristite otisak prsta."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"Otisak prsta je potvrÄen"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Lice je potvrÄeno"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Lice je potvrÄeno. Pritisnite Potvrdi"</string>
@@ -1897,7 +1897,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"TraÅŸi PIN pre otkaÄinjanja"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"TraÅŸi šablon za otkljuÄavanje pre otkaÄinjanja"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"TraÅŸi lozinku pre otkaÄinjanja"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Instalirao je administrator"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"AÅŸurirao je administrator"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Izbrisao je administrator"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"Potvrdi"</string>
@@ -2394,6 +2395,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"Posao 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"ZajedniÄko"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"SadrÅŸaj aplikacije je skriven za deljenje sadrÅŸaja ekrana zbog bezbednosti"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"Automatski povezano sa satelitom"</string>
diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml
index 43c73d1..2115a2d 100644
--- a/core/res/res/values-be/strings.xml
+++ b/core/res/res/values-be/strings.xml
@@ -664,7 +664,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"ÐЎбÑÑак палÑÑа Ме ÑаÑпазМаМÑ"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"ÐЎбÑÑак палÑÑа Ме ÑаÑпазМаМÑ"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Ð¢Ð²Ð°Ñ ÐœÐµ ÑаÑпазМаМÑ. СкаÑÑÑÑайÑе аЎбÑÑак палÑÑа."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Ð¢Ð²Ð°Ñ ÐœÐµ ÑаÑпазМаМÑ. ÐÑкаÑÑÑÑайÑе аЎбÑÑак палÑÑа."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"ÐЎбÑÑак палÑÑа ÑаÑпазМаМÑ"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Ð¢Ð²Ð°Ñ ÑаÑпазМаМÑ"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Ð¢Ð²Ð°Ñ ÑаÑпазМаМÑ. ÐаÑÑÑМÑÑе, каб паÑвеÑЎзÑÑÑ"</string>
@@ -1898,7 +1898,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"ÐапÑÑваÑÑ PIN-кПЎ пеÑаЎ аЎЌаÑаваММеЌ"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"ÐапÑÑваÑÑ ÑÐ·ÐŸÑ ÑазблакÑÑПÑÐºÑ Ð¿ÐµÑаЎ аЎЌаÑаваММеЌ"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"ÐапÑÑваÑÑ Ð¿Ð°ÑÐŸÐ»Ñ Ð¿ÐµÑаЎ аЎЌаÑаваММеЌ"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"УÑÑалÑÐ²Ð°ÐœÑ Ð²Ð°ÑÑÐŒ аЎЌÑМÑÑÑÑаÑаÑаЌ"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"ÐбМПÑÐ»ÐµÐœÑ Ð²Ð°ÑÑÐŒ аЎЌÑМÑÑÑÑаÑаÑаЌ"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"ÐÑÐŽÐ°Ð»ÐµÐœÑ Ð²Ð°ÑÑÐŒ аЎЌÑМÑÑÑÑаÑаÑаЌ"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"ÐÐ"</string>
@@ -2395,6 +2396,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"ÐÑаÑПÑÐœÑ 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"ТÑÑÑавÑ"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"СÑпПлÑМÑ"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"ÐЌеÑÑÑва пÑагÑÐ°ÐŒÑ Ð²ÑклÑÑаМа з абагÑлÑÐ²Ð°ÐœÐœÑ ÑкÑаМа Ñ ÐŒÑÑаÑ
бÑÑпекÑ"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"ÐÑÑаЌаÑÑÑМа паЎклÑÑаМа Ўа ÑÑÑÑÑÐŒ ÑпаЎаÑПжМÑкавай ÑÑвÑзÑ"</string>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index 181e612..891584e 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"ÐÑпеÑаÑÑкÑÑ ÐœÐµ е ÑазпПзМаÑ"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"ÐÑпеÑаÑÑкÑÑ ÐœÐµ е ÑазпПзМаÑ"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"ÐОÑеÑП Ме е ÑазпПзМаÑП. ÐзпПлзвайÑе ПÑпеÑаÑÑк."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"ÐОÑеÑП Ме е ÑазпПзМаÑП. ÐзпПлзвайÑе ПÑпеÑаÑÑк."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"ÐÑпеÑаÑÑкÑÑ Ðµ ÑЎПÑÑПвеÑеМ"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"ÐОÑеÑП е ÑЎПÑÑПвеÑеМП"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"ÐОÑеÑП е ÑЎПÑÑПвеÑеМП. ÐПлÑ, МаÑОÑМеÑе „ÐПÑвÑÑжЎаваМе“"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"ÐапОÑваМе за ÐÐРкПЎ пÑеЎО ПÑвПбПжЎаваМе"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"ÐапОÑваМе за ÑОгÑÑа за ПÑклÑÑваМе пÑеЎО ПÑвПбПжЎаваМе"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"ÐапОÑваМе за паÑПла пÑеЎО ПÑвПбПжЎаваМе"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"ÐМÑÑалОÑаМП ÐŸÑ Ð°ÐŽÐŒÐžÐœÐžÑÑÑаÑПÑа вО"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"ÐкÑÑалОзОÑаМП ÐŸÑ Ð°ÐŽÐŒÐžÐœÐžÑÑÑаÑПÑа вО"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"ÐзÑÑОÑП ÐŸÑ Ð°ÐŽÐŒÐžÐœÐžÑÑÑаÑПÑа вО"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"ÐÐ"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"СлÑжебМО 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"ТеÑÑваМе"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"ÐбÑО"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"СÑÐŽÑÑжаМОеÑП Ма пÑОлПжеМОеÑП е ÑкÑОÑП ÐŸÑ ÑÑМкÑОÑÑа за ÑпПЎелÑМе Ма екÑаМа ÐŸÑ ÑÑПбÑÐ°Ð¶ÐµÐœÐžÑ Ð·Ð° ÑОгÑÑМПÑÑ"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"ÐвÑПЌаÑОÑМП ÑÑÑаМПвеМа вÑÑзка ÑÑÑ ÑаÑелОÑ"</string>
diff --git a/core/res/res/values-bn/strings.xml b/core/res/res/values-bn/strings.xml
index 9583461..e82f26c 100644
--- a/core/res/res/values-bn/strings.xml
+++ b/core/res/res/values-bn/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"àŠ«àŠ¿àŠà§àŠàŠŸàŠ°àŠªà§àŠ°àŠ¿àŠšà§àŠ àŠ¶àŠšàŠŸàŠà§àŠ€ àŠàŠ°àŠŸ àŠ¯àŠŸàŠ¯àŠŒàŠšàŠ¿"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"àŠ«àŠ¿àŠà§àŠàŠŸàŠ°àŠªà§àŠ°àŠ¿àŠšà§àŠ àŠ¶àŠšàŠŸàŠà§àŠ€ àŠàŠ°àŠŸ àŠ¯àŠŸàŠ¯àŠŒàŠšàŠ¿"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"àŠ®à§àŠ àŠ¶àŠšàŠŸàŠà§àŠ€ àŠàŠ°àŠ€à§ àŠªàŠŸàŠ°àŠàŠ¿ àŠšàŠŸà¥€ àŠªàŠ°àŠ¿àŠ¬àŠ°à§àŠ€à§ àŠàŠà§àŠà§àвà§àа àŠàŠŸàŠª àŠ¬à§àŠ¯àŠ¬àŠ¹àŠŸàŠ° àŠàаà§àŠšà¥€"</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"àŠ®à§àŠ àŠ¶àŠšàŠŸàŠà§àŠ€ àŠàŠ°àŠŸ àŠ¯àŠŸàŠ¯àŠŒàŠšàŠ¿à¥€ àŠàа àŠªàŠ°àŠ¿àŠ¬àŠ°à§àŠ€à§ àŠ«àŠ¿àŠà§àŠàŠŸàŠ°àŠªà§àŠ°àŠ¿àŠšà§àŠ àŠ¬à§àŠ¯àŠ¬àŠ¹àŠŸàŠ° àŠàаà§àŠšà¥€"</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"àŠàŠà§àŠà§àвà§àа àŠàŠŸàŠª àŠ¯àŠŸàŠàŠŸàŠ àŠàŠ°àŠŸ àŠ¹àŠ¯àŠŒà§àŠà§"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"àŠ«à§àŠž àŠ¯àŠŸàŠàŠŸàŠ àŠàŠ°àŠŸ àŠ¹àŠ¯àŠŒà§àŠà§"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"àŠ«à§àŠž àŠ¯àŠŸàŠàŠŸàŠ àŠàŠ°àŠŸ àŠ¹àŠ¯àŠŒà§àŠà§, \'àŠàŠšàŠ«àŠŸàŠ°à§àŠ® àŠàаà§àŠš\' àŠ¬à§àŠ€àŠŸàŠ® àŠªà§àаà§àŠž àŠàаà§àŠš"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"àŠàŠšàŠªàŠ¿àŠš àŠàŠ°àŠŸàŠ° àŠàŠà§ àŠªàŠ¿àŠš àŠàŠŸàŠš"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"àŠàŠšàŠªàŠ¿àŠš àŠàŠ°àŠŸàŠ° àŠàŠà§ àŠàŠšàŠ²àŠ àŠªà§àŠ¯àŠŸàŠàŠŸàŠ°à§àŠš àŠàŠŸàŠš"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"àŠàŠšàŠªàŠ¿àŠš àŠàŠ°àŠŸàŠ° àŠàŠà§ àŠªàŠŸàŠžàŠàŠ¯àŠŒàŠŸàŠ°à§àŠ¡ àŠàŠŸàŠš"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"àŠàŠªàŠšàŠŸàŠ° àŠªà§àŠ°àŠ¶àŠŸàŠžàŠ àŠàŠšàŠžà§àŠàв àŠàаà§àŠà§àŠš"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"àŠàŠªàŠšàŠŸàŠ° àŠªà§àŠ°àŠ¶àŠŸàŠžàŠ àŠàŠªàŠ¡à§àŠ àŠàаà§àŠà§àŠš"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"àŠàŠªàŠšàŠŸàŠ° àŠªà§àŠ°àŠ¶àŠŸàŠžàŠ àŠ®à§àŠà§ àŠŠàŠ¿àŠ¯àŠŒà§àŠà§àŠš"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"àŠ àŠ¿àŠ àŠàŠà§"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"à§©àŠ¯àŠŒ àŠ
àŠ«àŠ¿àŠž"</string>
<string name="profile_label_test" msgid="9168641926186071947">"àŠªàŠ°à§àŠà§àŠ·àŠŸ"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"àŠàŠ®àŠ¿àŠàŠšàŠŸàŠ²"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"àŠšàŠ¿àŠ°àŠŸàŠªàŠ€à§àŠ€àŠŸàŠ° àŠàŠšà§àН àŠžà§àŠà§àŠ°àŠ¿àŠš àŠ¶à§àŠ¯àŠŒàŠŸàŠ° àŠàŠ°àŠŸ àŠ¥à§àŠà§ àŠ²à§àŠàŠŸàŠšà§ àŠ
à§àŠ¯àŠŸàŠªà§àа àŠàŠšà§àŠà§àŠšà§àŠ"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"àŠžà§àŠ¯àŠŸàŠà§àŠ²àŠŸàŠàŠà§àа àŠžàŠŸàŠ¥à§ àŠ
àŠà§àŠ®à§àŠàŠ¿àŠ àŠàŠŸàŠšà§àŠà§àŠ àŠàŠ°àŠŸ àŠ¹àŠ¯àŠŒà§àŠà§"</string>
diff --git a/core/res/res/values-bs/strings.xml b/core/res/res/values-bs/strings.xml
index 170f84e..a7b29f7 100644
--- a/core/res/res/values-bs/strings.xml
+++ b/core/res/res/values-bs/strings.xml
@@ -663,7 +663,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Otisak prsta nije prepoznat"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Otisak prsta nije prepoznat"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Nije moguÄe prepoznati lice. Koristite otisak prsta."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Lice nije prepoznato. Upotrijebite otisak prsta."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"Otisak prsta je potvrÄen"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Lice je provjereno"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Lice je provjereno, pritisnite dugme za potvrdu"</string>
@@ -1897,7 +1897,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"TraÅŸi PIN prije nego se otkaÄi"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"TraÅŸi uzorak za otkljuÄavanje prije poništavanja kaÄenja"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"TraÅŸi lozinku prije nego se otkaÄi"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Instalirao je vaš administrator"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"AÅŸurirao je vaš administrator"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Izbrisao je vaš administrator"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"Uredu"</string>
@@ -2394,6 +2395,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"3. poslovno"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Testno"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"OpÄe"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"SadrÅŸaj aplikacije je sakriven od dijeljenja ekrana radi sigurnosti"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"Automatski je povezano sa satelitom"</string>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index ae4fbcf..0d332fb 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -663,7 +663,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"L\'empremta digital no s\'ha reconegut"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"L\'empremta digital no s\'ha reconegut"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"No podem detectar la cara. Usa l\'empremta digital."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"La cara no s\'ha reconegut. Usa l\'empremta digital."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"L\'empremta digital s\'ha autenticat"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Cara autenticada"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Cara autenticada; prem el botó per confirmar"</string>
@@ -1897,7 +1897,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"Sol·licita el PIN per deixar de fixar"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"Sol·licita el patró de desbloqueig per deixar de fixar"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"Demana la contrasenya per deixar de fixar"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Instal·lat per l\'administrador"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"Actualitzat per l\'administrador"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Suprimit per l\'administrador"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"D\'acord"</string>
@@ -2394,6 +2395,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"Treball 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Prova"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Compartit"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"Contingut de l\'aplicació amagat de la compartició de pantalla per motius de seguretat"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"S\'ha connectat automàticament a un satèl·lit"</string>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index 4318608..f041b2f 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -664,7 +664,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Otisk prstu nebyl rozpoznán"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Otisk prstu nebyl rozpoznán"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"ObliÄej se nepodaÅilo rozpoznat. PouÅŸijte místo nÄj otisk prstu."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"ObliÄej nebyl rozpoznán. PouÅŸijte místo nÄj otisk prstu."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"Otisk byl ovÄÅen"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"ObliÄej byl ovÄÅen"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"ObliÄej byl ovÄÅen, stisknÄte tlaÄítko pro potvrzení"</string>
@@ -1898,7 +1898,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"PÅed uvolnÄním poÅŸádat o PIN"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"PÅed uvolnÄním poÅŸádat o bezpeÄnostní gesto"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"PÅed odepnutím poÅŸádat o heslo"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Nainstalováno administrátorem"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"Aktualizováno administrátorem"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Smazáno administrátorem"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
@@ -2395,6 +2396,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"Práce 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Komunální"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"Obsah aplikace je z bezpeÄnostních důvodů pÅi sdílení obrazovky skryt"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"Automaticky pÅipojeno k satelitu"</string>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index 3f830c9..a396d08 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Fingeraftrykket blev ikke genkendt"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Fingeraftrykket blev ikke genkendt"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Ansigtet kan ikke genkendes. Brug fingeraftryk i stedet."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Ansigtet blev ikke genkendt. Brug fingeraftryk i stedet."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"Fingeraftrykket blev godkendt"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Ansigtet er godkendt"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Ansigtet er godkendt. Tryk på Bekræft."</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"Bed om pinkode inden frigørelse"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"Bed om oplåsningsmønster ved deaktivering"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"Bed om adgangskode inden frigørelse"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Installeret af din administrator"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"Opdateret af din administrator"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Slettet af din administrator"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"Arbejde 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Fælles"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"Af sikkerhedsmæssige årsager vises appindhold ikke ved skærmdeling"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"Der blev automatisk oprettet forbindelse til satellit"</string>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index 59940a3..f56194c 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Fingerabdruck nicht erkannt"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Fingerabdruck nicht erkannt"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Gesicht wurde nicht erkannt. Verwende stattdessen den Fingerabdruck."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Gesicht nicht erkannt. Verwende den Fingerabdruck."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"Fingerabdruck wurde authentifiziert"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Gesicht authentifiziert"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Gesicht authentifiziert, bitte bestätigen"</string>
@@ -1751,7 +1751,7 @@
<string name="accessibility_button_prompt_text" msgid="8343213623338605305">"Wähle eine Funktion aus, die verwendet wird, wenn du auf die Schaltfläche \"Bedienungshilfen\" tippst:"</string>
<string name="accessibility_gesture_prompt_text" msgid="8742535972130563952">"Wähle die Funktion aus, die mit der Touch-Geste für die Bedienungshilfen verwendet werden soll (mit zwei Fingern vom unteren Bildschirmrand nach oben wischen):"</string>
<string name="accessibility_gesture_3finger_prompt_text" msgid="5211827854510660203">"Wähle eine Funktion aus, die mit der Touch-Geste für die Bedienungshilfen verwendet werden soll (mit drei Fingern vom unteren Bildschirmrand nach oben wischen):"</string>
- <string name="accessibility_button_instructional_text" msgid="8853928358872550500">"Wenn du zwischen den Funktionen wechseln möchtest, halte die Schaltfläche \"Bedienungshilfen\" gedrückt."</string>
+ <string name="accessibility_button_instructional_text" msgid="8853928358872550500">"Wenn du zwischen den Funktionen wechseln möchtest, halte die Schaltfläche „Bedienungshilfen“ gedrückt."</string>
<string name="accessibility_gesture_instructional_text" msgid="9196230728837090497">"Wenn du zwischen den Funktionen wechseln möchtest, wische mit zwei Fingern nach oben und halte."</string>
<string name="accessibility_gesture_3finger_instructional_text" msgid="3425123684990193765">"Wenn du zwischen den Funktionen wechseln möchtest, wische mit drei Fingern nach oben und halte."</string>
<string name="accessibility_magnification_chooser_text" msgid="1502075582164931596">"Vergrößerung"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"Vor dem Beenden nach PIN fragen"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"Vor dem Beenden nach Entsperrungsmuster fragen"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"Vor dem Beenden nach Passwort fragen"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Von deinem Administrator installiert"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"Von deinem Administrator aktualisiert"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Von deinem Administrator gelöscht"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"Geschäftlich 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Gemeinsam genutzt"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"App-Inhalte werden aus Sicherheitsgründen bei der Bildschirmfreigabe ausgeblendet"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"Automatisch mit Satellit verbunden"</string>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index cafccf5..69b3ece 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Δεν είναι δυνατή η αναγνÏριση του δακτυλικοÏ αποτυπÏματος"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Δεν είναι δυνατή η αναγνÏριση του δακτυλικοÏ αποτυπÏματος"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Το πρÏσωπο δεν αναγνωρίζεται. Χρησιμ. δακτ. αποτ."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Δεν αναγνωρίστηκε. Χρήση δακτυλικοÏ αποτυπÏματος."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"Η ταυτÏτητα του δακτυλικοÏ αποτυπÏματος ελÎγχθηκε"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Îγινε Îλεγχος ταυτÏτητας προσÏπου"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Îγινε Îλεγχος ταυτÏτητας προσÏπου, πατήστε \"Επιβεβαίωση\""</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"Να γίνεται ερÏτηση για το PIN, πριν απÏ το ξεκαρφίτσωμα"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"Να γίνεται ερÏτηση για το μοτίβο ξεκλειδÏματος, πριν απÏ το ξεκαρφίτσωμα"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"Να γίνεται ερÏτηση για τον κωδικÏ πρÏσβασης, πριν απÏ το ξεκαρφίτσωμα"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Εγκαταστάθηκε απÏ τον διαχειριστή σας"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"ΕνημερÏθηκε απÏ τον διαχειριστή σας"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Διαγράφηκε απÏ τον διαχειριστή σας"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"Εργασία 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Δοκιμή"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"ΚοινÏχρηστο"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"Για λÏγους ασφάλειας, Îγινε απÏκρυψη του περιεχομÎνου της εφαρμογής απÏ την κοινή χρήση οθÏνης"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"ΣυνδÎθηκε αυτÏματα με δορυφÏρο"</string>
diff --git a/core/res/res/values-en-rAU/strings.xml b/core/res/res/values-en-rAU/strings.xml
index 11fb50e..e87dcb2 100644
--- a/core/res/res/values-en-rAU/strings.xml
+++ b/core/res/res/values-en-rAU/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Fingerprint not recognised"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Fingerprint not recognised"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Can’t recognise face. Use fingerprint instead."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Face not recognised. Use fingerprint instead."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"Fingerprint authenticated"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Face authenticated"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Face authenticated. Please press confirm"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"Ask for PIN before unpinning"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"Ask for unlock pattern before unpinning"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"Ask for password before unpinning"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Installed by your admin"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"Updated by your admin"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Deleted by your admin"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"Work 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Communal"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<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>
diff --git a/core/res/res/values-en-rCA/strings.xml b/core/res/res/values-en-rCA/strings.xml
index 86fe49c..1d0877d 100644
--- a/core/res/res/values-en-rCA/strings.xml
+++ b/core/res/res/values-en-rCA/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Fingerprint not recognized"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Fingerprint not recognized"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Can’t recognize face. Use fingerprint instead."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Face not recognized. Use fingerprint instead."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"Fingerprint authenticated"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Face authenticated"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Face authenticated, please press confirm"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"Ask for PIN before unpinning"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"Ask for unlock pattern before unpinning"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"Ask for password before unpinning"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Installed by your admin"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"Updated by your admin"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Deleted by your admin"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"Work 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Communal"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<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>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index 60dbcd9..0f7ce43 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Fingerprint not recognised"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Fingerprint not recognised"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Can’t recognise face. Use fingerprint instead."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Face not recognised. Use fingerprint instead."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"Fingerprint authenticated"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Face authenticated"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Face authenticated. Please press confirm"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"Ask for PIN before unpinning"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"Ask for unlock pattern before unpinning"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"Ask for password before unpinning"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Installed by your admin"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"Updated by your admin"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Deleted by your admin"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"Work 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Communal"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<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>
diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml
index 859d04a..ffd365f 100644
--- a/core/res/res/values-en-rIN/strings.xml
+++ b/core/res/res/values-en-rIN/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Fingerprint not recognised"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Fingerprint not recognised"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Can’t recognise face. Use fingerprint instead."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Face not recognised. Use fingerprint instead."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"Fingerprint authenticated"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Face authenticated"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Face authenticated. Please press confirm"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"Ask for PIN before unpinning"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"Ask for unlock pattern before unpinning"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"Ask for password before unpinning"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Installed by your admin"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"Updated by your admin"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Deleted by your admin"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"Work 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Communal"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<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>
diff --git a/core/res/res/values-en-rXC/strings.xml b/core/res/res/values-en-rXC/strings.xml
index b7f49980..91b92ff 100644
--- a/core/res/res/values-en-rXC/strings.xml
+++ b/core/res/res/values-en-rXC/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Fingerprint not recognized"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Fingerprint not recognized"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Can’t recognize face. Use fingerprint instead."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Face not recognized. Use fingerprint instead."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"Fingerprint authenticated"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Face authenticated"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Face authenticated, please press confirm"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"Ask for PIN before unpinning"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"Ask for unlock pattern before unpinning"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"Ask for password before unpinning"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Installed by your admin"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"Updated by your admin"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Deleted by your admin"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"Work 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Communal"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<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>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index 39e3d5da2..9fbce46 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -663,7 +663,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"No se reconoció la huella dactilar"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"No se reconoció la huella dactilar"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"No se reconoce el rostro. Usa la huella dactilar."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"No se reconoció el rostro. Usa la huella dactilar."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"Se autenticó la huella dactilar"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Se autenticó el rostro"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Se autenticó el rostro; presiona Confirmar"</string>
@@ -1897,7 +1897,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"Solicitar PIN para quitar fijación"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"Solicitar desbloqueo para quitar fijación"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"Solicitar contraseña para quitar fijación"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Tu administrador instaló este paquete"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"Tu administrador actualizó este paquete"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Tu administrador borró este paquete"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"Aceptar"</string>
@@ -2394,6 +2395,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"Trabajo 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Probar"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Compartido"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"Se ocultó el contenido de la app durante el uso compartido de la pantalla por motivos de seguridad"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"Conexión automática a satélite"</string>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index d2aa32c..07b6456 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -663,7 +663,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Huella digital no reconocida"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Huella digital no reconocida"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"No se reconoce la cara. Usa la huella digital."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Cara no reconocida. Usa la huella digital."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"Se ha autenticado la huella digital"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Cara autenticada"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Se ha autenticado la cara, pulsa para confirmar"</string>
@@ -1897,7 +1897,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"Solicitar PIN para desactivar"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"Pedir patrón de desbloqueo para dejar de fijar"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"Solicitar contraseña para desactivar"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Instalado por el administrador"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"Actualizado por el administrador"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Eliminado por el administrador"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"Aceptar"</string>
@@ -2394,6 +2395,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"Trabajo 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Prueba"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Común"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"Contenido de la aplicación oculto en pantalla compartida por motivos de seguridad"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"Conectado automáticamente al satélite"</string>
diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml
index 99809d3..a6f2f70 100644
--- a/core/res/res/values-et/strings.xml
+++ b/core/res/res/values-et/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Sõrmejälge ei tuvastatud"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Sõrmejälge ei tuvastatud"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Nägu ei õnnestu tuvastada. Kasutage sõrmejälge."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Nägu ei tuvastatud. Kasutage sõrmejälge."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"Sõrmejälg autenditi"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Nägu on autenditud"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Nägu on autenditud, vajutage käsku Kinnita"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"Enne vabastamist küsi PIN-koodi"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"Enne vabastamist küsi avamismustrit"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"Enne vabastamist küsi parooli"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Administraator on selle installinud"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"Administraator on seda värskendanud"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Administraator on selle kustutanud"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"Töö 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Jagatud"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"Rakenduse sisu on ekraani jagamises turvalisuse huvides peidetud"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"Satelliidiga loodi automaatselt ühendus"</string>
diff --git a/core/res/res/values-eu/strings.xml b/core/res/res/values-eu/strings.xml
index c8c2e45..1f14486 100644
--- a/core/res/res/values-eu/strings.xml
+++ b/core/res/res/values-eu/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Ez da ezagutu hatz-marka"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Ez da ezagutu hatz-marka"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Ezin da hauteman aurpegia. Erabili hatz-marka."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Ez da ezagutu aurpegia. Erabili hatz-marka."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"Autentifikatu da hatz-marka"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Autentifikatu da aurpegia"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Autentifikatu da aurpegia; sakatu Berretsi"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"Eskatu PINa aingura kendu aurretik"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"Eskatu desblokeatzeko eredua aingura kendu aurretik"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"Eskatu pasahitza aingura kendu aurretik"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Administratzaileak instalatu du"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"Administratzaileak eguneratu du"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Administratzaileak ezabatu du"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"Ados"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"Lanekoa 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Probakoa"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Partekatua"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"Aplikazioko edukia ezkutatu egin da pantaila partekatzeko eginbidetik, segurtasuna bermatzeko"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"Automatikoki konektatu da satelitera"</string>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index c59ac02..4be209f 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"اثر اÙگ؎ت ØªØŽØ®ÛØµ Ø¯Ø§Ø¯Ù ÙØŽØ¯"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"اثر اÙگ؎ت ØªØŽØ®ÛØµ Ø¯Ø§Ø¯Ù ÙØŽØ¯"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"ÚÙØ±Ù ØŽÙØ§Ø³Ø§ÛÛ ÙØŽØ¯. Ø¯Ø±Ø¹ÙØ¶ از اثر اÙگ؎ت Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"ÚÙØ±Ù ØŽÙØ§Ø³Ø§ÛÛ ÙØŽØ¯. Ø¯Ø±Ø¹ÙØ¶ از اثر اÙگ؎ت Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"اثر اÙگ؎ت Ø§ØµØ§ÙØªØ³ÙØ¬Û ØŽØ¯"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"ÚÙØ±Ù Ø§ØµØ§ÙØªØ³ÙØ¬Û ØŽØ¯"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"ÚÙØ±Ù Ø§ØµØ§ÙØªØ³ÙØ¬Û ØŽØ¯Ø ÙØ·Ùا٠تأÛÛØ¯ را ÙØŽØ§Ø± دÙÛØ¯"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"Ø¯Ø±Ø®ÙØ§Ø³Øª کد ÙŸÛÙ ÙØšÙ از ؚردا؎ت٠ٟÛÙ"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"Ø¯Ø±Ø®ÙØ§Ø³Øª اÙÚ¯ÙÛ ØšØ§Ø²Ú¯ØŽØ§ÛÛ ÙÙÙ ÙØšÙاز ØšØ±Ø¯Ø§ØŽØªÙ Ø³ÙØ¬Ø§Ù"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"Ø¯Ø±Ø®ÙØ§Ø³Øª Ú¯Ø°Ø±ÙØ§ÚÙ ÙØšÙ از ØšØ±Ø¯Ø§ØŽØªÙ Ø³ÙØ¬Ø§Ù"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"ØªÙØ³Ø· سرٟرست Ø³ÛØ³ØªÙ
ÙØµØš ؎د"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"ØªÙØ³Ø· سرٟرست Ø³ÛØ³ØªÙ
ØšÙØ±ÙزرساÙÛ ØŽØ¯"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"ØªÙØ³Ø· سرٟرست Ø³ÛØ³ØªÙ
ØØ°Ù ؎د"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"تأÛÛØ¯"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"کار ۳"</string>
<string name="profile_label_test" msgid="9168641926186071947">"آزÙ
Ø§ÛØŽ"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"عÙ
ÙÙ
Û"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"ØšÙØ¯ÙاÛ٠اÙ
ÙÛØªÛØ Ù
ØØªÙØ§Û ØšØ±ÙØ§Ù
٠از Ø¯ÛØ¯ ÙÙ
رساÙÛ ØµÙØÙÙÙ
Ø§ÛØŽ ÙŸÙÙØ§Ù ؎د"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"ØšÙØ·Ùر Ø®ÙØ¯Ú©Ø§Ø± ØšÙ Ù
اÙÙØ§Ø±Ù Ù
تص٠؎د"</string>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index 7612906..293d913 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Sormenjälkeä ei tunnistettu"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Sormenjälkeä ei tunnistettu"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Kasvoja ei voi tunnistaa. Käytä sormenjälkeä."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Kasvoja ei tunnistettu. Käytä sormenjälkeä."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"Sormenjälki tunnistettu"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Kasvot tunnistettu"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Kasvot tunnistettu, valitse Vahvista"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"Pyydä PIN ennen irrotusta"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"Pyydä lukituksenpoistokuvio ennen irrotusta"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"Pyydä salasana ennen irrotusta"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Järjestelmänvalvoja asensi tämän."</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"Järjestelmänvalvoja päivitti tämän."</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Järjestelmänvalvoja poisti tämän."</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"Työ 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Testi"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Jaettu"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"Sovelluksen sisältö piilotettu näytön jakamiselta turvallisuussyistä"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"Yhdistetty automaattisesti satelliittiin"</string>
diff --git a/core/res/res/values-fr-feminine/strings.xml b/core/res/res/values-fr-feminine/strings.xml
index 2ad85d1..c9c3675 100644
--- a/core/res/res/values-fr-feminine/strings.xml
+++ b/core/res/res/values-fr-feminine/strings.xml
@@ -20,5 +20,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="scNullCipherIssueEncryptedSummary" msgid="6437468449554283998">"Vous êtes désormais connectée à un réseau mobile plus sécurisé."</string>
+ <string name="scNullCipherIssueNonEncryptedSummary" msgid="3577092996366374833">"Vous êtes connectée à un réseau mobile non chiffré. Vos appels, messages et données sont susceptibles d\'être interceptés."</string>
<string name="permlab_subscribedFeedsRead" msgid="217624769238425461">"lire les flux auxquels vous êtes abonnée"</string>
</resources>
diff --git a/core/res/res/values-fr-masculine/strings.xml b/core/res/res/values-fr-masculine/strings.xml
index 744ef2b..288c2ca 100644
--- a/core/res/res/values-fr-masculine/strings.xml
+++ b/core/res/res/values-fr-masculine/strings.xml
@@ -20,5 +20,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="scNullCipherIssueEncryptedSummary" msgid="6437468449554283998">"Vous êtes désormais connecté à un réseau mobile plus sécurisé."</string>
+ <string name="scNullCipherIssueNonEncryptedSummary" msgid="3577092996366374833">"Vous êtes connecté à un réseau mobile non chiffré. Vos appels, messages et données sont susceptibles d\'être interceptés."</string>
<string name="permlab_subscribedFeedsRead" msgid="217624769238425461">"lire les flux auxquels vous êtes abonné"</string>
</resources>
diff --git a/core/res/res/values-fr-neuter/strings.xml b/core/res/res/values-fr-neuter/strings.xml
index b4f4cc7..15e3076 100644
--- a/core/res/res/values-fr-neuter/strings.xml
+++ b/core/res/res/values-fr-neuter/strings.xml
@@ -20,5 +20,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="scNullCipherIssueEncryptedSummary" msgid="6437468449554283998">"Vous êtes désormais connecté·e à un réseau mobile plus sécurisé."</string>
+ <string name="scNullCipherIssueNonEncryptedSummary" msgid="3577092996366374833">"Vous êtes connecté·e à un réseau mobile non chiffré. Vos appels, messages et données sont susceptibles d\'être interceptés."</string>
<string name="permlab_subscribedFeedsRead" msgid="217624769238425461">"lire les flux auxquels vous êtes abonné·e"</string>
</resources>
diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml
index 7d86d83..31a6619 100644
--- a/core/res/res/values-fr-rCA/strings.xml
+++ b/core/res/res/values-fr-rCA/strings.xml
@@ -663,7 +663,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Empreinte digitale non reconnue"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Empreinte digitale non reconnue"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Visage non reconnu. Utilisez plutôt l\'empreinte digitale."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Visage non reconnu. Utilisez l\'empreinte digitale."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"Empreinte digitale authentifiée"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Visage authentifié"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Visage authentifié, veuillez appuyer sur le bouton Confirmer"</string>
@@ -1897,7 +1897,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"Demander le NIP avant d\'annuler l\'épinglage"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"Demander le schéma de déverrouillage avant d\'annuler l\'épinglage"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"Demander le mot de passe avant d\'annuler l\'épinglage"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Installé par votre administrateur"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"Mise à jour par votre administrateur"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Supprimé par votre administrateur"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
@@ -1994,7 +1995,7 @@
<string name="work_mode_emergency_call_button" msgid="6818855962881612322">"Urgence"</string>
<string name="set_up_screen_lock_title" msgid="8346083801616474030">"Config. Verrouillage d\'écran"</string>
<string name="set_up_screen_lock_action_label" msgid="2687634803649209367">"Config. Verrouillage d\'écran"</string>
- <string name="private_space_set_up_screen_lock_message" msgid="1109956797005149814">"Config. VÉ pour util. Esp. pr."</string>
+ <string name="private_space_set_up_screen_lock_message" msgid="1109956797005149814">"Configurez verrouillage de l\'écran pour utiliser Espace privé"</string>
<string name="app_blocked_title" msgid="7353262160455028160">"L\'application n\'est pas accessible"</string>
<string name="app_blocked_message" msgid="542972921087873023">"<xliff:g id="APP_NAME">%1$s</xliff:g> n\'est pas accessible pour le moment."</string>
<string name="app_streaming_blocked_title" msgid="6090945835898766139">"<xliff:g id="ACTIVITY">%1$s</xliff:g> non accessible"</string>
@@ -2394,6 +2395,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"Professionnel 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Commun"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"Le contenu de l\'application est masqué du Partage d\'écran par mesure de sécurité"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"Connecté au satellite automatiquement"</string>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index 80f1cf8..c9cddb5 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -161,7 +161,7 @@
<string name="scNullCipherIssueEncryptedTitle" msgid="8426373579673205292">"Connexion chiffrée au réseau <xliff:g id="NETWORK_NAME">%1$s</xliff:g>"</string>
<string name="scNullCipherIssueEncryptedSummary" msgid="6437468449554283998">"Vous êtes désormais connecté à un réseau mobile plus sécurisé."</string>
<string name="scNullCipherIssueNonEncryptedTitle" msgid="2069674849204163569">"Connexion non chiffrée au réseau <xliff:g id="NETWORK_NAME">%1$s</xliff:g>"</string>
- <string name="scNullCipherIssueNonEncryptedSummary" msgid="3577092996366374833">"Vous êtes connecté à un réseau mobile non chiffré. Vos appels, messages ainsi que vos données sont vulnérables et donc, susceptibles d\'être interceptés."</string>
+ <string name="scNullCipherIssueNonEncryptedSummary" msgid="3577092996366374833">"Vous êtes connecté à un réseau mobile non chiffré. Vos appels, messages et données sont susceptibles d\'être interceptés."</string>
<string name="scNullCipherIssueActionSettings" msgid="8378372959891478470">"Paramètres de sécurité des réseaux mobiles"</string>
<string name="scNullCipherIssueActionLearnMore" msgid="7896642417214757769">"En savoir plus"</string>
<string name="fcComplete" msgid="1080909484660507044">"Code de service terminé"</string>
@@ -663,7 +663,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Empreinte digitale non reconnue"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Empreinte digitale non reconnue"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Visage non reconnu. Utilisez votre empreinte."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Visage non reconnu. Utilisez votre empreinte."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"Empreinte digitale authentifiée"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Visage authentifié"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Visage authentifié, veuillez appuyer sur \"Confirmer\""</string>
@@ -1897,7 +1897,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"Demander le code avant de retirer l\'épingle"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"Demander le schéma de déverrouillage avant de retirer l\'épingle"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"Demander le mot de passe avant de retirer l\'épingle"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Installé par votre administrateur"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"Mis à jour par votre administrateur"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Supprimé par votre administrateur"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
@@ -2394,6 +2395,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"Professionnel 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Commun"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"Le contenu de l\'appli est masqué lors du partage d\'écran pour des raisons de sécurité"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"Connecté automatiquement au réseau satellite"</string>
diff --git a/core/res/res/values-gl/strings.xml b/core/res/res/values-gl/strings.xml
index 0dbf369..1c26c20 100644
--- a/core/res/res/values-gl/strings.xml
+++ b/core/res/res/values-gl/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Non se recoñeceu a impresión dixital"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Non se recoñeceu a impresión dixital"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Non se recoñeceu a cara. Usa a impresión dixital."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Non se recoñeceu a cara. Usa a impresión dixital."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"Autenticouse a impresión dixital"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Autenticouse a cara"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Autenticouse a cara, preme Confirmar"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"Pedir PIN antes de soltar a fixación"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"Pedir padrón de desbloqueo antes de soltar a fixación"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"Pedir contrasinal antes de soltar a fixación"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Instalado polo teu administrador"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"Actualizado polo teu administrador"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Eliminado polo teu administrador"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"Aceptar"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"Traballo 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Proba"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Compartido"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"Por motivos de seguranza, ocultouse o contido da aplicación para que no se mostre na pantalla compartida"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"Conexión automática ao satélite"</string>
diff --git a/core/res/res/values-gu/strings.xml b/core/res/res/values-gu/strings.xml
index b3cf16b..d85a179 100644
--- a/core/res/res/values-gu/strings.xml
+++ b/core/res/res/values-gu/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"ફિàªàªàª°àªªà«àª°àª¿àªšà«àª àªàª³àªà« શàªàªŸàª ચથà«"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"ફિàªàªàª°àªªà«àª°àª¿àªšà«àª àªàª³àªà« શàªàªŸàª ચથà«"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"àªàª¹à«àª°à« àªàª³àªà« શàªàª€àªŸ ચથà«. ઀à«àªšà« બઊલૠફિàªàªàª°àªªà«àª°àª¿àªšà«àª વટપરà«."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"àªàª¹à«àª°à« àªàª³àªàªŸàª¯à« ચથà«. ઀à«àªšà« બઊલૠફિàªàªàª°àªªà«àª°àª¿àªšà«àª વટપરà«."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"ફિàªàªàª°àªªà«àª°àª¿àªšà«àª પà«àª°àª®àªŸàª£àª¿àª€ àªàª°à«"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"àªàª¹à«àª°àªŸ પà«àª°àª®àªŸàª£àª¿àª€"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"àªàª¹à«àª°àªŸ પà«àª°àª®àªŸàª£àª¿àª€, àªà«àªªàªŸ àªàª°à«àªšà« àªàªšà«àª«àª°à«àª® àªàª°à«"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"àª
ચપિચ àªàª°àª€àªŸ પહà«àª²àªŸàª પિચ મટàªà« પà«àªà«"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"àª
ચપિચ àªàª°àª€àªŸ પહà«àª²àªŸàª àª
ચલà«àª પà«
àªàª°à«àªš મટàªà« પà«àªà«"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"àª
ચપિચ àªàª°àª€àªŸàª પહà«àª²àªŸàª પટઞવરà«àª¡ મટàªà« પà«àªà«"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"઀મટરટ વà«àª¯àªµàªžà«àª¥àªŸàªªàª ઊà«àªµàªŸàª°àªŸ àªàªšà«àªžà«àªà«àª² àªàª°àªµàªŸàª®àªŸàª àªàªµà«àª² àªà«"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"઀મટરટ વà«àª¯àªµàªžà«àª¥àªŸàªªàª ઊà«àªµàªŸàª°àªŸ àª
પડà«àª àªàª°àªµàªŸàª®àªŸàª àªàªµà«àª² àªà«"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"઀મટરટ વà«àª¯àªµàªžà«àª¥àªŸàªªàª ઊà«àªµàªŸàª°àªŸ àªàªŸàª¢à« ચટàªàªµàªŸàª®àªŸàª àªàªµà«àª² àªà«"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"àªàªà«"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"àªàª«àª¿àªž 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"પરà«àªà«àª·àª£ àªàª°à«"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"àªà«àª®à«àª¯à«àªšàª²"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"ઞà«àª°àªà«àª·àªŸ મટàªà« ઞà«àªà«àª°à«àªš શà«àª° àªàª°àª€à« વàªàª€à« àªàªªàªšà«àª àªàªšà«àªà«àªšà«àª àªà«àªªàªŸàªµà«àª²à«àª àªà«"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"ઞà«àªà«àª²àªŸàªàª ઞટથૠàªàªà«àª®à«
àªàª¿àª રà«àª€à« àªàªšà«àªà«àªà«àª¡"</string>
diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml
index c2b36b7..8eddd12 100644
--- a/core/res/res/values-hi/strings.xml
+++ b/core/res/res/values-hi/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"à€«à€Œà€¿à€à€à€°à€ªà¥à€°à€¿à€à€ à€à¥ à€ªà€¹à€à€Ÿà€š à€šà€¹à¥à€ à€¹à¥ à€ªà€Ÿà€"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"à€«à€Œà€¿à€à€à€°à€ªà¥à€°à€¿à€à€ à€à¥ à€ªà€¹à€à€Ÿà€š à€šà€¹à¥à€ à€¹à¥ à€ªà€Ÿà€"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"à€à¥à€¹à€°à¥ à€à¥ à€ªà€¹à€à€Ÿà€š à€šà€¹à¥à€ à€¹à¥à€. à€«à€Œà€¿à€à€à€°à€ªà¥à€°à€¿à€à€ à€à€žà¥à€€à¥à€®à€Ÿà€² à€à€°à¥à€."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"à€à¥à€¹à€°à€Ÿ à€šà€¹à¥à€ à€ªà€¹à€à€Ÿà€šà€Ÿ à€à€¯à€Ÿ. à€«à€Œà€¿à€à€à€°à€ªà¥à€°à€¿à€à€ à€à€žà¥à€€à¥à€®à€Ÿà€² à€à€°à¥à€."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"à€«à€Œà€¿à€à€à€°à€ªà¥à€°à€¿à€à€ à€à¥ à€ªà¥à€·à¥à€à€¿ à€¹à¥ à€à€"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"à€à¥à€¹à€°à¥ à€à¥ à€ªà€¹à€à€Ÿà€š à€à¥ à€à€"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"à€à¥à€¹à€°à¥ à€à¥ à€ªà€¹à€à€Ÿà€š à€à¥ à€à€, à€à¥à€ªà€¯à€Ÿ à€ªà¥à€·à¥à€à€¿ à€¬à€à€š à€Šà€¬à€Ÿà€à€"</string>
@@ -990,7 +990,7 @@
<string name="lockscreen_instructions_when_pattern_enabled" msgid="7982445492532123308">"à€²à¥à€ à€à¥à€²à€šà¥ à€à¥ à€²à€¿à€ à€®à¥à€šà¥à€¯à¥ à€Šà€¬à€Ÿà€à€ à€¯à€Ÿ à€à€ªà€Ÿà€€à€²à€à€Ÿà€²à¥à€š à€à¥à€² à€à€°à¥à€."</string>
<string name="lockscreen_instructions_when_pattern_disabled" msgid="7434061749374801753">"à€²à¥à€ à€à¥à€²à€šà¥ à€à¥ à€²à€¿à€ à€®à¥à€šà¥à€¯à¥ à€Šà€¬à€Ÿà€à€."</string>
<string name="lockscreen_pattern_instructions" msgid="3169991838169244941">"à€
à€šà€²à¥à€ à€à€°à€šà¥ à€à¥ à€²à€¿à€ à€à€à€Ÿà€° à€à€°à¥à€à€¿à€€ à€à€°à¥à€"</string>
- <string name="lockscreen_emergency_call" msgid="7500692654885445299">"à€à€ªà€Ÿà€€à€à€Ÿà€²"</string>
+ <string name="lockscreen_emergency_call" msgid="7500692654885445299">"à€à€ªà€Ÿà€€à€à€Ÿà€²à¥à€š à€à¥à€²"</string>
<string name="lockscreen_return_to_call" msgid="3156883574692006382">"à€à¥à€² à€ªà€° à€µà€Ÿà€ªà€ž à€²à¥à€à¥à€"</string>
<string name="lockscreen_pattern_correct" msgid="8050630103651508582">"à€žà€¹à¥!"</string>
<string name="lockscreen_pattern_wrong" msgid="2940138714468358458">"à€«à€¿à€° à€žà¥ à€à¥à€¶à€¿à€¶ à€à€°à¥à€"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"à€
à€šà€ªà€¿à€š à€à€°à€šà¥ à€žà¥ à€ªà€¹à€²à¥ à€ªà€¿à€š à€à¥ à€²à€¿à€ à€ªà¥à€à¥à€"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"à€
à€šà€ªà€¿à€š à€à€°à€šà¥ à€žà¥ à€ªà€¹à€²à¥ à€²à¥à€ à€à¥à€²à€šà¥ à€à¥ à€ªà¥à€à€°à¥à€š à€à¥ à€²à€¿à€ à€ªà¥à€à¥à€"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"à€
à€šà€ªà€¿à€š à€à€°à€šà¥ à€žà¥ à€ªà€¹à€²à¥ à€ªà€Ÿà€žà€µà€°à¥à€¡ à€à¥ à€²à€¿à€ à€ªà¥à€à¥à€"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"à€à€ªà€à¥ à€µà¥à€¯à€µà€žà¥à€¥à€Ÿà€ªà€ à€šà¥ à€à€à€žà¥à€à¥à€² à€à€¿à€¯à€Ÿ à€¹à¥"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"à€à€ªà€à¥ à€µà¥à€¯à€µà€žà¥à€¥à€Ÿà€ªà€ à€šà¥ à€
à€ªà€¡à¥à€ à€à€¿à€¯à€Ÿ à€¹à¥"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"à€à€ªà€à¥ à€µà¥à€¯à€µà€žà¥à€¥à€Ÿà€ªà€ à€šà¥ à€¹à€à€Ÿ à€Šà€¿à€¯à€Ÿ à€¹à¥"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"à€ à¥à€ à€¹à¥"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"à€à€«à€Œà€¿à€ž 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"à€à¥à€žà¥à€"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"à€à€®à¥à€¯à¥à€šà€¿à€à¥"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"à€žà¥à€à¥à€°à¥à€š à€¶à¥à€¯à€° à€à€°à€šà¥ à€à¥ à€Šà¥à€°à€Ÿà€š à€žà¥à€°à€à¥à€·à€Ÿ à€à¥ à€²à€¿à€, à€à€ªà¥à€²à€¿à€à¥à€¶à€š à€à€Ÿ à€à¥à€šà¥à€à¥à€à€ à€à€¿à€ªà€Ÿà€¯à€Ÿ à€à€¯à€Ÿ"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"à€žà¥à€à€²à€Ÿà€à€ à€žà¥ à€
à€ªà€šà¥-à€à€ª à€à€šà¥à€à¥à€ à€¹à¥ à€à€¯à€Ÿ"</string>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index 0243599..fcf08a4 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -663,7 +663,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Otisak prsta nije prepoznat"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Otisak prsta nije prepoznat"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Prepoznavanje lica nije uspjelo. Upotrijebite otisak prsta."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Lice nije prepoznato. Upotrijebite otisak prsta."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"Autentificirano otiskom prsta"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Lice je autentificirano"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Lice je autentificirano, pritisnite Potvrdi"</string>
@@ -1897,7 +1897,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"TraÅŸi PIN radi otkvaÄivanja"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"TraÅŸi uzorak za otkljuÄavanje radi otkvaÄivanja"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"TraÅŸi zaporku radi otkvaÄivanja"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Instalirao administrator"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"AÅŸurirao administrator"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Izbrisao administrator"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"U redu"</string>
@@ -2394,6 +2395,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"Posao 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"ZajedniÄko"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"SadrÅŸaj aplikacije sakriven je od dijeljenja zaslona radi sigurnosti"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"Automatski povezano sa satelitom"</string>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index 518e851..76c41c1 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Az ujjlenyomat nem ismerhetÅ fel"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Az ujjlenyomat nem ismerhetÅ fel"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Az arc nem felismerhetÅ. Használjon ujjlenyomatot."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Sikertelen arcfelismerés. Használja ujjlenyomatát."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"Ujjlenyomat hitelesítve"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Arc hitelesítve"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Arc hitelesítve; nyomja meg a MegerÅsítés lehetÅséget"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"PIN-kód kérése a kitűzés feloldásához"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"Feloldási minta kérése a kitűzés feloldásához"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"Jelszó kérése a rögzítés feloldásához"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"A rendszergazda által telepítve"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"A rendszergazda által frissítve"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"A rendszergazda által törölve"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"3. munkahelyi"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Teszt"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Közös"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"A biztonság érdekében a képernyÅmegosztástól elrejtett alkalmazástartalom"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"Automatikusan csatlakozva a műholdhoz"</string>
diff --git a/core/res/res/values-hy/strings.xml b/core/res/res/values-hy/strings.xml
index 74d3751..7626694 100644
--- a/core/res/res/values-hy/strings.xml
+++ b/core/res/res/values-hy/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"ÕÕ¡Õ¿Õ¶Õ¡Õ°Õ¥Õ¿ÖÕš Õ¹Õ« Õ³Õ¡Õ¶Õ¡Õ¹ÕŸÕ¥Õ¬"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"ÕÕ¡Õ¿Õ¶Õ¡Õ°Õ¥Õ¿ÖÕš Õ¹Õ« Õ³Õ¡Õ¶Õ¡Õ¹ÕŸÕ¥Õ¬"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"ÔŽÕ¥ÕŽÖÕš Õ¹Õ« Õ°Õ¡Õ»ÕžÕ²ÕŸÕžÖÕŽ Õ³Õ¡Õ¶Õ¡Õ¹Õ¥Õ¬Ö ÕÕ£Õ¿Õ¡Õ£ÕžÖÕ®Õ¥Ö ÕŽÕ¡Õ¿Õ¶Õ¡Õ°Õ¥Õ¿ÖÕšÖ"</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"ÔŽÕ¥ÕŽÖÕš Õ¹Õ« Õ³Õ¡Õ¶Õ¡Õ¹ÕŸÕ¥Õ¬Ö ÕÕ£Õ¿Õ¡Õ£ÕžÖÕ®Õ¥Ö ÕŽÕ¡Õ¿Õ¶Õ¡Õ°Õ¥Õ¿ÖÕšÖ"</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"ÕÕ¡Õ¿Õ¶Õ¡Õ°Õ¥Õ¿ÖÕš Õ¶ÕžÖÕµÕ¶Õ¡Õ¯Õ¡Õ¶Õ¡ÖÕŸÕ¥Ö"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"ÔŽÕ¥ÕŽÖÕš Õ³Õ¡Õ¶Õ¡Õ¹ÕŸÕ¥Ö"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"ÔŽÕ¥ÕŽÖÕš Õ³Õ¡Õ¶Õ¡Õ¹ÕŸÕ¥Ö: ÕÕ¥Õ²ÕŽÕ¥Ö «Õա՜տատել»:"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"ÕÕ¡ÖÖÕ¶Õ¥Õ¬ PIN Õ¯ÕžÕ€Õš"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"ÕÕ¡ÖÖÕ¶Õ¥Õ¬ Õ¡ÕºÕ¡Õ¯ÕžÕ²ÕºÕžÕ² Õ¶Õ¡ÕÕ·Õš"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"ÕÕ¡ÖÖÕ¶Õ¥Õ¬ գաղտնաբաՌ՚"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"ÕÕ¥Õ²Õ¡Õ€ÖÕŸÕ¥Õ¬ Õ§ Õ±Õ¥Ö Õ¡Õ€ÕŽÕ«Õ¶Õ«ÕœÕ¿ÖÕ¡Õ¿ÕžÖÕ« Õ¯ÕžÕ²ÕŽÕ«Ö"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"Ô¹Õ¡ÖÕŽÕ¡ÖÕŸÕ¥Õ¬ Õ§ Õ±Õ¥Ö Õ¡Õ€ÕŽÕ«Õ¶Õ«ÕœÕ¿ÖÕ¡Õ¿ÕžÖÕ« Õ¯ÕžÕ²ÕŽÕ«Ö"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"ÕÕ¶Õ»ÕŸÕ¥Õ¬ Õ§ Õ±Õ¥Ö Õ¡Õ€ÕŽÕ«Õ¶Õ«ÕœÕ¿ÖÕ¡Õ¿ÕžÖÕ« Õ¯ÕžÕ²ÕŽÕ«Ö"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"ÔµÕ²Õ¡ÕŸ"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"Ô±Õ·ÕÕ¡Õ¿Õ¡Õ¶ÖÕ¡ÕµÕ«Õ¶ 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"ÕÕžÖÕ±Õ¶Õ¡Õ¯Õ¡Õ¶"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"ÔžÕ¶Õ€Õ°Õ¡Õ¶ÕžÖÖ"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"Ô±Õ¶ÕŸÕ¿Õ¡Õ¶Õ£ÕžÖÕ©ÕµÕ¡Õ¶ նկատաՌ՞ÖÕŽÕ¶Õ¥ÖÕ«Ö Õ¥Õ¬Õ¶Õ¥Õ¬ÕžÕŸÕ Õ°Õ¡ÕŸÕ¥Õ¬ÕŸÕ¡Õ®Õ« Õ¢ÕžÕŸÕ¡Õ¶Õ€Õ¡Õ¯ÕžÖÕ©ÕµÕžÖÕ¶Õš Õ©Õ¡ÖÖÕŸÕ¥Õ¬ Õ§ Õ§Õ¯ÖÕ¡Õ¶Õ« ÖÕžÖÖÕ¡Õ€ÖÕžÖÕŽÕ«Ö"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"Ô±ÕŸÕ¿ÕžÕŽÕ¡Õ¿ ÕŽÕ«Õ¡ÖÕ¥Õ¬ Õ§ Õ¡ÖÕ¢Õ¡Õ¶ÕµÕ¡Õ¯Õ«Õ¶"</string>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index 8a29efd..44f13f5 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Sidik jari tidak dikenali"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Sidik jari tidak dikenali"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Tidak dapat mengenali wajah. Gunakan sidik jari."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Wajah tidak dikenali. Gunakan sidik jari."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"Sidik jari diautentikasi"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Wajah diautentikasi"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Wajah diautentikasi, silakan tekan konfirmasi"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"Meminta PIN sebelum melepas sematan"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"Meminta pola pembukaan kunci sebelum melepas sematan"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"Meminta sandi sebelum melepas sematan"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Diinstal oleh admin Anda"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"Diupdate oleh admin Anda"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Dihapus oleh admin Anda"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"Oke"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"Kerja 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Pengujian"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Umum"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"Konten aplikasi disembunyikan dari berbagi layar untuk alasan keamanan"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"Menghubungkan otomatis ke satelit"</string>
diff --git a/core/res/res/values-is/strings.xml b/core/res/res/values-is/strings.xml
index caa801d..eb9d2f7 100644
--- a/core/res/res/values-is/strings.xml
+++ b/core/res/res/values-is/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Fingrafar þekkist ekki"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Fingrafar þekkist ekki"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Andlit þekkist ekki. Notaðu fingrafar í staðinn."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Ekki tókst að bera kennsl á andlit. Notaðu fingrafar í staðinn."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"Fingrafar staðfest"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Andlit staðfest"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Andlit staðfest, ýttu til að staðfesta"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"Biðja um PIN-númer til að losa"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"Biðja um opnunarmynstur til að losa"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"Biðja um aðgangsorð til að losa"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Kerfisstjóri setti upp"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"Kerfisstjóri uppfærði"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Kerfisstjóri eyddi"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"Í lagi"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"Vinna 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Prófun"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Sameiginlegt"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"Efni forrits falið í skjádeilingu af öryggisástæðum"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"Tengdist sjálfkrafa við gervihnött"</string>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index a5373ab..a82eb71 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -663,7 +663,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Impronta non riconosciuta"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Impronta non riconosciuta"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Impossibile riconoscere il volto. Usa l\'impronta."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Volto non riconosciuto. Usa l\'impronta."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"Impronta autenticata"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Volto autenticato"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Volto autenticato, premi Conferma"</string>
@@ -1897,7 +1897,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"Richiedi il PIN per lo sblocco"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"Richiedi sequenza di sblocco prima di sbloccare"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"Richiedi password prima di sbloccare"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Installato dall\'amministratore"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"Aggiornato dall\'amministratore"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Eliminato dall\'amministratore"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
@@ -2394,6 +2395,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"Lavoro 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Condiviso"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"Contenuti dell\'app nascosti dalla condivisione schermo per sicurezza"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"Connessione automatica al satellite"</string>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index e9e5585..9345826 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -663,7 +663,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"×××עת ××׊××¢ ×× ×××ת×"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"×××עת ××׊××¢ ×× ×××ת×"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"×× × ××ª× ××××ת ×ת ××€× ××. ×ש ××שת×ש ××××עת ×׊××¢ ×××§××."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"××€× ×× ×× ××××. ׊ך×× ××שת×ש ××××עת ×׊××¢ ×××§×× ××ת."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"×××עת ××׊××¢ ×××ת×"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"××××× ××€× ×× ××׊ע"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"××××× ××€× ×× ××׊ע. ×ש ×××××¥ ×¢× ××ש×ך"</string>
@@ -1897,7 +1897,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"×ש ××קש ×§×× ××××ת ××€× × ××××× ×׊×××"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"׊ך×× ××קש ×§× ××××× × ×¢××× ××€× × ××××× ×׊×××"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"×ש ××קש ס×ס×× ××€× × ××××× ×׊×××"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"×××ª×§× × ×¢× ××× ×× ×× ××עך×ת"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"×¢×××× × ×¢× ××× ×× ×× ××עך×ת"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"× ×××§× ×¢× ××× ×× ×× ××עך×ת"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"××ש×ך"</string>
@@ -2167,7 +2168,7 @@
<string name="bluetooth_airplane_mode_toast" msgid="2066399056595768554">"Bluetooth ××ש×ך ×××€×¢× ××××× ××Š× ××ס×"</string>
<string name="car_loading_profile" msgid="8219978381196748070">"×××¢×× ×"</string>
<string name="file_count" msgid="3220018595056126969">"{count,plural, =1{{file_name} ××¢×× ×§×××¥ ×××}one{{file_name} ××¢×× # ×§×׊××}two{{file_name} ××¢×× # ×§×׊××}other{{file_name} ××¢×× # ×§×׊××}}"</string>
- <string name="chooser_no_direct_share_targets" msgid="1511722103987329028">"××× ×× ×©×× ×©× ××ª× ×שתף ××ת×"</string>
+ <string name="chooser_no_direct_share_targets" msgid="1511722103987329028">"××× ×××׊×ת ×¢× ×× ×שתף"</string>
<string name="chooser_all_apps_button_label" msgid="3230427756238666328">"ךש××ת ×××€××ק׊××ת"</string>
<string name="usb_device_resolve_prompt_warn" msgid="325871329788064199">"×××€××ק׊×× ×× ×× × ××ª× × ×ךש×ת ××§×××, ××× ×׀שך ×××§××× ××××× ×××׊ע×ת ××ª×§× ×-USB ×××."</string>
<string name="accessibility_system_action_home_label" msgid="3234748160850301870">"××ת"</string>
@@ -2394,6 +2395,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"׀ך××€×× ×¢×××× 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"××××§×"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"ש×ת××€×"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"ת××× ×××€××ק׊×× ××סתך ×ש×ת××£ ×××¡× ×××¢×× ×××××"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"××××ך ××××××× ×××××××"</string>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index 4eb0ced..5934b06 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"æçŽãèªèã§ããŸãã"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"æçŽãèªèã§ããŸãã"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"é¡ãèªèã§ããŸãããæçŽèªèšŒã䜿çšããŠãã ããã"</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"é¡ãèªèã§ããŸãããæçŽèªèšŒã䜿çšããŠãã ããã"</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"æçŽèªèšŒãå®äºããŸãã"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"é¡ãèªèšŒããŸãã"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"é¡ãèªèšŒããŸããã[確èª] ãæŒããŠãã ãã"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"ãªãã©ã€ã³åçãè§£é€ããåã«PINã®å
¥åãæ±ãã"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"ç»é¢åºå®ãè§£é€ããåã«ããã¯è§£é€ãã¿ãŒã³ã®å
¥åãæ±ãã"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"ãªãã©ã€ã³åçãè§£é€ããåã«ãã¹ã¯ãŒãã®å
¥åãæ±ãã"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"管çè
ã«ããã€ã³ã¹ããŒã«ãããŠããŸã"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"管çè
ã«ããæŽæ°ãããŠããŸã"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"管çè
ã«ããåé€ãããŠããŸã"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"ä»äºçš 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"ãã¹ã"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"å
±çš"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"ã»ãã¥ãªãã£äžãç»é¢å
±æã§ã¯ã¢ããªã®å
容ã¯é衚瀺ãšãªããŸã"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"è¡æã«èªåæ¥ç¶ããŸãã"</string>
diff --git a/core/res/res/values-ka/strings.xml b/core/res/res/values-ka/strings.xml
index d4b4d12..e0ca395 100644
--- a/core/res/res/values-ka/strings.xml
+++ b/core/res/res/values-ka/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"ááááá¡ ááááááááá¡ ááááªáááá ááá ááá®áá á®áá"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"ááááá¡ ááááááááá¡ ááááªáááá ááá ááá®áá á®áá"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"á¡áá®áá¡ ááááªáááá ááá á®áá á®áááá. á¡ááááªáááá ááááá¡ áááááááá áááááá§áááá."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"á¡áá®áá¡ ááááªáááá ááá ááá®áá á®áá. áªáááá ááááá¡ áááááááá."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"ááááá¡ áááááááá ááá¢áá ááááá£ááá"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"á¡áá®á ááá¢áá ááááá£ááá"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"á¡áá®á ááá¢áá ááááá£ááá, áááááá áá ááááá¡á¢á£á áááá¡"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"á€áá¥á¡ááªááá¡ ááá®á¡ááááá PIN-áá¡ áááá®áááá"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"á€áá¥á¡ááªááá¡ ááá®á¡ááááá áááááááááá¡ áááá£ášáá¡ áááá®áááá"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"á€áá¥á¡ááªááá¡ ááá®á¡ááááá ááá áááá¡ áááá®áááá"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"ááááá¡á¢áááá ááá£ááá áá¥áááá ááááááá¡á¢á áá¢áá áá¡ áááá "</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"ááááá®áááá£ááá áá¥áááá ááááááá¡á¢á áá¢áá áá¡ áááá "</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"á¬ááášááá áá¥áááá ááááááá¡á¢á áá¢áá áá¡ áááá "</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"ááá áá"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"á¡ááá¡áá®á£á á 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"á¡áá¢áá¡á¢á"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"á¡ááá áá"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"ááá áááá¡ áááááá áááááá áááá¡ áááá¢ááá¢á áááááá£ááá á£á¡áá€á áá®ááááá¡ áááááá"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"á¡áá¢áááá¢ááá ááá¢áááá¢á£á áá áááááášáá ááá£ááá"</string>
diff --git a/core/res/res/values-kk/strings.xml b/core/res/res/values-kk/strings.xml
index d1da74e..c5f87b0 100644
--- a/core/res/res/values-kk/strings.xml
+++ b/core/res/res/values-kk/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"СаÑÑÐ°Ò ÑÐ·Ñ ÑаМÑлЌаЎÑ."</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"СаÑÑÐ°Ò ÑÐ·Ñ ÑаМÑлЌаЎÑ."</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"ÐÐµÑ ÑаМÑлЌаЎÑ. ÐÑМÑМа ÑаÑÑÐ°Ò ÑзÑМ пайЎалаМÑÒ£Ñз."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"ÐÐµÑ ÑаМÑлЌаЎÑ. ÐÑМÑМа ÑаÑÑÐ°Ò ÑзÑМ пайЎалаМÑÒ£Ñз."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"СаÑÑÐ°Ò ÑÐ·Ñ Ð°ÑÑеМÑОÑОкаÑОÑлаМЎÑ"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"ÐÐµÑ ÑаМÑлЎÑ"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"ÐÐµÑ ÑаМÑлЎÑ, \"РаÑÑаÑ\" ÑүйЌеÑÑМ баÑÑÒ£Ñз"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"ÐПÑаÑÑ Ð°Ð»ÐŽÑМЎа PIN кПЎÑМ ÑÒ±ÑаÑ"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"ÐПÑаÑÑ Ð°Ð»ÐŽÑМЎа бекÑÑпеÑÑМ аÑÑ Ó©ÑМегÑМ ÑÒ±ÑаÑ"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"ÐПÑаÑÑ Ð°Ð»ÐŽÑМЎа ÒÒ±Ð¿ÐžÑ ÑÓ©Ð·ÐŽÑ ÑÒ±ÑаÑ"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"ÓкÑÐŒÑÑ ÐŸÑМаÑÒаМ"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"ÓкÑÐŒÑÑ Ð¶Ð°Ò£Ð°ÑÑÒаМ"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"ÓкÑÐŒÑÑ Ð¶ÐŸÐ¹ÒаМ"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"ÐаÑайЎÑ"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"ÐұЌÑÑ 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"СÑМаÒ"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"ÐалпÑ"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"ÒаÑÑпÑÑзЎÑк ЌаÒÑаÑÑМЎа ÒПлЎаМба кПМÑеМÑÑ ÑкÑÐ°ÐœÐŽÑ ÐºÓ©ÑÑеÑÑ ÐºÐµÐ·ÑМЎе жаÑÑÑÑлЎÑ."</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"ÐеÑÑеÑÑк ÒÑзЌеÑÑМе авÑПЌаÑÑÑ ÑÒ¯ÑЎе ÒПÑÑлЎÑ"</string>
diff --git a/core/res/res/values-km/strings.xml b/core/res/res/values-km/strings.xml
index 59a6e30..d882e64 100644
--- a/core/res/res/values-km/strings.xml
+++ b/core/res/res/values-km/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"áá·ááááá¶áááááá¶ááááá¶ááááá"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"áá·ááááá¶áááááá¶ááááá¶ááááá"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"áá·áá¢á¶á
ááááá¶áááá»ááá¶áááá ááŒáááááŸáááá¶ááááá¶áááááááœááá·áá"</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"áá·áâáááá¶ááâáá»áááá ááŒáááááŸáááá¶ááááá¶áááááááœááá·áá"</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"áá¶áâáááááâáááá¶ááâáááá¶áâáááá¶ááá"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"áá¶áááááááááá¶ááâáá»á"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"áá¶áááááááááá¶ááâáá»á ááŒáâá
á»á
âááááá¶áá"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"ááœáâááâááŒá PIN áá»áâááááááááá¶áá"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"ááœáâááâáááá¶áâáááâááâáá»áâáááááááááá¶áá"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"ááœáâááâáá¶áááâááááá¶ááâáá»áâáááâáááá¶á
á"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"âááá¡áŸáâáááâá¢ááááááááááááâááááâá¢ááá"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"ááááŸâáá
áá
á»áááááááá¶áâáááâá¢ááááááááááááâááááâá¢ááá"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"áá»áâáááâá¢ááááááááááááâááááâá¢ááá"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"ááááááá"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"áá¶ááá¶áááž 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"áá¶áááááŸâááááá"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"ááŒáá
"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"áá¶ááá¶áááááá¹ááá¶ááááááá·áážáážáá¶ááááá á¶áâá¢ááááááááŸáááážáá»ááááá·áá¶á"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"áááá¶áááááááááááááááááá·áá
áááá¶áááá"</string>
diff --git a/core/res/res/values-kn/strings.xml b/core/res/res/values-kn/strings.xml
index b1a7472..1d9fe73 100644
--- a/core/res/res/values-kn/strings.xml
+++ b/core/res/res/values-kn/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"ಫಿà²à²à²°à³à²ªà³à²°à²¿à²à²à³ à²
ಚà³à²šà³ à²à³à²°à³à²€à²¿à²žà²²à²Ÿà²à²¿à²²à³à²²"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"ಫಿà²à²à²°à³à²ªà³à²°à²¿à²à²à³ à²
ಚà³à²šà³ à²à³à²°à³à²€à²¿à²žà²²à²Ÿà²à²¿à²²à³à²²"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"ಮà³à² à²à³à²°à³à²€à²¿à²žà²²à²Ÿà²à³à²€à³à²€à²¿à²²à³à²² ಬಊಲಿà²à³ ಫಿà²à²à²°à³à²ªà³à²°à²¿à²à²à³ ಬಳಞಿ."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"ಮà³à² à²à³à²°à³à²€à²¿à²žà²²à²Ÿà²à²¿à²²à³à²². ಬಊಲಿà²à³ ಫಿà²à²à²°à³à²ªà³à²°à²¿à²à²à³ ಬಳಞಿ."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"ಫಿà²à²à²°à³à²ªà³à²°à²¿à²à²à³ à²
ಚà³à²šà³ ಪà³à²°à²®à²Ÿà²£à³à²à²°à²£ ಮಟಡಲಟà²à²¿à²Šà³"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"ಮà³à²à²µà²šà³à²šà³ ಊà³à²¢à³à²à²°à²¿à²žà²²à²Ÿà²à²¿à²Šà³"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"ಮà³à²à²µà²šà³à²šà³ ಊà³à²¢à³à²à²°à²¿à²žà²²à²Ÿà²à²¿à²Šà³, ಊà³à²¢à³à²à²°à²£à²µà²šà³à²šà³ à²à²€à³à²€à²¿"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"à²
ಚà³à²ªà²¿à²šà³ ಮಟಡಲೠಪಿಚೠà²à³à²³à³"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"à²
ಚà³à²ªà²¿à²šà³ ಮಟಡಲೠà²
ಚà³à²²à²Ÿà²à³ ಪà³à²¯à²Ÿà²à²°à³à²šà³ à²à³à²³à²¿"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"à²
ಚà³à²ªà²¿à²šà³ ಮಟಡಲೠಪಟಞà³à²µà²°à³à²¡à³ à²à³à²³à³"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"ಚಿಮà³à²® ಚಿರà³à²µà²Ÿà²¹à²à²°à³ ಞà³à²¥à²Ÿà²ªà²¿à²žà²¿à²Šà³à²Šà²Ÿà²°à³"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"ಚಿಮà³à²® ಚಿರà³à²µà²Ÿà²¹à²à²°à²¿à²à²Š à²
ಪà³à²¡à³à²à³ ಮಟಡಲà³à²ªà²à³à²à²¿à²Šà³"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"ಚಿಮà³à²® ಚಿರà³à²µà²Ÿà²¹à²à²°à³ à²
ಳಿಞಿಊà³à²Šà²Ÿà²°à³"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"ಞರಿ"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"à²à³à²²à²ž 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"ಪರà³à²à³à²·à³"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"ಞಮà³à²Šà²Ÿà²¯"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"à²à²Šà³à²°à²€à³à²à²Ÿà²à²¿ ಞà³à²à³à²°à³à²šà³ ಹà²à²à²¿à²à³à²³à³à²³à³à²µà²¿à²à³à²¯à²²à³à²²à²¿ à²à³à²¯à²ªà³ à²à²à²à³à²à²à³ à²
ಚà³à²šà³ ಮರà³à²®à²Ÿà²¡à²²à²Ÿà²à²¿à²Šà³"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"ಞà³à²¯à²Ÿà²à²²à³à²à³à²à³ ಞà³à²µà²¯à²à²à²Ÿà²²à²¿à²€à²µà²Ÿà²à²¿ à²à²šà³à²à³à²à³ à²à²à²¿à²Šà³"</string>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index baa2604..94dec8d 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"ì§ë¬žìŽ ìžìëì§ ìììµëë€."</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"ì§ë¬žì ìžìí ì ììµëë€."</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"ìŒêµŽì ìžìí ì ììµëë€. ëì ì§ë¬žì ì¬ì©íìžì."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"ìŒêµŽì ìžìí ì ììµëë€. ëì ì§ë¬žì ì¬ì©íìžì."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"ì§ë¬žìŽ ìžìŠëš"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"ìŒêµŽìŽ ìžìŠëììµëë€"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"ìŒêµŽìŽ ìžìŠëììµëë€. íìžì ë륎ìžì"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"ê³ ì íŽì ìŽì ì PIN ìì²"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"ê³ ì íŽì ì ì êž íŽì íšíŽ ìì²"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"ê³ ì íŽì ìŽì ì ë¹ë°ë²íž ìì²"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"êŽëЬìì ìíŽ ì€ì¹ëììµëë€."</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"êŽëЬìì ìíŽ ì
ë°ìŽížëììµëë€."</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"êŽëЬìì ìíŽ ìì ëììµëë€."</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"íìž"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"ì§ì¥ 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"í
ì€íž"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"ê³µë"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"볎ìì ìíŽ í멎 ê³µì ìì ì± ìœí
ìž ê° ìšê²šì§ëë€."</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"ìì±ì ìë ì°ê²°ëš"</string>
diff --git a/core/res/res/values-ky/strings.xml b/core/res/res/values-ky/strings.xml
index f02b58c..b1c819c 100644
--- a/core/res/res/values-ky/strings.xml
+++ b/core/res/res/values-ky/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"ÐаМжа ОзО ÑааМÑлгаМ жПк"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"ÐаМжа ОзО ÑааМÑлгаМ жПк"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Ðүз ÑааМÑлбай жаÑаÑ. ÐаМжа ОзОМ кПлЎПМÑÒ£Ñз."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Ðүз ÑааМÑлгаМ жПк. ÐаМжа ОзОМ кПлЎПМÑÒ£Ñз."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"ÐаМжа ОзО ÑекÑеÑОлЎО"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"ÐүзЎүМ аМÑкÑÑÐ³Ñ ÑекÑеÑОлЎО"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"ÐүзЎүМ аМÑкÑÑÐ³Ñ ÑекÑеÑОлЎО, ÑЌО \"ЫÑаÑÑППМÑ\" баÑÑÒ£Ñз"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"ÐПÑПÑÑÑЎаМ ÐŒÑÑÑМ PIN ÑÑÑалÑÑМ"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"ÐПÑПÑÑÑЎаМ ÐŒÑÑÑМ гÑаÑОкалÑк аÑкÑÑ ÑÑÑалÑÑМ"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"ÐПÑПÑÑÑЎаМ ÐŒÑÑÑМ ÑÑÑÑөз ÑÑÑалÑÑМ"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"ÐЎЌОМОÑÑÑаÑПÑÑÒ£Ñз ПÑМПÑÑп кПйгПМ"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"ÐЎЌОМОÑÑÑаÑПÑÑÒ£Ñз жаңÑÑÑÑп кПйгПМ"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"ÐЎЌОМОÑÑÑаÑПÑÑÒ£Ñз жПк кÑлÑп ÑалгаМ"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"ÐÐÐ ÐÐТ"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"ÐÑÐŒÑÑ 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"СÑМПП"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"ÐалпÑ"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"ÐППпÑÑзЎÑк Ò¯ÑүМ ÐºÐŸÐ»ÐŽÐŸÐœÐŒÐŸÐŽÐŸÐ³Ñ ÐºÐŸÐœÑÐµÐœÑ Ð±Ó©Ð»Ò¯ÑүлгөМ ÑкÑаМЎаМ жаÑÑÑÑлЎÑ"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"СпÑÑМОкке авÑПЌаÑÑÑк ÑÒ¯ÑÐŽÓ© ÑÑÑаÑÑÑÑÑлгаМ"</string>
diff --git a/core/res/res/values-lo/strings.xml b/core/res/res/values-lo/strings.xml
index e94f2d3..9c514bb 100644
--- a/core/res/res/values-lo/strings.xml
+++ b/core/res/res/values-lo/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"àºà»à»àº®àº¹à»àºàº±àºàº¥àº²àºàºàºŽà»àº§àº¡àº·"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"àºà»à»àº®àº¹à»àºàº±àºàº¥àº²àºàºàºŽà»àº§àº¡àº·"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"àºà»à»àºªàº²àº¡àº²àºàºàº³à»àºàºà»à»àº²à»àºà». àºàº°àº¥àºžàºàº²à»àºà»àº¥àº²àºàºàºŽà»àº§àº¡àº·à»àºàº."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"àºà»à»àºªàº²àº¡àº²àºàºàº³à»àºàºà»à»àº²à»àºà». à»àºà»àº¥àº²àºàºàºŽà»àº§àº¡àº·à»àºàº."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"àºàºŽàºªàº¹àºàº¢àº·àºàº¢àº±àºàº¥àº²àºàºàºŽà»àº§àº¡àº·à»àº¥à»àº§"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"àºàºŽàºªàº¹àºàº¢àº·àºàº¢àº±àºà»àºà»à»àº²à»àº¥à»àº§"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"àºàºŽàºªàº¹àºàº¢àº·àºàº¢àº±àºà»àºà»à»àº²à»àº¥à»àº§, àºàº°àº¥àºžàºàº²àºàº»àºàº¢àº·àºàº¢àº±àº"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"âàºàº²àº¡âຫາ PIN àºà»àºàºâàºàº»àºâà»àº¥àºµàºâàºàº²àºàºàº±àºâà»àºžàº"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"âàºàº²àº¡âຫາâຮູàºâà»àºàºâàºàº»àºâລັàºàºâàºà»àºàºâàºàº»àºâà»àº¥àºµàºâàºàº²àºâàºàº±àºâà»àºžàº"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"âàºàº²àº¡âຫາâລະâຫັàºâàºà»àº²àºâàºà»àºàºâàºàº»àºâà»àº¥àºµàºâàºàº²àºâàºàº±àºâà»àºžàº"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"àºàº·àºàºàºŽàºàºàº±à»àºà»àºàºàºàº¹à»à»àºàºŽà»àºà»àºàºàº¥àº°àºàº»àºàºàºàºàºà»àº²àº"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"àºàº·àºàºàº±àºà»àº«àº¥àºà»àºàºàºàº¹à»à»àºàºŽà»àºà»àºàºàº¥àº°àºàº»àºàºàºàºàºà»àº²àº"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"àºàº·àºàº¥àº¶àºàºàºàºà»àºàºàºàº¹à»à»àºàºŽà»àºà»àºàºàº¥àº°àºàº»àºàºàºàºàºà»àº²àº"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"àºàº»àºàº¥àº»àº"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"ວຜຠ3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"àºàº»àºàºªàºàº"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"ສà»àº§àºàºàº²àº"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"à»àºàº·à»àºàº«àº²à»àºàº±àºàºàº·àºà»àºàº·à»àºàºà»àº§à»àºàº²àºàºàº²àºà»àºà»àºàºàº±àºà»à»àº²àºà»à»àºàº·à»àºàºàº§àº²àº¡àºàºàºà»àº"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"à»àºàº·à»àºàº¡àºà»à»àºàº±àºàºàº²àº§àºàºœàº¡à»àºàºàºàº±àºàºàº°à»àºàº¡àº±àº"</string>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index da46662..34aecab 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -664,7 +664,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Piršto atspaudas neatpaÅŸintas"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Piršto atspaudas neatpaÅŸintas"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Veidas neatpaÅŸintas. Naudokite kontrolinį kodÄ
."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Veidas neatpaÅŸintas. Naudokite piršto atspaudÄ
."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"Piršto antspaudas autentifikuotas"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Veidas autentifikuotas"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Veidas autentifikuotas, paspauskite patvirtinimo mygtukÄ
"</string>
@@ -1898,7 +1898,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"Prašyti PIN kodo prieš atsegant"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"Prašyti atrakinimo piešinio prieš atsegant"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"Prašyti slaptaÅŸodÅŸio prieš atsegant"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Ä®diegÄ administratorius"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"Atnaujino administratorius"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"IštrynÄ administratorius"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"Gerai"</string>
@@ -2395,6 +2396,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"Darbas (3)"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Bandymas"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"BendruomenÄs"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"Programos turinys paslÄptas bendrinant ekranÄ
saugumo sumetimais"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"Automatiškai prisijungta prie palydovinio ryšio"</string>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index 9fcf2d1..1c1918f 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -663,7 +663,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Pirksta nospiedums netika atpazīts"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Pirksta nospiedums netika atpazīts"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Nevar atpazīt seju. Lietojiet pirksta nospiedumu."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Seja nav atpazīta. Lietojiet pirksta nospiedumu."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"Pirksta nospiedums tika autentificÄts."</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Seja autentificÄta"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Seja ir autentificÄta. Nospiediet pogu ApstiprinÄt."</string>
@@ -1897,7 +1897,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"PrasÄ«t PIN kodu pirms atspraušanas"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"Pirms atspraušanas pieprasÄ«t atbloÄ·Äšanas kombinÄciju"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"Pirms atspraušanas pieprasÄ«t paroli"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"InstalÄja administrators"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"AtjauninÄja administrators"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"DzÄsa administrators"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"Labi"</string>
@@ -2394,6 +2395,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"Darbam (3.)"</string>
<string name="profile_label_test" msgid="9168641926186071947">"TestÄšanai"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Kopīgs"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"DrošÄ«bas nolÅ«kos lietotnes saturs kopÄ«gotajÄ ekrÄnÄ ir paslÄpts"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"AutomÄtiski izveidots savienojums ar satelÄ«tu"</string>
diff --git a/core/res/res/values-mk/strings.xml b/core/res/res/values-mk/strings.xml
index 9b2b6ab..f347c7e 100644
--- a/core/res/res/values-mk/strings.xml
+++ b/core/res/res/values-mk/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"ÐÑпеÑаÑÐŸÐºÐŸÑ ÐœÐµ е пÑепПзМаеМ"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"ÐÑпеÑаÑÐŸÐºÐŸÑ ÐœÐµ е пÑепПзМаеМ"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Ðе Ñе пÑепПзМава лОкПÑ. ÐПÑОÑÑеÑе ПÑпеÑаÑПк."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"ÐÐžÐºÐŸÑ ÐœÐµ е пÑепПзМаеМ. ÐПÑОÑÑеÑе ПÑпеÑаÑПк."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"ÐÑпеÑаÑÐŸÐºÐŸÑ Ðµ пÑПвеÑеМ"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"ÐОÑеÑП е пÑПвеÑеМП"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"ÐОÑеÑП е пÑПвеÑеМП, пÑОÑОÑМеÑе гП кПпÑеÑП „ÐПÑвÑЎО“"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"ÐПбаÑÐ°Ñ PIN пÑеЎ ПÑкаÑÑваÑе"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"ÐПбаÑÐ°Ñ ÑеЌа за ПÑкл. пÑеЎ ПÑкаÑÑваÑе"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"ÐПбаÑÐ°Ñ Ð»ÐŸÐ·ÐžÐœÐºÐ° пÑеЎ ПÑкаÑÑваÑе"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"ÐМÑÑалОÑаМП ПЎ аЎЌОМОÑÑÑаÑПÑПÑ"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"ÐжÑÑОÑаМП ПЎ аЎЌОМОÑÑÑаÑПÑПÑ"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"ÐзбÑОÑаМП ПЎ аЎЌОМОÑÑÑаÑПÑПÑ"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"ÐП ÑеЎ"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"РабПÑеМ пÑПÑОл 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"ÐÑПÑОл за ÑеÑÑОÑаÑе"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"ÐÑПÑОл Ма заеЎМОÑаÑа"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"ÐÐŽ безбеЎМПÑМО пÑОÑОМО, ÑПЎÑжОМОÑе Ма аплОкаÑОÑаÑа Ñе ÑкÑОеМО ПЎ ÑпПЎелÑваÑеÑП екÑаМ"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"ÐПвÑзаМП ÑП ÑаÑÐµÐ»ÐžÑ Ð°Ð²ÑПЌаÑÑкО"</string>
diff --git a/core/res/res/values-ml/strings.xml b/core/res/res/values-ml/strings.xml
index 44af8b6..7002f3ce 100644
--- a/core/res/res/values-ml/strings.xml
+++ b/core/res/res/values-ml/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"àŽ«àŽ¿àŽàŽàµŒàŽªàµàŽ°àŽ¿àŽšàµàŽ±àµ àŽ€àŽ¿àŽ°àŽ¿àŽàµàŽàŽ±àŽ¿àŽàµàŽàŽ¿àŽ²àµà޲"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"àŽ«àŽ¿àŽàŽàµŒàŽªàµàŽ°àŽ¿àŽšàµàŽ±àµ àŽ€àŽ¿àŽ°àŽ¿àŽàµàŽàŽ±àŽ¿àŽàµàŽàŽ¿àŽ²àµà޲"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"àŽ®àµàŽàŽ àŽ€àŽ¿àŽ°àŽ¿àŽàµàŽàŽ±àŽ¿àŽ¯àŽŸàŽšàŽŸàŽ¯àŽ¿àŽ²àµà޲. àŽªàŽàŽ°àŽ àŽ«àŽ¿àŽàŽàµŒàŽªàµàŽ°àŽ¿àŽšàµàŽ±àµ àŽàŽªàŽ¯àµàŽàŽ¿àŽàµàŽàµ."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"àŽ®àµàŽàŽ àŽ€àŽ¿àŽ°àŽ¿àŽàµàŽàŽ±àŽ¿àŽàµàŽàŽ¿àŽàµàŽàŽ¿àŽ²àµà޲. àŽªàŽàŽ°àŽ àŽ«àŽ¿àŽàŽàµŒàŽªàµàŽ°àŽ¿àŽšàµàŽ±àµ àŽàŽªàŽ¯àµàŽàŽ¿àŽàµàŽàµ."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"àŽ«àŽ¿àŽàŽàµŒàŽªàµàŽ°àŽ¿àŽšàµàŽ±àµ àŽªàŽ°àŽ¿àŽ¶àµàŽ§àŽ¿àŽàµàŽàµàŽ±àŽªàµàŽªàŽ¿àŽàµàŽàµ"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"àŽ®àµàŽàŽ àŽªàŽ°àŽ¿àŽ¶àµàŽ§àŽ¿àŽàµàŽàµàŽ±àŽªàµàŽªàŽ¿àŽàµàŽàµ"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"àŽ®àµàŽàŽ àŽªàŽ°àŽ¿àŽ¶àµàŽ§àŽ¿àŽàµàŽàµàŽ±àŽªàµàŽªàŽ¿àŽàµàŽàµ, àŽžàµàŽ¥àŽ¿àŽ°àµàŽàŽ°àŽ¿àŽàµàŽàµàŽ àŽ
àŽ®àµŒàŽ€àµàŽ€àµàŽ"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"àŽàµàޝàµàޝàµàŽàŽ®àµàŽ®àµàŽªàµ àŽªàŽ¿àµ» àŽàµàŽŠàŽ¿àŽàµàŽàµ"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"àŽ
àµºàŽªàŽ¿àŽšàµàŽšàŽ¿àŽšàµàŽ®àµàŽ®àµàŽªàµ àŽ
àµºàŽ²àµàŽàµàŽàµ àŽªàŽŸàŽ±àµàޱàµàµº àŽàŽµàŽ¶àµàŽ¯àŽªàµàŽªàµàŽàµ"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"àŽ
àµºàŽªàŽ¿àŽšàµàŽšàŽ¿àŽšàµàŽ®àµàŽ®àµàŽªàµ àŽªàŽŸàŽžàµà޵àµàŽ¡àµ àŽàŽµàŽ¶àµàŽ¯àŽªàµàŽªàµàŽàµ"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"àŽšàŽ¿àŽàµàŽà޳àµàŽàµ àŽ
àŽ¡àµàŽ®àŽ¿àµ» àŽàµ»àŽžàµàޱàµàŽ±àŽŸàµŸ àŽàµàޝàµàޝàµàŽšàµàŽšàŽ€àµ"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"àŽšàŽ¿àŽàµàŽà޳àµàŽàµ àŽ
àŽ¡àµàŽ®àŽ¿àµ» àŽ
àŽªàµàŽ¡àµàޱàµàŽ±àµ àŽàµàޝàµàޝàµàŽšàµàŽšàŽ€àµ"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"àŽšàŽ¿àŽàµàŽà޳àµàŽàµ àŽ
àŽ¡àµàŽ®àŽ¿àµ» àŽà޲àµàŽ²àŽŸàŽ€àŽŸàŽàµàŽàµàŽšàµàŽšàŽ€àµ"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"àŽ¶àŽ°àŽ¿"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"àŽàŽŠàµàޝàµàŽàŽ¿àŽàŽ 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"àŽàµàŽžàµàޱàµàޱàµ"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"àŽàŽ®àµàŽ®àµàޝàµàŽ£àµœ"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"àŽàŽªàµàŽªàµ àŽà޳àµà޳àŽàŽàµàŽàŽ, àŽ
àŽ€àŽ¿àŽšàµàŽ±àµ àŽžàµàްàŽàµàŽ·àŽ¯àµàŽàµàŽàŽŸàŽ¯àŽ¿ àŽžàµàŽàµàްàµàµ» àŽªàŽàµàŽàŽ¿àŽàŽ²àŽ¿àµœ àŽšàŽ¿àŽšàµàŽšàµ àŽ®àŽ±àŽàµàŽàŽ¿àŽ°àŽ¿àŽàµàŽàµàŽšàµàŽšàµ"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"àŽžàŽŸàŽ±àµàŽ±àŽ²àµàޱàµàŽ±àŽ¿àŽ²àµàŽàµàŽàµ àŽžàµàŽµàŽ¯àŽ®àµà޵ àŽàŽ£àŽàµàޱàµàŽ±àµ àŽàµàޝàµàŽ€àµ"</string>
diff --git a/core/res/res/values-mn/strings.xml b/core/res/res/values-mn/strings.xml
index beda8ee..437cced 100644
--- a/core/res/res/values-mn/strings.xml
+++ b/core/res/res/values-mn/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Ð¥ÑÑÑÑÐœÑ Ñ
ÑÑг ÑаМÑÑаМгүй"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Ð¥ÑÑÑÑÐœÑ Ñ
ÑÑг ÑаМÑÑаМгүй"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"ЊаÑай ÑаМОÑ
бПлПЌжгүй. ÐÑПМЎ ÐœÑ Ñ
ÑÑÑÑÐœÑ Ñ
ÑÑ Ð°ÑОгла"</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"ЊаÑайг ÑаМÑÑаМгүй. ÐÑПМЎ ÐœÑ Ñ
ÑÑÑÑÐœÑ Ñ
ÑÑ Ð°ÑОгла."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"Ð¥ÑÑÑÑÐœÑ Ñ
ÑÑг МПÑПлÑПМ"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"ЊаÑайг баÑалгаажÑÑллаа"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"ЊаÑайг баÑалгаажÑÑллаа. ÐаÑалгаажÑÑлаÑ
ÑПвÑлÑÑÑÑг ЎаÑМа ÑÑ"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"ÐÑÑ
ÑлÑМОйг бПлОÑлаÑ
ааÑаа өЌМө ÐÐРаÑÑÑÑ
"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"ÐÑÑ
ÑлÑМОйг бПлОÑлаÑ
Ð°Ð°Ñ Ó©ÐŒÐœÓ© ÑүгжÑÑ ÑайлаÑ
Ñ
ÑÑ Ð°ÑÑÑÑ
"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"ТПгÑППÑМÑг ÑÑллаÑ
Ð°Ð°Ñ Ó©ÐŒÐœÓ© МÑÑÑ Ò¯Ð³ аÑÑÑÑ
"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Ð¢Ð°ÐœÑ Ð°ÐŽÐŒÐžÐœ ÑÑÑлгаÑаМ"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"Ð¢Ð°ÐœÑ Ð°ÐŽÐŒÐžÐœ ÑОМÑÑОлÑÑМ"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Ð¢Ð°ÐœÑ Ð°ÐŽÐŒÐžÐœ ÑÑÑгаÑаМ"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"ÐÐ"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"ÐжОл 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"ТÑÑÑОлÑ"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"ÐОйÑОйМ"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"ÐÑÑлгүй байЎлÑМ ÑÐ»ÐŒÐ°Ð°Ñ Ð°Ð¿Ð¿ÑМ кПМÑеМÑÑг ÐŽÑлгÑÑ Ñ
ÑваалÑаÑ
Ð°Ð°Ñ ÐœÑÑÑаМ"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"ХОйЌÑл ЎагÑÑлЎ авÑПЌаÑÐ°Ð°Ñ Ñ
ПлбПгЎÑПМ"</string>
diff --git a/core/res/res/values-mr/strings.xml b/core/res/res/values-mr/strings.xml
index 9d72fcd..3d6aff2 100644
--- a/core/res/res/values-mr/strings.xml
+++ b/core/res/res/values-mr/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"à€«à€¿à€à€à€°à€ªà¥à€°à€¿à€à€ à€à€³à€à€²à¥ à€šà€Ÿà€¹à¥"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"à€«à€¿à€à€à€°à€ªà¥à€°à€¿à€à€ à€à€³à€à€²à¥ à€šà€Ÿà€¹à¥"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"à€à¥à€¹à€°à€Ÿ à€à€³à€à¥ à€¶à€à€€ à€šà€Ÿà€¹à¥. à€€à¥à€¯à€Ÿà€à€µà€à¥ à€«à€¿à€à€à€°à€ªà¥à€°à€¿à€à€ à€µà€Ÿà€ªà€°à€Ÿ."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"à€à¥à€¹à€°à€Ÿ à€à€³à€à€€à€Ÿ à€à€²à€Ÿ à€šà€Ÿà€¹à¥. à€€à¥à€¯à€Ÿà€à€µà€à¥ à€«à€¿à€à€à€°à€ªà¥à€°à€¿à€à€ à€µà€Ÿà€ªà€°à€Ÿ."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"à€«à€¿à€à€à€°à€ªà¥à€°à€¿à€à€ à€à€¥à¥à€à€à€¿à€à¥à€ à€à¥à€²à¥ à€à€¹à¥"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"à€à¥à€¹à€°à€Ÿ à€à€¥à¥à€à€à€¿à€à¥à€¶à€š à€à¥à€²à¥à€²à€Ÿ à€à€¹à¥"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"à€à¥à€¹à€°à€Ÿ à€à€¥à¥à€à€à€¿à€à¥à€¶à€š à€à¥à€²à¥à€²à€Ÿ à€à€¹à¥, à€à¥à€ªà€¯à€Ÿ à€à€šà¥à€«à€°à¥à€® à€ªà¥à€°à¥à€ž à€à€°à€Ÿ"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"à€
à€šà€ªà€¿à€š à€à€°à€£à¥à€¯à€Ÿà€ªà¥à€°à¥à€µà¥ à€ªà€¿à€š à€µà€¿à€à€Ÿà€°à€Ÿ"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"à€
à€šà€ªà€¿à€š à€à€°à€£à¥à€¯à€Ÿà€ªà¥à€°à¥à€µà¥ à€
à€šà€²à¥à€ à€šà€®à¥à€šà¥à€¯à€Ÿà€žà€Ÿà€ à¥ à€µà€¿à€à€Ÿà€°à€Ÿ"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"à€
à€šà€ªà€¿à€š à€à€°à€£à¥à€¯à€Ÿà€ªà¥à€°à¥à€µà¥ à€žà€à€à¥à€€à€¶à€¬à¥à€Šà€Ÿà€žà€Ÿà€ à¥ à€µà€¿à€à€Ÿà€°à€Ÿ"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"à€à€ªà€²à¥à€¯à€Ÿ à€ªà¥à€°à€¶à€Ÿà€žà€à€Ÿà€šà¥ à€à€à€žà¥à€à¥à€² à€à¥à€²à¥"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"à€à€ªà€²à¥à€¯à€Ÿ à€ªà¥à€°à€¶à€Ÿà€žà€à€Ÿà€šà¥ à€
à€ªà€¡à¥à€ à€à¥à€²à¥"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"à€à€ªà€²à¥à€¯à€Ÿ à€ªà¥à€°à€¶à€Ÿà€žà€à€Ÿà€šà¥ à€¹à€à€µà€²à¥"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"à€à€à¥"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"à€à€«à€¿à€ž ३"</string>
<string name="profile_label_test" msgid="9168641926186071947">"à€à€Ÿà€à€£à¥"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"à€žà€Ÿà€®à¥à€Šà€Ÿà€¯à€¿à€"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"à€žà¥à€à¥à€°à¥à€š à€¶à¥à€
à€° à€à€°à€€à€Ÿà€šà€Ÿ à€žà¥à€°à€à¥à€·à¥à€žà€Ÿà€ ॠà€
à¥
à€ªà€®à€§à¥à€² à€à€¶à€¯ à€²à€ªà€µà€²à€Ÿ à€à€¹à¥"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"à€à€ªà€à¥à€°à€¹à€Ÿà€¶à¥ à€à€ªà¥à€à€ª à€à€šà¥à€à¥à€ à€à¥à€²à¥à€²à¥ à€à€¹à¥"</string>
diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml
index 674eac3..da4a793 100644
--- a/core/res/res/values-ms/strings.xml
+++ b/core/res/res/values-ms/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Cap jari tidak dikenali"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Cap jari tidak dikenali"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Tidak mengenali wajah. Gunakan cap jari."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Wajah tidak dikenali. Gunakan cap jari."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"Cap jari disahkan"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Wajah disahkan"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Wajah disahkan, sila tekan sahkan"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"Minta PIN sebelum menyahsemat"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"Minta corak buka kunci sebelum menyahsemat"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"Minta kata laluan sebelum menyahsemat"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Dipasang oleh pentadbir anda"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"Dikemas kini oleh pentadbir anda"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Dipadamkan oleh pentadbir anda"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"Kerja 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Ujian"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Umum"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"Kandungan apl disembunyikan daripada perkongsian skrin untuk keselamatan"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"Disambungkan secara automatik kepada satelit"</string>
diff --git a/core/res/res/values-my/strings.xml b/core/res/res/values-my/strings.xml
index 030633b..d3fbd52 100644
--- a/core/res/res/values-my/strings.xml
+++ b/core/res/res/values-my/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"áááºááœá±ááᯠáááááŸááá«"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"áááºááœá±ááᯠáááááŸááá«"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"áá»ááºááŸá¬ááᯠáááŸááºáááá«á áááºááœá±ááᯠá¡á
á¬ážááá¯ážáá¯á¶ážáá«á"</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"áá»ááºááŸá¬ááᯠáááŸááºáááá«á áááºážá¡á
á¬áž áááºááœá±áá¯á¶ážáá«á"</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"áááºááœá±ááᯠá¡áá±á¬ááºá¡áá¬áž á
áá
á
áºááŒá®ážáá«ááŒá®"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"áá»ááºááŸá¬ á¡áá±á¬ááºá¡áá¬ážá
áá
á
áºááŒá®ážááŒá®"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"áá»ááºááŸá¬ á¡áá±á¬ááºá¡áá¬ážá
áá
á
áºááŒá®ážááŒá®á á¡áááºááŒá¯áááºááᯠááŸáááºáá«"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"áááºáááŒá¯ááºáá®ááŸá¬ PIN ááᯠáá±ážááŒáá·áºáááº"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"áááºáááŒá¯ááºáá® áá±á¬á·ááºááœáá·áºáá¯á¶á
á¶ááᯠáá±ážáááº"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"áááºáááŒá¯ááºáá®ááŸá¬ á
áá¬ážááŸááºááᯠáá±ážááŒáá·áºáááº"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"áááºá á
á®áá¶ááá·áºááœá²áá°á ááá·áºááœááºážáá¬ážáááº"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"áááºá á
á®áá¶ááá·áºááœá²áá°á á¡ááºááááºáá¯ááºáá¬ážáááº"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"áááºá á
á®áá¶ááá·áºááœá²áá°á áá»ááºááá¯ááºáá«ááŒá®"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"á¡áá¯áẠá"</string>
<string name="profile_label_test" msgid="9168641926186071947">"á
ááºážáááºááŸá¯"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"á¡áá»á¬ážáá¯á¶áž"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"á¡ááºááºá¡ááŒá±á¬ááºážá¡áá¬ááẠáá¯á¶ááŒá¯á¶áá±ážá¡ááœáẠáá»ááºááŸá¬ááŒáẠáá»áŸáá±ááŒááºážá០áá»á±á¬ááºáá¬ážáááº"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"ááŒáá¯ááºáá¯ááŸáá·áº á¡ááá¯á¡áá»á±á¬áẠáá»áááºáááºáá¬ážáááº"</string>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index b380199..247c21b 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Gjenkjenner ikke fingeravtrykket"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Gjenkjenner ikke fingeravtrykket"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Ansiktet gjenkjennes ikke. Bruk fingeravtrykk."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Ansiktet ble ikke gjenkjent. Bruk fingeravtrykk."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"Fingeravtrykket er godkjent"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Ansiktet er autentisert"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Ansiktet er autentisert. Trykk på Bekreft"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"Krev PIN-kode for å løsne app"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"Krev opplåsingsmønster for å løsne apper"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"Krev passord for å løsne apper"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Installert av administratoren din"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"Oppdatert av administratoren din"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Slettet av administratoren din"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"Jobb 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Felles"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"Av sikkerhetsgrunner er appinnholdet skjult for skjermdelingen"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"Automatisk tilkoblet satellitt"</string>
diff --git a/core/res/res/values-ne/strings.xml b/core/res/res/values-ne/strings.xml
index a486797..85a5118 100644
--- a/core/res/res/values-ne/strings.xml
+++ b/core/res/res/values-ne/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"à€«à€¿à€à€à€°à€ªà¥à€°à€¿à€šà¥à€ à€ªà€¹à€¿à€à€Ÿà€š à€à€°à¥à€š à€žà€à€¿à€à€š"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"à€«à€¿à€à€à€°à€ªà¥à€°à€¿à€šà¥à€ à€ªà€¹à€¿à€à€Ÿà€š à€à€°à¥à€š à€žà€à€¿à€à€š"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"à€
à€šà¥à€¹à€Ÿà€° à€ªà€¹à€¿à€à€Ÿà€š à€à€°à¥à€š à€žà€à€¿à€à€šà¥€ à€¬à€°à¥ à€«à€¿à€à€à€°à€ªà¥à€°à€¿à€šà¥à€ à€ªà¥à€°à€¯à¥à€ à€à€°à¥à€šà¥à€¹à¥à€žà¥à¥€"</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"à€
à€šà¥à€¹à€Ÿà€° à€ªà€¹à€¿à€à€Ÿà€š à€à€°à¥à€š à€žà€à€¿à€à€šà¥€ à€¬à€°à¥ à€«à€¿à€à€à€°à€ªà¥à€°à€¿à€šà¥à€ à€ªà¥à€°à€¯à¥à€ à€à€°à¥à€šà¥à€¹à¥à€žà¥à¥€"</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"à€«à€¿à€à€à€°à€ªà¥à€°à€¿à€šà¥à€ à€ªà¥à€°à€®à€Ÿà€£à¥à€à€°à€£ à€à€°à€¿à€¯à¥"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"à€
à€šà¥à€¹à€Ÿà€° à€ªà¥à€°à€®à€Ÿà€£à¥à€à€°à€£ à€à€°à€¿à€¯à¥"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"à€
à€šà¥à€¹à€Ÿà€° à€ªà¥à€°à€®à€Ÿà€£à¥à€à€°à€£ à€à€°à€¿à€¯à¥, à€à¥à€ªà€¯à€Ÿ à€ªà¥à€·à¥à€à€¿ à€à€°à¥à€šà¥à€¹à¥à€žà¥ à€¥à€¿à€à¥à€šà¥à€¹à¥à€žà¥"</string>
@@ -1529,7 +1529,7 @@
<string name="vpn_text_long" msgid="278540576806169831">"<xliff:g id="SESSION">%s</xliff:g>à€žà€à€ à€à¥à€¡à€¿à€à€à¥à¥€ à€šà¥à€à€µà€°à¥à€ à€ªà¥à€°à€¬à€šà¥à€§ à€à€°à¥à€š à€¹à€Ÿà€šà¥à€šà¥à€¹à¥à€žà¥à¥€"</string>
<string name="vpn_lockdown_connecting" msgid="6096725311950342607">"VPN à€à€¡à€Ÿà€š à€žà€§à¥ à€à¥à€¡à¥à€Šà¥…"</string>
<string name="vpn_lockdown_connected" msgid="2853127976590658469">"à€žà€§à¥à€ à€à¥à€²à¥à€²à€Ÿ à€¹à¥à€šà¥ VPN à€à¥à€¡à€¿à€à€à¥"</string>
- <string name="vpn_lockdown_disconnected" msgid="5573611651300764955">"à€žà€§à¥à€-à€žà€à¥à€°à€¿à€¯ à€°à€¹à€šà¥ VPN à€žà¥à€µà€Ÿà€¬à€Ÿà€ à€µà€¿à€à¥à€à¥à€Š à€à€°à€¿à€¯à¥"</string>
+ <string name="vpn_lockdown_disconnected" msgid="5573611651300764955">"à€žà€§à¥à€-à€žà€à¥à€°à€¿à€¯ à€°à€¹à€šà¥ VPN à€žà¥à€µà€Ÿà€¬à€Ÿà€ à€¡à€¿à€žà¥à€à€šà¥à€à¥à€ à€à€°à€¿à€¯à¥"</string>
<string name="vpn_lockdown_error" msgid="4453048646854247947">"à€žà€§à¥à€ à€žà€à¥à€°à€¿à€¯ à€°à€¹à€šà¥ VPN à€žà¥à€µà€Ÿà€®à€Ÿ à€à€¡à€Ÿà€š à€à€°à¥à€š à€žà€à€¿à€à€š"</string>
<string name="vpn_lockdown_config" msgid="8331697329868252169">"à€šà¥à€à€µà€°à¥à€ à€µà€Ÿ VPN à€žà€®à¥à€¬à€šà¥à€§à¥ à€žà¥à€à€¿à€à€¹à€°à¥ à€ªà€°à€¿à€µà€°à¥à€€à€š à€à€°à¥à€šà¥à€¹à¥à€žà¥"</string>
<string name="upload_file" msgid="8651942222301634271">"à€«à€Ÿà€à€² à€à€Ÿà€šà¥à€šà¥à€¹à¥à€žà¥"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"à€
à€šà€ªà€¿à€š à€à€°à¥à€šà¥à€
à€à€¿ PIN à€®à€Ÿà€à€¿à€¯à¥à€žà¥"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"à€
à€šà€ªà€¿à€š à€à€°à¥à€šà€
à€à€¿ à€
à€šà€²à€ à€ªà¥à€¯à€Ÿà€à€°à¥à€š à€®à€Ÿà€à¥à€šà¥à€¹à¥à€žà¥"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"à€ªà€¿à€š à€šà€¿à€à€Ÿà€²à¥à€šà¥à€
à€à€¿ à€ªà€Ÿà€žà€µà€°à¥à€¡ à€žà¥à€§à¥à€šà¥à€¹à¥à€žà¥"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"à€€à€ªà€Ÿà€à€à€à€Ÿ à€ªà¥à€°à€¶à€Ÿà€žà€à€²à¥ à€žà¥à€¥à€Ÿà€ªà€šà€Ÿ à€à€°à¥à€šà¥à€à€à€à¥"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"à€€à€ªà€Ÿà€à€à€à€Ÿ à€ªà¥à€°à€¶à€Ÿà€žà€à€²à¥ à€
à€Šà¥à€¯à€Ÿà€µà€§à€¿à€ à€à€°à¥à€šà¥à€à€à€à¥"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"à€€à€ªà€Ÿà€à€à€à€Ÿ à€ªà¥à€°à€¶à€Ÿà€žà€à€²à¥ à€®à¥à€à¥à€šà¥à€à€à€à¥"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"à€ à€¿à€ à€"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"à€à€Ÿà€°à¥à€¯ à€ªà¥à€°à¥à€«à€Ÿà€à€² ३"</string>
<string name="profile_label_test" msgid="9168641926186071947">"à€ªà€°à¥à€à¥à€·à€£"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"à€žà€Ÿà€®à¥à€Šà€Ÿà€¯à€¿à€"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"à€žà¥à€à¥à€°à€¿à€š à€žà¥à€¯à€° à€à€°à¥à€Šà€Ÿ à€žà¥à€°à€à¥à€·à€Ÿà€à€Ÿ à€²à€Ÿà€à€¿ à€à€ªà€®à€Ÿ à€à€à€à¥ à€žà€Ÿà€®à€à¥à€°à¥ à€²à¥à€à€Ÿà€à€à€à¥ à€"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"à€žà¥à€¯à€Ÿà€à€²à€Ÿà€à€à€®à€Ÿ à€žà¥à€µà€€à€ à€à€šà¥à€à¥à€ à€à€°à€¿à€¯à¥"</string>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index d484405..52884fb 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Vingerafdruk niet herkend"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Vingerafdruk niet herkend"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Gezicht niet herkend. Gebruik je vingerafdruk."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Gezicht niet herkend. Gebruik je vingerafdruk."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"Vingerafdruk geverifieerd"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Gezicht geverifieerd"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Gezicht geverifieerd. Druk op Bevestigen."</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"Vraag pin voor losmaken"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"Ontgrendelingspatroon vragen om app los te maken"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"Vraag wachtwoord voor losmaken"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Geïnstalleerd door je beheerder"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"Geüpdatet door je beheerder"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Verwijderd door je beheerder"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"Werk 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Gemeenschappelijk"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"App-content verborgen voor scherm delen vanwege beveiligingsrisico\'s"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"Automatisch verbonden met satelliet"</string>
diff --git a/core/res/res/values-or/strings.xml b/core/res/res/values-or/strings.xml
index df78cc9..d7f070b 100644
--- a/core/res/res/values-or/strings.xml
+++ b/core/res/res/values-or/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"à¬à¬¿à¬ªà¬à¬¿à¬¹àଚ à¬à¬¿à¬¹àଚଠହàଲଟ ଚଟହିà¬"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"à¬à¬¿à¬ªà¬à¬¿à¬¹àଚ à¬à¬¿à¬¹àଚଠହàଲଟ ଚଟହିà¬"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"ଫàଞà à¬à¬¿à¬¹àଚଠà¬à¬°à¬¿à¬¹àବ ଚଟହିà¬à¥€ à¬à¬¿à¬ªà¬à¬¿à¬¹àଚ ବààବହଟର à¬à¬°à¬šà଀àी"</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"ଫàଞ à¬à¬¿à¬¹àଚଠà¬à¬°à¬Ÿà¬¯à¬Ÿà¬à¬šà¬Ÿà¬¹à¬¿à¬à¥€ à¬à¬¿à¬ªà¬à¬¿à¬¹àଚ ବààବହଟର à¬à¬°à¬šà଀àी"</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"à¬à¬¿à¬ªà¬à¬¿à¬¹àଚ ପàରମଟଣି଀ ହàଲଟ"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"ମàହଠà¬à¬¿à¬¹àଚଠହàà¬à¬à¬¿"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"ମàହଠà¬à¬¿à¬¹àଚଠହàà¬à¬à¬¿, ଊàଟà¬à¬°à¬¿ ଞàଚିଶàà¬à¬¿à¬€ ଊବଟଚà଀à"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"à¬
ଚପିଚà à¬à¬°à¬¿à¬¬à¬Ÿ ପàରàବରà PIN ପà¬à¬Ÿà¬°à¬šà଀à"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"à¬
ଚପିଚà à¬à¬°à¬¿à¬¬à¬Ÿ ପàରàବରà ଲà¬à à¬àଲିବଟ ପଟà¬à¬°àଚ ପà¬à¬Ÿà¬°à¬šà଀à"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"à¬
ଚପିଚà à¬à¬°à¬¿à¬¬à¬Ÿ ପàରàବରà ପଟଞàà±à¬°àଡ ପà¬à¬Ÿà¬°à¬šà଀à"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"à¬à¬ªà¬£à¬àଠà¬à¬¡à¬®à¬¿à¬šà à¬à¬šà¬·àà¬à¬²à à¬à¬°à¬¿à¬à¬šà଀ି"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"à¬à¬ªà¬£à¬àଠà¬à¬¡à¬®à¬¿à¬šà à¬
ପଡàà¬à à¬à¬°à¬¿à¬à¬šà଀ି"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"à¬à¬ªà¬£à¬àଠà¬à¬¡à¬®à¬¿à¬šà ଡିଲିà¬à à¬à¬°à¬¿à¬à¬šà଀ି"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"ଠିଠà¬
à¬à¬¿"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"à±à¬Ÿà¬°àଠ3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"à¬àଷàà¬"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"à¬à¬®àààଚଟଲ"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"ଞàରà¬àଷଟ ପଟà¬à¬ ଞàà¬àରିଚ ଞààଟରରà à¬à¬ª ବିଷàବଞà଀àà¬à ଲàà¬à¬Ÿà¬¯à¬Ÿà¬à¬à¬¿"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"ଞଟà¬àଲଟà¬à¬ ଞହ ଞàà±à¬€à¬ à¬à¬šàà¬àଠହàà¬à¬à¬¿"</string>
diff --git a/core/res/res/values-pa/strings.xml b/core/res/res/values-pa/strings.xml
index 282694d..473657f 100644
--- a/core/res/res/values-pa/strings.xml
+++ b/core/res/res/values-pa/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"àš«àš¿à©°àšàš°àšªà©àš°àš¿à©°àš àšŠà© àšªàšàšŸàš£ àššàš¹à©àš àš¹à©àš"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"àš«àš¿à©°àšàš°àšªà©àš°àš¿à©°àš àšŠà© àšªàšàšŸàš£ àššàš¹à©àš àš¹à©àš"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"àšàš¿àš¹àš°àšŸ àššàš¹à©àš àšªàšàšŸàš£ àšžàšàšŠà©à¥€ àšàšžàšŠà© àš¬àšàšŸàš àš«àš¿à©°àšàš°àšªà©àš°àš¿à©°àš àšµàš°àš€à©à¥€"</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"àšàš¿àš¹àš°à© àšŠà© àšªàšàšŸàš£ àššàš¹à©àš àš¹à©àšà¥€ àšàšžàšŠà© àš¥àšŸàš àš«àš¿à©°àšàš°àšªà©àš°àš¿à©°àš àšµàš°àš€à©à¥€"</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"àš«àš¿à©°àšàš°àšªà©àš°àš¿à©°àš àšªà©àš°àš®àšŸàš£àš¿àš€ àš¹à©àšàš"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"àšàš¿àš¹àš°àšŸ àšªà©àšžàšŒàšà©àšàš°àšš"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"àšàš¿àš¹àš°àšŸ àšªà©àšžàšŒàšà©àšàš°àšš, àšàš¿àš°àšªàšŸ àšàš°àšà© \'àšªà©àšžàšŒàšà© àšàš°à©\' àšŠàš¬àšŸàš"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"àš
àššàšªàš¿à©°àšš àšàš°àšš àš€à©àš àšªàš¹àš¿àš²àšŸàš àšªàš¿à©°àšš àš®à©°àšà©"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"àš
àššàšªàš¿à©°àšš àšàš°àšš àš€à©àš àšªàš¹àš¿àš²àšŸàš àš
àš£àš²àšŸàš àšªà©àšàš°àšš àšµàšŸàšžàš€à© àšªà©à©±àšà©"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"àš
àš£àšªàš¿à©°àšš àšàš°àšš àš€à©àš àšªàš¹àš¿àš²àšŸàš àšªàšŸàšžàšµàš°àš¡ àš®à©°àšà©"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"àš€à©àš¹àšŸàš¡à© àšªà©àš°àšžàšŒàšŸàšžàš àšµà©±àš²à©àš àšžàš¥àšŸàšªàš€ àšà©àš€àšŸ àšàš¿àš"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"àš€à©àš¹àšŸàš¡à© àšªà©àš°àšžàšŒàšŸàšžàš àšµà©±àš²à©àš àš
à©±àšªàš¡à©àš àšà©àš€àšŸ àšàš¿àš"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"àš€à©àš¹àšŸàš¡à© àšªà©àš°àšžàšŒàšŸàšžàš àšµà©±àš²à©àš àš®àš¿àšàšŸàšàš àšàš¿àš"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"àš à©àš àš¹à©"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"àšà©°àš® àšžà©°àš¬à©°àš§à© 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"àšàšŸàšàš"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"àšàšŸàšàšàšŸàš°àš"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"àšàšª àšžàš®à©±àšàš°à© àššà©à©° àšžà©àš°à©±àšàš¿àš àš²àš àšžàšà©àš°à©àšš àšžàšŸàšàšàšŸàšàš°àšš àš€à©àš àš²à©àšàšŸàšàš àšàš¿àš àš¹à©"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"àšžà©àšà©àš²àšŸàšàš àššàšŸàš² àšžàšµà©-àšàššà©àšàš àš¹à©àšàš"</string>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index f80e832..d8bc19c 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -664,7 +664,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Nie rozpoznano odcisku palca"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Nie rozpoznano odcisku palca"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Nie rozpoznajÄ twarzy. UÅŒyj odcisku palca."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Nie rozpoznano twarzy. UÅŒyj odcisku palca."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"Uwierzytelniono odciskiem palca"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Twarz rozpoznana"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Twarz rozpoznana, kliknij Potwierdź"</string>
@@ -1898,7 +1898,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"Podaj PIN, aby odpiÄ
Ä"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"Aby odpiÄ
Ä, poproÅ o wzór odblokowania"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"Aby odpiÄ
Ä, poproÅ o hasÅo"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Zainstalowany przez administratora"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"Zaktualizowany przez administratora"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"UsuniÄty przez administratora"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
@@ -2395,6 +2396,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"SÅuÅŒbowy 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Testowy"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Wspólny"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"Ze wzglÄdów bezpieczeÅstwa zawartoÅÄ aplikacji jest niewidoczna podczas udostÄpniania ekranu"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"Automatycznie poÅÄ
czono z satelitÄ
"</string>
diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml
index 3dcd619..87e0ab3 100644
--- a/core/res/res/values-pt-rBR/strings.xml
+++ b/core/res/res/values-pt-rBR/strings.xml
@@ -663,7 +663,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Impressão digital não reconhecida"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Impressão digital não reconhecida"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Não foi possível reconhecer o rosto Use a impressão digital."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Rosto não reconhecido. Use a impressão digital."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"Impressão digital autenticada"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Rosto autenticado"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Rosto autenticado, pressione \"Confirmar\""</string>
@@ -1897,7 +1897,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"Pedir PIN antes de liberar"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"Pedir padrão de desbloqueio antes de liberar"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"Pedir senha antes de liberar"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Instalado pelo seu administrador"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"Atualizado pelo seu administrador"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Excluído pelo seu administrador"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
@@ -2394,6 +2395,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"Trabalho 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Teste"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Público"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"Conteúdo do app oculto no compartilhamento de tela por motivos de segurança"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"Conectado automaticamente ao satélite"</string>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index 10e19cd..271a049 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -663,7 +663,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Impressão digital não reconhecida"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Impressão digital não reconhecida"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Impos. reconh. rosto. Utilize a impressão digital."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Rosto não reconhecido. Use a impressão digital."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"A impressão digital foi autenticada."</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Rosto autenticado."</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Rosto autenticado. Prima Confirmar."</string>
@@ -1897,7 +1897,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"Pedir PIN antes de soltar"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"Pedir padrão de desbloqueio antes de soltar"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"Pedir palavra-passe antes de soltar"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Instalado pelo seu gestor"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"Atualizado pelo seu gestor"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Eliminado pelo seu gestor"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
@@ -2394,6 +2395,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"Trabalho 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Teste"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Comum"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"Conteúdo da app ocultado da partilha de ecrã por motivos de segurança"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"Ligação de satélite estabelecida automaticamente"</string>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index 3dcd619..87e0ab3 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -663,7 +663,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Impressão digital não reconhecida"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Impressão digital não reconhecida"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Não foi possível reconhecer o rosto Use a impressão digital."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Rosto não reconhecido. Use a impressão digital."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"Impressão digital autenticada"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Rosto autenticado"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Rosto autenticado, pressione \"Confirmar\""</string>
@@ -1897,7 +1897,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"Pedir PIN antes de liberar"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"Pedir padrão de desbloqueio antes de liberar"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"Pedir senha antes de liberar"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Instalado pelo seu administrador"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"Atualizado pelo seu administrador"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Excluído pelo seu administrador"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
@@ -2394,6 +2395,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"Trabalho 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Teste"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Público"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"Conteúdo do app oculto no compartilhamento de tela por motivos de segurança"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"Conectado automaticamente ao satélite"</string>
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index e27603a..fb214be 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -663,7 +663,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Amprenta nu a fost recunoscutÄ"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Amprenta nu a fost recunoscutÄ"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Chipul nu a fost recunoscut. FoloseÈte amprenta."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"FaÈa nu a fost recunoscutÄ. FoloseÈte amprenta."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"AmprentÄ autentificatÄ"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Chip autentificat"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Chip autentificat, apasÄ pe ConfirmÄ"</string>
@@ -1897,7 +1897,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"SolicitÄ codul PIN înainte de a anula fixarea"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"SolicitÄ mai întâi modelul pentru deblocare"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"SolicitÄ parola înainte de a anula fixarea"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Instalat de administrator"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"Actualizat de administrator"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Èters de administrator"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
@@ -2394,6 +2395,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"Serviciu 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Comun"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"ConÈinutul aplicaÈiei este ascuns de permiterea accesului la ecran din motive de securitate"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"S-a conectat automat la satelit"</string>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index a1da51e..7d55445 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -664,7 +664,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"ÐÑпеÑаÑПк Ме ÑаÑпПзМаМ."</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"ÐÑпеÑаÑПк Ме ÑаÑпПзМаМ."</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Ðе ÑЎалПÑÑ ÑаÑпПзМаÑÑ Ð»ÐžÑП. ÐÑпПлÑзÑйÑе ПÑпеÑаÑПк."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"ÐОÑП Ме ÑаÑпПзМаМП. ÐÑпПлÑзÑйÑе ПÑпеÑаÑПк."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"ÐÑпеÑаÑПк палÑÑа пÑПвеÑеМ"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"ÐОÑП ÑаÑпПзМаМП"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"ÐОÑП ÑаÑпПзМаМП, МажЌОÑе ÐºÐœÐŸÐ¿ÐºÑ \"ÐПЎÑвеÑЎОÑÑ\""</string>
@@ -1898,7 +1898,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"ÐапÑаÑОваÑÑ PIN-кПЎ"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"ÐапÑаÑОваÑÑ Ð³ÑаÑОÑеÑкОй клÑÑ"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"ÐапÑаÑОваÑÑ Ð¿Ð°ÑПлÑ"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"УÑÑаМПвлеМП аЎЌОМОÑÑÑаÑПÑПЌ"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"ÐбМПвлеМП аЎЌОМОÑÑÑаÑПÑПЌ"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"УЎалеМП аЎЌОМОÑÑÑаÑПÑПЌ"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"ÐÐ"</string>
@@ -2395,6 +2396,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"РабПÑОй 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"ТеÑÑПвÑй"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"СПвЌеÑÑМÑй"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"СПЎеÑжОЌПе пÑÐžÐ»ÐŸÐ¶ÐµÐœÐžÑ ÐžÑклÑÑеМП Оз ЎеЌПМÑÑÑаÑОО ÑкÑаМа в ÑелÑÑ
безПпаÑМПÑÑО."</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"ÐвÑПЌаÑОÑеÑкО пПЎклÑÑеМП к ÑОÑÑеЌаЌ ÑпÑÑМОкПвПй ÑвÑзО"</string>
diff --git a/core/res/res/values-si/strings.xml b/core/res/res/values-si/strings.xml
index 5c9f4d9..bc0f7ef 100644
--- a/core/res/res/values-si/strings.xml
+++ b/core/res/res/values-si/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"à¶à¶à·à¶œà· à·à¶œà¶à·à¶« à·à¶³à·à¶±à· à¶±à·à¶à¶±à·à¶±à· ගදà·"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"à¶à¶à·à¶œà· à·à¶œà¶à·à¶« à·à¶³à·à¶±à· à¶±à·à¶à¶±à·à¶±à· ගදà·"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"à¶žà·à·à·à¶« à·à·à¶³à·à¶±à·à¶º à¶±à·à·à·à¶. à¶ à·à·à¶±à·à·à¶§ à¶à¶à·à¶œà· à·à¶œà¶à·à¶« à¶·à·à·à·à¶ à¶."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"à¶žà·à·à·à¶« à·à¶³à·à¶±à· à¶±à·à¶à·à¶±à·à¶«à·. à¶ à·à·à¶±à·à·à¶§ à¶à¶à·à¶œà· à·à¶œà¶à·à¶« à¶·à·à·à·à¶ à¶à¶»à¶±à·à¶±."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"à¶à¶à·à¶œà· à·à¶œà¶à·à¶« à·à¶à·à¶ºà·à¶Žà¶±à¶º à¶à¶»à¶± ගදà·"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"à¶žà·à·à·à¶« à·à¶à·à¶ºà·à¶Žà¶±à¶º à¶à¶»à¶± ගදà·"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"à¶žà·à·à·à¶« à·à¶à·à¶ºà·à¶Žà¶±à¶º à¶à¶»à¶± ගදà·, à¶à¶»à·à¶«à·à¶à¶» à¶à·à·à·à¶»à· à¶à¶»à¶±à·à¶± à¶à¶¶à¶±à·à¶±"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"à¶à·à¶œà·à·à¶žà¶§ à¶Žà·à¶» PIN à·à·à¶žà·à¶±à·à¶±"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"à¶à·à¶œà·à·à¶žà¶§ à¶Žà·à¶» à¶
à¶à·à·
à· à¶
à¶»à·à¶± රටà·à· à·à¶³à·à· à¶
à·à¶±à·à¶±"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"à¶à·à¶œà·à·à¶žà¶§ à¶Žà·à¶» à¶žà·à¶»à¶Žà¶¯à¶º à·à·à¶žà·à¶±à·à¶±"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"à¶à¶¶à¶à· à¶Žà¶»à·à¶Žà·à¶œà¶ à¶žà¶à·à¶±à· à·à·à¶®à·à¶Žà¶±à¶º à¶à¶» à¶à¶"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"à¶à¶¶à¶à· à¶Žà¶»à·à¶Žà·à¶œà¶ à¶žà¶à·à¶±à· යà·à·à¶à·à¶à·à¶œà·à¶± à¶à¶» à¶à¶"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"à¶à¶¶à¶à· à¶Žà¶»à·à¶Žà·à¶œà¶ à¶žà¶à·à¶±à· à¶žà¶à· දඞ෠à¶à¶"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"à·à¶»à·"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"à¶à·à¶»à·à¶ºà·à¶œà¶º 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"à¶Žà¶»à·à¶à·à·à¶«à¶º"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"à·à·à¶»à·à¶à·à¶"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"à¶à¶»à¶à·à·à·à· à·à¶³à·à· යà·à¶¯à·à¶žà· à¶
à¶±à·à¶à¶»à·à¶à¶à¶º à¶à·à¶»à¶º à¶¶à·à¶¯à· à¶à·à¶±à·à¶žà·à¶±à· à·à¶à·à· à¶à¶"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"à¶ à¶±à·à¶¯à·à¶»à·à¶à·à·à¶§ à·à·à·à¶ºà¶à¶à·à¶»à·à¶ºà· à·à¶žà·à¶¶à¶±à·à¶° à·à·"</string>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index 4735866..fa7aea5 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -664,7 +664,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"OdtlaÄok prsta nebol rozpoznaný"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"OdtlaÄok prsta nebol rozpoznaný"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Tvár sa nedá rozpoznaÅ¥. PouÅŸite odtlaÄok prsta."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Tvár nebola rozpoznaná. PouÅŸite odtlaÄok prsta."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"OdtlaÄok prsta bol overený"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Tvár bola overená"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Tvár bola overená, stlaÄte tlaÄidlo potvrdenia"</string>
@@ -1898,7 +1898,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"Pred odopnutím poÅŸiadaÅ¥ o Äíslo PIN"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"Pred uvoÄŸnením poÅŸiadaÅ¥ o bezpeÄnostný vzor"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"Pred odopnutím poÅŸiadaÅ¥ o heslo"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Nainštaloval správca"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"Aktualizoval správca"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Odstránil správca"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
@@ -2395,6 +2396,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"3. pracovný"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Testovací"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"SpoloÄný"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"Obsah aplikácie bol na úÄely zabezpeÄenia skrytý v zdieÄŸaní obrazovky"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"Automaticky pripojené k satelitu"</string>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index 9118c95..2d3eaab 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -664,7 +664,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Prstni odtis ni prepoznan."</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Prstni odtis ni prepoznan."</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Obraza ni mogoÄe prepoznati. Uporabite prstni odtis."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Obraz ni prepoznan. Uporabite prstni odtis."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"Pristnost prstnega odtisa je preverjena"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Pristnost obraza je potrjena"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Pristnost obraza je preverjena. Pritisnite gumb »Potrdi«."</string>
@@ -1898,7 +1898,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"Zahtevaj PIN pred odpenjanjem"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"Pred odpenjanjem vprašaj za vzorec za odklepanje"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"Pred odpenjanjem vprašaj za geslo"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Namestil skrbnik"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"Posodobil skrbnik"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Izbrisal skrbnik"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"V redu"</string>
@@ -2395,6 +2396,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"Delo 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Preizkus"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Skupno"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"Pri deljenju zaslona je vsebina aplikacije skrita zaradi varnosti"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"Samodejno vzpostavljena povezava s satelitom"</string>
diff --git a/core/res/res/values-sq/strings.xml b/core/res/res/values-sq/strings.xml
index 6036a17..55405d5 100644
--- a/core/res/res/values-sq/strings.xml
+++ b/core/res/res/values-sq/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Gjurma e gishtit nuk u njoh"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Gjurma e gishtit nuk u njoh"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Nuk mund ta dallojë fytyrën. Përdor më mirë gjurmën e gishtit."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Fytyra nuk njihet. Përdor gjurmën e gishtit."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"Gjurma e gishtit u vërtetua"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Fytyra u vërtetua"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Fytyra u vërtetua, shtyp \"Konfirmo\""</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"Zhgozhdimi kërkon PIN-in"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"Kërko motivin e shkyçjes para heqjes së gozhdimit"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"Kërko fjalëkalim para heqjes nga gozhdimi."</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Instaluar nga administratori"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"Përditësuar nga administratori"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Fshirë nga administratori"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"Në rregull"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"Puna 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"I përbashkët"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"Përmbajtja e aplikacionit është fshehur nga ndarja e ekranit për arsye sigurie"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"U lidh automatikisht me satelitin"</string>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index 2020f91..f97b92e 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -663,7 +663,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"ÐÑОÑак пÑÑÑа МОÑе пÑепПзМаÑ"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"ÐÑОÑак пÑÑÑа МОÑе пÑепПзМаÑ"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"ÐОÑе МОÑе пÑепПзМаÑП. ÐПÑОÑÑОÑе ПÑОÑак пÑÑÑа."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"ÐОÑе МОÑе пÑепПзМаÑП. ÐПÑОÑÑОÑе ПÑОÑак пÑÑÑа."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"ÐÑОÑак пÑÑÑа Ñе пПÑвÑÑеМ"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"ÐОÑе Ñе пПÑвÑÑеМП"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"ÐОÑе Ñе пПÑвÑÑеМП. ÐÑОÑОÑМОÑе ÐПÑвÑЎО"</string>
@@ -1897,7 +1897,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"ТÑажО PIN пÑе ПÑкаÑОÑаÑа"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"ТÑажО ÑаблПМ за ПÑкÑÑÑаваÑе пÑе ПÑкаÑОÑаÑа"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"ТÑажО Ð»ÐŸÐ·ÐžÐœÐºÑ Ð¿Ñе ПÑкаÑОÑаÑа"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"ÐМÑÑалОÑаП Ñе аЎЌОМОÑÑÑаÑПÑ"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"ÐжÑÑОÑаП Ñе аЎЌОМОÑÑÑаÑПÑ"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"ÐзбÑОÑаП Ñе аЎЌОМОÑÑÑаÑПÑ"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"ÐПÑвÑЎО"</string>
@@ -2394,6 +2395,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"ÐПÑаП 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"ТеÑÑ"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"ÐаÑеЎМОÑкП"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"СаЎÑÐ¶Ð°Ñ Ð°Ð¿Ð»ÐžÐºÐ°ÑОÑе Ñе ÑкÑОвеМ за ЎеÑеÑе ÑаЎÑжаÑа екÑаМа збПг безбеЎМПÑÑО"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"ÐÑÑПЌаÑÑкО пПвезаМП Ñа ÑаÑелОÑПЌ"</string>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index cd334a3..4f5ad4a74 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Fingeravtrycket känns inte igen"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Fingeravtrycket känns inte igen"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Ansiktet kändes inte igen. Använd fingeravtryck."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Ansiktet känns inte igen. Använd fingeravtryck."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"Fingeravtrycket har autentiserats"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Ansiktet har autentiserats"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Ansiktet har autentiserats. Tryck på Bekräfta"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"Be om pinkod innan skärmen slutar fästas"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"Be om upplåsningsmönster innan skärmen slutar fästas"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"Be om lösenord innan skärmen slutar fästas"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Administratören installerade paketet"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"Administratören uppdaterade paketet"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Administratören raderade paketet"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"Arbete 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Allmän"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"Av säkerhetsskäl döljs appinnehållet vid skärmdelning"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"Automatiskt ansluten till satellit"</string>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index b16bbcd..175cf2f 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Alama ya kidole haijatambuliwa"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Alama ya kidole haijatambuliwa"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Imeshindwa kutambua uso. Tumia alama ya kidole."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Uso hautambuliki. Tumia alama ya kidole."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"Imethibitisha alama ya kidole"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Uso umethibitishwa"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Uso umethibitishwa, tafadhali bonyeza thibitisha"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"Itisha PIN kabla hujabandua"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"Omba mchoro wa kufungua kabla hujabandua"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"Omba nenosiri kabla hujabandua"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Imesakinishwa na msimamizi wako"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"Imesasishwa na msimamizi wako"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Imefutwa na msimamizi wako"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"Sawa"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"Wa 3 wa Kazini"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Jaribio"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Unaoshirikiwa"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"Maudhui ya programu yamefichwa ili yasionekane kwenye skrini ya pamoja kwa sababu za kiusalama"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"Imeunganishwa kiotomatiki na satelaiti"</string>
diff --git a/core/res/res/values-ta/strings.xml b/core/res/res/values-ta/strings.xml
index 02e06fa..b5706d6 100644
--- a/core/res/res/values-ta/strings.xml
+++ b/core/res/res/values-ta/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"à®à¯à®°à¯à®à¯ à®
à®à¯à®à¯à®à®°à®¿à®à¯à®à®ªà¯à®ªà®à®µà®¿à®²à¯à®²à¯"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"à®à¯à®°à¯à®à¯ à®
à®à¯à®à¯à®à®°à®¿à®à¯à®à®ªà¯à®ªà®à®µà®¿à®²à¯à®²à¯"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"à®®à¯à®à®€à¯à®€à¯ à®
à®à¯à®¯à®Ÿà®³à®®à¯ à®à®Ÿà®£ à®®à¯à®à®¿à®¯à®µà®¿à®²à¯à®²à¯. à®à¯à®°à¯à®à¯à®¯à¯à®ªà¯ பயனà¯à®ªà®à¯à®€à¯à®€à®µà¯à®®à¯."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"à®®à¯à®à®®à¯ à®à®£à¯à®à®±à®¿à®¯ à®®à¯à®à®¿à®¯à®µà®¿à®²à¯à®²à¯. à®à¯à®°à¯à®à¯ பயனà¯à®ªà®à¯à®€à¯à®€à¯à®."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"à®à¯à®°à¯à®à¯ à®
à®à¯à®à¯à®à®°à®¿à®à¯à®à®ªà¯à®ªà®à¯à®à®€à¯"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"à®®à¯à®à®®à¯ à®
à®à¯à®à¯à®à®°à®¿à®à¯à®à®ªà¯à®ªà®à¯à®à®€à¯"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"à®®à¯à®à®®à¯ à®
à®à¯à®à¯à®à®°à®¿à®à¯à®à®ªà¯à®ªà®à¯à®à®€à¯. ’à®à®±à¯à®€à®¿à®ªà¯à®ªà®à¯à®€à¯à®€à¯à®’ à®à®©à¯à®ªà®€à¯ à®
எà¯à®€à¯à®€à¯à®"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"à®
à®à®±à¯à®±à¯à®®à¯ à®®à¯à®©à¯ PINà®à®à¯ à®à¯à®³à¯"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"à®
à®à®±à¯à®±à¯à®®à¯ à®®à¯à®©à¯ à®
னà¯à®²à®Ÿà®à¯ பà¯à®à¯à®à®°à¯à®©à¯à®à¯ à®à¯à®³à¯"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"à®
à®à®±à¯à®±à¯à®®à¯ à®®à¯à®©à¯ à®à®à®µà¯à®à¯à®à¯à®²à¯à®²à¯à®à¯ à®à¯à®³à¯"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"à®à®à¯à®à®³à¯ சிரà¯à®µà®Ÿà®à®¿ சிறà¯à®µà®¿à®¯à¯à®³à¯à®³à®Ÿà®°à¯"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"à®à®à¯à®à®³à¯ சிரà¯à®µà®Ÿà®à®¿ பà¯à®€à¯à®ªà¯à®ªà®¿à®€à¯à®€à¯à®³à¯à®³à®Ÿà®°à¯"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"à®à®à¯à®à®³à¯ சிரà¯à®µà®Ÿà®à®¿ சà¯à®à¯à®à®¿à®¯à¯à®³à¯à®³à®Ÿà®°à¯"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"à®à®°à®¿"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"பணி 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"பரிà®à¯à®€à®©à¯"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"பà¯à®€à¯"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"பட஀à¯à®à®Ÿà®ªà¯à®ªà®¿à®±à¯à®à®Ÿà®, ஀ிரà¯à®ªà¯ பà®à®¿à®°à¯à®µà®¿à®²à¯ à®à®°à¯à®šà¯à®€à¯ à®à®ªà¯à®žà¯ à®à®³à¯à®³à®à®à¯à®à®®à¯ மறà¯à®à¯à®à®ªà¯à®ªà®à¯à®à¯à®³à¯à®³à®€à¯"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"à®à®Ÿà®à¯à®à®¿à®²à¯à®à¯à®à¯à®à®©à¯ ஀டனட஠à®à®£à¯à®à¯à®à®ªà¯à®ªà®à¯à®à®€à¯"</string>
diff --git a/core/res/res/values-te/strings.xml b/core/res/res/values-te/strings.xml
index ecd7e94..51461f9 100644
--- a/core/res/res/values-te/strings.xml
+++ b/core/res/res/values-te/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"à°µà±à°²à°¿à°®à±à°Šà±à°° à°à±à°°à±à°€à°¿à°à°à°¬à°¡à°²à±à°Šà±"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"à°µà±à°²à°¿à°®à±à°Šà±à°° à°à±à°°à±à°€à°¿à°à°à°¬à°¡à°²à±à°Šà±"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"à°®à±à°à° à°à±à°°à±à°€à°¿à°à°à°²à±à°®à±. బఊà±à°²à±à°à°Ÿ à°µà±à°²à°¿à°®à±à°Šà±à°° à°à°ªà°¯à±à°à°¿à°à°à°à°¡à°¿."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"à°®à±à°à° à°à±à°°à±à°€à°¿à°à°à°²à±à°Šà±. బఊà±à°²à±à°à°Ÿ à°µà±à°²à°¿à°®à±à°Šà±à°° à°à°ªà°¯à±à°à°¿à°à°à°à°¡à°¿."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"à°µà±à°²à°¿à°®à±à°Šà±à°° à°ªà±à°°à°®à°Ÿà°£à±à°à°°à°¿à°à°à°¬à°¡à°¿à°à°Šà°¿"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"à°®à±à°à° à°ªà±à°°à°®à°Ÿà°£à±à°à°°à°¿à°à°à°¬à°¡à°¿à°à°Šà°¿"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"à°®à±à°à° à°ªà±à°°à°®à°Ÿà°£à±à°à°°à°¿à°à°à°¬à°¡à°¿à°à°Šà°¿, à°Šà°¯à°à±à°žà°¿ à°§à±à°µà±à°à°°à°¿à°à°à±à°šà± à°šà±à°à±à°à°à°¡à°¿"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"à°
à°šà±à°ªà°¿à°šà± à°à±à°¯à°¡à°Ÿà°šà°¿à°à°¿ à°®à±à°à°Šà± పిచౠà°à±à°žà° à°
à°¡à±à°à±"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"à°
à°šà±à°ªà°¿à°šà± à°à±à°¯à°¡à°Ÿà°šà°¿à°à°¿ à°®à±à°à°Šà± à°
à°šà±à°²à°Ÿà°à± à°à°à±à°€à°¿ à°à±à°žà° à°
à°¡à±à°à±"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"à°
à°šà±à°ªà°¿à°šà± à°à±à°¯à°¡à°Ÿà°šà°¿à°à°¿ à°®à±à°à°Šà± పటఞà±à°µà°°à±à°¡à± à°à±à°žà° à°
à°¡à±à°à±"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"మౠచిరà±à°µà°Ÿà°¹à°à±à°²à± à°à°šà±à°žà±à°à°Ÿà°²à± à°à±à°¶à°Ÿà°°à±"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"మౠచిరà±à°µà°Ÿà°¹à°à±à°²à± à°
à°ªà±à°¡à±à°à± à°à±à°¶à°Ÿà°°à±"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"మౠచిరà±à°µà°Ÿà°¹à°à±à°²à± à°€à±à°²à°à°¿à°à°à°Ÿà°°à±"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"à°žà°°à±"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"à°à°«à±à°žà± 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"పరà±à°à±à°·"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"à°à°®à±à°¯à±à°šà°²à±"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"à°žà±à°à±à°¯à±à°°à°¿à°à± à°à±à°žà° à°žà±à°à±à°°à±à°šà± à°·à±à°°à± à°šà±à°à°¡à°¿ యటపౠà°à°à°à±à°à°à± à°Šà°Ÿà°à°¬à°¡à°¿à°à°Šà°¿"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"à°¶à°Ÿà°à°¿à°²à±à°à±à°à± à°à°à±à°®à±à°à°¿à°à±à°à°Ÿ à°à°šà±à°à±à°à± à°à±à°¯à°¬à°¡à°¿à°à°Šà°¿"</string>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index b1debfd..3dc46e0 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"à¹àž¡à¹àž£àž¹à¹àžàž±àžàž¥àž²àž¢àžàžŽà¹àž§àž¡àž·àž"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"à¹àž¡à¹àž£àž¹à¹àžàž±àžàž¥àž²àž¢àžàžŽà¹àž§àž¡àž·àž"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"à¹àž¡à¹àž£àž¹à¹àžàž±àžà¹àžàž«àžà¹àž² à¹àžà¹àž¥àž²àž¢àžàžŽà¹àž§àž¡àž·àžà¹àžàž"</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"à¹àž¡à¹àž£àž¹à¹àžàž±àžà¹àžàž«àžà¹àž² à¹àžà¹àž¥àž²àž¢àžàžŽà¹àž§àž¡àž·àžà¹àžàž"</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"àžàž£àž§àžàžªàžàžàžªàžŽàžàžàžŽà¹àž¥àž²àž¢àžàžŽà¹àž§àž¡àž·àžà¹àž¥à¹àž§"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"àžàž£àž§àžàžªàžàžàžªàžŽàžàžàžŽà¹à¹àžàž«àžà¹àž²à¹àž¥à¹àž§"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"àžàž£àž§àžàžªàžàžàžªàžŽàžàžàžŽà¹à¹àžàž«àžà¹àž²à¹àž¥à¹àž§ à¹àžàž£àžàžàžàž¢àž·àžàž¢àž±àž"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"àžàž PIN àžà¹àžàžà¹àž¥àžŽàžàžàž±àžàž«àž¡àžžàž"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"àžàžàž£àž¹àžà¹àžàžàžàž²àž£àžàž¥àžàž¥à¹àžàžàžà¹àžàžà¹àž¥àžŽàžàžàž±àžàž«àž¡àžžàž"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"àžàžàž£àž«àž±àžªàžà¹àž²àžàžà¹àžàžà¹àž¥àžŽàžàžàž±àžàž«àž¡àžžàž"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"àžàžŽàžàžàž±à¹àžà¹àžàž¢àžàž¹à¹àžàž¹à¹àž¥àž£àž°àžàž"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"àžàž±àžà¹àžàžà¹àžàž¢àžàž¹à¹àžàž¹à¹àž¥àž£àž°àžàž"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"àž¥àžà¹àžàž¢àžàž¹à¹àžàž¹à¹àž¥àž£àž°àžàž"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"àžàžàž¥àž"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"àžàž²àž 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"àžàžàžªàžàž"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"àžªà¹àž§àžàžàž¥àž²àž"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"àžà¹àžàžà¹àžàž·à¹àžàž«àž²à¹àžàžàžàž²àžàžàž²àž£à¹àžàž£à¹àž«àžà¹àž²àžàžà¹àžàž·à¹àžàžàž§àž²àž¡àžàž¥àžàžàž àž±àž¢"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"à¹àžàž·à¹àžàž¡àžà¹àžàžàž±àžàžàž²àž§à¹àžàžµàž¢àž¡à¹àžàž¢àžàž±àžà¹àžàž¡àž±àžàžŽ"</string>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index a6a6b50..58ab9f8 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Hindi nakilala ang fingerprint"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Hindi nakilala ang fingerprint"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Hindi makilala ang mukha. Gumamit ng fingerprint."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Hindi nakilala ang mukha. Gumamit ng fingerprint."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"Na-authenticate ang fingerprint"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Na-authenticate ang mukha"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Na-authenticate ang mukha, pakipindot ang kumpirmahin"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"Humingi ng PIN bago mag-unpin"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"Humingi ng pattern sa pag-unlock bago mag-unpin"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"Humingi ng password bago mag-unpin"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Na-install ng iyong admin"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"Na-update ng iyong admin"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Na-delete ng iyong admin"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"Trabaho 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Communal"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"Nakatago ang content ng app mula sa pagbabahagi ng screen para sa seguridad"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"Awtomatikong nakakonekta sa satellite"</string>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index 7e34e4b..4b12e87 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Parmak izi tanınmadı"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Parmak izi tanınmadı"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Yüz tanınamadı. Bunun yerine parmak izi kullanın."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Yüz tanınmadı. Bunun yerine parmak izi kullanın."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"Parmak izi kimlik doÄrulaması yapıldı"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Yüz kimliÄi doÄrulandı"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Yüz kimliÄi doÄrulandı, lütfen onayla\'ya basın"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"Sabitlemeyi kaldırmadan önce PIN\'i sor"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"Sabitlemeyi kaldırmadan önce kilit açma desenini sor"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"Sabitlemeyi kaldırmadan önce Åifre sor"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Yöneticiniz tarafından yüklendi"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"Yöneticiniz tarafından güncellendi"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Yöneticiniz tarafından silindi"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"Tamam"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"İŠ3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"PaylaÅılan"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"Uygulama içerikleri, güvenlik nedeniyle ekran paylaÅımında gizlendi"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"Uyduya otomatik olarak baÄlandı"</string>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 34618cd..62623c8 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -664,7 +664,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"ÐÑЎбОÑПк палÑÑÑ ÐœÐµ ÑПзпÑзМаМП"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"ÐÑЎбОÑПк палÑÑÑ ÐœÐµ ÑПзпÑзМаМП"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"ÐблОÑÑÑ ÐœÐµ ÑПзпÑзМаМП. СкПÑОÑÑайÑеÑÑ Ð²ÑЎбОÑкПЌ палÑÑÑ."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"ÐблОÑÑÑ ÐœÐµ ÑПзпÑзМаМП. СкПÑОÑÑайÑеÑÑ Ð²ÑЎбОÑкПЌ."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"ÐÑЎбОÑПк палÑÑÑ Ð°Ð²ÑеМÑОÑÑкПваМП"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"ÐблОÑÑÑ Ð°Ð²ÑеМÑОÑÑкПваМП"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"ÐблОÑÑÑ Ð°Ð²ÑеМÑОÑÑкПваМП. ÐаÑОÑМÑÑÑ \"ÐÑÐŽÑвеÑЎОÑО\""</string>
@@ -1898,7 +1898,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"PIN-кПЎ ÐŽÐ»Ñ Ð²ÑЎкÑÑплеММÑ"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"ÐапОÑÑваÑО клÑÑ ÑПзблПкÑÐ²Ð°ÐœÐœÑ Ð¿ÐµÑеЎ вÑЎкÑÑплеММÑÐŒ"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"ÐапОÑÑваÑО паÑÐŸÐ»Ñ Ð¿ÐµÑеЎ вÑЎкÑÑплеММÑÐŒ"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"УÑÑаМПвлеМП аЎЌÑМÑÑÑÑаÑПÑПЌ"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"ÐМПвлеМП аЎЌÑМÑÑÑÑаÑПÑПЌ"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"ÐОЎалеМП аЎЌÑМÑÑÑÑаÑПÑПЌ"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"ÐÐ"</string>
@@ -2395,6 +2396,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"РПбПÑОй пÑПÑÑÐ»Ñ 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"ТеÑÑПвОй пÑПÑÑлÑ"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"СпÑлÑМОй пÑПÑÑлÑ"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"Ð ÐŒÑÑкÑÐ²Ð°ÐœÑ Ð±ÐµÐ·Ð¿ÐµÐºÐž вЌÑÑÑ ÐŽÐŸÐŽÐ°Ñка пÑОÑ
ПваМП пÑÐŽ ÑÐ°Ñ Ð¿ÐŸÐºÐ°Ð·Ñ ÐµÐºÑаМа"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"ÐвÑПЌаÑОÑМП пÑЎклÑÑеМП ЎП ÑÑпÑÑМОка"</string>
diff --git a/core/res/res/values-ur/strings.xml b/core/res/res/values-ur/strings.xml
index caf0ca4..1dc3e67 100644
--- a/core/res/res/values-ur/strings.xml
+++ b/core/res/res/values-ur/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"ÙÙگر ٟرÙÙ¹ Ú©Û ØŽÙØ§Ø®Øª ÙÛÛÚº Û٠سکÛ"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"ÙÙگر ٟرÙÙ¹ Ú©Û ØŽÙØ§Ø®Øª ÙÛÛÚº Û٠سکÛ"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"ÚÛØ±Û Ú©Û ØŽÙØ§Ø®Øª ÙÛÛÚº Û٠سکÛÛ Ø§Ø³ Ú©Û ØšØ¬Ø§ØŠÛ ÙÙگر ٟرÙÙ¹ استعÙ
ا٠کرÛÚºÛ"</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"ÚÛØ±Û ÙŸÛÚØ§Ùا ÙÛÛÚº Ú¯ÛØ§Û اس Ú©Û ØšØ¬Ø§ØŠÛ ÙÙگر ٟرÙÙ¹ استعÙ
ا٠کرÛÚºÛ"</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"ÙÙگر ٟرÙÙ¹ Ú©Û ØªØµØ¯ÛÙ Û٠گ؊Û"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"ÚÛØ±Û Ú©Û ØªØµØ¯ÛÙ Û٠گ؊Û"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"ÚÛØ±Û Ú©Û ØªØµØ¯ÛÙ ÛÙ Ú¯ØŠÛØ ØšØ±Ø§Û Ú©Ø±Ù
\'تصدÛ٠کرÛÚº\' ک٠دؚا؊ÙÚº"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"ÙŸÙ ÛٹاÙÛ Ø³Û ÙŸÛÙÛ PIN Ø·ÙØš کرÛÚº"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"ÙŸÙ ÛٹاÙÛ Ø³Û ÙŸÛÙÛ ØºÛØ± Ù
ÙÙ٠کرÙÛ Ú©Ø§ ÙŸÛÙ¹Ø±Ù Ø·ÙØš کرÛÚº"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"ÙŸÙ ÛٹاÙÛ Ø³Û ÙŸÛÙÛ ÙŸØ§Ø³ ÙØ±Ú Ø·ÙØš کرÛÚº"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"آٟ Ú©Û Ù
ÙØªØžÙ
Ú©Û Ø°Ø±ÛØ¹Û Ø§ÙØ³Ù¹Ø§Ù Ú©ÛØ§ Ú¯ÛØ§"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"آٟ Ú©Û Ù
ÙØªØžÙ
Ú©Û Ø°Ø±ÛØ¹Û اٟ ÚÛÙ¹ Ú©ÛØ§ Ú¯ÛØ§"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"آٟ Ú©Û Ù
ÙØªØžÙ
Ú©Û Ø°Ø±ÛØ¹Û ØØ°Ù Ú©ÛØ§ Ú¯ÛØ§"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"Ù¹ÚŸÛÚ© ÛÛ"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"ØªÛØ³Ø±Û Ø¯ÙØªØ±Û ٟرÙÙØ§ØŠÙ"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Ù¹ÛØ³Ù¹"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Ú©Ù
ÛÙÙÙ"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"سÛÚ©ÛÙØ±Ù¹Û Ú©Û Ù
د ÙØžØ± اÛÙŸ کا Ù
ÙØ§Ø¯ اسکرÛÙ Ú©Û Ø§ØŽØªØ±Ø§Ú© Ø³Û Úڟٟا ÛÙØ§ ÛÛ"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"Ø³Ù¹ÙØ§ØŠÙ¹ Ø³Û Ø®ÙØ¯Ú©Ø§Ø± Ø·ÙØ± ٟر Ù
ÙØ³ÙÚ© ÛÛ"</string>
diff --git a/core/res/res/values-uz/strings.xml b/core/res/res/values-uz/strings.xml
index e22c1dc..430e567 100644
--- a/core/res/res/values-uz/strings.xml
+++ b/core/res/res/values-uz/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Barmoq izi aniqlanmadi"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Barmoq izi aniqlanmadi"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Bu yuz notanish. Barmoq izi orqali urining."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Yuz aniqlanmadi. Barmoq izi orqali urining."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"Barmoq izi tekshirildi"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Yuzingiz aniqlandi"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Yuzingiz aniqlandi, tasdiqlash uchun bosing"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"Yechishda PIN kod talab qilinsin"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"Yechishdan oldin grafik kalit so‘ralsin"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"Bo‘shatishdan oldin parol so‘ralsin"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Administrator tomonidan o‘rnatilgan"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"Administrator tomonidan yangilangan"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Administrator tomonidan o‘chirilgan"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"Ish 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Test"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Umumiy"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"Ekran namoyishida xavfsizlik maqsadida ilova kontenti berkitildi"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"Sputnikka avtomatik ulandi"</string>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index d6bd190..aeb9a39 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Không nháºn dạng ÄÆ°á»£c vân tay"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Không nháºn dạng ÄÆ°á»£c vân tay"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Không thá» nháºn dạng khuôn mặt. Hãy dùng vân tay."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Không nháºn dạng ÄÆ°á»£c khuôn mặt. Hãy dùng vân tay."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"Äã xác thá»±c vân tay"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Äã xác thá»±c khuôn mặt"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Äã xác thá»±c khuôn mặt, vui lòng nhấn Äá» xác nháºn"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"Há»i mã PIN trưá»c khi bá» ghim"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"Há»i hình má» khóa trưá»c khi bá» ghim"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"Há»i máºt khẩu trưá»c khi bá» ghim"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Do quản trá» viên cá»§a bạn cài Äặt"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"Do quản trá» viên cá»§a bạn cáºp nháºt"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Do quản trá» viên cá»§a bạn xóa"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"Công viá»c 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Kiá»m thá»"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Dùng chung"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"Ná»i dung ứng dụng bỠẩn khá»i tính nÄng chia sẻ màn hình vì lý do bảo máºt"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"Äã tá»± Äá»ng kết ná»i vá»i vá» tinh"</string>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index 9336c17..9c5bb61 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"æªèœè¯å«æçº¹"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"æªèœè¯å«æçº¹"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"æ æ³è¯å«äººèžã请æ¹çšæçº¹ã"</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"æ æ³è¯å«é¢åã请æ¹çšæçº¹ã"</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"å·²éªè¯æçº¹"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"é¢åå·²éªè¯"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"é¢åå·²éªè¯ïŒè¯·æç¡®è®€æé®"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"åæ¶æ¶èŠæ±èŸå
¥PINç "</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"åæ¶åºå®åèŠæ±ç»å¶è§£éåŸæ¡"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"åæ¶æ¶èŠæ±èŸå
¥å¯ç "</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"å·²ç±æšç管çåå®è£
"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"å·²ç±æšç管çåæŽæ°"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"å·²ç±æšç管çåå é€"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"ç¡®å®"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"å·¥äœ 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"æµè¯"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"å
±çš"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"䞺å®å
šèµ·è§èåšå±å¹å
±äº«ç»é¢äžå€äºéèç¶æçåºçšå
容"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"èªåšè¿æ¥å°å«æ"</string>
diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml
index e92b7f0..4471cf0 100644
--- a/core/res/res/values-zh-rHK/strings.xml
+++ b/core/res/res/values-zh-rHK/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"ç¡æ³èŸšèæçŽ"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"ç¡æ³èŸšèæçŽ"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"ç¡æ³èŸšèé¢åïŒè«æ¹çšæçŽå®æé©èã"</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"ç¡æ³èŸšèé¢åïŒè«æ¹çšæçŽã"</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"é©èåæçŽ"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"é¢åå·²ç¶é©è"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"é¢åå·²ç¶é©èïŒè«ã©äžäž [確èª]"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"åæ¶åºå®æå¿
é 茞å
¥ PIN"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"åæ¶åºå®æå¿
é æäŸè§£éåæ¡"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"åæ¶åºå®æå¿
é 茞å
¥å¯ç¢Œ"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"å·²ç±äœ ç管çå¡å®è£"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"å·²ç±äœ ç管ç塿޿°"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"å·²ç±äœ ç管çå¡åªé€"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"奜"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"å·¥äœ 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"枬詊"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"å
±çš"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"çºå®å
šèµ·èŠïŒæçšçšåŒå
§å®¹å·²åŸå享è¢å¹ç«é¢é±è"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"å·²èªåé£ç·è³è¡æ"</string>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index 124d17a..0aa451a 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"æçŽèŸšè倱æ"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"æçŽèŸšè倱æ"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"ç¡æ³èŸšèèåïŒè«æ¹çšæçŽå®æé©èã"</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"ç¡æ³èŸšèèåïŒè«æ¹çšæçŽã"</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"æçŽé©èæå"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"èåé©èæå"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"èåé©èæåïŒè«æäž [確èª] æé"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"åæ¶åºå®æå¿
é 茞å
¥ PIN"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"åæ¶åºå®æå¿
é ç«åºè§£éåæ¡"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"åæ¶åºå®æå¿
é 茞å
¥å¯ç¢Œ"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"å·²ç±äœ ç管çå¡å®è£"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"å·²ç±äœ ç管ç塿޿°"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"å·²ç±äœ ç管çå¡åªé€"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"確å®"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"å·¥äœ 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"枬詊"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"éçš"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"çºå®å
šèµ·èŠïŒå享è¢å¹ç«é¢æªé¡¯ç€ºæçšçšåŒå
§å®¹"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"å·²èªåé£äžè¡æ"</string>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index 8ffb7a4..e80052a 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -662,7 +662,7 @@
</string-array>
<string name="fingerprint_error_not_match" msgid="4599441812893438961">"Isigxivizo somunwe asaziwa"</string>
<string name="fingerprint_udfps_error_not_match" msgid="8236930793223158856">"Isigxivizo somunwe asaziwa"</string>
- <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6226091888364083421">"Ayibazi ubuso. Sebenzisa izigxivizo zeminwe kunalokho."</string>
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="5590293588784953188">"Ubuso abaziwa. Sebenzisa izigxivizo zeminwe kunalokho."</string>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"Izigxivizo zeminwe zigunyaziwe"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"Ubuso bufakazelwe ubuqiniso"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"Ukuqinisekiswa kobuso, sicela ucindezele okuthi qinisekisa"</string>
@@ -1896,7 +1896,8 @@
<string name="lock_to_app_unlock_pin" msgid="3890940811866290782">"Cela iphinikhodi ngaphambi kokuphina"</string>
<string name="lock_to_app_unlock_pattern" msgid="2694204070499712503">"Cela iphethini yokuvula ngaphambi kokususa ukuphina"</string>
<string name="lock_to_app_unlock_password" msgid="9126722403506560473">"Cela iphasiwedi ngaphambi kokususa ukuphina"</string>
- <string name="package_installed_device_owner" msgid="7035926868974878525">"Kufakwe umlawuli wakho"</string>
+ <!-- no translation found for package_installed_device_owner (8684974629306529138) -->
+ <skip />
<string name="package_updated_device_owner" msgid="7560272363805506941">"Kubuyekezwe umlawuli wakho"</string>
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Kususwe umlawuli wakho"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"KULUNGILE"</string>
@@ -2393,6 +2394,8 @@
<string name="profile_label_work_3" msgid="4834572253956798917">"Umsebenzi 3"</string>
<string name="profile_label_test" msgid="9168641926186071947">"Hlola"</string>
<string name="profile_label_communal" msgid="8743921499944800427">"Okomphakathi"</string>
+ <!-- no translation found for redacted_notification_message (1520587845842228816) -->
+ <skip />
<string name="redacted_notification_action_title" msgid="6942924973335920935"></string>
<string name="screen_not_shared_sensitive_content" msgid="7058419185079565001">"Okuqukethwe kwe-app kufihliwe kusuka ekwabelaneni kwesikrini ngokuvikelwa"</string>
<string name="satellite_notification_title" msgid="4026338973463121526">"Ixhumeke ngokuzenzakalelayo kusathelayithi"</string>
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index 0df49dc..3d4db80 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -4479,20 +4479,20 @@
<!-- Specify one or more <code>polling-loop-filter</code> elements inside a
<code>host-apdu-service</code> to indicate polling loop frames that
your service can handle. -->
- <!-- @FlaggedApi("android.nfc.Flags.FLAG_NFC_READ_POLLING_LOOP") -->
+ <!-- @FlaggedApi("android.nfc.nfc_read_polling_loop") -->
<declare-styleable name="PollingLoopFilter">
<!-- The polling loop frame. This attribute is mandatory. -->
<attr name="name" />
<!-- Whether or not the system should automatically start a transaction when this polling
loop filter matches. If not set, default value is false. -->
- <!-- @FlaggedApi("android.nfc.Flags.FLAG_NFC_READ_POLLING_LOOP") -->
+ <!-- @FlaggedApi("android.nfc.nfc_read_polling_loop") -->
<attr name="autoTransact" format="boolean"/>
</declare-styleable>
<!-- Specify one or more <code>polling-loop-pattern-filter</code> elements inside a
<code>host-apdu-service</code> to indicate polling loop frames that
your service can handle. -->
- <!-- @FlaggedApi("android.nfc.Flags.FLAG_NFC_READ_POLLING_LOOP") -->
+ <!-- @FlaggedApi("android.nfc.nfc_read_polling_loop") -->
<declare-styleable name="PollingLoopPatternFilter">
<!-- The patter to match polling loop frames to, must to be compatible with
{@link java.util.regex.Pattern#compile(String)} and only contain hexadecimal numbers and
@@ -4500,7 +4500,7 @@
<attr name="name" />
<!-- Whether or not the system should automatically start a transaction when this polling
loop filter matches. If not set, default value is false. -->
- <!-- @FlaggedApi("android.nfc.Flags.FLAG_NFC_READ_POLLING_LOOP") -->
+ <!-- @FlaggedApi("android.nfc.nfc_read_polling_loop") -->
<attr name="autoTransact" format="boolean"/>
</declare-styleable>
diff --git a/core/res/res/values/config_battery_stats.xml b/core/res/res/values/config_battery_stats.xml
index ae47899..8d97362 100644
--- a/core/res/res/values/config_battery_stats.xml
+++ b/core/res/res/values/config_battery_stats.xml
@@ -35,6 +35,9 @@
<!-- Mobile Radio power stats collection throttle period in milliseconds. -->
<integer name="config_defaultPowerStatsThrottlePeriodMobileRadio">3600000</integer>
+ <!-- Mobile Radio power stats collection throttle period in milliseconds. -->
+ <integer name="config_defaultPowerStatsThrottlePeriodWifi">3600000</integer>
+
<!-- PowerStats aggregation period in milliseconds. This is the interval at which the power
stats aggregation procedure is performed and the results stored in PowerStatsStore. -->
<integer name="config_powerStatsAggregationPeriod">14400000</integer>
diff --git a/core/res/res/values/public-staging.xml b/core/res/res/values/public-staging.xml
index 4be8c1b..c84f781 100644
--- a/core/res/res/values/public-staging.xml
+++ b/core/res/res/values/public-staging.xml
@@ -145,7 +145,7 @@
<public name="fragmentSuffix"/>
<!-- @FlaggedApi("com.android.text.flags.use_bounds_for_width") -->
<public name="useBoundsForWidth"/>
- <!-- @FlaggedApi("android.nfc.Flags.FLAG_NFC_READ_POLLING_LOOP") -->
+ <!-- @FlaggedApi("android.nfc.nfc_read_polling_loop") -->
<public name="autoTransact"/>
<!-- @FlaggedApi("com.android.window.flags.enforce_edge_to_edge") -->
<public name="windowOptOutEdgeToEdgeEnforcement"/>
@@ -159,7 +159,7 @@
<public name="contentSensitivity" />
<!-- @FlaggedApi("android.view.inputmethod.connectionless_handwriting") -->
<public name="supportsConnectionlessStylusHandwriting" />
- <!-- @FlaggedApi("android.nfc.Flags.FLAG_OBSERVE_MODE") -->
+ <!-- @FlaggedApi("android.nfc.nfc_observe_mode") -->
<public name="shouldDefaultToObserveMode"/>
<!-- @FlaggedApi("android.security.asm_restrictions_enabled") -->
<public name="allowCrossUidActivitySwitchFromBelow"/>
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index f31d390..e96240d 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -1018,6 +1018,9 @@
<!-- The title to use when a dream is opened in preview mode. [CHAR LIMIT=NONE] -->
<string name="dream_preview_title">Preview, <xliff:g id="dream_name" example="Clock">%1$s</xliff:g></string>
+ <!-- The title to use when a dream is open in accessibility mode to let users know to double tap to dismiss the dream [CHAR LIMIT=32] -->
+ <string name="dream_accessibility_action_click">dismiss</string>
+
<!-- Permissions -->
<!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
@@ -6436,10 +6439,8 @@
<!-- Communal profile label on a screen. This can be used as a tab label for this profile in tabbed views and can be used to represent the profile in sharing surfaces, etc. [CHAR LIMIT=20] -->
<string name="profile_label_communal">Communal</string>
- <!-- Notification message used when a notification's normal message contains sensitive information. -->
- <!-- TODO b/301960090: replace with redacted message string and action title, when/if UX provides one -->
- <!-- DO NOT TRANSLATE -->
- <string name="redacted_notification_message"></string>
+ <!-- Notification message used when a notification's normal message contains sensitive information [CHAR_LIMIT=NOTIF_BODY] -->
+ <string name="redacted_notification_message">Sensitive notification content hidden</string>
<!-- Notification action title used instead of a notification's normal title sensitive [CHAR_LIMIT=NOTIF_BODY] -->
<string name="redacted_notification_action_title"></string>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index ead5827..0bf6347 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -4471,6 +4471,7 @@
<java-symbol type="string" name="capability_title_canTakeScreenshot" />
<java-symbol type="string" name="dream_preview_title" />
+ <java-symbol type="string" name="dream_accessibility_action_click" />
<java-symbol type="string" name="config_servicesExtensionPackage" />
@@ -5218,6 +5219,7 @@
<java-symbol type="bool" name="config_batteryStatsResetOnUnplugAfterSignificantCharge" />
<java-symbol type="integer" name="config_defaultPowerStatsThrottlePeriodCpu" />
<java-symbol type="integer" name="config_defaultPowerStatsThrottlePeriodMobileRadio" />
+ <java-symbol type="integer" name="config_defaultPowerStatsThrottlePeriodWifi" />
<java-symbol type="integer" name="config_powerStatsAggregationPeriod" />
<java-symbol type="integer" name="config_aggregatedPowerStatsSpanDuration" />
@@ -5380,6 +5382,7 @@
<java-symbol type="string" name="satellite_notification_open_message" />
<java-symbol type="string" name="satellite_notification_how_it_works" />
<java-symbol type="drawable" name="ic_satellite_alt_24px" />
+ <java-symbol type="drawable" name="ic_android_satellite_24px" />
<!-- DisplayManager configs. -->
<java-symbol type="bool" name="config_evenDimmerEnabled" />
diff --git a/core/tests/coretests/src/android/app/ApplicationLoadersTest.java b/core/tests/coretests/src/android/app/ApplicationLoadersTest.java
index 3cb62b9..565e21d 100644
--- a/core/tests/coretests/src/android/app/ApplicationLoadersTest.java
+++ b/core/tests/coretests/src/android/app/ApplicationLoadersTest.java
@@ -40,6 +40,8 @@
private static final String LIB_A = "/system/framework/android.hidl.base-V1.0-java.jar";
// a library installed onto the device which only depends on A
private static final String LIB_DEP_A = "/system/framework/android.hidl.manager-V1.0-java.jar";
+ // a commonly used, non-BCP, app-facing library installed onto the device
+ private static final String LIB_APACHE_HTTP = "/system/framework/org.apache.http.legacy.jar";
private static SharedLibraryInfo createLib(String zip) {
return new SharedLibraryInfo(
@@ -137,4 +139,15 @@
loaders.createAndCacheNonBootclasspathSystemClassLoaders(Lists.newArrayList(libB, libA));
}
+
+ @Test
+ public void testCacheApacheHttpLegacy() {
+ ApplicationLoaders loaders = new ApplicationLoaders();
+ SharedLibraryInfo libApacheHttp = createLib(LIB_APACHE_HTTP);
+
+ loaders.createAndCacheNonBootclasspathSystemClassLoaders(Lists.newArrayList(libApacheHttp));
+
+ assertNotNull(loaders.getCachedNonBootclasspathSystemLib(
+ LIB_APACHE_HTTP, null, null, null));
+ }
}
diff --git a/core/tests/coretests/src/android/app/servertransaction/ClientTransactionListenerControllerTest.java b/core/tests/coretests/src/android/app/servertransaction/ClientTransactionListenerControllerTest.java
index f8c2d6a..b6f4429 100644
--- a/core/tests/coretests/src/android/app/servertransaction/ClientTransactionListenerControllerTest.java
+++ b/core/tests/coretests/src/android/app/servertransaction/ClientTransactionListenerControllerTest.java
@@ -21,6 +21,7 @@
import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
import static com.android.window.flags.Flags.FLAG_BUNDLE_CLIENT_TRANSACTION_FLAG;
+import static com.android.window.flags.Flags.FLAG_WINDOW_TOKEN_CONFIG_THREAD_SAFE;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
@@ -189,6 +190,8 @@
@Test
public void testWindowTokenClient_onConfigurationChanged() {
+ mSetFlagsRule.enableFlags(FLAG_WINDOW_TOKEN_CONFIG_THREAD_SAFE);
+
doNothing().when(mController).onContextConfigurationPreChanged(any());
doNothing().when(mController).onContextConfigurationPostChanged(any());
diff --git a/core/tests/coretests/src/android/database/DatabaseUtilsTest.java b/core/tests/coretests/src/android/database/DatabaseUtilsTest.java
index 2323527..e25fdf9 100644
--- a/core/tests/coretests/src/android/database/DatabaseUtilsTest.java
+++ b/core/tests/coretests/src/android/database/DatabaseUtilsTest.java
@@ -78,7 +78,8 @@
final int sel = STATEMENT_SELECT;
assertEquals(sel, getSqlStatementType("SELECT"));
assertEquals(sel, getSqlStatementType(" SELECT"));
- assertEquals(sel, getSqlStatementType(" \n SELECT"));
+ assertEquals(sel, getSqlStatementType(" \n\r\f\t SELECT"));
+ assertEquals(sel, getSqlStatementType(" \n\r\f\t SEL"));
final int upd = STATEMENT_UPDATE;
assertEquals(upd, getSqlStatementType("UPDATE"));
@@ -89,12 +90,21 @@
assertEquals(ddl, getSqlStatementType("ALTER TABLE t1 ADD COLUMN j int"));
assertEquals(ddl, getSqlStatementType("CREATE TABLE t1 (i int)"));
+ // Verify that the answers are case-insensitive
+ assertEquals(sel, getSqlStatementType("select"));
+ assertEquals(sel, getSqlStatementType("sElect"));
+ assertEquals(sel, getSqlStatementType("sELECT"));
+ assertEquals(sel, getSqlStatementType("seLECT"));
+
// Short statements, leading comments, and WITH are decoded to "other" in the public API.
final int othr = STATEMENT_OTHER;
assertEquals(othr, getSqlStatementType("SE"));
assertEquals(othr, getSqlStatementType("SE LECT"));
assertEquals(othr, getSqlStatementType("-- cmt\n SE"));
assertEquals(othr, getSqlStatementType("WITH"));
+ assertEquals(othr, getSqlStatementType("-"));
+ assertEquals(othr, getSqlStatementType("--"));
+ assertEquals(othr, getSqlStatementType("*/* foo */ SEL"));
// Verify that leading line-comments are skipped.
assertEquals(sel, getSqlStatementType("-- cmt\n SELECT"));
diff --git a/core/tests/coretests/src/android/tracing/OWNERS b/core/tests/coretests/src/android/tracing/OWNERS
new file mode 100644
index 0000000..86a7e88
--- /dev/null
+++ b/core/tests/coretests/src/android/tracing/OWNERS
@@ -0,0 +1 @@
+include platform/development:/tools/winscope/OWNERS
\ No newline at end of file
diff --git a/core/tests/coretests/src/android/tracing/perfetto/DataSourceTest.java b/core/tests/coretests/src/android/tracing/perfetto/DataSourceTest.java
index 030d420..6ae3d65 100644
--- a/core/tests/coretests/src/android/tracing/perfetto/DataSourceTest.java
+++ b/core/tests/coretests/src/android/tracing/perfetto/DataSourceTest.java
@@ -16,14 +16,15 @@
package android.tracing.perfetto;
-import static android.internal.perfetto.protos.PerfettoTrace.TestEvent.PAYLOAD;
-import static android.internal.perfetto.protos.PerfettoTrace.TestEvent.TestPayload.SINGLE_INT;
-import static android.internal.perfetto.protos.PerfettoTrace.TracePacket.FOR_TESTING;
+import static android.internal.perfetto.protos.TestEventOuterClass.TestEvent.PAYLOAD;
+import static android.internal.perfetto.protos.TestEventOuterClass.TestEvent.TestPayload.SINGLE_INT;
+import static android.internal.perfetto.protos.TracePacketOuterClass.TracePacket.FOR_TESTING;
import static java.io.File.createTempFile;
import static java.nio.file.Files.createTempDirectory;
-import android.internal.perfetto.protos.PerfettoTrace;
+import android.internal.perfetto.protos.DataSourceConfigOuterClass.DataSourceConfig;
+import android.internal.perfetto.protos.TestConfigOuterClass.TestConfig;
import android.tools.ScenarioBuilder;
import android.tools.Tag;
import android.tools.io.TraceType;
@@ -46,6 +47,9 @@
import org.junit.Test;
import org.junit.runner.RunWith;
+import perfetto.protos.PerfettoConfig;
+import perfetto.protos.TracePacketOuterClass;
+
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
@@ -56,9 +60,6 @@
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
-import perfetto.protos.PerfettoConfig;
-import perfetto.protos.TracePacketOuterClass;
-
@RunWith(AndroidJUnit4.class)
public class DataSourceTest {
private final File mTracingDirectory = createTempDirectory("temp").toFile();
@@ -328,19 +329,19 @@
int configDummyIntValue = 0;
while (configStream.get().nextField() != ProtoInputStream.NO_MORE_FIELDS) {
if (configStream.get().getFieldNumber()
- == (int) PerfettoTrace.DataSourceConfig.FOR_TESTING) {
+ == (int) DataSourceConfig.FOR_TESTING) {
final long forTestingToken = configStream.get()
- .start(PerfettoTrace.DataSourceConfig.FOR_TESTING);
+ .start(DataSourceConfig.FOR_TESTING);
while (configStream.get().nextField() != ProtoInputStream.NO_MORE_FIELDS) {
if (configStream.get().getFieldNumber()
- == (int) PerfettoTrace.TestConfig.DUMMY_FIELDS) {
+ == (int) TestConfig.DUMMY_FIELDS) {
final long dummyFieldsToken = configStream.get()
- .start(PerfettoTrace.TestConfig.DUMMY_FIELDS);
+ .start(TestConfig.DUMMY_FIELDS);
while (configStream.get().nextField() != ProtoInputStream.NO_MORE_FIELDS) {
if (configStream.get().getFieldNumber()
- == (int) PerfettoTrace.TestConfig.DummyFields.FIELD_INT32) {
+ == (int) TestConfig.DummyFields.FIELD_INT32) {
int val = configStream.get().readInt(
- PerfettoTrace.TestConfig.DummyFields.FIELD_INT32);
+ TestConfig.DummyFields.FIELD_INT32);
if (val != 0) {
configDummyIntValue = val;
break;
diff --git a/data/etc/com.android.settings.xml b/data/etc/com.android.settings.xml
index cd68503..7a4b6bc 100644
--- a/data/etc/com.android.settings.xml
+++ b/data/etc/com.android.settings.xml
@@ -68,5 +68,6 @@
<permission name="android.permission.SEND_SAFETY_CENTER_UPDATE" />
<permission name="android.permission.LIST_ENABLED_CREDENTIAL_PROVIDERS" />
<permission name="android.permission.SATELLITE_COMMUNICATION" />
+ <permission name="android.permission.READ_SYSTEM_GRAMMATICAL_GENDER" />
</privapp-permissions>
</permissions>
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/DividerPresenter.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/DividerPresenter.java
index 0a5a81b..a0d6fce 100644
--- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/DividerPresenter.java
+++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/DividerPresenter.java
@@ -33,6 +33,7 @@
import static androidx.window.extensions.embedding.SplitPresenter.CONTAINER_POSITION_RIGHT;
import static androidx.window.extensions.embedding.SplitPresenter.CONTAINER_POSITION_TOP;
+import android.annotation.DimenRes;
import android.annotation.Nullable;
import android.app.ActivityThread;
import android.content.Context;
@@ -61,7 +62,6 @@
import android.window.WindowContainerTransaction;
import androidx.annotation.GuardedBy;
-import androidx.annotation.IdRes;
import androidx.annotation.NonNull;
import androidx.window.extensions.core.util.function.Consumer;
import androidx.window.extensions.embedding.SplitAttributes.SplitType;
@@ -341,7 +341,7 @@
applicationContext.getResources().getDisplayMetrics());
}
- private static int getDimensionDp(@IdRes int resId) {
+ private static int getDimensionDp(@DimenRes int resId) {
final Context context = ActivityThread.currentActivityThread().getApplication();
final int px = context.getResources().getDimensionPixelSize(resId);
return (int) TypedValue.convertPixelsToDimension(
@@ -431,6 +431,9 @@
return null;
}
int widthDp = dividerAttributes.getWidthDp();
+ float minRatio = dividerAttributes.getPrimaryMinRatio();
+ float maxRatio = dividerAttributes.getPrimaryMaxRatio();
+
if (widthDp == WIDTH_SYSTEM_DEFAULT) {
widthDp = DEFAULT_DIVIDER_WIDTH_DP;
}
@@ -439,16 +442,14 @@
// Draggable divider width must be larger than the drag handle size.
widthDp = Math.max(widthDp,
getDimensionDp(R.dimen.activity_embedding_divider_touch_target_width));
- }
- float minRatio = dividerAttributes.getPrimaryMinRatio();
- if (minRatio == RATIO_SYSTEM_DEFAULT) {
- minRatio = DEFAULT_MIN_RATIO;
- }
-
- float maxRatio = dividerAttributes.getPrimaryMaxRatio();
- if (maxRatio == RATIO_SYSTEM_DEFAULT) {
- maxRatio = DEFAULT_MAX_RATIO;
+ // Update minRatio and maxRatio only when it is a draggable divider.
+ if (minRatio == RATIO_SYSTEM_DEFAULT) {
+ minRatio = DEFAULT_MIN_RATIO;
+ }
+ if (maxRatio == RATIO_SYSTEM_DEFAULT) {
+ maxRatio = DEFAULT_MAX_RATIO;
+ }
}
return new DividerAttributes.Builder(dividerAttributes)
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/JetpackTaskFragmentOrganizer.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/JetpackTaskFragmentOrganizer.java
index 32f2d67..a23a4741 100644
--- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/JetpackTaskFragmentOrganizer.java
+++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/JetpackTaskFragmentOrganizer.java
@@ -354,14 +354,14 @@
void setTaskFragmentIsolatedNavigation(@NonNull WindowContainerTransaction wct,
@NonNull IBinder fragmentToken, boolean isolatedNav) {
final TaskFragmentOperation operation = new TaskFragmentOperation.Builder(
- OP_TYPE_SET_ISOLATED_NAVIGATION).setIsolatedNav(isolatedNav).build();
+ OP_TYPE_SET_ISOLATED_NAVIGATION).setBooleanValue(isolatedNav).build();
wct.addTaskFragmentOperation(fragmentToken, operation);
}
void setTaskFragmentDimOnTask(@NonNull WindowContainerTransaction wct,
@NonNull IBinder fragmentToken, boolean dimOnTask) {
final TaskFragmentOperation operation = new TaskFragmentOperation.Builder(
- OP_TYPE_SET_DIM_ON_TASK).setDimOnTask(dimOnTask).build();
+ OP_TYPE_SET_DIM_ON_TASK).setBooleanValue(dimOnTask).build();
wct.addTaskFragmentOperation(fragmentToken, operation);
}
diff --git a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/DividerPresenterTest.java b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/DividerPresenterTest.java
index de0171d..8aca92e 100644
--- a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/DividerPresenterTest.java
+++ b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/DividerPresenterTest.java
@@ -59,7 +59,8 @@
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
import java.util.concurrent.Executor;
@@ -74,6 +75,9 @@
@RunWith(AndroidJUnit4.class)
public class DividerPresenterTest {
@Rule
+ public MockitoRule rule = MockitoJUnit.rule();
+
+ @Rule
public final SetFlagsRule mSetFlagRule = new SetFlagsRule();
private static final int MOCK_TASK_ID = 1234;
@@ -118,7 +122,6 @@
@Before
public void setUp() {
- MockitoAnnotations.initMocks(this);
mSetFlagRule.enableFlags(Flags.FLAG_ACTIVITY_EMBEDDING_INTERACTIVE_DIVIDER_FLAG);
when(mTaskContainer.getTaskId()).thenReturn(MOCK_TASK_ID);
@@ -263,6 +266,22 @@
}
@Test
+ public void testSanitizeDividerAttributes_setDefaultValues_fixedDivider() {
+ DividerAttributes attributes =
+ new DividerAttributes.Builder(DividerAttributes.DIVIDER_TYPE_FIXED).build();
+ DividerAttributes sanitized = DividerPresenter.sanitizeDividerAttributes(attributes);
+
+ assertEquals(DividerAttributes.DIVIDER_TYPE_FIXED, sanitized.getDividerType());
+ assertEquals(DividerPresenter.DEFAULT_DIVIDER_WIDTH_DP, sanitized.getWidthDp());
+
+ // The ratios should not be set for fixed divider
+ assertEquals(DividerAttributes.RATIO_SYSTEM_DEFAULT, sanitized.getPrimaryMinRatio(),
+ 0.0f /* delta */);
+ assertEquals(DividerAttributes.RATIO_SYSTEM_DEFAULT, sanitized.getPrimaryMaxRatio(),
+ 0.0f /* delta */);
+ }
+
+ @Test
public void testSanitizeDividerAttributes_notChangingValidValues() {
DividerAttributes attributes =
new DividerAttributes.Builder(DividerAttributes.DIVIDER_TYPE_DRAGGABLE)
diff --git a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/JetpackTaskFragmentOrganizerTest.java b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/JetpackTaskFragmentOrganizerTest.java
index 6f37e9c..76e6a0f 100644
--- a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/JetpackTaskFragmentOrganizerTest.java
+++ b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/JetpackTaskFragmentOrganizerTest.java
@@ -42,10 +42,12 @@
import androidx.test.filters.SmallTest;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
import java.util.ArrayList;
@@ -61,6 +63,9 @@
@SmallTest
@RunWith(AndroidJUnit4.class)
public class JetpackTaskFragmentOrganizerTest {
+ @Rule
+ public MockitoRule rule = MockitoJUnit.rule();
+
@Mock
private WindowContainerTransaction mTransaction;
@Mock
@@ -73,7 +78,6 @@
@Before
public void setup() {
- MockitoAnnotations.initMocks(this);
mOrganizer = new JetpackTaskFragmentOrganizer(Runnable::run, mCallback);
mOrganizer.registerOrganizer();
spyOn(mOrganizer);
diff --git a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/OverlayPresentationTest.java b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/OverlayPresentationTest.java
index b1b1984..50abdfd 100644
--- a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/OverlayPresentationTest.java
+++ b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/OverlayPresentationTest.java
@@ -81,7 +81,8 @@
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
import java.util.ArrayList;
import java.util.List;
@@ -98,6 +99,8 @@
@SmallTest
@RunWith(AndroidJUnit4.class)
public class OverlayPresentationTest {
+ @Rule
+ public MockitoRule rule = MockitoJUnit.rule();
@Rule
public final SetFlagsRule mSetFlagRule = new SetFlagsRule();
@@ -126,7 +129,6 @@
@Before
public void setUp() {
- MockitoAnnotations.initMocks(this);
doReturn(new WindowLayoutInfo(new ArrayList<>())).when(mWindowLayoutComponent)
.getCurrentWindowLayoutInfo(anyInt(), any());
DeviceStateManagerFoldingFeatureProducer producer =
diff --git a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/SplitControllerTest.java b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/SplitControllerTest.java
index 3441c2b..8bc3a30 100644
--- a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/SplitControllerTest.java
+++ b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/SplitControllerTest.java
@@ -111,7 +111,8 @@
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
import java.util.ArrayList;
import java.util.Collections;
@@ -137,6 +138,9 @@
new ComponentName("test", "placeholder"));
@Rule
+ public MockitoRule rule = MockitoJUnit.rule();
+
+ @Rule
public final SetFlagsRule mSetFlagRule = new SetFlagsRule();
private Activity mActivity;
@@ -166,7 +170,6 @@
@Before
public void setUp() {
- MockitoAnnotations.initMocks(this);
doReturn(new WindowLayoutInfo(new ArrayList<>())).when(mWindowLayoutComponent)
.getCurrentWindowLayoutInfo(anyInt(), any());
DeviceStateManagerFoldingFeatureProducer producer =
diff --git a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/SplitPresenterTest.java b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/SplitPresenterTest.java
index 62d8aa3..c677484 100644
--- a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/SplitPresenterTest.java
+++ b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/SplitPresenterTest.java
@@ -85,10 +85,12 @@
import androidx.window.extensions.layout.WindowLayoutInfo;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
import java.util.ArrayList;
@@ -106,6 +108,10 @@
public class SplitPresenterTest {
private Activity mActivity;
+
+ @Rule
+ public MockitoRule rule = MockitoJUnit.rule();
+
@Mock
private Resources mActivityResources;
@Mock
@@ -119,7 +125,6 @@
@Before
public void setUp() {
- MockitoAnnotations.initMocks(this);
doReturn(new WindowLayoutInfo(new ArrayList<>())).when(mWindowLayoutComponent)
.getCurrentWindowLayoutInfo(anyInt(), any());
DeviceStateManagerFoldingFeatureProducer producer =
diff --git a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/TaskContainerTest.java b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/TaskContainerTest.java
index a5995a3..8913b22 100644
--- a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/TaskContainerTest.java
+++ b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/TaskContainerTest.java
@@ -42,11 +42,12 @@
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;
-import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
import java.util.List;
@@ -60,14 +61,12 @@
@SmallTest
@RunWith(AndroidJUnit4.class)
public class TaskContainerTest {
+ @Rule
+ public MockitoRule rule = MockitoJUnit.rule();
+
@Mock
private SplitController mController;
- @Before
- public void setup() {
- MockitoAnnotations.initMocks(this);
- }
-
@Test
public void testGetWindowingModeForSplitTaskFragment() {
final TaskContainer taskContainer = createTestTaskContainer();
diff --git a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/TaskFragmentAnimationControllerTest.java b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/TaskFragmentAnimationControllerTest.java
index 379ea0c..a1e9f08 100644
--- a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/TaskFragmentAnimationControllerTest.java
+++ b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/TaskFragmentAnimationControllerTest.java
@@ -27,10 +27,12 @@
import androidx.test.filters.SmallTest;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
/**
* Test class for {@link TaskFragmentAnimationController}.
@@ -42,13 +44,15 @@
@SmallTest
@RunWith(AndroidJUnit4.class)
public class TaskFragmentAnimationControllerTest {
+ @Rule
+ public MockitoRule rule = MockitoJUnit.rule();
+
@Mock
private TaskFragmentOrganizer mOrganizer;
private TaskFragmentAnimationController mAnimationController;
@Before
public void setup() {
- MockitoAnnotations.initMocks(this);
mAnimationController = new TaskFragmentAnimationController(mOrganizer);
}
diff --git a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/TaskFragmentContainerTest.java b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/TaskFragmentContainerTest.java
index 0af4179..abfc9c8 100644
--- a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/TaskFragmentContainerTest.java
+++ b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/TaskFragmentContainerTest.java
@@ -51,10 +51,12 @@
import com.google.android.collect.Lists;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
import java.util.ArrayList;
import java.util.List;
@@ -71,6 +73,9 @@
@SmallTest
@RunWith(AndroidJUnit4.class)
public class TaskFragmentContainerTest {
+ @Rule
+ public MockitoRule rule = MockitoJUnit.rule();
+
@Mock
private SplitPresenter mPresenter;
private SplitController mController;
@@ -83,7 +88,6 @@
@Before
public void setup() {
- MockitoAnnotations.initMocks(this);
DeviceStateManagerFoldingFeatureProducer producer =
mock(DeviceStateManagerFoldingFeatureProducer.class);
WindowLayoutComponentImpl component = mock(WindowLayoutComponentImpl.class);
diff --git a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/TransactionManagerTest.java b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/TransactionManagerTest.java
index 459b6d2..2598dd6 100644
--- a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/TransactionManagerTest.java
+++ b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/TransactionManagerTest.java
@@ -41,10 +41,12 @@
import androidx.window.extensions.embedding.TransactionManager.TransactionRecord;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
/**
* Test class for {@link TransactionManager}.
@@ -56,6 +58,8 @@
@SmallTest
@RunWith(AndroidJUnit4.class)
public class TransactionManagerTest {
+ @Rule
+ public MockitoRule rule = MockitoJUnit.rule();
@Mock
private TaskFragmentOrganizer mOrganizer;
@@ -63,7 +67,6 @@
@Before
public void setup() {
- MockitoAnnotations.initMocks(this);
mTransactionManager = new TransactionManager(mOrganizer);
}
diff --git a/libs/WindowManager/Shell/OWNERS b/libs/WindowManager/Shell/OWNERS
index 0c4fd14..ebebd8a 100644
--- a/libs/WindowManager/Shell/OWNERS
+++ b/libs/WindowManager/Shell/OWNERS
@@ -1,5 +1,5 @@
xutan@google.com
# Give submodule owners in shell resource approval
-per-file res*/*/*.xml = atsjenk@google.com, hwwang@google.com, jorgegil@google.com, lbill@google.com, madym@google.com, nmusgrave@google.com, pbdr@google.com, tkachenkoi@google.com
+per-file res*/*/*.xml = atsjenk@google.com, hwwang@google.com, jorgegil@google.com, lbill@google.com, madym@google.com, nmusgrave@google.com, pbdr@google.com, tkachenkoi@google.com, mpodolian@google.com, liranb@google.com
per-file res*/*/tv_*.xml = bronger@google.com
diff --git a/libs/WindowManager/Shell/res/values-de/strings.xml b/libs/WindowManager/Shell/res/values-de/strings.xml
index 7b5c471..bcdc2a9 100644
--- a/libs/WindowManager/Shell/res/values-de/strings.xml
+++ b/libs/WindowManager/Shell/res/values-de/strings.xml
@@ -62,7 +62,7 @@
<string name="bubble_content_description_single" msgid="8495748092720065813">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> von <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
<string name="bubble_content_description_stack" msgid="8071515017164630429">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> aus <xliff:g id="APP_NAME">%2$s</xliff:g> und <xliff:g id="BUBBLE_COUNT">%3$d</xliff:g> weiteren"</string>
<string name="bubble_accessibility_action_move_top_left" msgid="2644118920500782758">"Nach oben links verschieben"</string>
- <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Nach rechts oben verschieben"</string>
+ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Nach oben rechts verschieben"</string>
<string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Nach unten links verschieben"</string>
<string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Nach unten rechts verschieben"</string>
<string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> maximieren"</string>
diff --git a/libs/WindowManager/Shell/res/values-gl/strings.xml b/libs/WindowManager/Shell/res/values-gl/strings.xml
index 89db327..c371f7f 100644
--- a/libs/WindowManager/Shell/res/values-gl/strings.xml
+++ b/libs/WindowManager/Shell/res/values-gl/strings.xml
@@ -61,10 +61,10 @@
<string name="bubble_accessibility_action_add_back" msgid="1830101076853540953">"Engadir de novo á pilla"</string>
<string name="bubble_content_description_single" msgid="8495748092720065813">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> de <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
<string name="bubble_content_description_stack" msgid="8071515017164630429">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> de <xliff:g id="APP_NAME">%2$s</xliff:g> e <xliff:g id="BUBBLE_COUNT">%3$d</xliff:g> máis"</string>
- <string name="bubble_accessibility_action_move_top_left" msgid="2644118920500782758">"Mover á parte super. esquerda"</string>
- <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Mover á parte superior dereita"</string>
- <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Mover á parte infer. esquerda"</string>
- <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Mover á parte inferior dereita"</string>
+ <string name="bubble_accessibility_action_move_top_left" msgid="2644118920500782758">"Mover arriba á esquerda"</string>
+ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Mover arriba á dereita"</string>
+ <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Mover abaixo á esquerda"</string>
+ <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Mover abaixo á dereita"</string>
<string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"despregar <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"contraer <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"Configuración de <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
diff --git a/libs/WindowManager/Shell/res/values-ne/strings.xml b/libs/WindowManager/Shell/res/values-ne/strings.xml
index e4830af..a5bd2ab 100644
--- a/libs/WindowManager/Shell/res/values-ne/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ne/strings.xml
@@ -69,7 +69,7 @@
<string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"<xliff:g id="BUBBLE_TITLE">%1$s</xliff:g> à€à¥à€²à¥à€¯à€Ÿà€ªà¥à€ž à€à€°à¥à€šà¥à€¹à¥à€žà¥"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> à€à€Ÿ à€žà¥à€à€¿à€à€¹à€°à¥"</string>
<string name="bubble_dismiss_text" msgid="8816558050659478158">"à€¬à€¬à€² à€à€Ÿà€°à¥à€ à€à€°à¥à€šà¥à€¹à¥à€žà¥"</string>
- <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"à€µà€Ÿà€°à¥à€€à€Ÿà€²à€Ÿà€ª à€¬à€¬à€²à€à¥ à€°à¥à€ªà€®à€Ÿ à€šà€Šà¥à€à€Ÿà€à€¯à¥à€žà¥"</string>
+ <string name="bubbles_dont_bubble_conversation" msgid="310000317885712693">"à€µà€Ÿà€°à¥à€€à€Ÿà€²à€Ÿà€ª à€¬à€¬à€²à€à¥ à€°à¥à€ªà€®à€Ÿ à€šà€Šà¥à€à€Ÿà€à€šà¥à€¹à¥à€žà¥"</string>
<string name="bubbles_user_education_title" msgid="2112319053732691899">"à€¬à€¬à€²à€¹à€°à¥ à€ªà¥à€°à€¯à¥à€ à€à€°à¥ à€à¥à€°à€Ÿà€à€Ÿà€šà¥ à€à€°à¥à€šà¥à€¹à¥à€žà¥"</string>
<string name="bubbles_user_education_description" msgid="4215862563054175407">"à€šà€¯à€Ÿà€ à€µà€Ÿà€°à¥à€€à€Ÿà€²à€Ÿà€ªà€¹à€°à¥ à€€à¥à€°à€šà¥ à€à€à€à€š à€µà€Ÿ à€¬à€¬à€²à€à€Ÿ à€°à¥à€ªà€®à€Ÿ à€Šà¥à€à€¿à€šà¥à€à€šà¥à¥€ à€¬à€¬à€² à€à¥à€²à¥à€š à€à¥à€¯à€Ÿà€ª à€à€°à¥à€šà¥à€¹à¥à€žà¥à¥€ à€¬à€¬à€² à€žà€Ÿà€°à¥à€š à€žà¥ à€¬à€¬à€²à€²à€Ÿà€ à€¡à¥à€°à¥à€¯à€Ÿà€ à€à€°à¥à€šà¥à€¹à¥à€žà¥à¥€"</string>
<string name="bubbles_user_education_manage_title" msgid="7042699946735628035">"à€à¥à€šà€žà¥à€à¥ à€¬à¥à€²à€Ÿ à€¬à€¬à€²à€¹à€°à¥ à€šà€¿à€¯à€šà¥à€€à¥à€°à€£ à€à€°à¥à€šà¥à€¹à¥à€žà¥"</string>
@@ -99,7 +99,7 @@
<string name="letterbox_restart_dialog_description" msgid="6096946078246557848">"à€¯à¥ à€à€ª à€€à€ªà€Ÿà€à€à€à¥ à€žà¥à€à¥à€°à€¿à€šà€®à€Ÿ à€
à€ à€°à€Ÿà€®à¥à€°à¥à€žà€à€ à€Šà¥à€à€¿à€¯à¥à€žà¥ à€à€šà¥à€šà€Ÿà€à€Ÿ à€²à€Ÿà€à€¿ à€€à€ªà€Ÿà€à€ à€žà¥ à€à€ª à€°à€¿à€žà¥à€à€Ÿà€°à¥à€ à€à€°à¥à€š à€žà€à¥à€šà¥à€¹à¥à€šà¥à€ à€€à€° à€€à€ªà€Ÿà€à€à€²à¥ à€
à€¹à€¿à€²à¥à€žà€®à¥à€® à€à€°à¥à€à€Ÿ à€à¥à€°à€¿à€¯à€Ÿà€à€²à€Ÿà€ª à€µà€Ÿ à€žà¥à€ à€à€°à¥à€š à€¬à€Ÿà€à€à¥ à€ªà€°à€¿à€µà€°à¥à€€à€šà€¹à€°à¥ à€¹à€à¥à€š à€žà€à¥à€à€šà¥"</string>
<string name="letterbox_restart_cancel" msgid="1342209132692537805">"à€°à€Šà¥à€Š à€à€°à¥à€šà¥à€¹à¥à€žà¥"</string>
<string name="letterbox_restart_restart" msgid="8529976234412442973">"à€°à€¿à€žà¥à€à€Ÿà€°à¥à€ à€à€°à¥à€šà¥à€¹à¥à€žà¥"</string>
- <string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"à€«à¥à€°à€¿ à€šà€Šà¥à€à€Ÿà€à€¯à¥à€žà¥"</string>
+ <string name="letterbox_restart_dialog_checkbox_title" msgid="5252918008140768386">"à€«à¥à€°à€¿ à€šà€Šà¥à€à€Ÿà€à€šà¥à€¹à¥à€žà¥"</string>
<string name="letterbox_reachability_reposition_text" msgid="3522042240665748268">"à€¯à¥ à€à€ª à€žà€Ÿà€°à¥à€š à€¡à€¬à€²\nà€à¥à€¯à€Ÿà€ª à€à€°à¥à€šà¥à€¹à¥à€žà¥"</string>
<string name="maximize_button_text" msgid="1650859196290301963">"à€ à¥à€²à¥ à€¬à€šà€Ÿà€à€šà¥à€¹à¥à€žà¥"</string>
<string name="minimize_button_text" msgid="271592547935841753">"à€®à€¿à€šà€¿à€®à€Ÿà€à€ à€à€°à¥à€šà¥à€¹à¥à€žà¥"</string>
diff --git a/libs/WindowManager/Shell/res/values-pt-rPT/strings.xml b/libs/WindowManager/Shell/res/values-pt-rPT/strings.xml
index ff77d3b..1210fe8 100644
--- a/libs/WindowManager/Shell/res/values-pt-rPT/strings.xml
+++ b/libs/WindowManager/Shell/res/values-pt-rPT/strings.xml
@@ -62,9 +62,9 @@
<string name="bubble_content_description_single" msgid="8495748092720065813">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> de <xliff:g id="APP_NAME">%2$s</xliff:g>"</string>
<string name="bubble_content_description_stack" msgid="8071515017164630429">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> do <xliff:g id="APP_NAME">%2$s</xliff:g> e mais<xliff:g id="BUBBLE_COUNT">%3$d</xliff:g>."</string>
<string name="bubble_accessibility_action_move_top_left" msgid="2644118920500782758">"Mover p/ parte sup. esquerda"</string>
- <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Mover parte superior direita"</string>
+ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"Mover p/ parte sup. direita"</string>
<string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"Mover p/ parte infer. esquerda"</string>
- <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Mover parte inferior direita"</string>
+ <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"Mover p/ parte inf. direita"</string>
<string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"expandir <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"reduzir <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"Definições de <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
diff --git a/libs/WindowManager/Shell/res/values-ru/strings.xml b/libs/WindowManager/Shell/res/values-ru/strings.xml
index e23c1ff..971e146 100644
--- a/libs/WindowManager/Shell/res/values-ru/strings.xml
+++ b/libs/WindowManager/Shell/res/values-ru/strings.xml
@@ -61,10 +61,10 @@
<string name="bubble_accessibility_action_add_back" msgid="1830101076853540953">"ÐПбавОÑÑ ÐŸÐ±ÑаÑМП в ÑÑек"</string>
<string name="bubble_content_description_single" msgid="8495748092720065813">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> Оз пÑÐžÐ»ÐŸÐ¶ÐµÐœÐžÑ \"<xliff:g id="APP_NAME">%2$s</xliff:g>\""</string>
<string name="bubble_content_description_stack" msgid="8071515017164630429">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g> ÐŸÑ Ð¿ÑÐžÐ»ÐŸÐ¶ÐµÐœÐžÑ \"<xliff:g id="APP_NAME">%2$s</xliff:g>\" О еÑÑ <xliff:g id="BUBBLE_COUNT">%3$d</xliff:g>"</string>
- <string name="bubble_accessibility_action_move_top_left" msgid="2644118920500782758">"ÐеÑеМеÑÑО в левÑй веÑÑ
МОй ÑгПл"</string>
- <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"ÐеÑеМеÑÑО в пÑавÑй веÑÑ
МОй ÑгПл"</string>
- <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"ÐеÑеМеÑÑО в левÑй МОжМОй ÑгПл"</string>
- <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"ÐеÑеМеÑÑО в пÑавÑй МОжМОй ÑгПл"</string>
+ <string name="bubble_accessibility_action_move_top_left" msgid="2644118920500782758">"ÐеÑеЌеÑÑОÑÑ Ð² левÑй веÑÑ
МОй ÑгПл"</string>
+ <string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"ÐеÑеЌеÑÑОÑÑ Ð² пÑавÑй веÑÑ
МОй ÑгПл"</string>
+ <string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"ÐеÑеЌеÑÑОÑÑ Ð² левÑй МОжМОй ÑгПл"</string>
+ <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"ÐеÑеЌеÑÑОÑÑ Ð² пÑавÑй МОжМОй ÑгПл"</string>
<string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"РазвеÑМÑÑÑ <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"СвеÑМÑÑÑ <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"<xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>: МаÑÑÑПйкО"</string>
diff --git a/libs/WindowManager/Shell/res/values-th/strings.xml b/libs/WindowManager/Shell/res/values-th/strings.xml
index 407fbbb..fe0b74c 100644
--- a/libs/WindowManager/Shell/res/values-th/strings.xml
+++ b/libs/WindowManager/Shell/res/values-th/strings.xml
@@ -64,7 +64,7 @@
<string name="bubble_accessibility_action_move_top_left" msgid="2644118920500782758">"àž¢à¹àž²àž¢à¹àžàžà¹àž²àžàžà¹àž²àž¢àžàž"</string>
<string name="bubble_accessibility_action_move_top_right" msgid="5864594920870245525">"àž¢à¹àž²àž¢à¹àžàžà¹àž²àžàžàž§àž²àžàž"</string>
<string name="bubble_accessibility_action_move_bottom_left" msgid="850271002773745634">"àž¢à¹àž²àž¢à¹àžàžà¹àž²àžàžà¹àž²àž¢àž¥à¹àž²àž"</string>
- <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"àž¢à¹àž²àž¢à¹àžàžà¹àž²àžàžàž²àž§àž¥à¹àž²àž"</string>
+ <string name="bubble_accessibility_action_move_bottom_right" msgid="2107626346109206352">"àž¢à¹àž²àž¢à¹àžàžà¹àž²àžàžàž§àž²àž¥à¹àž²àž"</string>
<string name="bubble_accessibility_announce_expand" msgid="5388792092888203776">"àžàž¢àž²àž¢ <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string>
<string name="bubble_accessibility_announce_collapse" msgid="3178806224494537097">"àž¢àžžàž <xliff:g id="BUBBLE_TITLE">%1$s</xliff:g>"</string>
<string name="bubbles_app_settings" msgid="3617224938701566416">"àžàž²àž£àžàž±à¹àžàžà¹àž² <xliff:g id="NOTIFICATION_TITLE">%1$s</xliff:g>"</string>
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java
index d8d0d87..3244837 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java
@@ -16,6 +16,7 @@
package com.android.wm.shell;
+
import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
@@ -30,7 +31,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityManager.RunningTaskInfo;
-import android.app.AppCompatTaskInfo;
+import android.app.CameraCompatTaskInfo.CameraCompatControlState;
import android.app.TaskInfo;
import android.app.WindowConfiguration;
import android.content.LocusId;
@@ -718,8 +719,7 @@
}
@Override
- public void onCameraControlStateUpdated(
- int taskId, @AppCompatTaskInfo.CameraCompatControlState int state) {
+ public void onCameraControlStateUpdated(int taskId, @CameraCompatControlState int state) {
final TaskAppearedInfo info;
synchronized (mLock) {
info = mTasks.get(taskId);
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/back/CrossActivityBackAnimation.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/back/CrossActivityBackAnimation.kt
index 7cb5660..808c212 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/back/CrossActivityBackAnimation.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/back/CrossActivityBackAnimation.kt
@@ -94,6 +94,8 @@
private var scrimLayer: SurfaceControl? = null
private var maxScrimAlpha: Float = 0f
+ private var isLetterboxed = false
+
override fun onConfigurationChanged(newConfiguration: Configuration) {
cornerRadius = ScreenDecorationsUtils.getWindowCornerRadius(context)
}
@@ -112,9 +114,15 @@
initialTouchPos.set(backMotionEvent.touchX, backMotionEvent.touchY)
transaction.setAnimationTransaction()
-
+ isLetterboxed = closingTarget!!.taskInfo.appCompatTaskInfo.topActivityBoundsLetterboxed
+ if (isLetterboxed) {
+ // Include letterbox in back animation
+ backAnimRect.set(closingTarget!!.windowConfiguration.bounds)
+ } else {
+ // otherwise play animation on localBounds only
+ backAnimRect.set(closingTarget!!.localBounds)
+ }
// Offset start rectangle to align task bounds.
- backAnimRect.set(closingTarget!!.localBounds)
backAnimRect.offsetTo(0, 0)
startClosingRect.set(backAnimRect)
@@ -241,6 +249,7 @@
}
finishCallback = null
removeScrimLayer()
+ isLetterboxed = false
}
private fun applyTransform(leash: SurfaceControl?, rect: RectF, alpha: Float) {
@@ -274,10 +283,15 @@
scrimLayer = scrimBuilder.build()
val colorComponents = floatArrayOf(0f, 0f, 0f)
maxScrimAlpha = if (isDarkTheme) MAX_SCRIM_ALPHA_DARK else MAX_SCRIM_ALPHA_LIGHT
+ val scrimCrop = if (isLetterboxed) {
+ closingTarget!!.windowConfiguration.bounds
+ } else {
+ closingTarget!!.localBounds
+ }
transaction
.setColor(scrimLayer, colorComponents)
.setAlpha(scrimLayer!!, maxScrimAlpha)
- .setCrop(scrimLayer!!, closingTarget!!.localBounds)
+ .setCrop(scrimLayer!!, scrimCrop)
.setRelativeLayer(scrimLayer!!, closingTarget!!.leash, -1)
.show(scrimLayer)
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BadgedImageView.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BadgedImageView.java
index a67821b..0297901 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BadgedImageView.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BadgedImageView.java
@@ -288,13 +288,16 @@
/** Sets the position of the dot and badge, animating them out and back in if requested. */
void animateDotBadgePositions(boolean onLeft) {
- mOnLeft = onLeft;
-
- if (onLeft != getDotOnLeft() && shouldDrawDot()) {
- animateDotScale(0f /* showDot */, () -> {
- invalidate();
- animateDotScale(1.0f, null /* after */);
- });
+ if (onLeft != getDotOnLeft()) {
+ if (shouldDrawDot()) {
+ animateDotScale(0f /* showDot */, () -> {
+ mOnLeft = onLeft;
+ invalidate();
+ animateDotScale(1.0f, null /* after */);
+ });
+ } else {
+ mOnLeft = onLeft;
+ }
}
// TODO animate badge
showBadge();
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleExpandedView.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleExpandedView.java
index 74f087b..0b3c2ba3 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleExpandedView.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleExpandedView.java
@@ -446,6 +446,8 @@
mManageButton.setVisibility(GONE);
} else {
mTaskView = bubbleTaskView.getTaskView();
+ // reset the insets that might left after TaskView is shown in BubbleBarExpandedView
+ mTaskView.setCaptionInsets(null);
bubbleTaskView.setDelegateListener(mTaskViewListener);
// set a fixed width so it is not recalculated as part of a rotation. the width will be
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/pip/PipBoundsState.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/pip/PipBoundsState.java
index b87c2f6..7ceaaea 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/pip/PipBoundsState.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/pip/PipBoundsState.java
@@ -125,6 +125,7 @@
private @Nullable Runnable mOnMinimalSizeChangeCallback;
private @Nullable TriConsumer<Boolean, Integer, Boolean> mOnShelfVisibilityChangeCallback;
private List<Consumer<Rect>> mOnPipExclusionBoundsChangeCallbacks = new ArrayList<>();
+ private List<Consumer<Float>> mOnAspectRatioChangedCallbacks = new ArrayList<>();
// the size of the current bounds relative to the max size spec
private float mBoundsScale;
@@ -297,7 +298,12 @@
/** Set the PIP aspect ratio. */
public void setAspectRatio(float aspectRatio) {
- mAspectRatio = aspectRatio;
+ if (Float.compare(mAspectRatio, aspectRatio) != 0) {
+ mAspectRatio = aspectRatio;
+ for (Consumer<Float> callback : mOnAspectRatioChangedCallbacks) {
+ callback.accept(mAspectRatio);
+ }
+ }
}
/** Get the PIP aspect ratio. */
@@ -527,6 +533,23 @@
mOnPipExclusionBoundsChangeCallbacks.remove(onPipExclusionBoundsChangeCallback);
}
+ /** Adds callback to listen on aspect ratio change. */
+ public void addOnAspectRatioChangedCallback(
+ @NonNull Consumer<Float> onAspectRatioChangedCallback) {
+ if (!mOnAspectRatioChangedCallbacks.contains(onAspectRatioChangedCallback)) {
+ mOnAspectRatioChangedCallbacks.add(onAspectRatioChangedCallback);
+ onAspectRatioChangedCallback.accept(mAspectRatio);
+ }
+ }
+
+ /** Removes callback to listen on aspect ratio change. */
+ public void removeOnAspectRatioChangedCallback(
+ @NonNull Consumer<Float> onAspectRatioChangedCallback) {
+ if (mOnAspectRatioChangedCallbacks.contains(onAspectRatioChangedCallback)) {
+ mOnAspectRatioChangedCallbacks.remove(onAspectRatioChangedCallback);
+ }
+ }
+
public LauncherState getLauncherState() {
return mLauncherState;
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIController.java
index 86571cf..5c292f1 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIController.java
@@ -20,7 +20,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
-import android.app.AppCompatTaskInfo.CameraCompatControlState;
+import android.app.CameraCompatTaskInfo.CameraCompatControlState;
import android.app.TaskInfo;
import android.content.ComponentName;
import android.content.Context;
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUILayout.java b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUILayout.java
index a0986fa..2b0bd32 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUILayout.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUILayout.java
@@ -16,10 +16,10 @@
package com.android.wm.shell.compatui;
-import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED;
+import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED;
import android.annotation.IdRes;
-import android.app.AppCompatTaskInfo.CameraCompatControlState;
+import android.app.CameraCompatTaskInfo.CameraCompatControlState;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIWindowManager.java b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIWindowManager.java
index dbf7186..4e5c2fa 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIWindowManager.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIWindowManager.java
@@ -16,16 +16,16 @@
package com.android.wm.shell.compatui;
-import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_DISMISSED;
-import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN;
-import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED;
-import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED;
+import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_DISMISSED;
+import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN;
+import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED;
+import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED;
import static android.window.TaskConstants.TASK_CHILD_LAYER_COMPAT_UI;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.AppCompatTaskInfo;
-import android.app.AppCompatTaskInfo.CameraCompatControlState;
+import android.app.CameraCompatTaskInfo.CameraCompatControlState;
import android.app.TaskInfo;
import android.content.Context;
import android.graphics.Rect;
@@ -81,7 +81,8 @@
super(context, taskInfo, syncQueue, taskListener, displayLayout);
mCallback = callback;
mHasSizeCompat = taskInfo.appCompatTaskInfo.topActivityInSizeCompat;
- mCameraCompatControlState = taskInfo.appCompatTaskInfo.cameraCompatControlState;
+ mCameraCompatControlState =
+ taskInfo.appCompatTaskInfo.cameraCompatTaskInfo.cameraCompatControlState;
mCompatUIHintsState = compatUIHintsState;
mCompatUIConfiguration = compatUIConfiguration;
mOnRestartButtonClicked = onRestartButtonClicked;
@@ -135,7 +136,8 @@
final boolean prevHasSizeCompat = mHasSizeCompat;
final int prevCameraCompatControlState = mCameraCompatControlState;
mHasSizeCompat = taskInfo.appCompatTaskInfo.topActivityInSizeCompat;
- mCameraCompatControlState = taskInfo.appCompatTaskInfo.cameraCompatControlState;
+ mCameraCompatControlState =
+ taskInfo.appCompatTaskInfo.cameraCompatTaskInfo.cameraCompatControlState;
if (!super.updateCompatInfo(taskInfo, taskListener, canShow)) {
return false;
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/UserAspectRatioSettingsWindowManager.java b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/UserAspectRatioSettingsWindowManager.java
index 7c28099..8fb4bdb 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/UserAspectRatioSettingsWindowManager.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/UserAspectRatioSettingsWindowManager.java
@@ -237,7 +237,8 @@
final int letterboxWidth = taskInfo.topActivityLetterboxWidth;
// App is not visibly letterboxed if it covers status bar/bottom insets or matches the
// stable bounds, so don't show the button
- if (stableBounds.height() <= letterboxHeight && stableBounds.width() <= letterboxWidth) {
+ if (stableBounds.height() <= letterboxHeight && stableBounds.width() <= letterboxWidth
+ && !taskInfo.isUserFullscreenOverrideEnabled) {
return false;
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellBaseModule.java b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellBaseModule.java
index 73228de..6834e6d 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellBaseModule.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellBaseModule.java
@@ -107,6 +107,7 @@
import com.android.wm.shell.taskview.TaskViewFactoryController;
import com.android.wm.shell.taskview.TaskViewTransitions;
import com.android.wm.shell.transition.HomeTransitionObserver;
+import com.android.wm.shell.transition.MixedTransitionHandler;
import com.android.wm.shell.transition.Transitions;
import com.android.wm.shell.unfold.ShellUnfoldProgressProvider;
import com.android.wm.shell.unfold.UnfoldAnimationController;
@@ -675,6 +676,22 @@
return new TaskViewTransitions(transitions);
}
+ // Workaround for dynamic overriding with a default implementation, see {@link DynamicOverride}
+ @BindsOptionalOf
+ @DynamicOverride
+ abstract MixedTransitionHandler optionalMixedTransitionHandler();
+
+ @WMSingleton
+ @Provides
+ static Optional<MixedTransitionHandler> provideMixedTransitionHandler(
+ @DynamicOverride Optional<MixedTransitionHandler> mixedTransitionHandler
+ ) {
+ if (mixedTransitionHandler.isPresent()) {
+ return mixedTransitionHandler;
+ }
+ return Optional.empty();
+ }
+
//
// Keyguard transitions (optional feature)
//
@@ -934,6 +951,7 @@
Optional<OneHandedController> oneHandedControllerOptional,
Optional<HideDisplayCutoutController> hideDisplayCutoutControllerOptional,
Optional<ActivityEmbeddingController> activityEmbeddingOptional,
+ Optional<MixedTransitionHandler> mixedTransitionHandler,
Transitions transitions,
StartingWindowController startingWindow,
ProtoLogController protoLogController,
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java
index 1408ead..b574b81 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java
@@ -29,6 +29,7 @@
import com.android.internal.logging.UiEventLogger;
import com.android.internal.statusbar.IStatusBarService;
import com.android.launcher3.icons.IconProvider;
+import com.android.window.flags.Flags;
import com.android.wm.shell.RootTaskDisplayAreaOrganizer;
import com.android.wm.shell.ShellTaskOrganizer;
import com.android.wm.shell.WindowManagerShellWrapper;
@@ -59,6 +60,7 @@
import com.android.wm.shell.desktopmode.DesktopModeStatus;
import com.android.wm.shell.desktopmode.DesktopModeTaskRepository;
import com.android.wm.shell.desktopmode.DesktopTasksController;
+import com.android.wm.shell.desktopmode.DesktopTasksLimiter;
import com.android.wm.shell.desktopmode.DesktopTasksTransitionObserver;
import com.android.wm.shell.desktopmode.DragToDesktopTransitionHandler;
import com.android.wm.shell.desktopmode.EnterDesktopTaskTransitionHandler;
@@ -85,6 +87,7 @@
import com.android.wm.shell.taskview.TaskViewTransitions;
import com.android.wm.shell.transition.DefaultMixedHandler;
import com.android.wm.shell.transition.HomeTransitionObserver;
+import com.android.wm.shell.transition.MixedTransitionHandler;
import com.android.wm.shell.transition.Transitions;
import com.android.wm.shell.unfold.ShellUnfoldProgressProvider;
import com.android.wm.shell.unfold.UnfoldAnimationController;
@@ -371,8 +374,9 @@
//
@WMSingleton
+ @DynamicOverride
@Provides
- static DefaultMixedHandler provideDefaultMixedHandler(
+ static MixedTransitionHandler provideMixedTransitionHandler(
ShellInit shellInit,
Optional<SplitScreenController> splitScreenOptional,
@Nullable PipTransitionController pipTransitionController,
@@ -517,23 +521,39 @@
LaunchAdjacentController launchAdjacentController,
RecentsTransitionHandler recentsTransitionHandler,
MultiInstanceHelper multiInstanceHelper,
- @ShellMainThread ShellExecutor mainExecutor
- ) {
+ @ShellMainThread ShellExecutor mainExecutor,
+ Optional<DesktopTasksLimiter> desktopTasksLimiter) {
return new DesktopTasksController(context, shellInit, shellCommandHandler, shellController,
displayController, shellTaskOrganizer, syncQueue, rootTaskDisplayAreaOrganizer,
dragAndDropController, transitions, enterDesktopTransitionHandler,
exitDesktopTransitionHandler, toggleResizeDesktopTaskTransitionHandler,
dragToDesktopTransitionHandler, desktopModeTaskRepository,
desktopModeLoggerTransitionObserver, launchAdjacentController,
- recentsTransitionHandler, multiInstanceHelper, mainExecutor);
+ recentsTransitionHandler, multiInstanceHelper, mainExecutor, desktopTasksLimiter);
}
@WMSingleton
@Provides
+ static Optional<DesktopTasksLimiter> provideDesktopTasksLimiter(
+ Transitions transitions,
+ @DynamicOverride DesktopModeTaskRepository desktopModeTaskRepository,
+ ShellTaskOrganizer shellTaskOrganizer) {
+ if (!DesktopModeStatus.isEnabled() || !Flags.enableDesktopWindowingTaskLimit()) {
+ return Optional.empty();
+ }
+ return Optional.of(
+ new DesktopTasksLimiter(
+ transitions, desktopModeTaskRepository, shellTaskOrganizer));
+ }
+
+
+ @WMSingleton
+ @Provides
static DragToDesktopTransitionHandler provideDragToDesktopTransitionHandler(
Context context,
Transitions transitions,
- RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer) {
+ RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer,
+ Optional<DesktopTasksLimiter> desktopTasksLimiter) {
return new DragToDesktopTransitionHandler(context, transitions,
rootTaskDisplayAreaOrganizer);
}
@@ -541,7 +561,8 @@
@WMSingleton
@Provides
static EnterDesktopTaskTransitionHandler provideEnterDesktopModeTaskTransitionHandler(
- Transitions transitions) {
+ Transitions transitions,
+ Optional<DesktopTasksLimiter> desktopTasksLimiter) {
return new EnterDesktopTaskTransitionHandler(transitions);
}
@@ -636,7 +657,6 @@
@Provides
static Object provideIndependentShellComponentsToCreate(
DragAndDropController dragAndDropController,
- DefaultMixedHandler defaultMixedHandler,
Optional<DesktopTasksTransitionObserver> desktopTasksTransitionObserverOptional) {
return new Object();
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeStatus.java b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeStatus.java
index 32c22c0..fcddcad 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeStatus.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeStatus.java
@@ -77,6 +77,22 @@
"persist.wm.debug.desktop_mode_enforce_device_restrictions", true);
/**
+ * Default value for {@code MAX_TASK_LIMIT}.
+ */
+ @VisibleForTesting
+ public static final int DEFAULT_MAX_TASK_LIMIT = 4;
+
+ // TODO(b/335131008): add a config-overlay field for the max number of tasks in Desktop Mode
+ /**
+ * Flag declaring the maximum number of Tasks to show in Desktop Mode at any one time.
+ *
+ * <p> The limit does NOT affect Picture-in-Picture, Bubbles, or System Modals (like a screen
+ * recording window, or Bluetooth pairing window).
+ */
+ private static final int MAX_TASK_LIMIT = SystemProperties.getInt(
+ "persist.wm.debug.desktop_max_task_limit", DEFAULT_MAX_TASK_LIMIT);
+
+ /**
* Return {@code true} if desktop windowing is enabled
*/
public static boolean isEnabled() {
@@ -124,6 +140,13 @@
}
/**
+ * Return the maximum limit on the number of Tasks to show in Desktop Mode at any one time.
+ */
+ static int getMaxTaskLimit() {
+ return MAX_TASK_LIMIT;
+ }
+
+ /**
* Return {@code true} if the current device supports desktop mode.
*/
@VisibleForTesting
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeTaskRepository.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeTaskRepository.kt
index 50cea01..2d508b2 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeTaskRepository.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeTaskRepository.kt
@@ -47,6 +47,7 @@
*/
val activeTasks: ArraySet<Int> = ArraySet(),
val visibleTasks: ArraySet<Int> = ArraySet(),
+ val minimizedTasks: ArraySet<Int> = ArraySet(),
var stashed: Boolean = false
)
@@ -202,6 +203,13 @@
}
}
+ /** Return whether the given Task is minimized. */
+ fun isMinimizedTask(taskId: Int): Boolean {
+ return displayData.valueIterator().asSequence().any { data ->
+ data.minimizedTasks.contains(taskId)
+ }
+ }
+
/**
* Check if a task with the given [taskId] is the only active task on its display
*/
@@ -219,6 +227,25 @@
}
/**
+ * Returns whether Desktop Mode is currently showing any tasks, i.e. whether any Desktop Tasks
+ * are visible.
+ */
+ fun isDesktopModeShowing(displayId: Int): Boolean = getVisibleTaskCount(displayId) > 0
+
+ /**
+ * Returns a list of Tasks IDs representing all active non-minimized Tasks on the given display,
+ * ordered from front to back.
+ */
+ fun getActiveNonMinimizedTasksOrderedFrontToBack(displayId: Int): List<Int> {
+ val activeTasks = getActiveTasks(displayId)
+ val allTasksInZOrder = getFreeformTasksInZOrder()
+ return activeTasks
+ // Don't show already minimized Tasks
+ .filter { taskId -> !isMinimizedTask(taskId) }
+ .sortedBy { taskId -> allTasksInZOrder.indexOf(taskId) }
+ }
+
+ /**
* Get a list of freeform tasks, ordered from top-bottom (top at index 0).
*/
// TODO(b/278084491): pass in display id
@@ -255,6 +282,7 @@
val prevCount = getVisibleTaskCount(displayId)
if (visible) {
displayData.getOrCreate(displayId).visibleTasks.add(taskId)
+ unminimizeTask(displayId, taskId)
} else {
displayData[displayId]?.visibleTasks?.remove(taskId)
}
@@ -312,6 +340,24 @@
freeformTasksInZOrder.add(0, taskId)
}
+ /** Mark a Task as minimized. */
+ fun minimizeTask(displayId: Int, taskId: Int) {
+ KtProtoLog.v(
+ WM_SHELL_DESKTOP_MODE,
+ "DesktopModeTaskRepository: minimize Task: display=%d, task=%d",
+ displayId, taskId)
+ displayData.getOrCreate(displayId).minimizedTasks.add(taskId)
+ }
+
+ /** Mark a Task as non-minimized. */
+ fun unminimizeTask(displayId: Int, taskId: Int) {
+ KtProtoLog.v(
+ WM_SHELL_DESKTOP_MODE,
+ "DesktopModeTaskRepository: unminimize Task: display=%d, task=%d",
+ displayId, taskId)
+ displayData[displayId]?.minimizedTasks?.remove(taskId)
+ }
+
/**
* Remove the task from the ordered list.
*/
@@ -325,7 +371,7 @@
boundsBeforeMaximizeByTaskId.remove(taskId)
KtProtoLog.d(
WM_SHELL_DESKTOP_MODE,
- "DesktopTaskRepo: remaining freeform tasks: " + freeformTasksInZOrder.toDumpString()
+ "DesktopTaskRepo: remaining freeform tasks: %s", freeformTasksInZOrder.toDumpString(),
)
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt
index 068661a..0a9e5d0 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt
@@ -88,6 +88,7 @@
import com.android.wm.shell.windowdecor.extension.isFreeform
import com.android.wm.shell.windowdecor.extension.isFullscreen
import java.io.PrintWriter
+import java.util.Optional
import java.util.concurrent.Executor
import java.util.function.Consumer
@@ -113,7 +114,8 @@
private val launchAdjacentController: LaunchAdjacentController,
private val recentsTransitionHandler: RecentsTransitionHandler,
private val multiInstanceHelper: MultiInstanceHelper,
- @ShellMainThread private val mainExecutor: ShellExecutor
+ @ShellMainThread private val mainExecutor: ShellExecutor,
+ private val desktopTasksLimiter: Optional<DesktopTasksLimiter>,
) : RemoteCallable<DesktopTasksController>, Transitions.TransitionHandler,
DragAndDropController.DragAndDropListener {
@@ -341,11 +343,13 @@
)
exitSplitIfApplicable(wct, task)
// Bring other apps to front first
- bringDesktopAppsToFront(task.displayId, wct)
+ val taskToMinimize =
+ bringDesktopAppsToFrontBeforeShowingNewTask(task.displayId, wct, task.taskId)
addMoveToDesktopChanges(wct, task)
if (Transitions.ENABLE_SHELL_TRANSITIONS) {
- enterDesktopTaskTransitionHandler.moveToDesktop(wct)
+ val transition = enterDesktopTaskTransitionHandler.moveToDesktop(wct)
+ addPendingMinimizeTransition(transition, taskToMinimize)
} else {
shellTaskOrganizer.applyTransaction(wct)
}
@@ -382,10 +386,14 @@
)
val wct = WindowContainerTransaction()
exitSplitIfApplicable(wct, taskInfo)
- bringDesktopAppsToFront(taskInfo.displayId, wct)
+ moveHomeTaskToFront(wct)
+ val taskToMinimize =
+ bringDesktopAppsToFrontBeforeShowingNewTask(
+ taskInfo.displayId, wct, taskInfo.taskId)
addMoveToDesktopChanges(wct, taskInfo)
wct.setBounds(taskInfo.token, freeformBounds)
- dragToDesktopTransitionHandler.finishDragToDesktopTransition(wct)
+ val transition = dragToDesktopTransitionHandler.finishDragToDesktopTransition(wct)
+ transition?.let { addPendingMinimizeTransition(it, taskToMinimize) }
}
/**
@@ -507,8 +515,10 @@
val wct = WindowContainerTransaction()
wct.reorder(taskInfo.token, true)
+ val taskToMinimize = addAndGetMinimizeChangesIfNeeded(taskInfo.displayId, wct, taskInfo)
if (Transitions.ENABLE_SHELL_TRANSITIONS) {
- transitions.startTransition(TRANSIT_TO_FRONT, wct, null /* handler */)
+ val transition = transitions.startTransition(TRANSIT_TO_FRONT, wct, null /* handler */)
+ addPendingMinimizeTransition(transition, taskToMinimize)
} else {
shellTaskOrganizer.applyTransaction(wct)
}
@@ -688,9 +698,20 @@
?: WINDOWING_MODE_UNDEFINED
}
- private fun bringDesktopAppsToFront(displayId: Int, wct: WindowContainerTransaction) {
- KtProtoLog.v(WM_SHELL_DESKTOP_MODE, "DesktopTasksController: bringDesktopAppsToFront")
- val activeTasks = desktopModeTaskRepository.getActiveTasks(displayId)
+ private fun bringDesktopAppsToFrontBeforeShowingNewTask(
+ displayId: Int,
+ wct: WindowContainerTransaction,
+ newTaskIdInFront: Int
+ ): RunningTaskInfo? = bringDesktopAppsToFront(displayId, wct, newTaskIdInFront)
+
+ private fun bringDesktopAppsToFront(
+ displayId: Int,
+ wct: WindowContainerTransaction,
+ newTaskIdInFront: Int? = null
+ ): RunningTaskInfo? {
+ KtProtoLog.v(WM_SHELL_DESKTOP_MODE,
+ "DesktopTasksController: bringDesktopAppsToFront, newTaskIdInFront=%s",
+ newTaskIdInFront ?: "null")
if (Flags.enableDesktopWindowingWallpaperActivity()) {
// Add translucent wallpaper activity to show the wallpaper underneath
@@ -700,13 +721,21 @@
moveHomeTaskToFront(wct)
}
- // Then move other tasks on top of it
- val allTasksInZOrder = desktopModeTaskRepository.getFreeformTasksInZOrder()
- activeTasks
- // Sort descending as the top task is at index 0. It should be ordered to top last
- .sortedByDescending { taskId -> allTasksInZOrder.indexOf(taskId) }
- .mapNotNull { taskId -> shellTaskOrganizer.getRunningTaskInfo(taskId) }
- .forEach { task -> wct.reorder(task.token, true /* onTop */) }
+ val nonMinimizedTasksOrderedFrontToBack =
+ desktopModeTaskRepository.getActiveNonMinimizedTasksOrderedFrontToBack(displayId)
+ // If we're adding a new Task we might need to minimize an old one
+ val taskToMinimize: RunningTaskInfo? =
+ if (newTaskIdInFront != null && desktopTasksLimiter.isPresent) {
+ desktopTasksLimiter.get().getTaskToMinimizeIfNeeded(
+ nonMinimizedTasksOrderedFrontToBack, newTaskIdInFront)
+ } else { null }
+ nonMinimizedTasksOrderedFrontToBack
+ // If there is a Task to minimize, let it stay behind the Home Task
+ .filter { taskId -> taskId != taskToMinimize?.taskId }
+ .mapNotNull { taskId -> shellTaskOrganizer.getRunningTaskInfo(taskId) }
+ .reversed() // Start from the back so the front task is brought forward last
+ .forEach { task -> wct.reorder(task.token, true /* onTop */) }
+ return taskToMinimize
}
private fun moveHomeTaskToFront(wct: WindowContainerTransaction) {
@@ -824,13 +853,13 @@
when {
request.type == TRANSIT_TO_BACK -> handleBackNavigation(task)
// If display has tasks stashed, handle as stashed launch
- task.isStashed -> handleStashedTaskLaunch(task)
+ task.isStashed -> handleStashedTaskLaunch(task, transition)
// Check if the task has a top transparent activity
shouldLaunchAsModal(task) -> handleTransparentTaskLaunch(task)
// Check if fullscreen task should be updated
- task.isFullscreen -> handleFullscreenTaskLaunch(task)
+ task.isFullscreen -> handleFullscreenTaskLaunch(task, transition)
// Check if freeform task should be updated
- task.isFreeform -> handleFreeformTaskLaunch(task)
+ task.isFreeform -> handleFreeformTaskLaunch(task, transition)
else -> {
null
}
@@ -878,10 +907,12 @@
} ?: false
}
- private fun handleFreeformTaskLaunch(task: RunningTaskInfo): WindowContainerTransaction? {
+ private fun handleFreeformTaskLaunch(
+ task: RunningTaskInfo,
+ transition: IBinder
+ ): WindowContainerTransaction? {
KtProtoLog.v(WM_SHELL_DESKTOP_MODE, "DesktopTasksController: handleFreeformTaskLaunch")
- val activeTasks = desktopModeTaskRepository.getActiveTasks(task.displayId)
- if (activeTasks.none { desktopModeTaskRepository.isVisibleTask(it) }) {
+ if (!desktopModeTaskRepository.isDesktopModeShowing(task.displayId)) {
KtProtoLog.d(
WM_SHELL_DESKTOP_MODE,
"DesktopTasksController: switch freeform task to fullscreen oon transition" +
@@ -892,13 +923,23 @@
addMoveToFullscreenChanges(wct, task)
}
}
+ // Desktop Mode is showing and we're launching a new Task - we might need to minimize
+ // a Task.
+ val wct = WindowContainerTransaction()
+ val taskToMinimize = addAndGetMinimizeChangesIfNeeded(task.displayId, wct, task)
+ if (taskToMinimize != null) {
+ addPendingMinimizeTransition(transition, taskToMinimize)
+ return wct
+ }
return null
}
- private fun handleFullscreenTaskLaunch(task: RunningTaskInfo): WindowContainerTransaction? {
+ private fun handleFullscreenTaskLaunch(
+ task: RunningTaskInfo,
+ transition: IBinder
+ ): WindowContainerTransaction? {
KtProtoLog.v(WM_SHELL_DESKTOP_MODE, "DesktopTasksController: handleFullscreenTaskLaunch")
- val activeTasks = desktopModeTaskRepository.getActiveTasks(task.displayId)
- if (activeTasks.any { desktopModeTaskRepository.isVisibleTask(it) }) {
+ if (desktopModeTaskRepository.isDesktopModeShowing(task.displayId)) {
KtProtoLog.d(
WM_SHELL_DESKTOP_MODE,
"DesktopTasksController: switch fullscreen task to freeform on transition" +
@@ -907,21 +948,30 @@
)
return WindowContainerTransaction().also { wct ->
addMoveToDesktopChanges(wct, task)
+ // Desktop Mode is already showing and we're launching a new Task - we might need to
+ // minimize another Task.
+ val taskToMinimize = addAndGetMinimizeChangesIfNeeded(task.displayId, wct, task)
+ addPendingMinimizeTransition(transition, taskToMinimize)
}
}
return null
}
- private fun handleStashedTaskLaunch(task: RunningTaskInfo): WindowContainerTransaction {
+ private fun handleStashedTaskLaunch(
+ task: RunningTaskInfo,
+ transition: IBinder
+ ): WindowContainerTransaction {
KtProtoLog.d(
WM_SHELL_DESKTOP_MODE,
"DesktopTasksController: launch apps with stashed on transition taskId=%d",
task.taskId
)
val wct = WindowContainerTransaction()
- bringDesktopAppsToFront(task.displayId, wct)
+ val taskToMinimize =
+ bringDesktopAppsToFrontBeforeShowingNewTask(task.displayId, wct, task.taskId)
addMoveToDesktopChanges(wct, task)
desktopModeTaskRepository.setStashed(task.displayId, false)
+ addPendingMinimizeTransition(transition, taskToMinimize)
return wct
}
@@ -1002,6 +1052,28 @@
wct.setDensityDpi(taskInfo.token, getDefaultDensityDpi())
}
+ /** Returns the ID of the Task that will be minimized, or null if no task will be minimized. */
+ private fun addAndGetMinimizeChangesIfNeeded(
+ displayId: Int,
+ wct: WindowContainerTransaction,
+ newTaskInfo: RunningTaskInfo
+ ): RunningTaskInfo? {
+ if (!desktopTasksLimiter.isPresent) return null
+ return desktopTasksLimiter.get().addAndGetMinimizeTaskChangesIfNeeded(
+ displayId, wct, newTaskInfo)
+ }
+
+ private fun addPendingMinimizeTransition(
+ transition: IBinder,
+ taskToMinimize: RunningTaskInfo?
+ ) {
+ if (taskToMinimize == null) return
+ desktopTasksLimiter.ifPresent {
+ it.addPendingMinimizeChange(
+ transition, taskToMinimize.displayId, taskToMinimize.taskId)
+ }
+ }
+
/** Enter split by using the focused desktop task in given `displayId`. */
fun enterSplit(
displayId: Int,
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksLimiter.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksLimiter.kt
new file mode 100644
index 0000000..3404d37
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksLimiter.kt
@@ -0,0 +1,217 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wm.shell.desktopmode
+
+import android.app.ActivityManager.RunningTaskInfo
+import android.os.IBinder
+import android.view.SurfaceControl
+import android.view.WindowManager.TRANSIT_TO_BACK
+import android.window.TransitionInfo
+import android.window.WindowContainerTransaction
+import androidx.annotation.VisibleForTesting
+import com.android.wm.shell.ShellTaskOrganizer
+import com.android.wm.shell.protolog.ShellProtoLogGroup
+import com.android.wm.shell.transition.Transitions
+import com.android.wm.shell.transition.Transitions.TransitionObserver
+import com.android.wm.shell.util.KtProtoLog
+
+/**
+ * Limits the number of tasks shown in Desktop Mode.
+ *
+ * This class should only be used if
+ * [com.android.window.flags.Flags.enableDesktopWindowingTaskLimit()] is true.
+ */
+class DesktopTasksLimiter (
+ transitions: Transitions,
+ private val taskRepository: DesktopModeTaskRepository,
+ private val shellTaskOrganizer: ShellTaskOrganizer,
+) {
+ private val minimizeTransitionObserver = MinimizeTransitionObserver()
+
+ init {
+ transitions.registerObserver(minimizeTransitionObserver)
+ }
+
+ private data class TaskDetails (val displayId: Int, val taskId: Int)
+
+ // TODO(b/333018485): replace this observer when implementing the minimize-animation
+ private inner class MinimizeTransitionObserver : TransitionObserver {
+ private val mPendingTransitionTokensAndTasks = mutableMapOf<IBinder, TaskDetails>()
+
+ fun addPendingTransitionToken(transition: IBinder, taskDetails: TaskDetails) {
+ mPendingTransitionTokensAndTasks[transition] = taskDetails
+ }
+
+ override fun onTransitionReady(
+ transition: IBinder,
+ info: TransitionInfo,
+ startTransaction: SurfaceControl.Transaction,
+ finishTransaction: SurfaceControl.Transaction
+ ) {
+ val taskToMinimize = mPendingTransitionTokensAndTasks.remove(transition) ?: return
+
+ if (!taskRepository.isActiveTask(taskToMinimize.taskId)) return
+
+ if (!isTaskReorderedToBackOrInvisible(info, taskToMinimize)) {
+ KtProtoLog.v(
+ ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE,
+ "DesktopTasksLimiter: task %d is not reordered to back nor invis",
+ taskToMinimize.taskId)
+ return
+ }
+ this@DesktopTasksLimiter.markTaskMinimized(
+ taskToMinimize.displayId, taskToMinimize.taskId)
+ }
+
+ /**
+ * Returns whether the given Task is being reordered to the back in the given transition, or
+ * is already invisible.
+ *
+ * <p> This check can be used to double-check that a task was indeed minimized before
+ * marking it as such.
+ */
+ private fun isTaskReorderedToBackOrInvisible(
+ info: TransitionInfo,
+ taskDetails: TaskDetails
+ ): Boolean {
+ val taskChange = info.changes.find { change ->
+ change.taskInfo?.taskId == taskDetails.taskId }
+ if (taskChange == null) {
+ return !taskRepository.isVisibleTask(taskDetails.taskId)
+ }
+ return taskChange.mode == TRANSIT_TO_BACK
+ }
+
+ override fun onTransitionStarting(transition: IBinder) {}
+
+ override fun onTransitionMerged(merged: IBinder, playing: IBinder) {
+ mPendingTransitionTokensAndTasks.remove(merged)?.let { taskToTransfer ->
+ mPendingTransitionTokensAndTasks[playing] = taskToTransfer
+ }
+ }
+
+ override fun onTransitionFinished(transition: IBinder, aborted: Boolean) {
+ KtProtoLog.v(
+ ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE,
+ "DesktopTasksLimiter: transition %s finished", transition)
+ mPendingTransitionTokensAndTasks.remove(transition)
+ }
+ }
+
+ /**
+ * Mark a task as minimized, this should only be done after the corresponding transition has
+ * finished so we don't minimize the task if the transition fails.
+ */
+ private fun markTaskMinimized(displayId: Int, taskId: Int) {
+ KtProtoLog.v(
+ ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE,
+ "DesktopTasksLimiter: marking %d as minimized", taskId)
+ taskRepository.minimizeTask(displayId, taskId)
+ }
+
+ /**
+ * Add a minimize-transition to [wct] if adding [newFrontTaskInfo] brings us over the task
+ * limit.
+ *
+ * @param transition the transition that the minimize-transition will be appended to, or null if
+ * the transition will be started later.
+ * @return the ID of the minimized task, or null if no task is being minimized.
+ */
+ fun addAndGetMinimizeTaskChangesIfNeeded(
+ displayId: Int,
+ wct: WindowContainerTransaction,
+ newFrontTaskInfo: RunningTaskInfo,
+ ): RunningTaskInfo? {
+ KtProtoLog.v(
+ ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE,
+ "DesktopTasksLimiter: addMinimizeBackTaskChangesIfNeeded, newFrontTask=%d",
+ newFrontTaskInfo.taskId)
+ val newTaskListOrderedFrontToBack = createOrderedTaskListWithGivenTaskInFront(
+ taskRepository.getActiveNonMinimizedTasksOrderedFrontToBack(displayId),
+ newFrontTaskInfo.taskId)
+ val taskToMinimize = getTaskToMinimizeIfNeeded(newTaskListOrderedFrontToBack)
+ if (taskToMinimize != null) {
+ wct.reorder(taskToMinimize.token, false /* onTop */)
+ return taskToMinimize
+ }
+ return null
+ }
+
+ /**
+ * Add a pending minimize transition change, to update the list of minimized apps once the
+ * transition goes through.
+ */
+ fun addPendingMinimizeChange(transition: IBinder, displayId: Int, taskId: Int) {
+ minimizeTransitionObserver.addPendingTransitionToken(
+ transition, TaskDetails(displayId, taskId))
+ }
+
+ /**
+ * Returns the maximum number of tasks that should ever be displayed at the same time in Desktop
+ * Mode.
+ */
+ fun getMaxTaskLimit(): Int = DesktopModeStatus.getMaxTaskLimit()
+
+ /**
+ * Returns the Task to minimize given 1. a list of visible tasks ordered from front to back and
+ * 2. a new task placed in front of all the others.
+ */
+ fun getTaskToMinimizeIfNeeded(
+ visibleFreeformTaskIdsOrderedFrontToBack: List<Int>,
+ newTaskIdInFront: Int
+ ): RunningTaskInfo? {
+ return getTaskToMinimizeIfNeeded(
+ createOrderedTaskListWithGivenTaskInFront(
+ visibleFreeformTaskIdsOrderedFrontToBack, newTaskIdInFront))
+ }
+
+ /** Returns the Task to minimize given a list of visible tasks ordered from front to back. */
+ fun getTaskToMinimizeIfNeeded(
+ visibleFreeformTaskIdsOrderedFrontToBack: List<Int>
+ ): RunningTaskInfo? {
+ if (visibleFreeformTaskIdsOrderedFrontToBack.size <= getMaxTaskLimit()) {
+ KtProtoLog.v(
+ ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE,
+ "DesktopTasksLimiter: no need to minimize; tasks below limit")
+ // No need to minimize anything
+ return null
+ }
+ val taskToMinimize =
+ shellTaskOrganizer.getRunningTaskInfo(
+ visibleFreeformTaskIdsOrderedFrontToBack.last())
+ if (taskToMinimize == null) {
+ KtProtoLog.e(
+ ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE,
+ "DesktopTasksLimiter: taskToMinimize == null")
+ return null
+ }
+ return taskToMinimize
+ }
+
+ private fun createOrderedTaskListWithGivenTaskInFront(
+ existingTaskIdsOrderedFrontToBack: List<Int>,
+ newTaskId: Int
+ ): List<Int> {
+ return listOf(newTaskId) +
+ existingTaskIdsOrderedFrontToBack.filter { taskId -> taskId != newTaskId }
+ }
+
+ @VisibleForTesting
+ fun getTransitionObserver(): TransitionObserver {
+ return minimizeTransitionObserver
+ }
+}
\ No newline at end of file
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandler.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandler.kt
index 0061d03..e341f2d 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandler.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandler.kt
@@ -150,20 +150,20 @@
* windowing mode changes to the dragged task. This is called when the dragged task is released
* inside the desktop drop zone.
*/
- fun finishDragToDesktopTransition(wct: WindowContainerTransaction) {
+ fun finishDragToDesktopTransition(wct: WindowContainerTransaction): IBinder? {
if (!inProgress) {
// Don't attempt to finish a drag to desktop transition since there is no transition in
// progress which means that the drag to desktop transition was never successfully
// started.
- return
+ return null
}
if (requireTransitionState().startAborted) {
// Don't attempt to complete the drag-to-desktop since the start transition didn't
// succeed as expected. Just reset the state as if nothing happened.
clearState()
- return
+ return null
}
- transitions.startTransition(TRANSIT_DESKTOP_MODE_END_DRAG_TO_DESKTOP, wct, this)
+ return transitions.startTransition(TRANSIT_DESKTOP_MODE_END_DRAG_TO_DESKTOP, wct, this)
}
/**
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/EnterDesktopTaskTransitionHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/EnterDesktopTaskTransitionHandler.java
index 79bb540..74b8f83 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/EnterDesktopTaskTransitionHandler.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/EnterDesktopTaskTransitionHandler.java
@@ -78,10 +78,12 @@
/**
* Starts Transition of type TRANSIT_MOVE_TO_DESKTOP
* @param wct WindowContainerTransaction for transition
+ * @return the token representing the started transition
*/
- public void moveToDesktop(@NonNull WindowContainerTransaction wct) {
+ public IBinder moveToDesktop(@NonNull WindowContainerTransaction wct) {
final IBinder token = mTransitions.startTransition(TRANSIT_MOVE_TO_DESKTOP, wct, this);
mPendingTransitionTokens.add(token);
+ return token;
}
@Override
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskListener.java b/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskListener.java
index f2bdcae..6fea203 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskListener.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/freeform/FreeformTaskListener.java
@@ -95,6 +95,7 @@
if (DesktopModeStatus.isEnabled()) {
mDesktopModeTaskRepository.ifPresent(repository -> {
repository.addOrMoveFreeformTaskToTop(taskInfo.taskId);
+ repository.unminimizeTask(taskInfo.displayId, taskInfo.taskId);
if (taskInfo.isVisible) {
if (repository.addActiveTask(taskInfo.displayId, taskInfo.taskId)) {
ProtoLog.v(ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE,
@@ -116,6 +117,7 @@
if (DesktopModeStatus.isEnabled()) {
mDesktopModeTaskRepository.ifPresent(repository -> {
repository.removeFreeformTask(taskInfo.taskId);
+ repository.unminimizeTask(taskInfo.displayId, taskInfo.taskId);
if (repository.removeActiveTask(taskInfo.taskId)) {
ProtoLog.v(ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE,
"Removing active freeform task: #%d", taskInfo.taskId);
@@ -162,6 +164,7 @@
if (DesktopModeStatus.isEnabled() && taskInfo.isFocused) {
mDesktopModeTaskRepository.ifPresent(repository -> {
repository.addOrMoveFreeformTaskToTop(taskInfo.taskId);
+ repository.unminimizeTask(taskInfo.displayId, taskInfo.taskId);
});
}
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/OWNERS b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/OWNERS
index ec09827..afddfab 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/OWNERS
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/OWNERS
@@ -1,3 +1,2 @@
# WM shell sub-module pip owner
hwwang@google.com
-mateuszc@google.com
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipAnimationController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipAnimationController.java
index 4c47737..eb845db 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipAnimationController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipAnimationController.java
@@ -743,11 +743,6 @@
.alpha(tx, leash, 1f)
.round(tx, leash, shouldApplyCornerRadius())
.shadow(tx, leash, shouldApplyShadowRadius());
- // TODO(b/178632364): this is a work around for the black background when
- // entering PiP in button navigation mode.
- if (isInPipDirection(direction)) {
- tx.setWindowCrop(leash, getStartValue());
- }
tx.show(leash);
tx.apply();
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java
index 57cf992..e885262 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java
@@ -597,6 +597,17 @@
return;
}
+ if (mPipTransitionState.isEnteringPip()
+ && !mPipTransitionState.getInSwipePipToHomeTransition()) {
+ // If we are still entering PiP with Shell playing enter animation, jump-cut to
+ // the end of the enter animation and reschedule exitPip to run after enter-PiP
+ // has finished its transition and allowed the client to draw in PiP mode.
+ mPipTransitionController.end(() -> {
+ exitPip(animationDurationMs, requestEnterSplit);
+ });
+ return;
+ }
+
ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
"exitPip: %s, state=%s", mTaskInfo.topActivity, mPipTransitionState);
final WindowContainerTransaction wct = new WindowContainerTransaction();
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransition.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransition.java
index d60f5a6..fdde3ee 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransition.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransition.java
@@ -43,7 +43,6 @@
import static com.android.wm.shell.transition.Transitions.TRANSIT_EXIT_PIP_TO_SPLIT;
import static com.android.wm.shell.transition.Transitions.TRANSIT_REMOVE_PIP;
-import android.animation.Animator;
import android.annotation.IntDef;
import android.app.ActivityManager;
import android.app.TaskInfo;
@@ -348,9 +347,16 @@
@Override
public void end() {
- Animator animator = mPipAnimationController.getCurrentAnimator();
- if (animator != null && animator.isRunning()) {
- animator.end();
+ end(null);
+ }
+
+ @Override
+ public void end(@Nullable Runnable onTransitionEnd) {
+ if (mPipAnimationController.isAnimating()) {
+ mPipAnimationController.getCurrentAnimator().end();
+ }
+ if (onTransitionEnd != null) {
+ onTransitionEnd.run();
}
}
@@ -818,8 +824,13 @@
@NonNull Transitions.TransitionFinishCallback finishCallback,
@NonNull TaskInfo taskInfo) {
startTransaction.apply();
- finishTransaction.setWindowCrop(info.getChanges().get(0).getLeash(),
- mPipDisplayLayoutState.getDisplayBounds());
+ if (info.getChanges().isEmpty()) {
+ ProtoLog.e(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
+ "removePipImmediately is called with empty changes");
+ } else {
+ finishTransaction.setWindowCrop(info.getChanges().get(0).getLeash(),
+ mPipDisplayLayoutState.getDisplayBounds());
+ }
mPipOrganizer.onExitPipFinished(taskInfo);
finishCallback.onTransitionFinished(null);
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransitionController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransitionController.java
index 32442f7..4f71a02 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransitionController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTransitionController.java
@@ -305,6 +305,14 @@
public void end() {
}
+ /**
+ * End the currently-playing PiP animation.
+ *
+ * @param onTransitionEnd callback to run upon finishing the playing transition.
+ */
+ public void end(@Nullable Runnable onTransitionEnd) {
+ }
+
/** Starts the {@link android.window.SystemPerformanceHinter.HighPerfSession}. */
public void startHighPerfSession() {}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipTouchHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipTouchHandler.java
index c1adfff..d8ac8e9 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipTouchHandler.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipTouchHandler.java
@@ -219,6 +219,7 @@
mMotionHelper, pipTaskOrganizer, mPipBoundsAlgorithm.getSnapAlgorithm(),
this::onAccessibilityShowMenu, this::updateMovementBounds,
this::animateToUnStashedState, mainExecutor);
+ mPipBoundsState.addOnAspectRatioChangedCallback(this::updateMinMaxSize);
// TODO(b/181599115): This should really be initializes as part of the pip controller, but
// until all PIP implementations derive from the controller, just initialize the touch handler
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/OWNERS b/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/OWNERS
index 6dabb3b..79d1793 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/OWNERS
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/OWNERS
@@ -1,4 +1,3 @@
# WM shell sub-module pip owner
hwwang@google.com
-mateuszc@google.com
gabiyev@google.com
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipTouchHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipTouchHandler.java
index cc8e3e0..472003c 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipTouchHandler.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipTouchHandler.java
@@ -208,6 +208,7 @@
new PipResizeGestureHandler(context, pipBoundsAlgorithm, pipBoundsState,
mTouchState, this::updateMovementBounds, pipUiEventLogger,
menuController, mainExecutor, mPipPerfHintController);
+ mPipBoundsState.addOnAspectRatioChangedCallback(this::updateMinMaxSize);
if (PipUtils.isPip2ExperimentEnabled()) {
shellInit.addInitCallback(this::onInit, this);
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/taskview/TaskView.java b/libs/WindowManager/Shell/src/com/android/wm/shell/taskview/TaskView.java
index 35a1fa0..a85188a 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/taskview/TaskView.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/taskview/TaskView.java
@@ -30,7 +30,6 @@
import android.graphics.Rect;
import android.graphics.Region;
import android.os.Handler;
-import android.os.Looper;
import android.view.SurfaceControl;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
@@ -121,6 +120,11 @@
@Override
public void onTaskAppeared(ActivityManager.RunningTaskInfo taskInfo, SurfaceControl leash) {
+ if (mTaskViewTaskController.isUsingShellTransitions()) {
+ // No need for additional work as it is already taken care of during
+ // prepareOpenAnimation().
+ return;
+ }
onLocationChanged();
if (taskInfo.taskDescription != null) {
final int bgColor = taskInfo.taskDescription.getBackgroundColor();
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/taskview/TaskViewTaskController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/taskview/TaskViewTaskController.java
index 196e04e..11aa402 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/taskview/TaskViewTaskController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/taskview/TaskViewTaskController.java
@@ -17,6 +17,7 @@
package com.android.wm.shell.taskview;
import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW;
+import static android.view.WindowManager.TRANSIT_CHANGE;
import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -48,6 +49,23 @@
* TaskView} to {@link TaskViewTaskController} interactions are done via direct method calls.
*
* The reverse communication is done via the {@link TaskViewBase} interface.
+ *
+ * <ul>
+ * <li>The entry point for an activity based task view is {@link
+ * TaskViewTaskController#startActivity(PendingIntent, Intent, ActivityOptions, Rect)}</li>
+ *
+ * <li>The entry point for an activity (represented by {@link ShortcutInfo}) based task view
+ * is {@link TaskViewTaskController#startShortcutActivity(ShortcutInfo, ActivityOptions, Rect)}
+ * </li>
+ *
+ * <li>The entry point for a root-task based task view is {@link
+ * TaskViewTaskController#startRootTask(ActivityManager.RunningTaskInfo, SurfaceControl,
+ * WindowContainerTransaction)}.
+ * This method is special as it doesn't create a root task and instead expects that the
+ * launch root task is already created and started. This method just attaches the taskInfo to
+ * the TaskView.
+ * </li>
+ * </ul>
*/
public class TaskViewTaskController implements ShellTaskOrganizer.TaskListener {
@@ -155,8 +173,8 @@
* <p>The owner of this container must be allowed to access the shortcut information,
* as defined in {@link LauncherApps#hasShortcutHostPermission()} to use this method.
*
- * @param shortcut the shortcut used to launch the activity.
- * @param options options for the activity.
+ * @param shortcut the shortcut used to launch the activity.
+ * @param options options for the activity.
* @param launchBounds the bounds (window size and position) that the activity should be
* launched in, in pixels and in screen coordinates.
*/
@@ -183,10 +201,10 @@
* Launch a new activity.
*
* @param pendingIntent Intent used to launch an activity.
- * @param fillInIntent Additional Intent data, see {@link Intent#fillIn Intent.fillIn()}
- * @param options options for the activity.
- * @param launchBounds the bounds (window size and position) that the activity should be
- * launched in, in pixels and in screen coordinates.
+ * @param fillInIntent Additional Intent data, see {@link Intent#fillIn Intent.fillIn()}
+ * @param options options for the activity.
+ * @param launchBounds the bounds (window size and position) that the activity should be
+ * launched in, in pixels and in screen coordinates.
*/
public void startActivity(@NonNull PendingIntent pendingIntent, @Nullable Intent fillInIntent,
@NonNull ActivityOptions options, @Nullable Rect launchBounds) {
@@ -208,6 +226,35 @@
}
}
+
+ /**
+ * Attaches the given root task {@code taskInfo} in the task view.
+ *
+ * <p> Since {@link ShellTaskOrganizer#createRootTask(int, int,
+ * ShellTaskOrganizer.TaskListener)} does not use the shell transitions flow, this method is
+ * used as an entry point for an already-created root-task in the task view.
+ *
+ * @param taskInfo the task info of the root task.
+ * @param leash the {@link android.content.pm.ShortcutInfo.Surface} of the root task
+ * @param wct The Window container work that should happen as part of this set up.
+ */
+ public void startRootTask(ActivityManager.RunningTaskInfo taskInfo, SurfaceControl leash,
+ @Nullable WindowContainerTransaction wct) {
+ if (wct == null) {
+ wct = new WindowContainerTransaction();
+ }
+ // This method skips the regular flow where an activity task is launched as part of a new
+ // transition in taskview and then transition is intercepted using the launchcookie.
+ // The task here is already created and running, it just needs to be reparented, resized
+ // and tracked correctly inside taskview. Which is done by calling
+ // prepareOpenAnimationInternal() and then manually enqueuing the resulting window container
+ // transaction.
+ prepareOpenAnimationInternal(true /* newTask */, mTransaction /* startTransaction */,
+ null /* finishTransaction */, taskInfo, leash, wct);
+ mTransaction.apply();
+ mTaskViewTransitions.startInstantTransition(TRANSIT_CHANGE, wct);
+ }
+
private void prepareActivityOptions(ActivityOptions options, Rect launchBounds) {
final Binder launchCookie = new Binder();
mShellExecutor.execute(() -> {
@@ -342,7 +389,6 @@
final SurfaceControl taskLeash = mTaskLeash;
handleAndNotifyTaskRemoval(mTaskInfo);
- // Unparent the task when this surface is destroyed
mTransaction.reparent(taskLeash, null).apply();
resetTaskInfo();
}
@@ -597,6 +643,15 @@
@NonNull SurfaceControl.Transaction finishTransaction,
ActivityManager.RunningTaskInfo taskInfo, SurfaceControl leash,
WindowContainerTransaction wct) {
+ prepareOpenAnimationInternal(newTask, startTransaction, finishTransaction, taskInfo, leash,
+ wct);
+ }
+
+ private void prepareOpenAnimationInternal(final boolean newTask,
+ SurfaceControl.Transaction startTransaction,
+ SurfaceControl.Transaction finishTransaction,
+ ActivityManager.RunningTaskInfo taskInfo, SurfaceControl leash,
+ WindowContainerTransaction wct) {
mPendingInfo = null;
mTaskInfo = taskInfo;
mTaskToken = mTaskInfo.token;
@@ -608,10 +663,12 @@
// Also reparent on finishTransaction since the finishTransaction will reparent back
// to its "original" parent by default.
Rect boundsOnScreen = mTaskViewBase.getCurrentBoundsOnScreen();
- finishTransaction.reparent(mTaskLeash, mSurfaceControl)
- .setPosition(mTaskLeash, 0, 0)
- // TODO: maybe once b/280900002 is fixed this will be unnecessary
- .setWindowCrop(mTaskLeash, boundsOnScreen.width(), boundsOnScreen.height());
+ if (finishTransaction != null) {
+ finishTransaction.reparent(mTaskLeash, mSurfaceControl)
+ .setPosition(mTaskLeash, 0, 0)
+ // TODO: maybe once b/280900002 is fixed this will be unnecessary
+ .setWindowCrop(mTaskLeash, boundsOnScreen.width(), boundsOnScreen.height());
+ }
mTaskViewTransitions.updateBoundsState(this, boundsOnScreen);
mTaskViewTransitions.updateVisibilityState(this, true /* visible */);
wct.setBounds(mTaskToken, boundsOnScreen);
@@ -632,6 +689,7 @@
mTaskViewBase.setResizeBgColor(startTransaction, backgroundColor);
}
+ mTaskViewBase.onTaskAppeared(mTaskInfo, mTaskLeash);
if (mListener != null) {
final int taskId = mTaskInfo.taskId;
final ComponentName baseActivity = mTaskInfo.baseActivity;
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/taskview/TaskViewTransitions.java b/libs/WindowManager/Shell/src/com/android/wm/shell/taskview/TaskViewTransitions.java
index 198ec82..e6d1b45 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/taskview/TaskViewTransitions.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/taskview/TaskViewTransitions.java
@@ -53,7 +53,7 @@
new ArrayMap<>();
private final ArrayList<PendingTransition> mPending = new ArrayList<>();
private final Transitions mTransitions;
- private final boolean[] mRegistered = new boolean[]{ false };
+ private final boolean[] mRegistered = new boolean[]{false};
/**
* TaskView makes heavy use of startTransition. Only one shell-initiated transition can be
@@ -122,6 +122,7 @@
/**
* Looks through the pending transitions for a closing transaction that matches the provided
* `taskView`.
+ *
* @param taskView the pending transition should be for this.
*/
private PendingTransition findPendingCloseTransition(TaskViewTaskController taskView) {
@@ -135,8 +136,17 @@
}
/**
+ * Starts a transition outside of the handler associated with {@link TaskViewTransitions}.
+ */
+ public void startInstantTransition(@WindowManager.TransitionType int type,
+ WindowContainerTransaction wct) {
+ mTransitions.startTransition(type, wct, null);
+ }
+
+ /**
* Looks through the pending transitions for a opening transaction that matches the provided
* `taskView`.
+ *
* @param taskView the pending transition should be for this.
*/
@VisibleForTesting
@@ -152,8 +162,9 @@
/**
* Looks through the pending transitions for one matching `taskView`.
+ *
* @param taskView the pending transition should be for this.
- * @param type the type of transition it's looking for
+ * @param type the type of transition it's looking for
*/
PendingTransition findPending(TaskViewTaskController taskView, int type) {
for (int i = mPending.size() - 1; i >= 0; --i) {
@@ -220,7 +231,24 @@
startNextTransition();
}
- void setTaskViewVisible(TaskViewTaskController taskView, boolean visible) {
+ /** Starts a new transition to make the given {@code taskView} visible. */
+ public void setTaskViewVisible(TaskViewTaskController taskView, boolean visible) {
+ setTaskViewVisible(taskView, visible, false /* reorder */);
+ }
+
+ /**
+ * Starts a new transition to make the given {@code taskView} visible and optionally change
+ * the task order.
+ *
+ * @param taskView the task view which the visibility is being changed for
+ * @param visible the new visibility of the task view
+ * @param reorder whether to reorder the task or not. If this is {@code true}, the task will be
+ * reordered as per the given {@code visible}. For {@code visible = true}, task
+ * will be reordered to top. For {@code visible = false}, task will be reordered
+ * to the bottom
+ */
+ public void setTaskViewVisible(TaskViewTaskController taskView, boolean visible,
+ boolean reorder) {
if (mTaskViews.get(taskView) == null) return;
if (mTaskViews.get(taskView).mVisible == visible) return;
if (taskView.getTaskInfo() == null) {
@@ -231,6 +259,9 @@
final WindowContainerTransaction wct = new WindowContainerTransaction();
wct.setHidden(taskView.getTaskInfo().token, !visible /* hidden */);
wct.setBounds(taskView.getTaskInfo().token, mTaskViews.get(taskView).mBounds);
+ if (reorder) {
+ wct.reorder(taskView.getTaskInfo().token, visible /* onTop */);
+ }
PendingTransition pending = new PendingTransition(
visible ? TRANSIT_TO_FRONT : TRANSIT_TO_BACK, wct, taskView, null /* cookie */);
mPending.add(pending);
@@ -238,6 +269,22 @@
// visibility is reported in transition.
}
+ /** Starts a new transition to reorder the given {@code taskView}'s task. */
+ public void reorderTaskViewTask(TaskViewTaskController taskView, boolean onTop) {
+ if (mTaskViews.get(taskView) == null) return;
+ if (taskView.getTaskInfo() == null) {
+ // Nothing to update, task is not yet available
+ return;
+ }
+ final WindowContainerTransaction wct = new WindowContainerTransaction();
+ wct.reorder(taskView.getTaskInfo().token, onTop /* onTop */);
+ PendingTransition pending = new PendingTransition(
+ onTop ? TRANSIT_TO_FRONT : TRANSIT_TO_BACK, wct, taskView, null /* cookie */);
+ mPending.add(pending);
+ startNextTransition();
+ // visibility is reported in transition.
+ }
+
void updateBoundsState(TaskViewTaskController taskView, Rect boundsOnScreen) {
TaskViewRequestedState state = mTaskViews.get(taskView);
if (state == null) return;
@@ -380,7 +427,7 @@
}
startTransaction.reparent(chg.getLeash(), tv.getSurfaceControl());
finishTransaction.reparent(chg.getLeash(), tv.getSurfaceControl())
- .setPosition(chg.getLeash(), 0, 0);
+ .setPosition(chg.getLeash(), 0, 0);
changesHandled++;
}
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultMixedHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultMixedHandler.java
index 8746b8c..4bc0dc0 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultMixedHandler.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultMixedHandler.java
@@ -61,9 +61,10 @@
/**
* A handler for dealing with transitions involving multiple other handlers. For example: an
- * activity in split-screen going into PiP.
+ * activity in split-screen going into PiP. Note this is provided as a handset-specific
+ * implementation of {@code MixedTransitionHandler}.
*/
-public class DefaultMixedHandler implements Transitions.TransitionHandler,
+public class DefaultMixedHandler implements MixedTransitionHandler,
RecentsTransitionHandler.RecentsMixedHandler {
private final Transitions mPlayer;
@@ -116,7 +117,7 @@
final IBinder mTransition;
protected final Transitions mPlayer;
- protected final DefaultMixedHandler mMixedHandler;
+ protected final MixedTransitionHandler mMixedHandler;
protected final PipTransitionController mPipHandler;
protected final StageCoordinator mSplitHandler;
protected final KeyguardTransitionHandler mKeyguardHandler;
@@ -142,7 +143,7 @@
int mInFlightSubAnimations = 0;
MixedTransition(int type, IBinder transition, Transitions player,
- DefaultMixedHandler mixedHandler, PipTransitionController pipHandler,
+ MixedTransitionHandler mixedHandler, PipTransitionController pipHandler,
StageCoordinator splitHandler, KeyguardTransitionHandler keyguardHandler) {
mType = type;
mTransition = transition;
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultMixedTransition.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultMixedTransition.java
index e9cd73b..b028bd6 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultMixedTransition.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultMixedTransition.java
@@ -41,7 +41,7 @@
private final ActivityEmbeddingController mActivityEmbeddingController;
DefaultMixedTransition(int type, IBinder transition, Transitions player,
- DefaultMixedHandler mixedHandler, PipTransitionController pipHandler,
+ MixedTransitionHandler mixedHandler, PipTransitionController pipHandler,
StageCoordinator splitHandler, KeyguardTransitionHandler keyguardHandler,
UnfoldTransitionHandler unfoldHandler,
ActivityEmbeddingController activityEmbeddingController) {
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultTransitionHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultTransitionHandler.java
index 9adb67c..2d6ba6e 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultTransitionHandler.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/DefaultTransitionHandler.java
@@ -594,7 +594,6 @@
.setName("animation-background")
.setCallsite("DefaultTransitionHandler")
.setColorLayer();
- final SurfaceControl backgroundSurface = colorLayerBuilder.build();
// Attaching the background surface to the transition root could unexpectedly make it
// cover one of the split root tasks. To avoid this, put the background surface just
@@ -605,8 +604,10 @@
if (isSplitTaskInvolved) {
mRootTDAOrganizer.attachToDisplayArea(displayId, colorLayerBuilder);
} else {
- startTransaction.reparent(backgroundSurface, info.getRootLeash());
+ colorLayerBuilder.setParent(info.getRootLeash());
}
+
+ final SurfaceControl backgroundSurface = colorLayerBuilder.build();
startTransaction.setColor(backgroundSurface, colorArray)
.setLayer(backgroundSurface, -1)
.show(backgroundSurface);
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/MixedTransitionHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/MixedTransitionHandler.java
new file mode 100644
index 0000000..ff429fb
--- /dev/null
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/MixedTransitionHandler.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wm.shell.transition;
+
+/**
+ * Interface for a {@link Transitions.TransitionHandler} that can take the subset of transitions
+ * that it handles and further decompose those transitions into sub-transitions which can be
+ * independently delegated to separate handlers.
+ */
+public interface MixedTransitionHandler extends Transitions.TransitionHandler {
+
+ // TODO(b/335685449) this currently exists purely as a marker interface for use in form-factor
+ // specific/sysui dagger modules. Going forward, we should define this in a meaningful
+ // way so as to provide a clear basis for expectations/behaviours associated with mixed
+ // transitions and their default handlers.
+
+}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/MixedTransitionHelper.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/MixedTransitionHelper.java
index 0974cd1..ffc0b76 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/MixedTransitionHelper.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/MixedTransitionHelper.java
@@ -44,7 +44,7 @@
@NonNull SurfaceControl.Transaction startTransaction,
@NonNull SurfaceControl.Transaction finishTransaction,
@NonNull Transitions.TransitionFinishCallback finishCallback,
- @NonNull Transitions player, @NonNull DefaultMixedHandler mixedHandler,
+ @NonNull Transitions player, @NonNull MixedTransitionHandler mixedHandler,
@NonNull PipTransitionController pipHandler, @NonNull StageCoordinator splitHandler) {
ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, " Animating a mixed transition for "
+ "entering PIP while Split-Screen is foreground.");
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/RecentsMixedTransition.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/RecentsMixedTransition.java
index 5b402a5..d6e64cf 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/RecentsMixedTransition.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/RecentsMixedTransition.java
@@ -43,7 +43,7 @@
private final DesktopTasksController mDesktopTasksController;
RecentsMixedTransition(int type, IBinder transition, Transitions player,
- DefaultMixedHandler mixedHandler, PipTransitionController pipHandler,
+ MixedTransitionHandler mixedHandler, PipTransitionController pipHandler,
StageCoordinator splitHandler, KeyguardTransitionHandler keyguardHandler,
RecentsTransitionHandler recentsHandler,
DesktopTasksController desktopTasksController) {
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/tracing/PerfettoTransitionTracer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/tracing/PerfettoTransitionTracer.java
index fa331af..ed4ae05 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/tracing/PerfettoTransitionTracer.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/tracing/PerfettoTransitionTracer.java
@@ -16,7 +16,10 @@
package com.android.wm.shell.transition.tracing;
-import android.internal.perfetto.protos.PerfettoTrace;
+import android.internal.perfetto.protos.ShellTransitionOuterClass.ShellHandlerMapping;
+import android.internal.perfetto.protos.ShellTransitionOuterClass.ShellHandlerMappings;
+import android.internal.perfetto.protos.ShellTransitionOuterClass.ShellTransition;
+import android.internal.perfetto.protos.TracePacketOuterClass.TracePacket;
import android.os.SystemClock;
import android.os.Trace;
import android.tracing.perfetto.DataSourceParams;
@@ -72,11 +75,11 @@
final int handlerId = getHandlerId(handler);
final ProtoOutputStream os = ctx.newTracePacket();
- final long token = os.start(PerfettoTrace.TracePacket.SHELL_TRANSITION);
- os.write(PerfettoTrace.ShellTransition.ID, transitionId);
- os.write(PerfettoTrace.ShellTransition.DISPATCH_TIME_NS,
+ final long token = os.start(TracePacket.SHELL_TRANSITION);
+ os.write(ShellTransition.ID, transitionId);
+ os.write(ShellTransition.DISPATCH_TIME_NS,
SystemClock.elapsedRealtimeNanos());
- os.write(PerfettoTrace.ShellTransition.HANDLER, handlerId);
+ os.write(ShellTransition.HANDLER, handlerId);
os.end(token);
});
}
@@ -117,11 +120,11 @@
private void doLogMergeRequested(int mergeRequestedTransitionId, int playingTransitionId) {
mDataSource.trace(ctx -> {
final ProtoOutputStream os = ctx.newTracePacket();
- final long token = os.start(PerfettoTrace.TracePacket.SHELL_TRANSITION);
- os.write(PerfettoTrace.ShellTransition.ID, mergeRequestedTransitionId);
- os.write(PerfettoTrace.ShellTransition.MERGE_REQUEST_TIME_NS,
+ final long token = os.start(TracePacket.SHELL_TRANSITION);
+ os.write(ShellTransition.ID, mergeRequestedTransitionId);
+ os.write(ShellTransition.MERGE_REQUEST_TIME_NS,
SystemClock.elapsedRealtimeNanos());
- os.write(PerfettoTrace.ShellTransition.MERGE_TARGET, playingTransitionId);
+ os.write(ShellTransition.MERGE_TARGET, playingTransitionId);
os.end(token);
});
}
@@ -149,11 +152,11 @@
private void doLogMerged(int mergeRequestedTransitionId, int playingTransitionId) {
mDataSource.trace(ctx -> {
final ProtoOutputStream os = ctx.newTracePacket();
- final long token = os.start(PerfettoTrace.TracePacket.SHELL_TRANSITION);
- os.write(PerfettoTrace.ShellTransition.ID, mergeRequestedTransitionId);
- os.write(PerfettoTrace.ShellTransition.MERGE_TIME_NS,
+ final long token = os.start(TracePacket.SHELL_TRANSITION);
+ os.write(ShellTransition.ID, mergeRequestedTransitionId);
+ os.write(ShellTransition.MERGE_TIME_NS,
SystemClock.elapsedRealtimeNanos());
- os.write(PerfettoTrace.ShellTransition.MERGE_TARGET, playingTransitionId);
+ os.write(ShellTransition.MERGE_TARGET, playingTransitionId);
os.end(token);
});
}
@@ -180,9 +183,9 @@
private void doLogAborted(int transitionId) {
mDataSource.trace(ctx -> {
final ProtoOutputStream os = ctx.newTracePacket();
- final long token = os.start(PerfettoTrace.TracePacket.SHELL_TRANSITION);
- os.write(PerfettoTrace.ShellTransition.ID, transitionId);
- os.write(PerfettoTrace.ShellTransition.SHELL_ABORT_TIME_NS,
+ final long token = os.start(TracePacket.SHELL_TRANSITION);
+ os.write(ShellTransition.ID, transitionId);
+ os.write(ShellTransition.SHELL_ABORT_TIME_NS,
SystemClock.elapsedRealtimeNanos());
os.end(token);
});
@@ -196,14 +199,14 @@
mDataSource.trace(ctx -> {
final ProtoOutputStream os = ctx.newTracePacket();
- final long mappingsToken = os.start(PerfettoTrace.TracePacket.SHELL_HANDLER_MAPPINGS);
+ final long mappingsToken = os.start(TracePacket.SHELL_HANDLER_MAPPINGS);
for (Map.Entry<String, Integer> entry : mHandlerMapping.entrySet()) {
final String handler = entry.getKey();
final int handlerId = entry.getValue();
- final long mappingEntryToken = os.start(PerfettoTrace.ShellHandlerMappings.MAPPING);
- os.write(PerfettoTrace.ShellHandlerMapping.ID, handlerId);
- os.write(PerfettoTrace.ShellHandlerMapping.NAME, handler);
+ final long mappingEntryToken = os.start(ShellHandlerMappings.MAPPING);
+ os.write(ShellHandlerMapping.ID, handlerId);
+ os.write(ShellHandlerMapping.NAME, handler);
os.end(mappingEntryToken);
}
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 777ab9c..6a9d17f 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
@@ -1182,7 +1182,9 @@
final boolean inImmersiveMode = !source.isVisible();
// Calls WindowDecoration#relayout if decoration visibility needs to be updated
if (inImmersiveMode != mInImmersiveMode) {
- decor.relayout(decor.mTaskInfo);
+ if (Flags.enableDesktopWindowingImmersiveHandleHiding()) {
+ decor.relayout(decor.mTaskInfo);
+ }
mInImmersiveMode = inImmersiveMode;
}
diff --git a/libs/WindowManager/Shell/tests/flicker/service/src/com/android/wm/shell/flicker/service/desktopmode/flicker/CloseAllAppWithAppHeaderExitLandscape.kt b/libs/WindowManager/Shell/tests/flicker/service/src/com/android/wm/shell/flicker/service/desktopmode/flicker/CloseAllAppWithAppHeaderExitLandscape.kt
new file mode 100644
index 0000000..5563bb9
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/service/src/com/android/wm/shell/flicker/service/desktopmode/flicker/CloseAllAppWithAppHeaderExitLandscape.kt
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wm.shell.flicker.service.desktopmode.flicker
+
+import android.tools.Rotation
+import android.tools.flicker.FlickerConfig
+import android.tools.flicker.annotation.ExpectedScenarios
+import android.tools.flicker.annotation.FlickerConfigProvider
+import android.tools.flicker.config.FlickerConfig
+import android.tools.flicker.config.FlickerServiceConfig
+import android.tools.flicker.junit.FlickerServiceJUnit4ClassRunner
+import com.android.wm.shell.flicker.service.desktopmode.flicker.DesktopModeFlickerScenarios.Companion.CLOSE_APP
+import com.android.wm.shell.flicker.service.desktopmode.flicker.DesktopModeFlickerScenarios.Companion.CLOSE_LAST_APP
+import com.android.wm.shell.flicker.service.desktopmode.scenarios.CloseAllAppsWithAppHeaderExit
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(FlickerServiceJUnit4ClassRunner::class)
+class CloseAllAppWithAppHeaderExitLandscape : CloseAllAppsWithAppHeaderExit(Rotation.ROTATION_90) {
+ @ExpectedScenarios(["CLOSE_APP", "CLOSE_LAST_APP"])
+ @Test
+ override fun closeAllAppsInDesktop() = super.closeAllAppsInDesktop()
+
+ companion object {
+ @JvmStatic
+ @FlickerConfigProvider
+ fun flickerConfigProvider(): FlickerConfig =
+ FlickerConfig()
+ .use(FlickerServiceConfig.DEFAULT)
+ .use(CLOSE_APP)
+ .use(CLOSE_LAST_APP)
+ }
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/service/src/com/android/wm/shell/flicker/service/desktopmode/flicker/CloseAllAppWithAppHeaderExitPortrait.kt b/libs/WindowManager/Shell/tests/flicker/service/src/com/android/wm/shell/flicker/service/desktopmode/flicker/CloseAllAppWithAppHeaderExitPortrait.kt
new file mode 100644
index 0000000..3d16d2219
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/service/src/com/android/wm/shell/flicker/service/desktopmode/flicker/CloseAllAppWithAppHeaderExitPortrait.kt
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wm.shell.flicker.service.desktopmode.flicker
+
+import android.tools.Rotation
+import android.tools.flicker.FlickerConfig
+import android.tools.flicker.annotation.ExpectedScenarios
+import android.tools.flicker.annotation.FlickerConfigProvider
+import android.tools.flicker.config.FlickerConfig
+import android.tools.flicker.config.FlickerServiceConfig
+import android.tools.flicker.junit.FlickerServiceJUnit4ClassRunner
+import com.android.wm.shell.flicker.service.desktopmode.flicker.DesktopModeFlickerScenarios.Companion.CLOSE_APP
+import com.android.wm.shell.flicker.service.desktopmode.flicker.DesktopModeFlickerScenarios.Companion.CLOSE_LAST_APP
+import com.android.wm.shell.flicker.service.desktopmode.scenarios.CloseAllAppsWithAppHeaderExit
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(FlickerServiceJUnit4ClassRunner::class)
+class CloseAllAppWithAppHeaderExitPortrait : CloseAllAppsWithAppHeaderExit(Rotation.ROTATION_0) {
+ @ExpectedScenarios(["CLOSE_APP", "CLOSE_LAST_APP"])
+ @Test
+ override fun closeAllAppsInDesktop() = super.closeAllAppsInDesktop()
+
+ companion object {
+ @JvmStatic
+ @FlickerConfigProvider
+ fun flickerConfigProvider(): FlickerConfig =
+ FlickerConfig()
+ .use(FlickerServiceConfig.DEFAULT)
+ .use(CLOSE_APP)
+ .use(CLOSE_LAST_APP)
+ }
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/service/src/com/android/wm/shell/flicker/service/desktopmode/flicker/DesktopModeFlickerScenarios.kt b/libs/WindowManager/Shell/tests/flicker/service/src/com/android/wm/shell/flicker/service/desktopmode/flicker/DesktopModeFlickerScenarios.kt
new file mode 100644
index 0000000..75dfeba
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/service/src/com/android/wm/shell/flicker/service/desktopmode/flicker/DesktopModeFlickerScenarios.kt
@@ -0,0 +1,118 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wm.shell.flicker.service.desktopmode.flicker
+
+import android.tools.flicker.AssertionInvocationGroup
+import android.tools.flicker.assertors.assertions.AppLayerIsInvisibleAtEnd
+import android.tools.flicker.assertors.assertions.AppLayerIsVisibleAlways
+import android.tools.flicker.assertors.assertions.AppLayerIsVisibleAtStart
+import android.tools.flicker.assertors.assertions.AppWindowHasDesktopModeInitialBoundsAtTheEnd
+import android.tools.flicker.assertors.assertions.AppWindowOnTopAtEnd
+import android.tools.flicker.assertors.assertions.AppWindowOnTopAtStart
+import android.tools.flicker.assertors.assertions.LauncherWindowMovesToTop
+import android.tools.flicker.config.AssertionTemplates
+import android.tools.flicker.config.FlickerConfigEntry
+import android.tools.flicker.config.ScenarioId
+import android.tools.flicker.config.desktopmode.Components
+import android.tools.flicker.extractors.ITransitionMatcher
+import android.tools.flicker.extractors.ShellTransitionScenarioExtractor
+import android.tools.traces.wm.Transition
+import android.tools.traces.wm.TransitionType
+
+class DesktopModeFlickerScenarios {
+ companion object {
+ val END_DRAG_TO_DESKTOP =
+ FlickerConfigEntry(
+ scenarioId = ScenarioId("END_DRAG_TO_DESKTOP"),
+ extractor =
+ ShellTransitionScenarioExtractor(
+ transitionMatcher =
+ object : ITransitionMatcher {
+ override fun findAll(
+ transitions: Collection<Transition>
+ ): Collection<Transition> {
+ return transitions.filter {
+ it.type == TransitionType.DESKTOP_MODE_END_DRAG_TO_DESKTOP
+ }
+ }
+ }
+ ),
+ assertions =
+ AssertionTemplates.COMMON_ASSERTIONS +
+ listOf(
+ AppLayerIsVisibleAlways(Components.DESKTOP_MODE_APP),
+ AppWindowOnTopAtEnd(Components.DESKTOP_MODE_APP),
+ AppWindowHasDesktopModeInitialBoundsAtTheEnd(
+ Components.DESKTOP_MODE_APP
+ )
+ )
+ .associateBy({ it }, { AssertionInvocationGroup.BLOCKING }),
+ )
+
+ val CLOSE_APP =
+ FlickerConfigEntry(
+ scenarioId = ScenarioId("CLOSE_APP"),
+ extractor =
+ ShellTransitionScenarioExtractor(
+ transitionMatcher =
+ object : ITransitionMatcher {
+ override fun findAll(
+ transitions: Collection<Transition>
+ ): Collection<Transition> {
+ return transitions.filter { it.type == TransitionType.CLOSE }
+ }
+ }
+ ),
+ assertions =
+ AssertionTemplates.COMMON_ASSERTIONS +
+ listOf(
+ AppWindowOnTopAtStart(Components.DESKTOP_MODE_APP),
+ AppLayerIsVisibleAtStart(Components.DESKTOP_MODE_APP),
+ AppLayerIsInvisibleAtEnd(Components.DESKTOP_MODE_APP),
+ )
+ .associateBy({ it }, { AssertionInvocationGroup.BLOCKING }),
+ )
+
+ val CLOSE_LAST_APP =
+ FlickerConfigEntry(
+ scenarioId = ScenarioId("CLOSE_LAST_APP"),
+ extractor =
+ ShellTransitionScenarioExtractor(
+ transitionMatcher =
+ object : ITransitionMatcher {
+ override fun findAll(
+ transitions: Collection<Transition>
+ ): Collection<Transition> {
+ val lastTransition =
+ transitions.findLast { it.type == TransitionType.CLOSE }
+ return if (lastTransition != null) listOf(lastTransition)
+ else emptyList()
+ }
+ }
+ ),
+ assertions =
+ AssertionTemplates.COMMON_ASSERTIONS +
+ listOf(
+ AppWindowOnTopAtStart(Components.DESKTOP_MODE_APP),
+ AppLayerIsVisibleAtStart(Components.DESKTOP_MODE_APP),
+ AppLayerIsInvisibleAtEnd(Components.DESKTOP_MODE_APP),
+ LauncherWindowMovesToTop()
+ )
+ .associateBy({ it }, { AssertionInvocationGroup.BLOCKING }),
+ )
+ }
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/service/src/com/android/wm/shell/flicker/service/desktopmode/flicker/EnterDesktopWithDragLandscape.kt b/libs/WindowManager/Shell/tests/flicker/service/src/com/android/wm/shell/flicker/service/desktopmode/flicker/EnterDesktopWithDragLandscape.kt
index 4c781d3..9dfafe9 100644
--- a/libs/WindowManager/Shell/tests/flicker/service/src/com/android/wm/shell/flicker/service/desktopmode/flicker/EnterDesktopWithDragLandscape.kt
+++ b/libs/WindowManager/Shell/tests/flicker/service/src/com/android/wm/shell/flicker/service/desktopmode/flicker/EnterDesktopWithDragLandscape.kt
@@ -17,58 +17,28 @@
package com.android.wm.shell.flicker.service.desktopmode.flicker
import android.tools.Rotation
-import android.tools.flicker.AssertionInvocationGroup
import android.tools.flicker.FlickerConfig
import android.tools.flicker.annotation.ExpectedScenarios
import android.tools.flicker.annotation.FlickerConfigProvider
-import android.tools.flicker.assertors.assertions.AppLayerIsVisibleAlways
-import android.tools.flicker.assertors.assertions.AppWindowHasDesktopModeInitialBoundsAtTheEnd
-import android.tools.flicker.assertors.assertions.AppWindowOnTopAtEnd
-import android.tools.flicker.config.AssertionTemplates
import android.tools.flicker.config.FlickerConfig
-import android.tools.flicker.config.FlickerConfigEntry
import android.tools.flicker.config.FlickerServiceConfig
-import android.tools.flicker.config.ScenarioId
-import android.tools.flicker.config.desktopmode.Components
-import android.tools.flicker.extractors.ITransitionMatcher
-import android.tools.flicker.extractors.ShellTransitionScenarioExtractor
import android.tools.flicker.junit.FlickerServiceJUnit4ClassRunner
-import android.tools.traces.wm.Transition
-import android.tools.traces.wm.TransitionType
+import com.android.wm.shell.flicker.service.desktopmode.flicker.DesktopModeFlickerScenarios.Companion.END_DRAG_TO_DESKTOP
import com.android.wm.shell.flicker.service.desktopmode.scenarios.EnterDesktopWithDrag
import org.junit.Test
import org.junit.runner.RunWith
@RunWith(FlickerServiceJUnit4ClassRunner::class)
class EnterDesktopWithDragLandscape : EnterDesktopWithDrag(Rotation.ROTATION_90) {
- @ExpectedScenarios(["END_DRAG_TO_DESKTOP"]) @Test override fun enterDesktopWithDrag() =
- super.enterDesktopWithDrag()
+ @ExpectedScenarios(["END_DRAG_TO_DESKTOP"])
+ @Test
+ override fun enterDesktopWithDrag() = super.enterDesktopWithDrag()
companion object {
- private val END_DRAG_TO_DESKTOP = FlickerConfigEntry(
- scenarioId = ScenarioId("END_DRAG_TO_DESKTOP"),
- extractor = ShellTransitionScenarioExtractor(
- transitionMatcher = object : ITransitionMatcher {
- override fun findAll(
- transitions: Collection<Transition>
- ): Collection<Transition> {
- return transitions.filter {
- it.type == TransitionType.DESKTOP_MODE_END_DRAG_TO_DESKTOP}
- }
- }),
- assertions = AssertionTemplates.COMMON_ASSERTIONS +
- listOf(
- AppLayerIsVisibleAlways(Components.DESKTOP_MODE_APP),
- AppWindowOnTopAtEnd(Components.DESKTOP_MODE_APP),
- AppWindowHasDesktopModeInitialBoundsAtTheEnd(Components.DESKTOP_MODE_APP)
- ).associateBy({ it }, { AssertionInvocationGroup.BLOCKING }),
- )
@JvmStatic
@FlickerConfigProvider
fun flickerConfigProvider(): FlickerConfig =
- FlickerConfig()
- .use(FlickerServiceConfig.DEFAULT)
- .use(END_DRAG_TO_DESKTOP)
+ FlickerConfig().use(FlickerServiceConfig.DEFAULT).use(END_DRAG_TO_DESKTOP)
}
}
diff --git a/libs/WindowManager/Shell/tests/flicker/service/src/com/android/wm/shell/flicker/service/desktopmode/flicker/EnterDesktopWithDragPortrait.kt b/libs/WindowManager/Shell/tests/flicker/service/src/com/android/wm/shell/flicker/service/desktopmode/flicker/EnterDesktopWithDragPortrait.kt
index d99d875..1c7d623 100644
--- a/libs/WindowManager/Shell/tests/flicker/service/src/com/android/wm/shell/flicker/service/desktopmode/flicker/EnterDesktopWithDragPortrait.kt
+++ b/libs/WindowManager/Shell/tests/flicker/service/src/com/android/wm/shell/flicker/service/desktopmode/flicker/EnterDesktopWithDragPortrait.kt
@@ -17,58 +17,27 @@
package com.android.wm.shell.flicker.service.desktopmode.flicker
import android.tools.Rotation
-import android.tools.flicker.AssertionInvocationGroup
import android.tools.flicker.FlickerConfig
import android.tools.flicker.annotation.ExpectedScenarios
import android.tools.flicker.annotation.FlickerConfigProvider
-import android.tools.flicker.assertors.assertions.AppLayerIsVisibleAlways
-import android.tools.flicker.assertors.assertions.AppWindowHasDesktopModeInitialBoundsAtTheEnd
-import android.tools.flicker.assertors.assertions.AppWindowOnTopAtEnd
-import android.tools.flicker.config.AssertionTemplates
import android.tools.flicker.config.FlickerConfig
-import android.tools.flicker.config.FlickerConfigEntry
import android.tools.flicker.config.FlickerServiceConfig
-import android.tools.flicker.config.ScenarioId
-import android.tools.flicker.config.desktopmode.Components
-import android.tools.flicker.extractors.ITransitionMatcher
-import android.tools.flicker.extractors.ShellTransitionScenarioExtractor
import android.tools.flicker.junit.FlickerServiceJUnit4ClassRunner
-import android.tools.traces.wm.Transition
-import android.tools.traces.wm.TransitionType
+import com.android.wm.shell.flicker.service.desktopmode.flicker.DesktopModeFlickerScenarios.Companion.END_DRAG_TO_DESKTOP
import com.android.wm.shell.flicker.service.desktopmode.scenarios.EnterDesktopWithDrag
import org.junit.Test
import org.junit.runner.RunWith
@RunWith(FlickerServiceJUnit4ClassRunner::class)
class EnterDesktopWithDragPortrait : EnterDesktopWithDrag(Rotation.ROTATION_0) {
- @ExpectedScenarios(["END_DRAG_TO_DESKTOP"]) @Test override fun enterDesktopWithDrag() =
- super.enterDesktopWithDrag()
+ @ExpectedScenarios(["END_DRAG_TO_DESKTOP"])
+ @Test
+ override fun enterDesktopWithDrag() = super.enterDesktopWithDrag()
companion object {
- private val END_DRAG_TO_DESKTOP = FlickerConfigEntry(
- scenarioId = ScenarioId("END_DRAG_TO_DESKTOP"),
- extractor = ShellTransitionScenarioExtractor(
- transitionMatcher = object : ITransitionMatcher {
- override fun findAll(
- transitions: Collection<Transition>
- ): Collection<Transition> {
- return transitions.filter {
- it.type == TransitionType.DESKTOP_MODE_END_DRAG_TO_DESKTOP}
- }
- }),
- assertions = AssertionTemplates.COMMON_ASSERTIONS +
- listOf(
- AppLayerIsVisibleAlways(Components.DESKTOP_MODE_APP),
- AppWindowOnTopAtEnd(Components.DESKTOP_MODE_APP),
- AppWindowHasDesktopModeInitialBoundsAtTheEnd(Components.DESKTOP_MODE_APP)
- ).associateBy({ it }, { AssertionInvocationGroup.BLOCKING }),
- )
-
@JvmStatic
@FlickerConfigProvider
fun flickerConfigProvider(): FlickerConfig =
- FlickerConfig()
- .use(FlickerServiceConfig.DEFAULT)
- .use(END_DRAG_TO_DESKTOP)
+ FlickerConfig().use(FlickerServiceConfig.DEFAULT).use(END_DRAG_TO_DESKTOP)
}
}
diff --git a/libs/WindowManager/Shell/tests/flicker/service/src/com/android/wm/shell/flicker/service/desktopmode/scenarios/CloseAllAppsWithAppHeaderExit.kt b/libs/WindowManager/Shell/tests/flicker/service/src/com/android/wm/shell/flicker/service/desktopmode/scenarios/CloseAllAppsWithAppHeaderExit.kt
new file mode 100644
index 0000000..0c2b501
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/flicker/service/src/com/android/wm/shell/flicker/service/desktopmode/scenarios/CloseAllAppsWithAppHeaderExit.kt
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wm.shell.flicker.service.desktopmode.scenarios
+
+import android.app.Instrumentation
+import android.tools.NavBar
+import android.tools.Rotation
+import android.tools.traces.parsers.WindowManagerStateHelper
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.test.uiautomator.UiDevice
+import com.android.launcher3.tapl.LauncherInstrumentation
+import com.android.server.wm.flicker.helpers.DesktopModeAppHelper
+import com.android.server.wm.flicker.helpers.MailAppHelper
+import com.android.server.wm.flicker.helpers.NonResizeableAppHelper
+import com.android.server.wm.flicker.helpers.SimpleAppHelper
+import com.android.window.flags.Flags
+import com.android.wm.shell.flicker.service.common.Utils
+import org.junit.After
+import org.junit.Assume
+import org.junit.Before
+import org.junit.Ignore
+import org.junit.Rule
+import org.junit.Test
+
+@Ignore("Base Test Class")
+abstract class CloseAllAppsWithAppHeaderExit
+@JvmOverloads
+constructor(val rotation: Rotation = Rotation.ROTATION_0) {
+
+ private val instrumentation: Instrumentation = InstrumentationRegistry.getInstrumentation()
+ private val tapl = LauncherInstrumentation()
+ private val wmHelper = WindowManagerStateHelper(instrumentation)
+ private val device = UiDevice.getInstance(instrumentation)
+ private val testApp = DesktopModeAppHelper(SimpleAppHelper(instrumentation))
+ private val mailApp = DesktopModeAppHelper(MailAppHelper(instrumentation))
+ private val nonResizeableApp = DesktopModeAppHelper(NonResizeableAppHelper(instrumentation))
+
+
+
+ @Rule @JvmField val testSetupRule = Utils.testSetupRule(NavBar.MODE_GESTURAL, rotation)
+
+ @Before
+ fun setup() {
+ Assume.assumeTrue(Flags.enableDesktopWindowingMode())
+ tapl.setEnableRotation(true)
+ tapl.setExpectedRotation(rotation.value)
+ testApp.enterDesktopWithDrag(wmHelper, device)
+ mailApp.launchViaIntent(wmHelper)
+ nonResizeableApp.launchViaIntent(wmHelper)
+ }
+
+ @Test
+ open fun closeAllAppsInDesktop() {
+ nonResizeableApp.closeDesktopApp(wmHelper, device)
+ mailApp.closeDesktopApp(wmHelper, device)
+ testApp.closeDesktopApp(wmHelper, device)
+ }
+
+ @After
+ fun teardown() {
+ testApp.exit(wmHelper)
+ }
+}
diff --git a/libs/WindowManager/Shell/tests/flicker/service/src/com/android/wm/shell/flicker/service/desktopmode/scenarios/EnterDesktopWithDrag.kt b/libs/WindowManager/Shell/tests/flicker/service/src/com/android/wm/shell/flicker/service/desktopmode/scenarios/EnterDesktopWithDrag.kt
index 0403b4f..9e9998e 100644
--- a/libs/WindowManager/Shell/tests/flicker/service/src/com/android/wm/shell/flicker/service/desktopmode/scenarios/EnterDesktopWithDrag.kt
+++ b/libs/WindowManager/Shell/tests/flicker/service/src/com/android/wm/shell/flicker/service/desktopmode/scenarios/EnterDesktopWithDrag.kt
@@ -23,15 +23,18 @@
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.uiautomator.UiDevice
import com.android.launcher3.tapl.LauncherInstrumentation
+import com.android.server.wm.flicker.helpers.DesktopModeAppHelper
import com.android.server.wm.flicker.helpers.SimpleAppHelper
+import com.android.window.flags.Flags
import com.android.wm.shell.flicker.service.common.Utils
-import com.android.wm.shell.flicker.utils.DesktopModeUtils
import org.junit.After
+import org.junit.Assume
import org.junit.Before
import org.junit.Ignore
import org.junit.Rule
import org.junit.Test
+
@Ignore("Base Test Class")
abstract class EnterDesktopWithDrag
@JvmOverloads
@@ -41,19 +44,20 @@
private val tapl = LauncherInstrumentation()
private val wmHelper = WindowManagerStateHelper(instrumentation)
private val device = UiDevice.getInstance(instrumentation)
- private val testApp = SimpleAppHelper(instrumentation)
+ private val testApp = DesktopModeAppHelper(SimpleAppHelper(instrumentation))
@Rule @JvmField val testSetupRule = Utils.testSetupRule(NavBar.MODE_GESTURAL, rotation)
@Before
fun setup() {
+ Assume.assumeTrue(Flags.enableDesktopWindowingMode())
tapl.setEnableRotation(true)
tapl.setExpectedRotation(rotation.value)
}
@Test
open fun enterDesktopWithDrag() {
- DesktopModeUtils.enterDesktopWithDrag(wmHelper, device, testApp)
+ testApp.enterDesktopWithDrag(wmHelper, device)
}
@After
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/utils/DesktopModeUtils.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/utils/DesktopModeUtils.kt
deleted file mode 100644
index 345bc5e..0000000
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/utils/DesktopModeUtils.kt
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.wm.shell.flicker.utils
-
-import android.tools.device.apphelpers.StandardAppHelper
-import android.tools.helpers.SYSTEMUI_PACKAGE
-import android.tools.traces.component.IComponentMatcher
-import android.tools.traces.parsers.WindowManagerStateHelper
-import android.tools.traces.wm.WindowingMode
-import androidx.test.uiautomator.By
-import androidx.test.uiautomator.BySelector
-import androidx.test.uiautomator.UiDevice
-import androidx.test.uiautomator.Until
-
-/**
- * Provides a collection of utility functions for desktop mode testing.
- */
-object DesktopModeUtils {
- private const val TIMEOUT_MS = 3_000L
- private const val CAPTION = "desktop_mode_caption"
- private const val CAPTION_HANDLE = "caption_handle"
- private const val MAXIMIZE_BUTTON = "maximize_button_view"
-
- private val captionFullscreen: BySelector
- get() = By.res(SYSTEMUI_PACKAGE, CAPTION)
- private val captionHandle: BySelector
- get() = By.res(SYSTEMUI_PACKAGE, CAPTION_HANDLE)
- private val maximizeButton: BySelector
- get() = By.res(SYSTEMUI_PACKAGE, MAXIMIZE_BUTTON)
-
- /**
- * Wait for an app moved to desktop to finish its transition.
- */
- private fun waitForAppToMoveToDesktop(
- wmHelper: WindowManagerStateHelper,
- currentApp: IComponentMatcher,
- ) {
- wmHelper
- .StateSyncBuilder()
- .withWindowSurfaceAppeared(currentApp)
- .withFreeformApp(currentApp)
- .withAppTransitionIdle()
- .waitForAndVerify()
- }
-
- /**
- * Click maximise button on the app header for the given app.
- */
- fun maximiseDesktopApp(
- wmHelper: WindowManagerStateHelper,
- device: UiDevice,
- currentApp: StandardAppHelper
- ) {
- if (wmHelper.getWindow(currentApp)?.windowingMode
- != WindowingMode.WINDOWING_MODE_FREEFORM.value)
- error("expected a freeform window to maximise but window is not in freefrom mode")
-
- val maximizeButton =
- device.wait(Until.findObject(maximizeButton), TIMEOUT_MS)
- ?: error("Unable to find view $maximizeButton\n")
- maximizeButton.click()
- }
-
- /**
- * Move an app to Desktop by dragging the app handle at the top.
- */
- fun enterDesktopWithDrag(
- wmHelper: WindowManagerStateHelper,
- device: UiDevice,
- currentApp: StandardAppHelper,
- ) {
- currentApp.launchViaIntent(wmHelper)
- dragToDesktop(wmHelper, currentApp, device)
- waitForAppToMoveToDesktop(wmHelper, currentApp)
- }
-
- private fun dragToDesktop(
- wmHelper: WindowManagerStateHelper,
- currentApp: StandardAppHelper,
- device: UiDevice
- ) {
- val windowRect = wmHelper.getWindowRegion(currentApp).bounds
- val startX = windowRect.centerX()
-
- // Start dragging a little under the top to prevent dragging the notification shade.
- val startY = 10
-
- val displayRect =
- wmHelper.currentState.wmState.getDefaultDisplay()?.displayRect
- ?: throw IllegalStateException("Default display is null")
-
- // The position we want to drag to
- val endY = displayRect.centerY() / 2
-
- // drag the window to move to desktop
- device.drag(startX, startY, startX, endY, 100)
- }
-}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/ShellTaskOrganizerTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/ShellTaskOrganizerTests.java
index 9c1a88e..82c070c 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/ShellTaskOrganizerTests.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/ShellTaskOrganizerTests.java
@@ -16,10 +16,10 @@
package com.android.wm.shell;
-import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_DISMISSED;
-import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN;
-import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED;
-import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED;
+import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_DISMISSED;
+import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN;
+import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED;
+import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED;
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW;
import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
@@ -435,7 +435,8 @@
public void testOnCameraCompatActivityChanged() {
final RunningTaskInfo taskInfo1 = createTaskInfo(1, WINDOWING_MODE_FULLSCREEN);
taskInfo1.displayId = DEFAULT_DISPLAY;
- taskInfo1.appCompatTaskInfo.cameraCompatControlState = CAMERA_COMPAT_CONTROL_HIDDEN;
+ taskInfo1.appCompatTaskInfo.cameraCompatTaskInfo.cameraCompatControlState =
+ CAMERA_COMPAT_CONTROL_HIDDEN;
final TrackingTaskListener taskListener = new TrackingTaskListener();
mOrganizer.addListenerForType(taskListener, TASK_LISTENER_TYPE_FULLSCREEN);
mOrganizer.onTaskAppeared(taskInfo1, null);
@@ -449,7 +450,7 @@
final RunningTaskInfo taskInfo2 =
createTaskInfo(taskInfo1.taskId, taskInfo1.getWindowingMode());
taskInfo2.displayId = taskInfo1.displayId;
- taskInfo2.appCompatTaskInfo.cameraCompatControlState =
+ taskInfo2.appCompatTaskInfo.cameraCompatTaskInfo.cameraCompatControlState =
CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED;
taskInfo2.isVisible = true;
mOrganizer.onTaskInfoChanged(taskInfo2);
@@ -461,7 +462,7 @@
final RunningTaskInfo taskInfo3 =
createTaskInfo(taskInfo1.taskId, taskInfo1.getWindowingMode());
taskInfo3.displayId = taskInfo1.displayId;
- taskInfo3.appCompatTaskInfo.cameraCompatControlState =
+ taskInfo3.appCompatTaskInfo.cameraCompatTaskInfo.cameraCompatControlState =
CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED;
taskInfo3.isVisible = true;
mOrganizer.onTaskInfoChanged(taskInfo3);
@@ -474,7 +475,7 @@
createTaskInfo(taskInfo1.taskId, taskInfo1.getWindowingMode());
taskInfo4.displayId = taskInfo1.displayId;
taskInfo4.appCompatTaskInfo.topActivityInSizeCompat = true;
- taskInfo4.appCompatTaskInfo.cameraCompatControlState =
+ taskInfo4.appCompatTaskInfo.cameraCompatTaskInfo.cameraCompatControlState =
CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED;
taskInfo4.isVisible = true;
mOrganizer.onTaskInfoChanged(taskInfo4);
@@ -485,7 +486,7 @@
final RunningTaskInfo taskInfo5 =
createTaskInfo(taskInfo1.taskId, taskInfo1.getWindowingMode());
taskInfo5.displayId = taskInfo1.displayId;
- taskInfo5.appCompatTaskInfo.cameraCompatControlState =
+ taskInfo5.appCompatTaskInfo.cameraCompatTaskInfo.cameraCompatControlState =
CAMERA_COMPAT_CONTROL_DISMISSED;
taskInfo5.isVisible = true;
mOrganizer.onTaskInfoChanged(taskInfo5);
@@ -496,7 +497,7 @@
final RunningTaskInfo taskInfo6 =
createTaskInfo(taskInfo1.taskId, taskInfo1.getWindowingMode());
taskInfo6.displayId = taskInfo1.displayId;
- taskInfo6.appCompatTaskInfo.cameraCompatControlState =
+ taskInfo6.appCompatTaskInfo.cameraCompatTaskInfo.cameraCompatControlState =
CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED;
taskInfo6.isVisible = false;
mOrganizer.onTaskInfoChanged(taskInfo6);
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIControllerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIControllerTest.java
index fef81af..afae653 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIControllerTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIControllerTest.java
@@ -16,8 +16,8 @@
package com.android.wm.shell.compatui;
-import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN;
-import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED;
+import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN;
+import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED;
import static android.view.WindowInsets.Type.navigationBars;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
@@ -34,7 +34,7 @@
import static org.mockito.Mockito.verify;
import android.app.ActivityManager.RunningTaskInfo;
-import android.app.AppCompatTaskInfo.CameraCompatControlState;
+import android.app.CameraCompatTaskInfo.CameraCompatControlState;
import android.app.TaskInfo;
import android.content.Context;
import android.content.res.Configuration;
@@ -689,7 +689,8 @@
taskInfo.taskId = taskId;
taskInfo.displayId = displayId;
taskInfo.appCompatTaskInfo.topActivityInSizeCompat = hasSizeCompat;
- taskInfo.appCompatTaskInfo.cameraCompatControlState = cameraCompatControlState;
+ taskInfo.appCompatTaskInfo.cameraCompatTaskInfo.cameraCompatControlState =
+ cameraCompatControlState;
taskInfo.isVisible = isVisible;
taskInfo.isFocused = isFocused;
taskInfo.isTopActivityTransparent = isTopActivityTransparent;
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUILayoutTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUILayoutTest.java
index dd358e7..cd3e8cb 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUILayoutTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUILayoutTest.java
@@ -16,10 +16,10 @@
package com.android.wm.shell.compatui;
-import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_DISMISSED;
-import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN;
-import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED;
-import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED;
+import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_DISMISSED;
+import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN;
+import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED;
+import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
@@ -28,7 +28,7 @@
import static org.mockito.Mockito.verify;
import android.app.ActivityManager;
-import android.app.AppCompatTaskInfo.CameraCompatControlState;
+import android.app.CameraCompatTaskInfo.CameraCompatControlState;
import android.app.TaskInfo;
import android.graphics.Rect;
import android.testing.AndroidTestingRunner;
@@ -222,7 +222,8 @@
ActivityManager.RunningTaskInfo taskInfo = new ActivityManager.RunningTaskInfo();
taskInfo.taskId = TASK_ID;
taskInfo.appCompatTaskInfo.topActivityInSizeCompat = hasSizeCompat;
- taskInfo.appCompatTaskInfo.cameraCompatControlState = cameraCompatControlState;
+ taskInfo.appCompatTaskInfo.cameraCompatTaskInfo.cameraCompatControlState =
+ cameraCompatControlState;
taskInfo.appCompatTaskInfo.topActivityLetterboxHeight = 1000;
taskInfo.appCompatTaskInfo.topActivityLetterboxWidth = 1000;
taskInfo.configuration.windowConfiguration.setBounds(new Rect(0, 0, 2000, 2000));
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIWindowManagerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIWindowManagerTest.java
index 4f261cd..5209d0e 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIWindowManagerTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIWindowManagerTest.java
@@ -16,10 +16,10 @@
package com.android.wm.shell.compatui;
-import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_DISMISSED;
-import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN;
-import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED;
-import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED;
+import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_DISMISSED;
+import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN;
+import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED;
+import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED;
import static android.platform.test.flag.junit.SetFlagsRule.DefaultInitValueType.DEVICE_DEFAULT;
import static android.view.WindowInsets.Type.navigationBars;
@@ -37,7 +37,7 @@
import static org.mockito.Mockito.verify;
import android.app.ActivityManager;
-import android.app.AppCompatTaskInfo;
+import android.app.CameraCompatTaskInfo;
import android.app.TaskInfo;
import android.content.res.Configuration;
import android.graphics.Rect;
@@ -521,11 +521,12 @@
}
private static TaskInfo createTaskInfo(boolean hasSizeCompat,
- @AppCompatTaskInfo.CameraCompatControlState int cameraCompatControlState) {
+ @CameraCompatTaskInfo.CameraCompatControlState int cameraCompatControlState) {
ActivityManager.RunningTaskInfo taskInfo = new ActivityManager.RunningTaskInfo();
taskInfo.taskId = TASK_ID;
taskInfo.appCompatTaskInfo.topActivityInSizeCompat = hasSizeCompat;
- taskInfo.appCompatTaskInfo.cameraCompatControlState = cameraCompatControlState;
+ taskInfo.appCompatTaskInfo.cameraCompatTaskInfo.cameraCompatControlState =
+ cameraCompatControlState;
taskInfo.configuration.uiMode &= ~Configuration.UI_MODE_TYPE_DESK;
// Letterboxed activity that takes half the screen should show size compat restart button
taskInfo.configuration.windowConfiguration.setBounds(
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/UserAspectRatioSettingsLayoutTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/UserAspectRatioSettingsLayoutTest.java
index 38d6ea1..0231612 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/UserAspectRatioSettingsLayoutTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/UserAspectRatioSettingsLayoutTest.java
@@ -16,7 +16,7 @@
package com.android.wm.shell.compatui;
-import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN;
+import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
@@ -25,7 +25,7 @@
import static org.mockito.Mockito.verify;
import android.app.ActivityManager;
-import android.app.AppCompatTaskInfo.CameraCompatControlState;
+import android.app.CameraCompatTaskInfo.CameraCompatControlState;
import android.app.TaskInfo;
import android.content.ComponentName;
import android.testing.AndroidTestingRunner;
@@ -148,7 +148,8 @@
ActivityManager.RunningTaskInfo taskInfo = new ActivityManager.RunningTaskInfo();
taskInfo.taskId = TASK_ID;
taskInfo.appCompatTaskInfo.topActivityInSizeCompat = hasSizeCompat;
- taskInfo.appCompatTaskInfo.cameraCompatControlState = cameraCompatControlState;
+ taskInfo.appCompatTaskInfo.cameraCompatTaskInfo.cameraCompatControlState =
+ cameraCompatControlState;
taskInfo.realActivity = new ComponentName("com.mypackage.test", "TestActivity");
return taskInfo;
}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/UserAspectRatioSettingsWindowManagerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/UserAspectRatioSettingsWindowManagerTest.java
index 81ba4b3..94e168e 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/UserAspectRatioSettingsWindowManagerTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/UserAspectRatioSettingsWindowManagerTest.java
@@ -292,6 +292,24 @@
}
@Test
+ public void testUserFullscreenOverrideEnabled_buttonAlwaysShown() {
+ TaskInfo taskInfo = createTaskInfo(/* eligibleForUserAspectRatioButton= */
+ true, /* topActivityBoundsLetterboxed */ true, ACTION_MAIN, CATEGORY_LAUNCHER);
+
+ final Rect stableBounds = mWindowManager.getTaskStableBounds();
+
+ // Letterboxed activity that has user fullscreen override should always show button,
+ // layout should be inflated
+ taskInfo.appCompatTaskInfo.topActivityLetterboxHeight = stableBounds.height();
+ taskInfo.appCompatTaskInfo.topActivityLetterboxWidth = stableBounds.width();
+ taskInfo.appCompatTaskInfo.isUserFullscreenOverrideEnabled = true;
+
+ mWindowManager.updateCompatInfo(taskInfo, mTaskListener, /* canShow= */ true);
+
+ verify(mWindowManager).inflateLayout();
+ }
+
+ @Test
public void testUpdateDisplayLayout() {
final DisplayInfo displayInfo = new DisplayInfo();
displayInfo.logicalWidth = 1000;
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopModeTaskRepositoryTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopModeTaskRepositoryTest.kt
index b2b54ac..dca7be1 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopModeTaskRepositoryTest.kt
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopModeTaskRepositoryTest.kt
@@ -483,6 +483,102 @@
assertThat(repo.removeBoundsBeforeMaximize(taskId)).isNull()
}
+ @Test
+ fun minimizeTaskNotCalled_noTasksMinimized() {
+ assertThat(repo.isMinimizedTask(taskId = 0)).isFalse()
+ assertThat(repo.isMinimizedTask(taskId = 1)).isFalse()
+ }
+
+ @Test
+ fun minimizeTask_onlyThatTaskIsMinimized() {
+ repo.minimizeTask(displayId = 0, taskId = 0)
+
+ assertThat(repo.isMinimizedTask(taskId = 0)).isTrue()
+ assertThat(repo.isMinimizedTask(taskId = 1)).isFalse()
+ assertThat(repo.isMinimizedTask(taskId = 2)).isFalse()
+ }
+
+ @Test
+ fun unminimizeTask_taskNoLongerMinimized() {
+ repo.minimizeTask(displayId = 0, taskId = 0)
+ repo.unminimizeTask(displayId = 0, taskId = 0)
+
+ assertThat(repo.isMinimizedTask(taskId = 0)).isFalse()
+ assertThat(repo.isMinimizedTask(taskId = 1)).isFalse()
+ assertThat(repo.isMinimizedTask(taskId = 2)).isFalse()
+ }
+
+ @Test
+ fun unminimizeTask_nonExistentTask_doesntCrash() {
+ repo.unminimizeTask(displayId = 0, taskId = 0)
+
+ assertThat(repo.isMinimizedTask(taskId = 0)).isFalse()
+ assertThat(repo.isMinimizedTask(taskId = 1)).isFalse()
+ assertThat(repo.isMinimizedTask(taskId = 2)).isFalse()
+ }
+
+
+ @Test
+ fun updateVisibleFreeformTasks_toVisible_taskIsUnminimized() {
+ repo.minimizeTask(displayId = 10, taskId = 2)
+
+ repo.updateVisibleFreeformTasks(displayId = 10, taskId = 2, visible = true)
+
+ assertThat(repo.isMinimizedTask(taskId = 2)).isFalse()
+ }
+
+ @Test
+ fun isDesktopModeShowing_noActiveTasks_returnsFalse() {
+ assertThat(repo.isDesktopModeShowing(displayId = 0)).isFalse()
+ }
+
+ @Test
+ fun isDesktopModeShowing_noTasksVisible_returnsFalse() {
+ repo.addActiveTask(displayId = 0, taskId = 1)
+ repo.addActiveTask(displayId = 0, taskId = 2)
+
+ assertThat(repo.isDesktopModeShowing(displayId = 0)).isFalse()
+ }
+
+ @Test
+ fun isDesktopModeShowing_tasksActiveAndVisible_returnsTrue() {
+ repo.addActiveTask(displayId = 0, taskId = 1)
+ repo.addActiveTask(displayId = 0, taskId = 2)
+ repo.updateVisibleFreeformTasks(displayId = 0, taskId = 1, visible = true)
+
+ assertThat(repo.isDesktopModeShowing(displayId = 0)).isTrue()
+ }
+
+ @Test
+ fun getActiveNonMinimizedTasksOrderedFrontToBack_returnsFreeformTasksInCorrectOrder() {
+ repo.addActiveTask(displayId = 0, taskId = 1)
+ repo.addActiveTask(displayId = 0, taskId = 2)
+ repo.addActiveTask(displayId = 0, taskId = 3)
+ // The front-most task will be the one added last through addOrMoveFreeformTaskToTop
+ repo.addOrMoveFreeformTaskToTop(taskId = 3)
+ repo.addOrMoveFreeformTaskToTop(taskId = 2)
+ repo.addOrMoveFreeformTaskToTop(taskId = 1)
+
+ assertThat(repo.getActiveNonMinimizedTasksOrderedFrontToBack(displayId = 0)).isEqualTo(
+ listOf(1, 2, 3))
+ }
+
+ @Test
+ fun getActiveNonMinimizedTasksOrderedFrontToBack_minimizedTaskNotIncluded() {
+ repo.addActiveTask(displayId = 0, taskId = 1)
+ repo.addActiveTask(displayId = 0, taskId = 2)
+ repo.addActiveTask(displayId = 0, taskId = 3)
+ // The front-most task will be the one added last through addOrMoveFreeformTaskToTop
+ repo.addOrMoveFreeformTaskToTop(taskId = 3)
+ repo.addOrMoveFreeformTaskToTop(taskId = 2)
+ repo.addOrMoveFreeformTaskToTop(taskId = 1)
+ repo.minimizeTask(displayId = 0, taskId = 2)
+
+ assertThat(repo.getActiveNonMinimizedTasksOrderedFrontToBack(displayId = 0)).isEqualTo(
+ listOf(1, 3))
+ }
+
+
class TestListener : DesktopModeTaskRepository.ActiveTasksListener {
var activeChangesOnDefaultDisplay = 0
var activeChangesOnSecondaryDisplay = 0
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt
index 64f6041..ad4b720 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt
@@ -105,6 +105,7 @@
import org.mockito.kotlin.atLeastOnce
import org.mockito.kotlin.capture
import org.mockito.quality.Strictness
+import java.util.Optional
import org.mockito.Mockito.`when` as whenever
/**
@@ -145,6 +146,7 @@
private lateinit var controller: DesktopTasksController
private lateinit var shellInit: ShellInit
private lateinit var desktopModeTaskRepository: DesktopModeTaskRepository
+ private lateinit var desktopTasksLimiter: DesktopTasksLimiter
private lateinit var recentsTransitionStateListener: RecentsTransitionStateListener
private val shellExecutor = TestShellExecutor()
@@ -160,9 +162,12 @@
shellInit = Mockito.spy(ShellInit(testExecutor))
desktopModeTaskRepository = DesktopModeTaskRepository()
+ desktopTasksLimiter =
+ DesktopTasksLimiter(transitions, desktopModeTaskRepository, shellTaskOrganizer)
whenever(shellTaskOrganizer.getRunningTasks(anyInt())).thenAnswer { runningTasks }
whenever(transitions.startTransition(anyInt(), any(), isNull())).thenAnswer { Binder() }
+ whenever(enterDesktopTransitionHandler.moveToDesktop(any())).thenAnswer { Binder() }
whenever(displayController.getDisplayLayout(anyInt())).thenReturn(displayLayout)
whenever(displayLayout.getStableBounds(any())).thenAnswer { i ->
(i.arguments.first() as Rect).set(STABLE_BOUNDS)
@@ -203,7 +208,8 @@
launchAdjacentController,
recentsTransitionHandler,
multiInstanceHelper,
- shellExecutor
+ shellExecutor,
+ Optional.of(desktopTasksLimiter),
)
}
@@ -409,6 +415,25 @@
}
@Test
+ fun showDesktopApps_dontReorderMinimizedTask() {
+ val homeTask = setUpHomeTask()
+ val freeformTask = setUpFreeformTask()
+ val minimizedTask = setUpFreeformTask()
+ markTaskHidden(freeformTask)
+ markTaskHidden(minimizedTask)
+ desktopModeTaskRepository.minimizeTask(DEFAULT_DISPLAY, minimizedTask.taskId)
+
+ controller.showDesktopApps(DEFAULT_DISPLAY, RemoteTransition(TestRemoteTransition()))
+
+ val wct = getLatestWct(
+ type = TRANSIT_TO_FRONT, handlerClass = OneShotRemoteHandler::class.java)
+ assertThat(wct.hierarchyOps).hasSize(2)
+ // Reorder home and freeform task to top, don't reorder the minimized task
+ wct.assertReorderAt(index = 0, homeTask, toTop = true)
+ wct.assertReorderAt(index = 1, freeformTask, toTop = true)
+ }
+
+ @Test
fun getVisibleTaskCount_noTasks_returnsZero() {
assertThat(controller.getVisibleTaskCount(DEFAULT_DISPLAY)).isEqualTo(0)
}
@@ -606,6 +631,24 @@
}
@Test
+ fun moveToDesktop_bringsTasksOverLimit_dontShowBackTask() {
+ val taskLimit = desktopTasksLimiter.getMaxTaskLimit()
+ val homeTask = setUpHomeTask()
+ val freeformTasks = (1..taskLimit).map { _ -> setUpFreeformTask() }
+ val newTask = setUpFullscreenTask()
+
+ controller.moveToDesktop(newTask)
+
+ val wct = getLatestMoveToDesktopWct()
+ assertThat(wct.hierarchyOps.size).isEqualTo(taskLimit + 1) // visible tasks + home
+ wct.assertReorderAt(0, homeTask)
+ for (i in 1..<taskLimit) { // Skipping freeformTasks[0]
+ wct.assertReorderAt(index = i, task = freeformTasks[i])
+ }
+ wct.assertReorderAt(taskLimit, newTask)
+ }
+
+ @Test
fun moveToFullscreen_tdaFullscreen_windowingModeSetToUndefined() {
val task = setUpFreeformTask()
val tda = rootTaskDisplayAreaOrganizer.getDisplayAreaInfo(DEFAULT_DISPLAY)!!
@@ -659,6 +702,20 @@
}
@Test
+ fun moveTaskToFront_bringsTasksOverLimit_minimizesBackTask() {
+ val taskLimit = desktopTasksLimiter.getMaxTaskLimit()
+ setUpHomeTask()
+ val freeformTasks = (1..taskLimit + 1).map { _ -> setUpFreeformTask() }
+
+ controller.moveTaskToFront(freeformTasks[0])
+
+ val wct = getLatestWct(type = TRANSIT_TO_FRONT)
+ assertThat(wct.hierarchyOps.size).isEqualTo(2) // move-to-front + minimize
+ wct.assertReorderAt(0, freeformTasks[0], toTop = true)
+ wct.assertReorderAt(1, freeformTasks[1], toTop = false)
+ }
+
+ @Test
fun moveToNextDisplay_noOtherDisplays() {
whenever(rootTaskDisplayAreaOrganizer.displayIds).thenReturn(intArrayOf(DEFAULT_DISPLAY))
val task = setUpFreeformTask(displayId = DEFAULT_DISPLAY)
@@ -777,6 +834,38 @@
}
@Test
+ fun handleRequest_fullscreenTaskToFreeform_underTaskLimit_dontMinimize() {
+ assumeTrue(ENABLE_SHELL_TRANSITIONS)
+
+ val freeformTask = setUpFreeformTask()
+ markTaskVisible(freeformTask)
+ val fullscreenTask = createFullscreenTask()
+
+ val wct = controller.handleRequest(Binder(), createTransition(fullscreenTask))
+
+ // Make sure we only reorder the new task to top (we don't reorder the old task to bottom)
+ assertThat(wct?.hierarchyOps?.size).isEqualTo(1)
+ wct!!.assertReorderAt(0, fullscreenTask, toTop = true)
+ }
+
+ @Test
+ fun handleRequest_fullscreenTaskToFreeform_bringsTasksOverLimit_otherTaskIsMinimized() {
+ assumeTrue(ENABLE_SHELL_TRANSITIONS)
+
+ val taskLimit = desktopTasksLimiter.getMaxTaskLimit()
+ val freeformTasks = (1..taskLimit).map { _ -> setUpFreeformTask() }
+ freeformTasks.forEach { markTaskVisible(it) }
+ val fullscreenTask = createFullscreenTask()
+
+ val wct = controller.handleRequest(Binder(), createTransition(fullscreenTask))
+
+ // Make sure we reorder the new task to top, and the back task to the bottom
+ assertThat(wct!!.hierarchyOps.size).isEqualTo(2)
+ wct!!.assertReorderAt(0, fullscreenTask, toTop = true)
+ wct!!.assertReorderAt(1, freeformTasks[0], toTop = false)
+ }
+
+ @Test
fun handleRequest_fullscreenTask_freeformNotVisible_returnNull() {
assumeTrue(ENABLE_SHELL_TRANSITIONS)
@@ -841,6 +930,22 @@
}
@Test
+ fun handleRequest_freeformTask_freeformVisible_aboveTaskLimit_minimize() {
+ assumeTrue(ENABLE_SHELL_TRANSITIONS)
+
+ val taskLimit = desktopTasksLimiter.getMaxTaskLimit()
+ val freeformTasks = (1..taskLimit).map { _ -> setUpFreeformTask() }
+ freeformTasks.forEach { markTaskVisible(it) }
+ val newFreeformTask = createFreeformTask()
+
+ val wct =
+ controller.handleRequest(Binder(), createTransition(newFreeformTask, TRANSIT_OPEN))
+
+ assertThat(wct?.hierarchyOps?.size).isEqualTo(1)
+ wct!!.assertReorderAt(0, freeformTasks[0], toTop = false) // Reorder to the bottom
+ }
+
+ @Test
fun handleRequest_freeformTask_freeformNotVisible_returnSwitchToFullscreenWCT() {
assumeTrue(ENABLE_SHELL_TRANSITIONS)
@@ -1352,11 +1457,16 @@
.isGreaterThan(index)
}
-private fun WindowContainerTransaction.assertReorderAt(index: Int, task: RunningTaskInfo) {
+private fun WindowContainerTransaction.assertReorderAt(
+ index: Int,
+ task: RunningTaskInfo,
+ toTop: Boolean? = null
+) {
assertIndexInBounds(index)
val op = hierarchyOps[index]
assertThat(op.type).isEqualTo(HIERARCHY_OP_TYPE_REORDER)
assertThat(op.container).isEqualTo(task.token.asBinder())
+ toTop?.let { assertThat(op.toTop).isEqualTo(it) }
}
private fun WindowContainerTransaction.assertReorderSequence(vararg tasks: RunningTaskInfo) {
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksLimiterTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksLimiterTest.kt
new file mode 100644
index 0000000..38ea034
--- /dev/null
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksLimiterTest.kt
@@ -0,0 +1,317 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wm.shell.desktopmode
+
+import android.app.ActivityManager.RunningTaskInfo
+import android.os.Binder
+import android.platform.test.flag.junit.SetFlagsRule
+import android.testing.AndroidTestingRunner
+import android.view.Display.DEFAULT_DISPLAY
+import android.view.WindowManager.TRANSIT_OPEN
+import android.view.WindowManager.TRANSIT_TO_BACK
+import android.window.WindowContainerTransaction
+import android.window.WindowContainerTransaction.HierarchyOp.HIERARCHY_OP_TYPE_REORDER
+import androidx.test.filters.SmallTest
+import com.android.dx.mockito.inline.extended.ExtendedMockito
+import com.android.dx.mockito.inline.extended.StaticMockitoSession
+import com.android.wm.shell.ShellTaskOrganizer
+import com.android.wm.shell.ShellTestCase
+import com.android.wm.shell.desktopmode.DesktopTestHelpers.Companion.createFreeformTask
+import com.android.wm.shell.transition.TransitionInfoBuilder
+import com.android.wm.shell.transition.Transitions
+import com.android.wm.shell.util.StubTransaction
+import com.google.common.truth.Truth.assertThat
+import org.junit.After
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.Mockito.`when`
+import org.mockito.quality.Strictness
+
+
+/**
+ * Test class for {@link DesktopTasksLimiter}
+ *
+ * Usage: atest WMShellUnitTests:DesktopTasksLimiterTest
+ */
+@SmallTest
+@RunWith(AndroidTestingRunner::class)
+class DesktopTasksLimiterTest : ShellTestCase() {
+
+ @JvmField
+ @Rule
+ val setFlagsRule = SetFlagsRule()
+
+ @Mock lateinit var shellTaskOrganizer: ShellTaskOrganizer
+ @Mock lateinit var transitions: Transitions
+
+ private lateinit var mockitoSession: StaticMockitoSession
+ private lateinit var desktopTasksLimiter: DesktopTasksLimiter
+ private lateinit var desktopTaskRepo: DesktopModeTaskRepository
+
+ @Before
+ fun setUp() {
+ mockitoSession = ExtendedMockito.mockitoSession().strictness(Strictness.LENIENT)
+ .spyStatic(DesktopModeStatus::class.java).startMocking()
+ `when`(DesktopModeStatus.isEnabled()).thenReturn(true)
+
+ desktopTaskRepo = DesktopModeTaskRepository()
+
+ desktopTasksLimiter = DesktopTasksLimiter(
+ transitions, desktopTaskRepo, shellTaskOrganizer)
+ }
+
+ @After
+ fun tearDown() {
+ mockitoSession.finishMocking()
+ }
+
+ // Currently, the task limit can be overridden through an adb flag. This test ensures the limit
+ // hasn't been overridden.
+ @Test
+ fun getMaxTaskLimit_isSameAsConstant() {
+ assertThat(desktopTasksLimiter.getMaxTaskLimit()).isEqualTo(
+ DesktopModeStatus.DEFAULT_MAX_TASK_LIMIT)
+ }
+
+ @Test
+ fun addPendingMinimizeTransition_taskIsNotMinimized() {
+ val task = setUpFreeformTask()
+ markTaskHidden(task)
+
+ desktopTasksLimiter.addPendingMinimizeChange(Binder(), displayId = 1, taskId = task.taskId)
+
+ assertThat(desktopTaskRepo.isMinimizedTask(taskId = task.taskId)).isFalse()
+ }
+
+ @Test
+ fun onTransitionReady_noPendingTransition_taskIsNotMinimized() {
+ val task = setUpFreeformTask()
+ markTaskHidden(task)
+
+ desktopTasksLimiter.getTransitionObserver().onTransitionReady(
+ Binder() /* transition */,
+ TransitionInfoBuilder(TRANSIT_OPEN).addChange(TRANSIT_TO_BACK, task).build(),
+ StubTransaction() /* startTransaction */,
+ StubTransaction() /* finishTransaction */)
+
+ assertThat(desktopTaskRepo.isMinimizedTask(taskId = task.taskId)).isFalse()
+ }
+
+ @Test
+ fun onTransitionReady_differentPendingTransition_taskIsNotMinimized() {
+ val pendingTransition = Binder()
+ val taskTransition = Binder()
+ val task = setUpFreeformTask()
+ markTaskHidden(task)
+ desktopTasksLimiter.addPendingMinimizeChange(
+ pendingTransition, displayId = DEFAULT_DISPLAY, taskId = task.taskId)
+
+ desktopTasksLimiter.getTransitionObserver().onTransitionReady(
+ taskTransition /* transition */,
+ TransitionInfoBuilder(TRANSIT_OPEN).addChange(TRANSIT_TO_BACK, task).build(),
+ StubTransaction() /* startTransaction */,
+ StubTransaction() /* finishTransaction */)
+
+ assertThat(desktopTaskRepo.isMinimizedTask(taskId = task.taskId)).isFalse()
+ }
+
+ @Test
+ fun onTransitionReady_pendingTransition_noTaskChange_taskVisible_taskIsNotMinimized() {
+ val transition = Binder()
+ val task = setUpFreeformTask()
+ markTaskVisible(task)
+ desktopTasksLimiter.addPendingMinimizeChange(
+ transition, displayId = DEFAULT_DISPLAY, taskId = task.taskId)
+
+ desktopTasksLimiter.getTransitionObserver().onTransitionReady(
+ transition,
+ TransitionInfoBuilder(TRANSIT_OPEN).build(),
+ StubTransaction() /* startTransaction */,
+ StubTransaction() /* finishTransaction */)
+
+ assertThat(desktopTaskRepo.isMinimizedTask(taskId = task.taskId)).isFalse()
+ }
+
+ @Test
+ fun onTransitionReady_pendingTransition_noTaskChange_taskInvisible_taskIsMinimized() {
+ val transition = Binder()
+ val task = setUpFreeformTask()
+ markTaskHidden(task)
+ desktopTasksLimiter.addPendingMinimizeChange(
+ transition, displayId = DEFAULT_DISPLAY, taskId = task.taskId)
+
+ desktopTasksLimiter.getTransitionObserver().onTransitionReady(
+ transition,
+ TransitionInfoBuilder(TRANSIT_OPEN).build(),
+ StubTransaction() /* startTransaction */,
+ StubTransaction() /* finishTransaction */)
+
+ assertThat(desktopTaskRepo.isMinimizedTask(taskId = task.taskId)).isTrue()
+ }
+
+ @Test
+ fun onTransitionReady_pendingTransition_changeTaskToBack_taskIsMinimized() {
+ val transition = Binder()
+ val task = setUpFreeformTask()
+ desktopTasksLimiter.addPendingMinimizeChange(
+ transition, displayId = DEFAULT_DISPLAY, taskId = task.taskId)
+
+ desktopTasksLimiter.getTransitionObserver().onTransitionReady(
+ transition,
+ TransitionInfoBuilder(TRANSIT_OPEN).addChange(TRANSIT_TO_BACK, task).build(),
+ StubTransaction() /* startTransaction */,
+ StubTransaction() /* finishTransaction */)
+
+ assertThat(desktopTaskRepo.isMinimizedTask(taskId = task.taskId)).isTrue()
+ }
+
+ @Test
+ fun onTransitionReady_transitionMergedFromPending_taskIsMinimized() {
+ val mergedTransition = Binder()
+ val newTransition = Binder()
+ val task = setUpFreeformTask()
+ desktopTasksLimiter.addPendingMinimizeChange(
+ mergedTransition, displayId = DEFAULT_DISPLAY, taskId = task.taskId)
+ desktopTasksLimiter.getTransitionObserver().onTransitionMerged(
+ mergedTransition, newTransition)
+
+ desktopTasksLimiter.getTransitionObserver().onTransitionReady(
+ newTransition,
+ TransitionInfoBuilder(TRANSIT_OPEN).addChange(TRANSIT_TO_BACK, task).build(),
+ StubTransaction() /* startTransaction */,
+ StubTransaction() /* finishTransaction */)
+
+ assertThat(desktopTaskRepo.isMinimizedTask(taskId = task.taskId)).isTrue()
+ }
+
+ @Test
+ fun addAndGetMinimizeTaskChangesIfNeeded_tasksWithinLimit_noTaskMinimized() {
+ val taskLimit = desktopTasksLimiter.getMaxTaskLimit()
+ (1..<taskLimit).forEach { _ -> setUpFreeformTask() }
+
+ val wct = WindowContainerTransaction()
+ val minimizedTaskId =
+ desktopTasksLimiter.addAndGetMinimizeTaskChangesIfNeeded(
+ displayId = DEFAULT_DISPLAY,
+ wct = wct,
+ newFrontTaskInfo = setUpFreeformTask())
+
+ assertThat(minimizedTaskId).isNull()
+ assertThat(wct.hierarchyOps).isEmpty() // No reordering operations added
+ }
+
+ @Test
+ fun addAndGetMinimizeTaskChangesIfNeeded_tasksAboveLimit_backTaskMinimized() {
+ val taskLimit = desktopTasksLimiter.getMaxTaskLimit()
+ // The following list will be ordered bottom -> top, as the last task is moved to top last.
+ val tasks = (1..taskLimit).map { setUpFreeformTask() }
+
+ val wct = WindowContainerTransaction()
+ val minimizedTaskId =
+ desktopTasksLimiter.addAndGetMinimizeTaskChangesIfNeeded(
+ displayId = DEFAULT_DISPLAY,
+ wct = wct,
+ newFrontTaskInfo = setUpFreeformTask())
+
+ assertThat(minimizedTaskId).isEqualTo(tasks.first())
+ assertThat(wct.hierarchyOps.size).isEqualTo(1)
+ assertThat(wct.hierarchyOps[0].type).isEqualTo(HIERARCHY_OP_TYPE_REORDER)
+ assertThat(wct.hierarchyOps[0].toTop).isFalse() // Reorder to bottom
+ }
+
+ @Test
+ fun addAndGetMinimizeTaskChangesIfNeeded_nonMinimizedTasksWithinLimit_noTaskMinimized() {
+ val taskLimit = desktopTasksLimiter.getMaxTaskLimit()
+ val tasks = (1..taskLimit).map { setUpFreeformTask() }
+ desktopTaskRepo.minimizeTask(displayId = DEFAULT_DISPLAY, taskId = tasks[0].taskId)
+
+ val wct = WindowContainerTransaction()
+ val minimizedTaskId =
+ desktopTasksLimiter.addAndGetMinimizeTaskChangesIfNeeded(
+ displayId = 0,
+ wct = wct,
+ newFrontTaskInfo = setUpFreeformTask())
+
+ assertThat(minimizedTaskId).isNull()
+ assertThat(wct.hierarchyOps).isEmpty() // No reordering operations added
+ }
+
+ @Test
+ fun getTaskToMinimizeIfNeeded_tasksWithinLimit_returnsNull() {
+ val taskLimit = desktopTasksLimiter.getMaxTaskLimit()
+ val tasks = (1..taskLimit).map { setUpFreeformTask() }
+
+ val minimizedTask = desktopTasksLimiter.getTaskToMinimizeIfNeeded(
+ visibleFreeformTaskIdsOrderedFrontToBack = tasks.map { it.taskId })
+
+ assertThat(minimizedTask).isNull()
+ }
+
+ @Test
+ fun getTaskToMinimizeIfNeeded_tasksAboveLimit_returnsBackTask() {
+ val taskLimit = desktopTasksLimiter.getMaxTaskLimit()
+ val tasks = (1..taskLimit + 1).map { setUpFreeformTask() }
+
+ val minimizedTask = desktopTasksLimiter.getTaskToMinimizeIfNeeded(
+ visibleFreeformTaskIdsOrderedFrontToBack = tasks.map { it.taskId })
+
+ // first == front, last == back
+ assertThat(minimizedTask).isEqualTo(tasks.last())
+ }
+
+ @Test
+ fun getTaskToMinimizeIfNeeded_withNewTask_tasksAboveLimit_returnsBackTask() {
+ val taskLimit = desktopTasksLimiter.getMaxTaskLimit()
+ val tasks = (1..taskLimit).map { setUpFreeformTask() }
+
+ val minimizedTask = desktopTasksLimiter.getTaskToMinimizeIfNeeded(
+ visibleFreeformTaskIdsOrderedFrontToBack = tasks.map { it.taskId },
+ newTaskIdInFront = setUpFreeformTask().taskId)
+
+ // first == front, last == back
+ assertThat(minimizedTask).isEqualTo(tasks.last())
+ }
+
+ private fun setUpFreeformTask(
+ displayId: Int = DEFAULT_DISPLAY,
+ ): RunningTaskInfo {
+ val task = createFreeformTask(displayId)
+ `when`(shellTaskOrganizer.getRunningTaskInfo(task.taskId)).thenReturn(task)
+ desktopTaskRepo.addActiveTask(displayId, task.taskId)
+ desktopTaskRepo.addOrMoveFreeformTaskToTop(task.taskId)
+ return task
+ }
+
+ private fun markTaskVisible(task: RunningTaskInfo) {
+ desktopTaskRepo.updateVisibleFreeformTasks(
+ task.displayId,
+ task.taskId,
+ visible = true
+ )
+ }
+
+ private fun markTaskHidden(task: RunningTaskInfo) {
+ desktopTaskRepo.updateVisibleFreeformTasks(
+ task.displayId,
+ task.taskId,
+ visible = false
+ )
+ }
+}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/taskview/TaskViewTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/taskview/TaskViewTest.java
index d7c4610..0434742 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/taskview/TaskViewTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/taskview/TaskViewTest.java
@@ -44,7 +44,6 @@
import android.graphics.Insets;
import android.graphics.Rect;
import android.graphics.Region;
-import android.os.Handler;
import android.os.Looper;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
@@ -498,6 +497,31 @@
}
@Test
+ public void testStartRootTask_setsBoundsAndVisibility() {
+ assumeTrue(Transitions.ENABLE_SHELL_TRANSITIONS);
+
+ TaskViewBase taskViewBase = mock(TaskViewBase.class);
+ Rect bounds = new Rect(0, 0, 100, 100);
+ when(taskViewBase.getCurrentBoundsOnScreen()).thenReturn(bounds);
+ mTaskViewTaskController.setTaskViewBase(taskViewBase);
+
+ // Surface created, but task not available so bounds / visibility isn't set
+ mTaskView.surfaceCreated(mock(SurfaceHolder.class));
+ verify(mTaskViewTransitions, never()).updateVisibilityState(
+ eq(mTaskViewTaskController), eq(true));
+
+ // Make the task available
+ WindowContainerTransaction wct = mock(WindowContainerTransaction.class);
+ mTaskViewTaskController.startRootTask(mTaskInfo, mLeash, wct);
+
+ // Bounds got set
+ verify(wct).setBounds(any(WindowContainerToken.class), eq(bounds));
+ // Visibility & bounds state got set
+ verify(mTaskViewTransitions).updateVisibilityState(eq(mTaskViewTaskController), eq(true));
+ verify(mTaskViewTransitions).updateBoundsState(eq(mTaskViewTaskController), eq(bounds));
+ }
+
+ @Test
public void testTaskViewPrepareOpenAnimationSetsBoundsAndVisibility() {
assumeTrue(Transitions.ENABLE_SHELL_TRANSITIONS);
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/taskview/TaskViewTransitionsTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/taskview/TaskViewTransitionsTest.java
index fbc0db9..d3e40f2 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/taskview/TaskViewTransitionsTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/taskview/TaskViewTransitionsTest.java
@@ -18,6 +18,7 @@
import static android.view.WindowManager.TRANSIT_CHANGE;
import static android.view.WindowManager.TRANSIT_OPEN;
+import static android.view.WindowManager.TRANSIT_TO_BACK;
import static android.view.WindowManager.TRANSIT_TO_FRONT;
import static com.google.common.truth.Truth.assertThat;
@@ -208,6 +209,48 @@
}
@Test
+ public void testReorderTask_movedToFrontTransaction() {
+ assumeTrue(Transitions.ENABLE_SHELL_TRANSITIONS);
+
+ mTaskViewTransitions.reorderTaskViewTask(mTaskViewTaskController, true);
+ // Consume the pending transaction from order change
+ TaskViewTransitions.PendingTransition pending =
+ mTaskViewTransitions.findPending(mTaskViewTaskController, TRANSIT_TO_FRONT);
+ assertThat(pending).isNotNull();
+ mTaskViewTransitions.startAnimation(pending.mClaimed,
+ mock(TransitionInfo.class),
+ new SurfaceControl.Transaction(),
+ new SurfaceControl.Transaction(),
+ mock(Transitions.TransitionFinishCallback.class));
+
+ // Verify it was consumed
+ TaskViewTransitions.PendingTransition pending2 =
+ mTaskViewTransitions.findPending(mTaskViewTaskController, TRANSIT_TO_FRONT);
+ assertThat(pending2).isNull();
+ }
+
+ @Test
+ public void testReorderTask_movedToBackTransaction() {
+ assumeTrue(Transitions.ENABLE_SHELL_TRANSITIONS);
+
+ mTaskViewTransitions.reorderTaskViewTask(mTaskViewTaskController, false);
+ // Consume the pending transaction from order change
+ TaskViewTransitions.PendingTransition pending =
+ mTaskViewTransitions.findPending(mTaskViewTaskController, TRANSIT_TO_BACK);
+ assertThat(pending).isNotNull();
+ mTaskViewTransitions.startAnimation(pending.mClaimed,
+ mock(TransitionInfo.class),
+ new SurfaceControl.Transaction(),
+ new SurfaceControl.Transaction(),
+ mock(Transitions.TransitionFinishCallback.class));
+
+ // Verify it was consumed
+ TaskViewTransitions.PendingTransition pending2 =
+ mTaskViewTransitions.findPending(mTaskViewTaskController, TRANSIT_TO_BACK);
+ assertThat(pending2).isNull();
+ }
+
+ @Test
public void test_startAnimation_setsTaskNotFound() {
assumeTrue(Transitions.ENABLE_SHELL_TRANSITIONS);
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModelTests.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModelTests.kt
index 8e9619d..7d19f3c 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModelTests.kt
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModelTests.kt
@@ -28,6 +28,9 @@
import android.hardware.display.VirtualDisplay
import android.os.Handler
import android.platform.test.annotations.EnableFlags
+import android.platform.test.annotations.RequiresFlagsEnabled
+import android.platform.test.flag.junit.CheckFlagsRule
+import android.platform.test.flag.junit.DeviceFlagsValueProvider
import android.platform.test.flag.junit.SetFlagsRule
import android.testing.AndroidTestingRunner
import android.testing.TestableLooper.RunWithLooper
@@ -97,6 +100,10 @@
@Rule
val setFlagsRule = SetFlagsRule()
+ @JvmField
+ @Rule
+ val mCheckFlagsRule: CheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule()
+
@Mock private lateinit var mockDesktopModeWindowDecorFactory:
DesktopModeWindowDecoration.Factory
@Mock private lateinit var mockMainHandler: Handler
@@ -306,6 +313,7 @@
}
@Test
+ @RequiresFlagsEnabled(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_IMMERSIVE_HANDLE_HIDING)
fun testRelayoutRunsWhenStatusBarsInsetsSourceVisibilityChanges() {
val task = createTask(windowingMode = WINDOWING_MODE_FREEFORM, focused = true)
val decoration = setUpMockDecorationForTask(task)
@@ -326,6 +334,7 @@
}
@Test
+ @RequiresFlagsEnabled(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_IMMERSIVE_HANDLE_HIDING)
fun testRelayoutDoesNotRunWhenNonStatusBarsInsetsSourceVisibilityChanges() {
val task = createTask(windowingMode = WINDOWING_MODE_FREEFORM, focused = true)
val decoration = setUpMockDecorationForTask(task)
@@ -346,6 +355,7 @@
}
@Test
+ @RequiresFlagsEnabled(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_IMMERSIVE_HANDLE_HIDING)
fun testRelayoutDoesNotRunWhenNonStatusBarsInsetSourceVisibilityDoesNotChange() {
val task = createTask(windowingMode = WINDOWING_MODE_FREEFORM, focused = true)
val decoration = setUpMockDecorationForTask(task)
diff --git a/libs/hwui/SkiaInterpolator.cpp b/libs/hwui/SkiaInterpolator.cpp
index c67b135..5a45ad9 100644
--- a/libs/hwui/SkiaInterpolator.cpp
+++ b/libs/hwui/SkiaInterpolator.cpp
@@ -20,6 +20,7 @@
#include "include/core/SkTypes.h"
#include <cstdlib>
+#include <cstring>
#include <log/log.h>
typedef int Dot14;
diff --git a/libs/hwui/effects/GainmapRenderer.cpp b/libs/hwui/effects/GainmapRenderer.cpp
index 3ebf7d1..0a30c6c 100644
--- a/libs/hwui/effects/GainmapRenderer.cpp
+++ b/libs/hwui/effects/GainmapRenderer.cpp
@@ -32,6 +32,8 @@
#include "src/core/SkColorFilterPriv.h"
#include "src/core/SkImageInfoPriv.h"
#include "src/core/SkRuntimeEffectPriv.h"
+
+#include <cmath>
#endif
namespace android::uirenderer {
@@ -206,12 +208,12 @@
void setupGenericUniforms(const sk_sp<const SkImage>& gainmapImage,
const SkGainmapInfo& gainmapInfo) {
- const SkColor4f logRatioMin({sk_float_log(gainmapInfo.fGainmapRatioMin.fR),
- sk_float_log(gainmapInfo.fGainmapRatioMin.fG),
- sk_float_log(gainmapInfo.fGainmapRatioMin.fB), 1.f});
- const SkColor4f logRatioMax({sk_float_log(gainmapInfo.fGainmapRatioMax.fR),
- sk_float_log(gainmapInfo.fGainmapRatioMax.fG),
- sk_float_log(gainmapInfo.fGainmapRatioMax.fB), 1.f});
+ const SkColor4f logRatioMin({std::log(gainmapInfo.fGainmapRatioMin.fR),
+ std::log(gainmapInfo.fGainmapRatioMin.fG),
+ std::log(gainmapInfo.fGainmapRatioMin.fB), 1.f});
+ const SkColor4f logRatioMax({std::log(gainmapInfo.fGainmapRatioMax.fR),
+ std::log(gainmapInfo.fGainmapRatioMax.fG),
+ std::log(gainmapInfo.fGainmapRatioMax.fB), 1.f});
const int noGamma = gainmapInfo.fGainmapGamma.fR == 1.f &&
gainmapInfo.fGainmapGamma.fG == 1.f &&
gainmapInfo.fGainmapGamma.fB == 1.f;
@@ -248,10 +250,10 @@
float W = 0.f;
if (targetHdrSdrRatio > mGainmapInfo.fDisplayRatioSdr) {
if (targetHdrSdrRatio < mGainmapInfo.fDisplayRatioHdr) {
- W = (sk_float_log(targetHdrSdrRatio) -
- sk_float_log(mGainmapInfo.fDisplayRatioSdr)) /
- (sk_float_log(mGainmapInfo.fDisplayRatioHdr) -
- sk_float_log(mGainmapInfo.fDisplayRatioSdr));
+ W = (std::log(targetHdrSdrRatio) -
+ std::log(mGainmapInfo.fDisplayRatioSdr)) /
+ (std::log(mGainmapInfo.fDisplayRatioHdr) -
+ std::log(mGainmapInfo.fDisplayRatioSdr));
} else {
W = 1.f;
}
diff --git a/libs/hwui/pipeline/skia/ShaderCache.cpp b/libs/hwui/pipeline/skia/ShaderCache.cpp
index b870023..8e07a2f 100644
--- a/libs/hwui/pipeline/skia/ShaderCache.cpp
+++ b/libs/hwui/pipeline/skia/ShaderCache.cpp
@@ -15,14 +15,18 @@
*/
#include "ShaderCache.h"
+
#include <GrDirectContext.h>
#include <SkData.h>
#include <gui/TraceUtils.h>
#include <log/log.h>
#include <openssl/sha.h>
+
#include <algorithm>
#include <array>
+#include <mutex>
#include <thread>
+
#include "FileBlobCache.h"
#include "Properties.h"
diff --git a/libs/hwui/renderthread/CanvasContext.cpp b/libs/hwui/renderthread/CanvasContext.cpp
index 66e0896..8bb11ba 100644
--- a/libs/hwui/renderthread/CanvasContext.cpp
+++ b/libs/hwui/renderthread/CanvasContext.cpp
@@ -1010,7 +1010,15 @@
}
void CanvasContext::onContextDestroyed() {
- destroyHardwareResources();
+ // We don't want to destroyHardwareResources as that will invalidate display lists which
+ // the client may not be expecting. Instead just purge all scratch resources
+ if (mRenderPipeline->isContextReady()) {
+ freePrefetchedLayers();
+ for (const sp<RenderNode>& node : mRenderNodes) {
+ node->destroyLayers();
+ }
+ mRenderPipeline->onDestroyHardwareResources();
+ }
}
DeferredLayerUpdater* CanvasContext::createTextureLayer() {
diff --git a/libs/hwui/renderthread/HintSessionWrapper.cpp b/libs/hwui/renderthread/HintSessionWrapper.cpp
index 6993d52..7a155c5 100644
--- a/libs/hwui/renderthread/HintSessionWrapper.cpp
+++ b/libs/hwui/renderthread/HintSessionWrapper.cpp
@@ -45,7 +45,7 @@
LOG_ALWAYS_FATAL_IF(handle_ == nullptr, "Failed to dlopen libandroid.so!");
BIND_APH_METHOD(getManager);
- BIND_APH_METHOD(createSession);
+ BIND_APH_METHOD(createSessionInternal);
BIND_APH_METHOD(closeSession);
BIND_APH_METHOD(updateTargetWorkDuration);
BIND_APH_METHOD(reportActualWorkDuration);
@@ -122,7 +122,8 @@
int64_t targetDurationNanos =
mLastTargetWorkDuration == 0 ? kDefaultTargetDuration : mLastTargetWorkDuration;
mHintSessionFuture = CommonPool::async([=, this, tids = mPermanentSessionTids] {
- return mBinding->createSession(manager, tids.data(), tids.size(), targetDurationNanos);
+ return mBinding->createSessionInternal(manager, tids.data(), tids.size(),
+ targetDurationNanos, SessionTag::HWUI);
});
return false;
}
diff --git a/libs/hwui/renderthread/HintSessionWrapper.h b/libs/hwui/renderthread/HintSessionWrapper.h
index 14e7a53..859cc57 100644
--- a/libs/hwui/renderthread/HintSessionWrapper.h
+++ b/libs/hwui/renderthread/HintSessionWrapper.h
@@ -17,6 +17,7 @@
#pragma once
#include <android/performance_hint.h>
+#include <private/performance_hint_private.h>
#include <future>
#include <optional>
@@ -80,9 +81,10 @@
virtual ~HintSessionBinding() = default;
virtual void init();
APerformanceHintManager* (*getManager)();
- APerformanceHintSession* (*createSession)(APerformanceHintManager* manager,
- const int32_t* tids, size_t tidCount,
- int64_t defaultTarget) = nullptr;
+ APerformanceHintSession* (*createSessionInternal)(APerformanceHintManager* manager,
+ const int32_t* tids, size_t tidCount,
+ int64_t defaultTarget,
+ SessionTag tag) = nullptr;
void (*closeSession)(APerformanceHintSession* session) = nullptr;
void (*updateTargetWorkDuration)(APerformanceHintSession* session,
int64_t targetDuration) = nullptr;
diff --git a/libs/hwui/tests/unit/HintSessionWrapperTests.cpp b/libs/hwui/tests/unit/HintSessionWrapperTests.cpp
index c16602c..a8db0f4 100644
--- a/libs/hwui/tests/unit/HintSessionWrapperTests.cpp
+++ b/libs/hwui/tests/unit/HintSessionWrapperTests.cpp
@@ -52,8 +52,8 @@
void init() override;
MOCK_METHOD(APerformanceHintManager*, fakeGetManager, ());
- MOCK_METHOD(APerformanceHintSession*, fakeCreateSession,
- (APerformanceHintManager*, const int32_t*, size_t, int64_t));
+ MOCK_METHOD(APerformanceHintSession*, fakeCreateSessionInternal,
+ (APerformanceHintManager*, const int32_t*, size_t, int64_t, SessionTag));
MOCK_METHOD(void, fakeCloseSession, (APerformanceHintSession*));
MOCK_METHOD(void, fakeUpdateTargetWorkDuration, (APerformanceHintSession*, int64_t));
MOCK_METHOD(void, fakeReportActualWorkDuration, (APerformanceHintSession*, int64_t));
@@ -72,22 +72,28 @@
// Must be static so we can point to them as normal fn pointers with HintSessionBinding
static APerformanceHintManager* stubGetManager() { return sMockBinding->fakeGetManager(); };
- static APerformanceHintSession* stubCreateSession(APerformanceHintManager* manager,
- const int32_t* ids, size_t idsSize,
- int64_t initialTarget) {
- return sMockBinding->fakeCreateSession(manager, ids, idsSize, initialTarget);
+ static APerformanceHintSession* stubCreateSessionInternal(APerformanceHintManager* manager,
+ const int32_t* ids, size_t idsSize,
+ int64_t initialTarget,
+ SessionTag tag) {
+ return sMockBinding->fakeCreateSessionInternal(manager, ids, idsSize, initialTarget,
+ SessionTag::HWUI);
}
- static APerformanceHintSession* stubManagedCreateSession(APerformanceHintManager* manager,
- const int32_t* ids, size_t idsSize,
- int64_t initialTarget) {
+ static APerformanceHintSession* stubManagedCreateSessionInternal(
+ APerformanceHintManager* manager, const int32_t* ids, size_t idsSize,
+ int64_t initialTarget, SessionTag tag) {
sMockBinding->allowCreationToFinish.get_future().wait();
- return sMockBinding->fakeCreateSession(manager, ids, idsSize, initialTarget);
+ return sMockBinding->fakeCreateSessionInternal(manager, ids, idsSize, initialTarget,
+ SessionTag::HWUI);
}
- static APerformanceHintSession* stubSlowCreateSession(APerformanceHintManager* manager,
- const int32_t* ids, size_t idsSize,
- int64_t initialTarget) {
+ static APerformanceHintSession* stubSlowCreateSessionInternal(APerformanceHintManager* manager,
+ const int32_t* ids,
+ size_t idsSize,
+ int64_t initialTarget,
+ SessionTag tag) {
std::this_thread::sleep_for(50ms);
- return sMockBinding->fakeCreateSession(manager, ids, idsSize, initialTarget);
+ return sMockBinding->fakeCreateSessionInternal(manager, ids, idsSize, initialTarget,
+ SessionTag::HWUI);
}
static void stubCloseSession(APerformanceHintSession* session) {
sMockBinding->fakeCloseSession(session);
@@ -139,14 +145,14 @@
mWrapper = std::make_shared<HintSessionWrapper>(uiThreadId, renderThreadId);
mWrapper->mBinding = sMockBinding;
EXPECT_CALL(*sMockBinding, fakeGetManager).WillOnce(Return(managerPtr));
- ON_CALL(*sMockBinding, fakeCreateSession).WillByDefault(Return(sessionPtr));
+ ON_CALL(*sMockBinding, fakeCreateSessionInternal).WillByDefault(Return(sessionPtr));
ON_CALL(*sMockBinding, fakeSetThreads).WillByDefault(Return(0));
}
void HintSessionWrapperTests::MockHintSessionBinding::init() {
sMockBinding->getManager = &stubGetManager;
- if (sMockBinding->createSession == nullptr) {
- sMockBinding->createSession = &stubCreateSession;
+ if (sMockBinding->createSessionInternal == nullptr) {
+ sMockBinding->createSessionInternal = &stubCreateSessionInternal;
}
sMockBinding->closeSession = &stubCloseSession;
sMockBinding->updateTargetWorkDuration = &stubUpdateTargetWorkDuration;
@@ -163,14 +169,14 @@
TEST_F(HintSessionWrapperTests, destructorClosesBackgroundSession) {
EXPECT_CALL(*sMockBinding, fakeCloseSession(sessionPtr)).Times(1);
- sMockBinding->createSession = stubSlowCreateSession;
+ sMockBinding->createSessionInternal = stubSlowCreateSessionInternal;
mWrapper->init();
mWrapper = nullptr;
Mock::VerifyAndClearExpectations(sMockBinding.get());
}
TEST_F(HintSessionWrapperTests, sessionInitializesCorrectly) {
- EXPECT_CALL(*sMockBinding, fakeCreateSession(managerPtr, _, Gt(1), _)).Times(1);
+ EXPECT_CALL(*sMockBinding, fakeCreateSessionInternal(managerPtr, _, Gt(1), _, _)).Times(1);
mWrapper->init();
waitForWrapperReady();
}
@@ -219,7 +225,7 @@
// Here we test whether queueing delayedDestroy works while creation is still happening, if
// creation happens after
EXPECT_CALL(*sMockBinding, fakeCloseSession(sessionPtr)).Times(1);
- sMockBinding->createSession = &stubManagedCreateSession;
+ sMockBinding->createSessionInternal = &stubManagedCreateSessionInternal;
// Start creating the session and destroying it at the same time
mWrapper->init();
@@ -246,7 +252,7 @@
// Here we test whether queueing delayedDestroy works while creation is still happening, if
// creation happens before
EXPECT_CALL(*sMockBinding, fakeCloseSession(sessionPtr)).Times(1);
- sMockBinding->createSession = &stubManagedCreateSession;
+ sMockBinding->createSessionInternal = &stubManagedCreateSessionInternal;
// Start creating the session and destroying it at the same time
mWrapper->init();
@@ -352,7 +358,7 @@
}
TEST_F(HintSessionWrapperTests, setThreadsUpdatesSessionThreads) {
- EXPECT_CALL(*sMockBinding, fakeCreateSession(managerPtr, _, Gt(1), _)).Times(1);
+ EXPECT_CALL(*sMockBinding, fakeCreateSessionInternal(managerPtr, _, Gt(1), _, _)).Times(1);
EXPECT_CALL(*sMockBinding, fakeSetThreads(sessionPtr, testing::IsSupersetOf({11, 22})))
.Times(1);
mWrapper->init();
diff --git a/libs/hwui/utils/Color.cpp b/libs/hwui/utils/Color.cpp
index f6c5792..6a560b3 100644
--- a/libs/hwui/utils/Color.cpp
+++ b/libs/hwui/utils/Color.cpp
@@ -403,7 +403,7 @@
}
static skcms_TransferFunction trfn_apply_gain(const skcms_TransferFunction trfn, float gain) {
- float pow_gain_ginv = sk_float_pow(gain, 1 / trfn.g);
+ float pow_gain_ginv = std::pow(gain, 1 / trfn.g);
skcms_TransferFunction result;
result.g = trfn.g;
result.a = trfn.a * pow_gain_ginv;
diff --git a/location/java/android/location/LocationManager.java b/location/java/android/location/LocationManager.java
index 3619d3a..d921730 100644
--- a/location/java/android/location/LocationManager.java
+++ b/location/java/android/location/LocationManager.java
@@ -432,6 +432,20 @@
public static final String METADATA_SETTINGS_FOOTER_STRING =
"com.android.settings.location.FOOTER_STRING";
+ /**
+ * Metadata name for {@link LocationManager#SETTINGS_FOOTER_DISPLAYED_ACTION} broadcast
+ * receivers to specify a string resource id as location settings footer HTML snippet. This is
+ * for use only by apps that are included in the system image. If HTML snippet is provided,
+ * plain text footer text specified with {@link #METADATA_SETTINGS_FOOTER_STRING} will be
+ * ignored.
+ *
+ * <p>See {@link #SETTINGS_FOOTER_DISPLAYED_ACTION} for more detail on how to use.
+ *
+ * @hide
+ */
+ public static final String METADATA_SETTINGS_FOOTER_HTML =
+ "com.android.settings.location.FOOTER_HTML";
+
private static final long MAX_SINGLE_LOCATION_TIMEOUT_MS = 30 * 1000;
private static final String CACHE_KEY_LOCATION_ENABLED_PROPERTY =
diff --git a/location/java/android/location/flags/location.aconfig b/location/java/android/location/flags/location.aconfig
index d6d4989..4981029 100644
--- a/location/java/android/location/flags/location.aconfig
+++ b/location/java/android/location/flags/location.aconfig
@@ -1,4 +1,5 @@
package: "android.location.flags"
+container: "system"
flag {
name: "new_geocoder"
diff --git a/media/java/android/media/MediaRouter2.java b/media/java/android/media/MediaRouter2.java
index c664d3d..ffd6e16 100644
--- a/media/java/android/media/MediaRouter2.java
+++ b/media/java/android/media/MediaRouter2.java
@@ -545,16 +545,17 @@
? SCANNING_STATE_SCANNING_FULL
: SCANNING_STATE_WHILE_INTERACTIVE);
- if (scanRequest.isScreenOffScan()) {
- mScreenOffScanRequestCount++;
- } else {
- mScreenOnScanRequestCount++;
- }
} catch (RemoteException ex) {
throw ex.rethrowFromSystemServer();
}
}
+ if (scanRequest.isScreenOffScan()) {
+ mScreenOffScanRequestCount++;
+ } else {
+ mScreenOnScanRequestCount++;
+ }
+
mScanRequestsMap.put(token.mId, scanRequest);
return token;
}
@@ -580,27 +581,29 @@
}
boolean shouldUpdate =
- mScreenOffScanRequestCount == 1
- && (request.isScreenOffScan() || mScreenOnScanRequestCount == 1);
+ request.isScreenOffScan()
+ ? mScreenOffScanRequestCount == 1
+ : mScreenOnScanRequestCount == 1 && mScreenOffScanRequestCount == 0;
if (shouldUpdate) {
try {
- if (request.isScreenOffScan() && mScreenOnScanRequestCount == 0) {
+ if (!request.isScreenOffScan() || mScreenOnScanRequestCount == 0) {
mImpl.updateScanningState(SCANNING_STATE_NOT_SCANNING);
} else {
mImpl.updateScanningState(SCANNING_STATE_WHILE_INTERACTIVE);
}
- if (request.isScreenOffScan()) {
- mScreenOffScanRequestCount--;
- } else {
- mScreenOnScanRequestCount--;
- }
} catch (RemoteException ex) {
ex.rethrowFromSystemServer();
}
}
+ if (request.isScreenOffScan()) {
+ mScreenOffScanRequestCount--;
+ } else {
+ mScreenOnScanRequestCount--;
+ }
+
mScanRequestsMap.remove(token.mId);
}
}
diff --git a/media/java/android/media/RoutingSessionInfo.java b/media/java/android/media/RoutingSessionInfo.java
index 2202766..a3c8b68 100644
--- a/media/java/android/media/RoutingSessionInfo.java
+++ b/media/java/android/media/RoutingSessionInfo.java
@@ -84,7 +84,6 @@
*
* @hide
*/
- @FlaggedApi(FLAG_ENABLE_BUILT_IN_SPEAKER_ROUTE_SUITABILITY_STATUSES)
@IntDef(value = {TRANSFER_REASON_FALLBACK, TRANSFER_REASON_SYSTEM_REQUEST, TRANSFER_REASON_APP})
@Retention(RetentionPolicy.SOURCE)
public @interface TransferReason {}
@@ -382,14 +381,12 @@
}
/** @hide */
- @FlaggedApi(FLAG_ENABLE_BUILT_IN_SPEAKER_ROUTE_SUITABILITY_STATUSES)
@Nullable
public UserHandle getTransferInitiatorUserHandle() {
return mTransferInitiatorUserHandle;
}
/** @hide */
- @FlaggedApi(FLAG_ENABLE_BUILT_IN_SPEAKER_ROUTE_SUITABILITY_STATUSES)
@Nullable
public String getTransferInitiatorPackageName() {
return mTransferInitiatorPackageName;
diff --git a/media/java/android/media/flags/editing.aconfig b/media/java/android/media/flags/editing.aconfig
index 5bf1b4e..bf6ec96 100644
--- a/media/java/android/media/flags/editing.aconfig
+++ b/media/java/android/media/flags/editing.aconfig
@@ -1,4 +1,5 @@
package: "com.android.media.editing.flags"
+container: "system"
flag {
name: "add_media_metrics_editing"
diff --git a/media/java/android/media/flags/media_better_together.aconfig b/media/java/android/media/flags/media_better_together.aconfig
index 8d6982e..91c4f11 100644
--- a/media/java/android/media/flags/media_better_together.aconfig
+++ b/media/java/android/media/flags/media_better_together.aconfig
@@ -1,4 +1,5 @@
package: "com.android.media.flags"
+container: "system"
flag {
name: "enable_rlp_callbacks_in_media_router2"
diff --git a/media/java/android/media/flags/performance.aconfig b/media/java/android/media/flags/performance.aconfig
index 9e9197e..464efea 100644
--- a/media/java/android/media/flags/performance.aconfig
+++ b/media/java/android/media/flags/performance.aconfig
@@ -1,4 +1,5 @@
package: "com.android.media.performance.flags"
+container: "system"
flag {
name: "media_description_ashmem_bitmap"
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/session/PlaybackState.java b/media/java/android/media/session/PlaybackState.java
index 4bacbf9..47637b8 100644
--- a/media/java/android/media/session/PlaybackState.java
+++ b/media/java/android/media/session/PlaybackState.java
@@ -15,7 +15,10 @@
*/
package android.media.session;
+import static com.android.media.flags.Flags.FLAG_ENABLE_NOTIFYING_ACTIVITY_MANAGER_WITH_MEDIA_SESSION_STATUS_CHANGE;
+
import android.annotation.DrawableRes;
+import android.annotation.FlaggedApi;
import android.annotation.IntDef;
import android.annotation.LongDef;
import android.annotation.Nullable;
@@ -295,9 +298,8 @@
* foreground.
*
* @see Builder#setState
- * @hide
*/
- // TODO: b/335561702 Unhide this symbol for the next API bump.
+ @FlaggedApi(FLAG_ENABLE_NOTIFYING_ACTIVITY_MANAGER_WITH_MEDIA_SESSION_STATUS_CHANGE)
public static final int STATE_PLAYBACK_SUPPRESSED = 12;
/**
diff --git a/media/java/android/media/tv/flags/media_tv.aconfig b/media/java/android/media/tv/flags/media_tv.aconfig
index 1731e5e..97971e1 100644
--- a/media/java/android/media/tv/flags/media_tv.aconfig
+++ b/media/java/android/media/tv/flags/media_tv.aconfig
@@ -1,4 +1,5 @@
package: "android.media.tv.flags"
+container: "system"
flag {
name: "broadcast_visibility_types"
diff --git a/media/jni/android_media_MediaCodec.cpp b/media/jni/android_media_MediaCodec.cpp
index 4f9917b..4492c85 100644
--- a/media/jni/android_media_MediaCodec.cpp
+++ b/media/jni/android_media_MediaCodec.cpp
@@ -2088,26 +2088,27 @@
}
return BAD_VALUE;
}
- size_t offset = static_cast<size_t>(env->GetIntField(param, gFields.bufferInfoOffset));
- size_t size = static_cast<size_t>(env->GetIntField(param, gFields.bufferInfoSize));
+ ssize_t offset = static_cast<ssize_t>(env->GetIntField(param, gFields.bufferInfoOffset));
+ ssize_t size = static_cast<ssize_t>(env->GetIntField(param, gFields.bufferInfoSize));
uint32_t flags = static_cast<uint32_t>(env->GetIntField(param, gFields.bufferInfoFlags));
- if (flags == 0 && size == 0) {
- if (errorDetailMsg) {
- *errorDetailMsg = "Error: Queuing an empty BufferInfo";
- }
- return BAD_VALUE;
- }
if (i == 0) {
*initialOffset = offset;
}
- if (CC_UNLIKELY((offset > UINT32_MAX)
- || ((long)(offset + size) > UINT32_MAX)
- || ((offset - *initialOffset) != *totalSize))) {
+ if (CC_UNLIKELY((offset < 0)
+ || (size < 0)
+ || ((INT32_MAX - offset) < size)
+ || ((offset - (*initialOffset)) != *totalSize))) {
if (errorDetailMsg) {
*errorDetailMsg = "Error: offset/size in BufferInfo";
}
return BAD_VALUE;
}
+ if (flags == 0 && size == 0) {
+ if (errorDetailMsg) {
+ *errorDetailMsg = "Error: Queuing an empty BufferInfo";
+ }
+ return BAD_VALUE;
+ }
infos->emplace_back(
flags,
size,
diff --git a/media/jni/playback_flags.aconfig b/media/jni/playback_flags.aconfig
index 2bb0ec5..9d927ec 100644
--- a/media/jni/playback_flags.aconfig
+++ b/media/jni/playback_flags.aconfig
@@ -1,4 +1,5 @@
package: "com.android.media.playback.flags"
+container: "system"
flag {
name: "mediametadataretriever_default_rgba8888"
diff --git a/native/android/libandroid.map.txt b/native/android/libandroid.map.txt
index 1c203e3..346c87d 100644
--- a/native/android/libandroid.map.txt
+++ b/native/android/libandroid.map.txt
@@ -366,6 +366,7 @@
APerformanceHint_setIHintManagerForTesting;
APerformanceHint_sendHint;
APerformanceHint_getThreadIds;
+ APerformanceHint_createSessionInternal;
extern "C++" {
ASurfaceControl_registerSurfaceStatsListener*;
ASurfaceControl_unregisterSurfaceStatsListener*;
diff --git a/native/android/performance_hint.cpp b/native/android/performance_hint.cpp
index 882afca..83056b2 100644
--- a/native/android/performance_hint.cpp
+++ b/native/android/performance_hint.cpp
@@ -59,7 +59,8 @@
~APerformanceHintManager() = default;
APerformanceHintSession* createSession(const int32_t* threadIds, size_t size,
- int64_t initialTargetWorkDurationNanos);
+ int64_t initialTargetWorkDurationNanos,
+ hal::SessionTag tag = hal::SessionTag::OTHER);
int64_t getPreferredRateNanos() const;
private:
@@ -84,7 +85,8 @@
public:
APerformanceHintSession(std::shared_ptr<IHintManager> hintManager,
std::shared_ptr<IHintSession> session, int64_t preferredRateNanos,
- int64_t targetDurationNanos);
+ int64_t targetDurationNanos,
+ std::optional<hal::SessionConfig> sessionConfig);
APerformanceHintSession() = delete;
~APerformanceHintSession();
@@ -116,9 +118,10 @@
// Cached samples
std::vector<hal::WorkDuration> mActualWorkDurations;
std::string mSessionName;
- static int32_t sIDCounter;
+ static int64_t sIDCounter;
// The most recent set of thread IDs
std::vector<int32_t> mLastThreadIDs;
+ std::optional<hal::SessionConfig> mSessionConfig;
// Tracing helpers
void traceThreads(std::vector<int32_t>& tids);
void tracePowerEfficient(bool powerEfficient);
@@ -129,7 +132,8 @@
static std::shared_ptr<IHintManager>* gIHintManagerForTesting = nullptr;
static APerformanceHintManager* gHintManagerForTesting = nullptr;
-int32_t APerformanceHintSession::sIDCounter = 0;
+// Start above the int32 range so we don't collide with config sessions
+int64_t APerformanceHintSession::sIDCounter = INT32_MAX;
// ===================================== APerformanceHintManager implementation
APerformanceHintManager::APerformanceHintManager(std::shared_ptr<IHintManager> manager,
@@ -174,16 +178,20 @@
}
APerformanceHintSession* APerformanceHintManager::createSession(
- const int32_t* threadIds, size_t size, int64_t initialTargetWorkDurationNanos) {
+ const int32_t* threadIds, size_t size, int64_t initialTargetWorkDurationNanos,
+ hal::SessionTag tag) {
std::vector<int32_t> tids(threadIds, threadIds + size);
std::shared_ptr<IHintSession> session;
- ndk::ScopedAStatus ret =
- mHintManager->createHintSession(mToken, tids, initialTargetWorkDurationNanos, &session);
+ ndk::ScopedAStatus ret;
+ std::optional<hal::SessionConfig> sessionConfig;
+ ret = mHintManager->createHintSessionWithConfig(mToken, tids, initialTargetWorkDurationNanos,
+ tag, &sessionConfig, &session);
+
if (!ret.isOk() || !session) {
return nullptr;
}
auto out = new APerformanceHintSession(mHintManager, std::move(session), mPreferredRateNanos,
- initialTargetWorkDurationNanos);
+ initialTargetWorkDurationNanos, sessionConfig);
out->traceThreads(tids);
out->traceTargetDuration(initialTargetWorkDurationNanos);
out->tracePowerEfficient(false);
@@ -199,19 +207,23 @@
APerformanceHintSession::APerformanceHintSession(std::shared_ptr<IHintManager> hintManager,
std::shared_ptr<IHintSession> session,
int64_t preferredRateNanos,
- int64_t targetDurationNanos)
+ int64_t targetDurationNanos,
+ std::optional<hal::SessionConfig> sessionConfig)
: mHintManager(hintManager),
mHintSession(std::move(session)),
mPreferredRateNanos(preferredRateNanos),
mTargetDurationNanos(targetDurationNanos),
mFirstTargetMetTimestamp(0),
- mLastTargetMetTimestamp(0) {
- const std::vector<hal::SessionHint> sessionHintRange{ndk::enum_range<hal::SessionHint>()
- .begin(),
- ndk::enum_range<hal::SessionHint>().end()};
-
- mLastHintSentTimestamp = std::vector<int64_t>(sessionHintRange.size(), 0);
- mSessionName = android::base::StringPrintf("ADPF Session %" PRId32, ++sIDCounter);
+ mLastTargetMetTimestamp(0),
+ mSessionConfig(sessionConfig) {
+ if (sessionConfig->id > INT32_MAX) {
+ ALOGE("Session ID too large, must fit 32-bit integer");
+ }
+ constexpr int numEnums =
+ ndk::enum_range<hal::SessionHint>().end() - ndk::enum_range<hal::SessionHint>().begin();
+ mLastHintSentTimestamp = std::vector<int64_t>(numEnums, 0);
+ int64_t traceId = sessionConfig.has_value() ? sessionConfig->id : ++sIDCounter;
+ mSessionName = android::base::StringPrintf("ADPF Session %" PRId64, traceId);
}
APerformanceHintSession::~APerformanceHintSession() {
@@ -451,6 +463,15 @@
return manager->createSession(threadIds, size, initialTargetWorkDurationNanos);
}
+APerformanceHintSession* APerformanceHint_createSessionInternal(
+ APerformanceHintManager* manager, const int32_t* threadIds, size_t size,
+ int64_t initialTargetWorkDurationNanos, SessionTag tag) {
+ VALIDATE_PTR(manager)
+ VALIDATE_PTR(threadIds)
+ return manager->createSession(threadIds, size, initialTargetWorkDurationNanos,
+ static_cast<hal::SessionTag>(tag));
+}
+
int64_t APerformanceHint_getPreferredUpdateRateNanos(APerformanceHintManager* manager) {
VALIDATE_PTR(manager)
return manager->getPreferredRateNanos();
@@ -474,9 +495,9 @@
delete session;
}
-int APerformanceHint_sendHint(void* session, SessionHint hint) {
+int APerformanceHint_sendHint(APerformanceHintSession* session, SessionHint hint) {
VALIDATE_PTR(session)
- return reinterpret_cast<APerformanceHintSession*>(session)->sendHint(hint);
+ return session->sendHint(hint);
}
int APerformanceHint_setThreads(APerformanceHintSession* session, const pid_t* threadIds,
@@ -486,11 +507,10 @@
return session->setThreads(threadIds, size);
}
-int APerformanceHint_getThreadIds(void* aPerformanceHintSession, int32_t* const threadIds,
+int APerformanceHint_getThreadIds(APerformanceHintSession* session, int32_t* const threadIds,
size_t* const size) {
- VALIDATE_PTR(aPerformanceHintSession)
- return static_cast<APerformanceHintSession*>(aPerformanceHintSession)
- ->getThreadIds(threadIds, size);
+ VALIDATE_PTR(session)
+ return session->getThreadIds(threadIds, size);
}
int APerformanceHint_setPreferPowerEfficiency(APerformanceHintSession* session, bool enabled) {
diff --git a/native/android/tests/performance_hint/PerformanceHintNativeTest.cpp b/native/android/tests/performance_hint/PerformanceHintNativeTest.cpp
index bfbe34e..58f56b8 100644
--- a/native/android/tests/performance_hint/PerformanceHintNativeTest.cpp
+++ b/native/android/tests/performance_hint/PerformanceHintNativeTest.cpp
@@ -16,6 +16,8 @@
#define LOG_TAG "PerformanceHintNativeTest"
+#include <aidl/android/hardware/power/SessionConfig.h>
+#include <aidl/android/hardware/power/SessionTag.h>
#include <aidl/android/hardware/power/WorkDuration.h>
#include <aidl/android/os/IHintManager.h>
#include <android/binder_manager.h>
@@ -28,7 +30,7 @@
#include <memory>
#include <vector>
-using aidl::android::hardware::power::WorkDuration;
+namespace hal = aidl::android::hardware::power;
using aidl::android::os::IHintManager;
using aidl::android::os::IHintSession;
using ndk::ScopedAStatus;
@@ -39,8 +41,9 @@
class MockIHintManager : public IHintManager {
public:
- MOCK_METHOD(ScopedAStatus, createHintSession,
+ MOCK_METHOD(ScopedAStatus, createHintSessionWithConfig,
(const SpAIBinder& token, const ::std::vector<int32_t>& tids, int64_t durationNanos,
+ hal::SessionTag tag, std::optional<hal::SessionConfig>* config,
std::shared_ptr<IHintSession>* _aidl_return),
(override));
MOCK_METHOD(ScopedAStatus, getHintSessionPreferredRate, (int64_t * _aidl_return), (override));
@@ -66,7 +69,7 @@
MOCK_METHOD(ScopedAStatus, setMode, (int32_t mode, bool enabled), (override));
MOCK_METHOD(ScopedAStatus, close, (), (override));
MOCK_METHOD(ScopedAStatus, reportActualWorkDuration2,
- (const ::std::vector<WorkDuration>& workDurations), (override));
+ (const ::std::vector<hal::WorkDuration>& workDurations), (override));
MOCK_METHOD(SpAIBinder, asBinder, (), (override));
MOCK_METHOD(bool, isRemote, (), (override));
};
@@ -90,16 +93,20 @@
return APerformanceHint_getManager();
}
APerformanceHintSession* createSession(APerformanceHintManager* manager,
- int64_t targetDuration = 56789L) {
+ int64_t targetDuration = 56789L, bool isHwui = false) {
mMockSession = ndk::SharedRefBase::make<NiceMock<MockIHintSession>>();
-
+ int64_t sessionId = 123;
std::vector<int32_t> tids;
tids.push_back(1);
tids.push_back(2);
- ON_CALL(*mMockIHintManager, createHintSession(_, Eq(tids), Eq(targetDuration), _))
- .WillByDefault(DoAll(SetArgPointee<3>(std::shared_ptr<IHintSession>(mMockSession)),
+ ON_CALL(*mMockIHintManager,
+ createHintSessionWithConfig(_, Eq(tids), Eq(targetDuration), _, _, _))
+ .WillByDefault(DoAll(SetArgPointee<4>(std::make_optional<hal::SessionConfig>(
+ {.id = sessionId})),
+ SetArgPointee<5>(std::shared_ptr<IHintSession>(mMockSession)),
[] { return ScopedAStatus::ok(); }));
+
ON_CALL(*mMockIHintManager, setHintSessionThreads(_, _)).WillByDefault([] {
return ScopedAStatus::ok();
});
@@ -115,7 +122,10 @@
ON_CALL(*mMockSession, reportActualWorkDuration2(_)).WillByDefault([] {
return ScopedAStatus::ok();
});
-
+ if (isHwui) {
+ return APerformanceHint_createSessionInternal(manager, tids.data(), tids.size(),
+ targetDuration, SessionTag::HWUI);
+ }
return APerformanceHint_createSession(manager, tids.data(), tids.size(), targetDuration);
}
@@ -123,7 +133,7 @@
std::shared_ptr<NiceMock<MockIHintSession>> mMockSession = nullptr;
};
-bool equalsWithoutTimestamp(WorkDuration lhs, WorkDuration rhs) {
+bool equalsWithoutTimestamp(hal::WorkDuration lhs, hal::WorkDuration rhs) {
return lhs.workPeriodStartTimestampNanos == rhs.workPeriodStartTimestampNanos &&
lhs.cpuDurationNanos == rhs.cpuDurationNanos &&
lhs.gpuDurationNanos == rhs.gpuDurationNanos && lhs.durationNanos == rhs.durationNanos;
@@ -178,6 +188,24 @@
APerformanceHint_closeSession(session);
}
+TEST_F(PerformanceHintTest, TestUpdatedSessionCreation) {
+ EXPECT_CALL(*mMockIHintManager, createHintSessionWithConfig(_, _, _, _, _, _)).Times(1);
+ APerformanceHintManager* manager = createManager();
+ APerformanceHintSession* session = createSession(manager);
+ ASSERT_TRUE(session);
+ APerformanceHint_closeSession(session);
+}
+
+TEST_F(PerformanceHintTest, TestHwuiSessionCreation) {
+ EXPECT_CALL(*mMockIHintManager,
+ createHintSessionWithConfig(_, _, _, hal::SessionTag::HWUI, _, _))
+ .Times(1);
+ APerformanceHintManager* manager = createManager();
+ APerformanceHintSession* session = createSession(manager, 56789L, true);
+ ASSERT_TRUE(session);
+ APerformanceHint_closeSession(session);
+}
+
TEST_F(PerformanceHintTest, SetThreads) {
APerformanceHintManager* manager = createManager();
@@ -233,8 +261,8 @@
return false;
}
for (int i = 0; i < expected.size(); ++i) {
- WorkDuration expectedWorkDuration = expected[i];
- WorkDuration actualWorkDuration = arg[i];
+ hal::WorkDuration expectedWorkDuration = expected[i];
+ hal::WorkDuration actualWorkDuration = arg[i];
if (!equalsWithoutTimestamp(expectedWorkDuration, actualWorkDuration)) {
*result_listener << "WorkDuration at [" << i << "] is different: "
<< "Expected: " << expectedWorkDuration.toString()
@@ -257,7 +285,7 @@
usleep(2); // Sleep for longer than preferredUpdateRateNanos.
struct TestPair {
- WorkDuration duration;
+ hal::WorkDuration duration;
int expectedResult;
};
std::vector<TestPair> testPairs{
@@ -266,7 +294,7 @@
{{1, -20, 1, 13, -8}, EINVAL},
};
for (auto&& pair : testPairs) {
- std::vector<WorkDuration> actualWorkDurations;
+ std::vector<hal::WorkDuration> actualWorkDurations;
actualWorkDurations.push_back(pair.duration);
EXPECT_CALL(*mMockSession, reportActualWorkDuration2(WorkDurationEq(actualWorkDurations)))
diff --git a/nfc/java/android/nfc/Constants.java b/nfc/java/android/nfc/Constants.java
index f768330..9b11e2d 100644
--- a/nfc/java/android/nfc/Constants.java
+++ b/nfc/java/android/nfc/Constants.java
@@ -16,6 +16,8 @@
package android.nfc;
+import android.provider.Settings;
+
/**
* @hide
* TODO(b/303286040): Holds @hide API constants. Formalize these APIs.
@@ -26,4 +28,15 @@
public static final String SETTINGS_SECURE_NFC_PAYMENT_FOREGROUND = "nfc_payment_foreground";
public static final String SETTINGS_SECURE_NFC_PAYMENT_DEFAULT_COMPONENT = "nfc_payment_default_component";
public static final String FEATURE_NFC_ANY = "android.hardware.nfc.any";
+
+ /**
+ * @hide constant copied from {@link Settings.Global}
+ * TODO(b/274636414): Migrate to official API in Android V.
+ */
+ public static final String SETTINGS_SATELLITE_MODE_RADIOS = "satellite_mode_radios";
+ /**
+ * @hide constant copied from {@link Settings.Global}
+ * TODO(b/274636414): Migrate to official API in Android V.
+ */
+ public static final String SETTINGS_SATELLITE_MODE_ENABLED = "satellite_mode_enabled";
}
diff --git a/nfc/java/android/nfc/flags.aconfig b/nfc/java/android/nfc/flags.aconfig
index 778f07c..73b29db 100644
--- a/nfc/java/android/nfc/flags.aconfig
+++ b/nfc/java/android/nfc/flags.aconfig
@@ -1,4 +1,5 @@
package: "android.nfc"
+container: "system"
flag {
name: "enable_nfc_mainline"
diff --git a/packages/CrashRecovery/aconfig/flags.aconfig b/packages/CrashRecovery/aconfig/flags.aconfig
index 15fdc52..8cdef38 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"
@@ -15,3 +16,11 @@
description: "Enables various dependencies of crashrecovery module"
bug: "289203818"
}
+
+flag {
+ name: "allow_rescue_party_flag_resets"
+ namespace: "crashrecovery"
+ description: "Enables rescue party flag resets"
+ bug: "287618292"
+ is_fixed_read_only: true
+}
diff --git a/packages/CredentialManager/profile.txt.prof b/packages/CredentialManager/profile.txt.prof
index afe066b..9cfeb9a 100644
--- a/packages/CredentialManager/profile.txt.prof
+++ b/packages/CredentialManager/profile.txt.prof
@@ -1,13865 +1 @@
-HPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->get(I)Z
-HPLandroidx/emoji2/text/MetadataRepo;->constructIndex(Landroidx/emoji2/text/flatbuffer/MetadataList;)V
-HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda0;-><init>(Landroidx/activity/ComponentActivity;)V
-HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda1;-><init>(Landroidx/activity/ComponentActivity;)V
-HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda2;-><init>(Landroidx/activity/ComponentActivity;)V
-HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda3;-><init>(Landroidx/activity/ComponentActivity;)V
-HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda3;->onContextAvailable(Landroid/content/Context;)V
-HSPLandroidx/activity/ComponentActivity$1;-><init>(Landroidx/activity/ComponentActivity;)V
-HSPLandroidx/activity/ComponentActivity$2;-><init>(Landroidx/activity/ComponentActivity;)V
-HSPLandroidx/activity/ComponentActivity$3;-><init>(Landroidx/activity/ComponentActivity;)V
-HSPLandroidx/activity/ComponentActivity$3;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
-HSPLandroidx/activity/ComponentActivity$4;-><init>(Landroidx/activity/ComponentActivity;)V
-HSPLandroidx/activity/ComponentActivity$4;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
-HSPLandroidx/activity/ComponentActivity$5;-><init>(Landroidx/activity/ComponentActivity;)V
-HSPLandroidx/activity/ComponentActivity$5;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
-HSPLandroidx/activity/ComponentActivity$Api19Impl;->cancelPendingInputEvents(Landroid/view/View;)V
-HSPLandroidx/activity/ComponentActivity$Api33Impl;->getOnBackInvokedDispatcher(Landroid/app/Activity;)Landroid/window/OnBackInvokedDispatcher;
-HSPLandroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;-><init>(Landroidx/activity/ComponentActivity;)V
-HSPLandroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;->onDraw()V
-HSPLandroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;->viewCreated(Landroid/view/View;)V
-HSPLandroidx/activity/ComponentActivity;->$r8$lambda$h2i_RK2mddCIbAsGubaI4eL8_cU(Landroidx/activity/ComponentActivity;Landroid/content/Context;)V
-HSPLandroidx/activity/ComponentActivity;-><init>()V
-HSPLandroidx/activity/ComponentActivity;->addOnContextAvailableListener(Landroidx/activity/contextaware/OnContextAvailableListener;)V
-HSPLandroidx/activity/ComponentActivity;->createFullyDrawnExecutor()Landroidx/activity/ComponentActivity$ReportFullyDrawnExecutor;
-HSPLandroidx/activity/ComponentActivity;->ensureViewModelStore()V
-HSPLandroidx/activity/ComponentActivity;->getActivityResultRegistry()Landroidx/activity/result/ActivityResultRegistry;
-HSPLandroidx/activity/ComponentActivity;->getDefaultViewModelCreationExtras()Landroidx/lifecycle/viewmodel/CreationExtras;
-HSPLandroidx/activity/ComponentActivity;->getLifecycle()Landroidx/lifecycle/Lifecycle;
-HSPLandroidx/activity/ComponentActivity;->getOnBackPressedDispatcher()Landroidx/activity/OnBackPressedDispatcher;
-HSPLandroidx/activity/ComponentActivity;->getSavedStateRegistry()Landroidx/savedstate/SavedStateRegistry;
-HSPLandroidx/activity/ComponentActivity;->getViewModelStore()Landroidx/lifecycle/ViewModelStore;
-HSPLandroidx/activity/ComponentActivity;->initViewTreeOwners()V
-HSPLandroidx/activity/ComponentActivity;->lambda$new$2(Landroid/content/Context;)V
-HSPLandroidx/activity/ComponentActivity;->onCreate(Landroid/os/Bundle;)V
-HSPLandroidx/activity/ComponentActivity;->setContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V
-HSPLandroidx/activity/FullyDrawnReporter$$ExternalSyntheticLambda0;-><init>(Landroidx/activity/FullyDrawnReporter;)V
-HSPLandroidx/activity/FullyDrawnReporter;-><init>(Ljava/util/concurrent/Executor;Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/activity/OnBackPressedCallback;-><init>(Z)V
-HSPLandroidx/activity/OnBackPressedCallback;->addCancellable(Landroidx/activity/Cancellable;)V
-HSPLandroidx/activity/OnBackPressedCallback;->isEnabled()Z
-HSPLandroidx/activity/OnBackPressedCallback;->removeCancellable(Landroidx/activity/Cancellable;)V
-HSPLandroidx/activity/OnBackPressedCallback;->setEnabledChangedCallback$activity_release(Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/activity/OnBackPressedDispatcher$1;-><init>(Landroidx/activity/OnBackPressedDispatcher;)V
-HSPLandroidx/activity/OnBackPressedDispatcher$2;-><init>(Landroidx/activity/OnBackPressedDispatcher;)V
-HSPLandroidx/activity/OnBackPressedDispatcher$Api33Impl$$ExternalSyntheticLambda0;-><init>(Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/activity/OnBackPressedDispatcher$Api33Impl;-><clinit>()V
-HSPLandroidx/activity/OnBackPressedDispatcher$Api33Impl;-><init>()V
-HSPLandroidx/activity/OnBackPressedDispatcher$Api33Impl;->createOnBackInvokedCallback(Lkotlin/jvm/functions/Function0;)Landroid/window/OnBackInvokedCallback;
-HSPLandroidx/activity/OnBackPressedDispatcher$Api33Impl;->registerOnBackInvokedCallback(Ljava/lang/Object;ILjava/lang/Object;)V
-HSPLandroidx/activity/OnBackPressedDispatcher$Api33Impl;->unregisterOnBackInvokedCallback(Ljava/lang/Object;Ljava/lang/Object;)V
-HSPLandroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;-><init>(Landroidx/activity/OnBackPressedDispatcher;Landroidx/lifecycle/Lifecycle;Landroidx/activity/OnBackPressedCallback;)V
-HSPLandroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;->cancel()V
-HSPLandroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
-HSPLandroidx/activity/OnBackPressedDispatcher$OnBackPressedCancellable;-><init>(Landroidx/activity/OnBackPressedDispatcher;Landroidx/activity/OnBackPressedCallback;)V
-HSPLandroidx/activity/OnBackPressedDispatcher$OnBackPressedCancellable;->cancel()V
-HSPLandroidx/activity/OnBackPressedDispatcher;-><init>(Ljava/lang/Runnable;)V
-HSPLandroidx/activity/OnBackPressedDispatcher;->access$getOnBackPressedCallbacks$p(Landroidx/activity/OnBackPressedDispatcher;)Lkotlin/collections/ArrayDeque;
-HSPLandroidx/activity/OnBackPressedDispatcher;->addCallback(Landroidx/lifecycle/LifecycleOwner;Landroidx/activity/OnBackPressedCallback;)V
-HSPLandroidx/activity/OnBackPressedDispatcher;->addCancellableCallback$activity_release(Landroidx/activity/OnBackPressedCallback;)Landroidx/activity/Cancellable;
-HSPLandroidx/activity/OnBackPressedDispatcher;->hasEnabledCallbacks()Z
-HSPLandroidx/activity/OnBackPressedDispatcher;->setOnBackInvokedDispatcher(Landroid/window/OnBackInvokedDispatcher;)V
-HSPLandroidx/activity/OnBackPressedDispatcher;->updateBackInvokedCallbackState$activity_release()V
-HSPLandroidx/activity/ViewTreeFullyDrawnReporterOwner;->set(Landroid/view/View;Landroidx/activity/FullyDrawnReporterOwner;)V
-HSPLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner;->set(Landroid/view/View;Landroidx/activity/OnBackPressedDispatcherOwner;)V
-HSPLandroidx/activity/compose/ActivityResultLauncherHolder;-><init>()V
-HSPLandroidx/activity/compose/ActivityResultLauncherHolder;->setLauncher(Landroidx/activity/result/ActivityResultLauncher;)V
-HSPLandroidx/activity/compose/ActivityResultLauncherHolder;->unregister()V
-HSPLandroidx/activity/compose/ActivityResultRegistryKt$rememberLauncherForActivityResult$1$1;-><init>(Landroidx/compose/runtime/State;)V
-HSPLandroidx/activity/compose/ActivityResultRegistryKt$rememberLauncherForActivityResult$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/activity/compose/ActivityResultLauncherHolder;)V
-HSPLandroidx/activity/compose/ActivityResultRegistryKt$rememberLauncherForActivityResult$1$invoke$$inlined$onDispose$1;->dispose()V
-HSPLandroidx/activity/compose/ActivityResultRegistryKt$rememberLauncherForActivityResult$1;-><init>(Landroidx/activity/compose/ActivityResultLauncherHolder;Landroidx/activity/result/ActivityResultRegistry;Ljava/lang/String;Landroidx/activity/result/contract/ActivityResultContract;Landroidx/compose/runtime/State;)V
-HSPLandroidx/activity/compose/ActivityResultRegistryKt$rememberLauncherForActivityResult$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;
-HSPLandroidx/activity/compose/ActivityResultRegistryKt$rememberLauncherForActivityResult$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/activity/compose/ActivityResultRegistryKt$rememberLauncherForActivityResult$key$1;-><clinit>()V
-HSPLandroidx/activity/compose/ActivityResultRegistryKt$rememberLauncherForActivityResult$key$1;-><init>()V
-HSPLandroidx/activity/compose/ActivityResultRegistryKt$rememberLauncherForActivityResult$key$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/activity/compose/ActivityResultRegistryKt$rememberLauncherForActivityResult$key$1;->invoke()Ljava/lang/String;
-HSPLandroidx/activity/compose/ActivityResultRegistryKt;->rememberLauncherForActivityResult(Landroidx/activity/result/contract/ActivityResultContract;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)Landroidx/activity/compose/ManagedActivityResultLauncher;
-HSPLandroidx/activity/compose/ComponentActivityKt;-><clinit>()V
-HSPLandroidx/activity/compose/ComponentActivityKt;->setContent$default(Landroidx/activity/ComponentActivity;Landroidx/compose/runtime/CompositionContext;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)V
-HSPLandroidx/activity/compose/ComponentActivityKt;->setContent(Landroidx/activity/ComponentActivity;Landroidx/compose/runtime/CompositionContext;Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/activity/compose/ComponentActivityKt;->setOwners(Landroidx/activity/ComponentActivity;)V
-HSPLandroidx/activity/compose/LocalActivityResultRegistryOwner$LocalComposition$1;-><clinit>()V
-HSPLandroidx/activity/compose/LocalActivityResultRegistryOwner$LocalComposition$1;-><init>()V
-HSPLandroidx/activity/compose/LocalActivityResultRegistryOwner$LocalComposition$1;->invoke()Landroidx/activity/result/ActivityResultRegistryOwner;
-HSPLandroidx/activity/compose/LocalActivityResultRegistryOwner$LocalComposition$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/activity/compose/LocalActivityResultRegistryOwner;-><clinit>()V
-HSPLandroidx/activity/compose/LocalActivityResultRegistryOwner;-><init>()V
-HSPLandroidx/activity/compose/LocalActivityResultRegistryOwner;->getCurrent(Landroidx/compose/runtime/Composer;I)Landroidx/activity/result/ActivityResultRegistryOwner;
-HSPLandroidx/activity/compose/ManagedActivityResultLauncher;-><clinit>()V
-HSPLandroidx/activity/compose/ManagedActivityResultLauncher;-><init>(Landroidx/activity/compose/ActivityResultLauncherHolder;Landroidx/compose/runtime/State;)V
-HSPLandroidx/activity/contextaware/ContextAwareHelper;-><init>()V
-HSPLandroidx/activity/contextaware/ContextAwareHelper;->addOnContextAvailableListener(Landroidx/activity/contextaware/OnContextAvailableListener;)V
-HSPLandroidx/activity/contextaware/ContextAwareHelper;->clearAvailableContext()V
-HSPLandroidx/activity/contextaware/ContextAwareHelper;->dispatchOnContextAvailable(Landroid/content/Context;)V
-HSPLandroidx/activity/result/ActivityResultLauncher;-><init>()V
-HSPLandroidx/activity/result/ActivityResultRegistry$$ExternalSyntheticThrowCCEIfNotNull0;->m(Ljava/lang/Object;)V
-HSPLandroidx/activity/result/ActivityResultRegistry$3;-><init>(Landroidx/activity/result/ActivityResultRegistry;Ljava/lang/String;Landroidx/activity/result/contract/ActivityResultContract;)V
-HSPLandroidx/activity/result/ActivityResultRegistry$3;->unregister()V
-HSPLandroidx/activity/result/ActivityResultRegistry$CallbackAndContract;-><init>(Landroidx/activity/result/ActivityResultCallback;Landroidx/activity/result/contract/ActivityResultContract;)V
-HSPLandroidx/activity/result/ActivityResultRegistry;-><init>()V
-HSPLandroidx/activity/result/ActivityResultRegistry;->bindRcKey(ILjava/lang/String;)V
-HSPLandroidx/activity/result/ActivityResultRegistry;->generateRandomNumber()I
-HSPLandroidx/activity/result/ActivityResultRegistry;->register(Ljava/lang/String;Landroidx/activity/result/contract/ActivityResultContract;Landroidx/activity/result/ActivityResultCallback;)Landroidx/activity/result/ActivityResultLauncher;
-HSPLandroidx/activity/result/ActivityResultRegistry;->registerKey(Ljava/lang/String;)V
-HSPLandroidx/activity/result/ActivityResultRegistry;->unregister(Ljava/lang/String;)V
-HSPLandroidx/activity/result/contract/ActivityResultContract;-><init>()V
-HSPLandroidx/arch/core/executor/ArchTaskExecutor$$ExternalSyntheticLambda0;-><init>()V
-HSPLandroidx/arch/core/executor/ArchTaskExecutor$$ExternalSyntheticLambda1;-><init>()V
-HSPLandroidx/arch/core/executor/ArchTaskExecutor;-><clinit>()V
-HSPLandroidx/arch/core/executor/ArchTaskExecutor;-><init>()V
-HSPLandroidx/arch/core/executor/ArchTaskExecutor;->getInstance()Landroidx/arch/core/executor/ArchTaskExecutor;
-HSPLandroidx/arch/core/executor/ArchTaskExecutor;->isMainThread()Z
-HSPLandroidx/arch/core/executor/DefaultTaskExecutor$1;-><init>(Landroidx/arch/core/executor/DefaultTaskExecutor;)V
-HSPLandroidx/arch/core/executor/DefaultTaskExecutor;-><init>()V
-HSPLandroidx/arch/core/executor/DefaultTaskExecutor;->isMainThread()Z
-HSPLandroidx/arch/core/executor/TaskExecutor;-><init>()V
-HSPLandroidx/arch/core/internal/FastSafeIterableMap;-><init>()V
-HSPLandroidx/arch/core/internal/FastSafeIterableMap;->ceil(Ljava/lang/Object;)Ljava/util/Map$Entry;
-HSPLandroidx/arch/core/internal/FastSafeIterableMap;->contains(Ljava/lang/Object;)Z
-HSPLandroidx/arch/core/internal/FastSafeIterableMap;->get(Ljava/lang/Object;)Landroidx/arch/core/internal/SafeIterableMap$Entry;
-HSPLandroidx/arch/core/internal/FastSafeIterableMap;->putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/arch/core/internal/FastSafeIterableMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/arch/core/internal/SafeIterableMap$AscendingIterator;-><init>(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
-HSPLandroidx/arch/core/internal/SafeIterableMap$DescendingIterator;-><init>(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
-HSPLandroidx/arch/core/internal/SafeIterableMap$DescendingIterator;->forward(Landroidx/arch/core/internal/SafeIterableMap$Entry;)Landroidx/arch/core/internal/SafeIterableMap$Entry;
-HSPLandroidx/arch/core/internal/SafeIterableMap$Entry;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
-HSPLandroidx/arch/core/internal/SafeIterableMap$Entry;->getKey()Ljava/lang/Object;
-HSPLandroidx/arch/core/internal/SafeIterableMap$Entry;->getValue()Ljava/lang/Object;
-HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;-><init>(Landroidx/arch/core/internal/SafeIterableMap;)V
-HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->hasNext()Z
-HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->next()Ljava/lang/Object;
-HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->next()Ljava/util/Map$Entry;
-HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->supportRemove(Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
-HSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;-><init>(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
-HSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->hasNext()Z
-HSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->next()Ljava/lang/Object;
-HSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->next()Ljava/util/Map$Entry;
-HSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->nextNode()Landroidx/arch/core/internal/SafeIterableMap$Entry;
-HSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->supportRemove(Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
-HSPLandroidx/arch/core/internal/SafeIterableMap$SupportRemove;-><init>()V
-HSPLandroidx/arch/core/internal/SafeIterableMap;-><init>()V
-HSPLandroidx/arch/core/internal/SafeIterableMap;->descendingIterator()Ljava/util/Iterator;
-HSPLandroidx/arch/core/internal/SafeIterableMap;->eldest()Ljava/util/Map$Entry;
-HSPLandroidx/arch/core/internal/SafeIterableMap;->get(Ljava/lang/Object;)Landroidx/arch/core/internal/SafeIterableMap$Entry;
-HSPLandroidx/arch/core/internal/SafeIterableMap;->iterator()Ljava/util/Iterator;
-HSPLandroidx/arch/core/internal/SafeIterableMap;->iteratorWithAdditions()Landroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;
-HSPLandroidx/arch/core/internal/SafeIterableMap;->newest()Ljava/util/Map$Entry;
-HSPLandroidx/arch/core/internal/SafeIterableMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Landroidx/arch/core/internal/SafeIterableMap$Entry;
-HSPLandroidx/arch/core/internal/SafeIterableMap;->putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/arch/core/internal/SafeIterableMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/arch/core/internal/SafeIterableMap;->size()I
-HSPLandroidx/collection/ArraySet$Companion;-><init>()V
-HSPLandroidx/collection/ArraySet$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/collection/ArraySet;-><clinit>()V
-HSPLandroidx/collection/ArraySet;-><init>()V
-HSPLandroidx/collection/ArraySet;-><init>(I)V
-HSPLandroidx/collection/ArraySet;-><init>(IILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/collection/ArraySet;->add(Ljava/lang/Object;)Z
-HSPLandroidx/collection/ArraySet;->allocArrays(I)V
-HSPLandroidx/collection/ArraySet;->clear()V
-HSPLandroidx/collection/ArraySet;->indexOf(Ljava/lang/Object;I)I
-HSPLandroidx/collection/ArraySet;->toArray()[Ljava/lang/Object;
-HSPLandroidx/collection/LruCache;-><init>(I)V
-HSPLandroidx/collection/SimpleArrayMap;-><init>()V
-HSPLandroidx/collection/SimpleArrayMap;-><init>(I)V
-HSPLandroidx/collection/SimpleArrayMap;-><init>(IILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/collection/SparseArrayCompat;-><init>()V
-HSPLandroidx/collection/SparseArrayCompat;-><init>(I)V
-HSPLandroidx/collection/SparseArrayCompat;-><init>(IILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/collection/internal/ContainerHelpersKt;-><clinit>()V
-HSPLandroidx/collection/internal/ContainerHelpersKt;->idealByteArraySize(I)I
-HSPLandroidx/collection/internal/ContainerHelpersKt;->idealIntArraySize(I)I
-HSPLandroidx/collection/internal/Lock;-><init>()V
-HSPLandroidx/collection/internal/LruHashMap;-><init>(IF)V
-HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$1;-><clinit>()V
-HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$1;-><init>()V
-HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$1;->invoke-8_81llA(J)Landroidx/compose/animation/core/AnimationVector4D;
-HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$2;-><init>(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)V
-HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1;-><clinit>()V
-HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1;-><init>()V
-HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1;->invoke(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroidx/compose/animation/core/TwoWayConverter;
-HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/ColorVectorConverterKt;-><clinit>()V
-HSPLandroidx/compose/animation/ColorVectorConverterKt;->access$getM1$p()[F
-HSPLandroidx/compose/animation/ColorVectorConverterKt;->access$multiplyColumn(IFFF[F)F
-HSPLandroidx/compose/animation/ColorVectorConverterKt;->getVectorConverter(Landroidx/compose/ui/graphics/Color$Companion;)Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/animation/ColorVectorConverterKt;->multiplyColumn(IFFF[F)F
-HSPLandroidx/compose/animation/FlingCalculator;-><init>(FLandroidx/compose/ui/unit/Density;)V
-HSPLandroidx/compose/animation/FlingCalculator;->computeDeceleration(Landroidx/compose/ui/unit/Density;)F
-HSPLandroidx/compose/animation/FlingCalculatorKt;-><clinit>()V
-HSPLandroidx/compose/animation/FlingCalculatorKt;->access$computeDeceleration(FF)F
-HSPLandroidx/compose/animation/FlingCalculatorKt;->computeDeceleration(FF)F
-HSPLandroidx/compose/animation/SingleValueAnimationKt;-><clinit>()V
-HSPLandroidx/compose/animation/SingleValueAnimationKt;->animateColorAsState-KTwxG1Y(JLandroidx/compose/animation/core/AnimationSpec;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State;
-HSPLandroidx/compose/animation/SingleValueAnimationKt;->animateColorAsState-euL9pac(JLandroidx/compose/animation/core/AnimationSpec;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State;
-HSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;-><clinit>()V
-HSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;-><init>(Landroidx/compose/ui/unit/Density;)V
-HSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;-><clinit>()V
-HSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;->getPlatformFlingScrollFriction()F
-HSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;->rememberSplineBasedDecay(Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/DecayAnimationSpec;
-HSPLandroidx/compose/animation/core/Animatable$runAnimation$2$1;-><init>(Landroidx/compose/animation/core/Animatable;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/Ref$BooleanRef;)V
-HSPLandroidx/compose/animation/core/Animatable$runAnimation$2$1;->invoke(Landroidx/compose/animation/core/AnimationScope;)V
-HSPLandroidx/compose/animation/core/Animatable$runAnimation$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/Animatable$runAnimation$2;-><init>(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;Landroidx/compose/animation/core/Animation;JLkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/animation/core/Animatable$runAnimation$2;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/animation/core/Animatable$runAnimation$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/Animatable$runAnimation$2;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/Animatable$runAnimation$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/Animatable;-><clinit>()V
-HSPLandroidx/compose/animation/core/Animatable;-><init>(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Ljava/lang/String;)V
-HSPLandroidx/compose/animation/core/Animatable;-><init>(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/animation/core/Animatable;->access$clampToBounds(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/Animatable;->access$endAnimation(Landroidx/compose/animation/core/Animatable;)V
-HSPLandroidx/compose/animation/core/Animatable;->access$setRunning(Landroidx/compose/animation/core/Animatable;Z)V
-HSPLandroidx/compose/animation/core/Animatable;->access$setTargetValue(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;)V
-HSPLandroidx/compose/animation/core/Animatable;->animateTo$default(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationSpec;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/Animatable;->animateTo(Ljava/lang/Object;Landroidx/compose/animation/core/AnimationSpec;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/Animatable;->asState()Landroidx/compose/runtime/State;
-HSPLandroidx/compose/animation/core/Animatable;->clampToBounds(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/Animatable;->createVector(Ljava/lang/Object;F)Landroidx/compose/animation/core/AnimationVector;
-HSPLandroidx/compose/animation/core/Animatable;->endAnimation()V
-HSPLandroidx/compose/animation/core/Animatable;->getInternalState$animation_core_release()Landroidx/compose/animation/core/AnimationState;
-HSPLandroidx/compose/animation/core/Animatable;->getTargetValue()Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/Animatable;->getTypeConverter()Landroidx/compose/animation/core/TwoWayConverter;
-HSPLandroidx/compose/animation/core/Animatable;->getValue()Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/Animatable;->getVelocity()Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/Animatable;->getVelocityVector()Landroidx/compose/animation/core/AnimationVector;
-HSPLandroidx/compose/animation/core/Animatable;->runAnimation(Landroidx/compose/animation/core/Animation;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/Animatable;->setRunning(Z)V
-HSPLandroidx/compose/animation/core/Animatable;->setTargetValue(Ljava/lang/Object;)V
-HSPLandroidx/compose/animation/core/AnimatableKt;->Animatable$default(FFILjava/lang/Object;)Landroidx/compose/animation/core/Animatable;
-HSPLandroidx/compose/animation/core/AnimatableKt;->Animatable(FF)Landroidx/compose/animation/core/Animatable;
-HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$2;-><init>(Lkotlinx/coroutines/channels/Channel;Ljava/lang/Object;)V
-HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$2;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$2;->invoke()V
-HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1;-><init>(Ljava/lang/Object;Landroidx/compose/animation/core/Animatable;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;-><init>(Lkotlinx/coroutines/channels/Channel;Landroidx/compose/animation/core/Animatable;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/AnimateAsStateKt;-><clinit>()V
-HSPLandroidx/compose/animation/core/AnimateAsStateKt;->access$animateValueAsState$lambda$4(Landroidx/compose/runtime/State;)Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/animation/core/AnimateAsStateKt;->access$animateValueAsState$lambda$6(Landroidx/compose/runtime/State;)Landroidx/compose/animation/core/AnimationSpec;
-HSPLandroidx/compose/animation/core/AnimateAsStateKt;->animateFloatAsState(FLandroidx/compose/animation/core/AnimationSpec;FLjava/lang/String;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State;
-HSPLandroidx/compose/animation/core/AnimateAsStateKt;->animateValueAsState$lambda$4(Landroidx/compose/runtime/State;)Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/animation/core/AnimateAsStateKt;->animateValueAsState$lambda$6(Landroidx/compose/runtime/State;)Landroidx/compose/animation/core/AnimationSpec;
-HSPLandroidx/compose/animation/core/AnimateAsStateKt;->animateValueAsState(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverter;Landroidx/compose/animation/core/AnimationSpec;Ljava/lang/Object;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State;
-HSPLandroidx/compose/animation/core/Animation;->isFinishedFromNanos(J)Z
-HSPLandroidx/compose/animation/core/AnimationEndReason;->$values()[Landroidx/compose/animation/core/AnimationEndReason;
-HSPLandroidx/compose/animation/core/AnimationEndReason;-><clinit>()V
-HSPLandroidx/compose/animation/core/AnimationEndReason;-><init>(Ljava/lang/String;I)V
-HSPLandroidx/compose/animation/core/AnimationKt;->TargetBasedAnimation(Landroidx/compose/animation/core/AnimationSpec;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Landroidx/compose/animation/core/TargetBasedAnimation;
-HSPLandroidx/compose/animation/core/AnimationResult;-><clinit>()V
-HSPLandroidx/compose/animation/core/AnimationResult;-><init>(Landroidx/compose/animation/core/AnimationState;Landroidx/compose/animation/core/AnimationEndReason;)V
-HSPLandroidx/compose/animation/core/AnimationScope;-><clinit>()V
-HSPLandroidx/compose/animation/core/AnimationScope;-><init>(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverter;Landroidx/compose/animation/core/AnimationVector;JLjava/lang/Object;JZLkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/animation/core/AnimationScope;->getFinishedTimeNanos()J
-HSPLandroidx/compose/animation/core/AnimationScope;->getLastFrameTimeNanos()J
-HSPLandroidx/compose/animation/core/AnimationScope;->getStartTimeNanos()J
-HSPLandroidx/compose/animation/core/AnimationScope;->getValue()Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/AnimationScope;->getVelocityVector()Landroidx/compose/animation/core/AnimationVector;
-HSPLandroidx/compose/animation/core/AnimationScope;->isRunning()Z
-HSPLandroidx/compose/animation/core/AnimationScope;->setFinishedTimeNanos$animation_core_release(J)V
-HSPLandroidx/compose/animation/core/AnimationScope;->setLastFrameTimeNanos$animation_core_release(J)V
-HSPLandroidx/compose/animation/core/AnimationScope;->setRunning$animation_core_release(Z)V
-HSPLandroidx/compose/animation/core/AnimationScope;->setValue$animation_core_release(Ljava/lang/Object;)V
-HSPLandroidx/compose/animation/core/AnimationScope;->setVelocityVector$animation_core_release(Landroidx/compose/animation/core/AnimationVector;)V
-HSPLandroidx/compose/animation/core/AnimationSpecKt;->access$convert(Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;)Landroidx/compose/animation/core/AnimationVector;
-HSPLandroidx/compose/animation/core/AnimationSpecKt;->convert(Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;)Landroidx/compose/animation/core/AnimationVector;
-HSPLandroidx/compose/animation/core/AnimationSpecKt;->spring$default(FFLjava/lang/Object;ILjava/lang/Object;)Landroidx/compose/animation/core/SpringSpec;
-HSPLandroidx/compose/animation/core/AnimationSpecKt;->spring(FFLjava/lang/Object;)Landroidx/compose/animation/core/SpringSpec;
-HSPLandroidx/compose/animation/core/AnimationState;-><clinit>()V
-HSPLandroidx/compose/animation/core/AnimationState;-><init>(Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;JJZ)V
-HSPLandroidx/compose/animation/core/AnimationState;-><init>(Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;JJZILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/animation/core/AnimationState;->getLastFrameTimeNanos()J
-HSPLandroidx/compose/animation/core/AnimationState;->getTypeConverter()Landroidx/compose/animation/core/TwoWayConverter;
-HSPLandroidx/compose/animation/core/AnimationState;->getValue()Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/AnimationState;->getVelocityVector()Landroidx/compose/animation/core/AnimationVector;
-HSPLandroidx/compose/animation/core/AnimationState;->isRunning()Z
-HSPLandroidx/compose/animation/core/AnimationState;->setFinishedTimeNanos$animation_core_release(J)V
-HSPLandroidx/compose/animation/core/AnimationState;->setLastFrameTimeNanos$animation_core_release(J)V
-HSPLandroidx/compose/animation/core/AnimationState;->setRunning$animation_core_release(Z)V
-HSPLandroidx/compose/animation/core/AnimationState;->setValue$animation_core_release(Ljava/lang/Object;)V
-HSPLandroidx/compose/animation/core/AnimationState;->setVelocityVector$animation_core_release(Landroidx/compose/animation/core/AnimationVector;)V
-HSPLandroidx/compose/animation/core/AnimationStateKt;->copy$default(Landroidx/compose/animation/core/AnimationState;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;JJZILjava/lang/Object;)Landroidx/compose/animation/core/AnimationState;
-HSPLandroidx/compose/animation/core/AnimationStateKt;->copy(Landroidx/compose/animation/core/AnimationState;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;JJZ)Landroidx/compose/animation/core/AnimationState;
-HSPLandroidx/compose/animation/core/AnimationStateKt;->createZeroVectorFrom(Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;)Landroidx/compose/animation/core/AnimationVector;
-HSPLandroidx/compose/animation/core/AnimationVector1D;-><clinit>()V
-HSPLandroidx/compose/animation/core/AnimationVector1D;-><init>(F)V
-HSPLandroidx/compose/animation/core/AnimationVector1D;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/animation/core/AnimationVector1D;->get$animation_core_release(I)F
-HSPLandroidx/compose/animation/core/AnimationVector1D;->getSize$animation_core_release()I
-HSPLandroidx/compose/animation/core/AnimationVector1D;->getValue()F
-HSPLandroidx/compose/animation/core/AnimationVector1D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector1D;
-HSPLandroidx/compose/animation/core/AnimationVector1D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector;
-HSPLandroidx/compose/animation/core/AnimationVector1D;->reset$animation_core_release()V
-HSPLandroidx/compose/animation/core/AnimationVector1D;->set$animation_core_release(IF)V
-HSPLandroidx/compose/animation/core/AnimationVector4D;-><clinit>()V
-HSPLandroidx/compose/animation/core/AnimationVector4D;-><init>(FFFF)V
-HSPLandroidx/compose/animation/core/AnimationVector4D;->getSize$animation_core_release()I
-HSPLandroidx/compose/animation/core/AnimationVector4D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector4D;
-HSPLandroidx/compose/animation/core/AnimationVector4D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector;
-HSPLandroidx/compose/animation/core/AnimationVector4D;->set$animation_core_release(IF)V
-HSPLandroidx/compose/animation/core/AnimationVector;-><clinit>()V
-HSPLandroidx/compose/animation/core/AnimationVector;-><init>()V
-HSPLandroidx/compose/animation/core/AnimationVector;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/animation/core/AnimationVectorsKt;->copy(Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
-HSPLandroidx/compose/animation/core/AnimationVectorsKt;->copyFrom(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)V
-HSPLandroidx/compose/animation/core/AnimationVectorsKt;->newInstance(Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
-HSPLandroidx/compose/animation/core/ComplexDouble;-><init>(DD)V
-HSPLandroidx/compose/animation/core/ComplexDouble;->access$get_imaginary$p(Landroidx/compose/animation/core/ComplexDouble;)D
-HSPLandroidx/compose/animation/core/ComplexDouble;->access$get_real$p(Landroidx/compose/animation/core/ComplexDouble;)D
-HSPLandroidx/compose/animation/core/ComplexDouble;->access$set_imaginary$p(Landroidx/compose/animation/core/ComplexDouble;D)V
-HSPLandroidx/compose/animation/core/ComplexDouble;->access$set_real$p(Landroidx/compose/animation/core/ComplexDouble;D)V
-HSPLandroidx/compose/animation/core/ComplexDouble;->getReal()D
-HSPLandroidx/compose/animation/core/ComplexDoubleKt;->complexQuadraticFormula(DDD)Lkotlin/Pair;
-HSPLandroidx/compose/animation/core/ComplexDoubleKt;->complexSqrt(D)Landroidx/compose/animation/core/ComplexDouble;
-HSPLandroidx/compose/animation/core/CubicBezierEasing;-><clinit>()V
-HSPLandroidx/compose/animation/core/CubicBezierEasing;-><init>(FFFF)V
-HSPLandroidx/compose/animation/core/CubicBezierEasing;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/animation/core/CubicBezierEasing;->evaluateCubic(FFF)F
-HSPLandroidx/compose/animation/core/CubicBezierEasing;->transform(F)F
-HSPLandroidx/compose/animation/core/DecayAnimationSpecImpl;-><init>(Landroidx/compose/animation/core/FloatDecayAnimationSpec;)V
-HSPLandroidx/compose/animation/core/DecayAnimationSpecKt;->generateDecayAnimationSpec(Landroidx/compose/animation/core/FloatDecayAnimationSpec;)Landroidx/compose/animation/core/DecayAnimationSpec;
-HSPLandroidx/compose/animation/core/EasingKt$LinearEasing$1;-><clinit>()V
-HSPLandroidx/compose/animation/core/EasingKt$LinearEasing$1;-><init>()V
-HSPLandroidx/compose/animation/core/EasingKt;-><clinit>()V
-HSPLandroidx/compose/animation/core/EasingKt;->getFastOutLinearInEasing()Landroidx/compose/animation/core/Easing;
-HSPLandroidx/compose/animation/core/EasingKt;->getFastOutSlowInEasing()Landroidx/compose/animation/core/Easing;
-HSPLandroidx/compose/animation/core/EasingKt;->getLinearEasing()Landroidx/compose/animation/core/Easing;
-HSPLandroidx/compose/animation/core/FloatSpringSpec;-><clinit>()V
-HSPLandroidx/compose/animation/core/FloatSpringSpec;-><init>(FFF)V
-HSPLandroidx/compose/animation/core/FloatSpringSpec;-><init>(FFFILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/animation/core/FloatSpringSpec;->getDurationNanos(FFF)J
-HSPLandroidx/compose/animation/core/FloatSpringSpec;->getEndVelocity(FFF)F
-HSPLandroidx/compose/animation/core/FloatSpringSpec;->getValueFromNanos(JFFF)F
-HSPLandroidx/compose/animation/core/FloatSpringSpec;->getVelocityFromNanos(JFFF)F
-HSPLandroidx/compose/animation/core/FloatTweenSpec;-><clinit>()V
-HSPLandroidx/compose/animation/core/FloatTweenSpec;-><init>(IILandroidx/compose/animation/core/Easing;)V
-HSPLandroidx/compose/animation/core/FloatTweenSpec;->clampPlayTime(J)J
-HSPLandroidx/compose/animation/core/FloatTweenSpec;->getValueFromNanos(JFFF)F
-HSPLandroidx/compose/animation/core/FloatTweenSpec;->getVelocityFromNanos(JFFF)F
-HSPLandroidx/compose/animation/core/Motion;->constructor-impl(J)J
-HSPLandroidx/compose/animation/core/Motion;->getValue-impl(J)F
-HSPLandroidx/compose/animation/core/Motion;->getVelocity-impl(J)F
-HSPLandroidx/compose/animation/core/MutatePriority;->$values()[Landroidx/compose/animation/core/MutatePriority;
-HSPLandroidx/compose/animation/core/MutatePriority;-><clinit>()V
-HSPLandroidx/compose/animation/core/MutatePriority;-><init>(Ljava/lang/String;I)V
-HSPLandroidx/compose/animation/core/MutatorMutex$Mutator;-><init>(Landroidx/compose/animation/core/MutatePriority;Lkotlinx/coroutines/Job;)V
-HSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;-><init>(Landroidx/compose/animation/core/MutatePriority;Landroidx/compose/animation/core/MutatorMutex;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/MutatorMutex;-><init>()V
-HSPLandroidx/compose/animation/core/MutatorMutex;->access$getCurrentMutator$p(Landroidx/compose/animation/core/MutatorMutex;)Ljava/util/concurrent/atomic/AtomicReference;
-HSPLandroidx/compose/animation/core/MutatorMutex;->access$getMutex$p(Landroidx/compose/animation/core/MutatorMutex;)Lkotlinx/coroutines/sync/Mutex;
-HSPLandroidx/compose/animation/core/MutatorMutex;->access$tryMutateOrCancel(Landroidx/compose/animation/core/MutatorMutex;Landroidx/compose/animation/core/MutatorMutex$Mutator;)V
-HSPLandroidx/compose/animation/core/MutatorMutex;->mutate$default(Landroidx/compose/animation/core/MutatorMutex;Landroidx/compose/animation/core/MutatePriority;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/MutatorMutex;->mutate(Landroidx/compose/animation/core/MutatePriority;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/MutatorMutex;->tryMutateOrCancel(Landroidx/compose/animation/core/MutatorMutex$Mutator;)V
-HSPLandroidx/compose/animation/core/SpringEstimationKt$estimateCriticallyDamped$fn$1;-><init>(DDDD)V
-HSPLandroidx/compose/animation/core/SpringEstimationKt$estimateCriticallyDamped$fn$1;->invoke(D)Ljava/lang/Double;
-HSPLandroidx/compose/animation/core/SpringEstimationKt$estimateCriticallyDamped$fn$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/SpringEstimationKt$estimateCriticallyDamped$fnPrime$1;-><init>(DDD)V
-HSPLandroidx/compose/animation/core/SpringEstimationKt$estimateCriticallyDamped$fnPrime$1;->invoke(D)Ljava/lang/Double;
-HSPLandroidx/compose/animation/core/SpringEstimationKt$estimateCriticallyDamped$fnPrime$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/SpringEstimationKt;->estimateAnimationDurationMillis(DDDDD)J
-HSPLandroidx/compose/animation/core/SpringEstimationKt;->estimateAnimationDurationMillis(FFFFF)J
-HSPLandroidx/compose/animation/core/SpringEstimationKt;->estimateCriticallyDamped$t2Iterate(DD)D
-HSPLandroidx/compose/animation/core/SpringEstimationKt;->estimateCriticallyDamped(Lkotlin/Pair;DDD)D
-HSPLandroidx/compose/animation/core/SpringEstimationKt;->estimateDurationInternal(Lkotlin/Pair;DDDD)J
-HSPLandroidx/compose/animation/core/SpringSimulation;-><init>(F)V
-HSPLandroidx/compose/animation/core/SpringSimulation;->getDampingRatio()F
-HSPLandroidx/compose/animation/core/SpringSimulation;->getStiffness()F
-HSPLandroidx/compose/animation/core/SpringSimulation;->init()V
-HSPLandroidx/compose/animation/core/SpringSimulation;->setDampingRatio(F)V
-HSPLandroidx/compose/animation/core/SpringSimulation;->setFinalPosition(F)V
-HSPLandroidx/compose/animation/core/SpringSimulation;->setStiffness(F)V
-HSPLandroidx/compose/animation/core/SpringSimulation;->updateValues-IJZedt4$animation_core_release(FFJ)J
-HSPLandroidx/compose/animation/core/SpringSimulationKt;-><clinit>()V
-HSPLandroidx/compose/animation/core/SpringSimulationKt;->Motion(FF)J
-HSPLandroidx/compose/animation/core/SpringSimulationKt;->getUNSET()F
-HSPLandroidx/compose/animation/core/SpringSpec;-><clinit>()V
-HSPLandroidx/compose/animation/core/SpringSpec;-><init>(FFLjava/lang/Object;)V
-HSPLandroidx/compose/animation/core/SpringSpec;-><init>(FFLjava/lang/Object;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/animation/core/SpringSpec;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/animation/core/SpringSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedAnimationSpec;
-HSPLandroidx/compose/animation/core/SpringSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedSpringSpec;
-HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$4;-><init>(Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$6$1;-><init>(Landroidx/compose/animation/core/AnimationState;)V
-HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$6;-><init>(Lkotlin/jvm/internal/Ref$ObjectRef;Ljava/lang/Object;Landroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationState;FLkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$6;->invoke(J)V
-HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$6;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$9;-><init>(Lkotlin/jvm/internal/Ref$ObjectRef;FLandroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$9;->invoke(J)V
-HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$9;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/SuspendAnimationKt$callWithFrameNanos$2;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/animation/core/SuspendAnimationKt$callWithFrameNanos$2;->invoke(J)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/SuspendAnimationKt$callWithFrameNanos$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/SuspendAnimationKt;->access$doAnimationFrameWithScale(Landroidx/compose/animation/core/AnimationScope;JFLandroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/animation/core/SuspendAnimationKt;->animate(Landroidx/compose/animation/core/AnimationState;Landroidx/compose/animation/core/Animation;JLkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/SuspendAnimationKt;->callWithFrameNanos(Landroidx/compose/animation/core/Animation;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/SuspendAnimationKt;->doAnimationFrame(Landroidx/compose/animation/core/AnimationScope;JJLandroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/animation/core/SuspendAnimationKt;->doAnimationFrameWithScale(Landroidx/compose/animation/core/AnimationScope;JFLandroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/animation/core/SuspendAnimationKt;->getDurationScale(Lkotlin/coroutines/CoroutineContext;)F
-HSPLandroidx/compose/animation/core/SuspendAnimationKt;->updateState(Landroidx/compose/animation/core/AnimationScope;Landroidx/compose/animation/core/AnimationState;)V
-HSPLandroidx/compose/animation/core/TargetBasedAnimation;-><clinit>()V
-HSPLandroidx/compose/animation/core/TargetBasedAnimation;-><init>(Landroidx/compose/animation/core/AnimationSpec;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;)V
-HSPLandroidx/compose/animation/core/TargetBasedAnimation;-><init>(Landroidx/compose/animation/core/VectorizedAnimationSpec;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;)V
-HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getDurationNanos()J
-HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getTargetValue()Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getTypeConverter()Landroidx/compose/animation/core/TwoWayConverter;
-HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getValueFromNanos(J)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getVelocityVectorFromNanos(J)Landroidx/compose/animation/core/AnimationVector;
-HSPLandroidx/compose/animation/core/TargetBasedAnimation;->isInfinite()Z
-HSPLandroidx/compose/animation/core/TweenSpec;-><clinit>()V
-HSPLandroidx/compose/animation/core/TweenSpec;-><init>(IILandroidx/compose/animation/core/Easing;)V
-HSPLandroidx/compose/animation/core/TweenSpec;-><init>(IILandroidx/compose/animation/core/Easing;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/animation/core/TweenSpec;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/animation/core/TweenSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedAnimationSpec;
-HSPLandroidx/compose/animation/core/TweenSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedTweenSpec;
-HSPLandroidx/compose/animation/core/TwoWayConverterImpl;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/animation/core/TwoWayConverterImpl;->getConvertFromVector()Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/animation/core/TwoWayConverterImpl;->getConvertToVector()Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/animation/core/VectorConvertersKt$DpOffsetToVector$1;-><clinit>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$DpOffsetToVector$1;-><init>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$DpOffsetToVector$2;-><clinit>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$DpOffsetToVector$2;-><init>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$DpToVector$1;-><clinit>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$DpToVector$1;-><init>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$DpToVector$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/VectorConvertersKt$DpToVector$1;->invoke-0680j_4(F)Landroidx/compose/animation/core/AnimationVector1D;
-HSPLandroidx/compose/animation/core/VectorConvertersKt$DpToVector$2;-><clinit>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$DpToVector$2;-><init>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$DpToVector$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/VectorConvertersKt$DpToVector$2;->invoke-u2uoSUM(Landroidx/compose/animation/core/AnimationVector1D;)F
-HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$1;-><clinit>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$1;-><init>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$1;->invoke(F)Landroidx/compose/animation/core/AnimationVector1D;
-HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$2;-><clinit>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$2;-><init>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$2;->invoke(Landroidx/compose/animation/core/AnimationVector1D;)Ljava/lang/Float;
-HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$1;-><clinit>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$1;-><init>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$2;-><clinit>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$2;-><init>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$IntSizeToVector$1;-><clinit>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$IntSizeToVector$1;-><init>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$IntSizeToVector$2;-><clinit>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$IntSizeToVector$2;-><init>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$IntToVector$1;-><clinit>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$IntToVector$1;-><init>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$IntToVector$2;-><clinit>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$IntToVector$2;-><init>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$OffsetToVector$1;-><clinit>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$OffsetToVector$1;-><init>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$OffsetToVector$2;-><clinit>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$OffsetToVector$2;-><init>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$RectToVector$1;-><clinit>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$RectToVector$1;-><init>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$RectToVector$2;-><clinit>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$RectToVector$2;-><init>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$SizeToVector$1;-><clinit>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$SizeToVector$1;-><init>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$SizeToVector$2;-><clinit>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt$SizeToVector$2;-><init>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt;-><clinit>()V
-HSPLandroidx/compose/animation/core/VectorConvertersKt;->TwoWayConverter(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/animation/core/TwoWayConverter;
-HSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter(Landroidx/compose/ui/geometry/Offset$Companion;)Landroidx/compose/animation/core/TwoWayConverter;
-HSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter(Landroidx/compose/ui/geometry/Rect$Companion;)Landroidx/compose/animation/core/TwoWayConverter;
-HSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter(Landroidx/compose/ui/geometry/Size$Companion;)Landroidx/compose/animation/core/TwoWayConverter;
-HSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter(Landroidx/compose/ui/unit/Dp$Companion;)Landroidx/compose/animation/core/TwoWayConverter;
-HSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter(Landroidx/compose/ui/unit/DpOffset$Companion;)Landroidx/compose/animation/core/TwoWayConverter;
-HSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter(Landroidx/compose/ui/unit/IntOffset$Companion;)Landroidx/compose/animation/core/TwoWayConverter;
-HSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter(Landroidx/compose/ui/unit/IntSize$Companion;)Landroidx/compose/animation/core/TwoWayConverter;
-HSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter(Lkotlin/jvm/internal/FloatCompanionObject;)Landroidx/compose/animation/core/TwoWayConverter;
-HSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter(Lkotlin/jvm/internal/IntCompanionObject;)Landroidx/compose/animation/core/TwoWayConverter;
-HSPLandroidx/compose/animation/core/VectorConvertersKt;->lerp(FFF)F
-HSPLandroidx/compose/animation/core/VectorizedAnimationSpec;->getEndVelocity(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
-HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt$createSpringAnimations$2;-><init>(FF)V
-HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt$createSpringAnimations$2;->get(I)Landroidx/compose/animation/core/FloatAnimationSpec;
-HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt$createSpringAnimations$2;->get(I)Landroidx/compose/animation/core/FloatSpringSpec;
-HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt;->access$createSpringAnimations(Landroidx/compose/animation/core/AnimationVector;FF)Landroidx/compose/animation/core/Animations;
-HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt;->createSpringAnimations(Landroidx/compose/animation/core/AnimationVector;FF)Landroidx/compose/animation/core/Animations;
-HSPLandroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J
-HSPLandroidx/compose/animation/core/VectorizedFiniteAnimationSpec;->isInfinite()Z
-HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec$1;-><init>(Landroidx/compose/animation/core/FloatAnimationSpec;)V
-HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec$1;->get(I)Landroidx/compose/animation/core/FloatAnimationSpec;
-HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;-><clinit>()V
-HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;-><init>(Landroidx/compose/animation/core/Animations;)V
-HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;-><init>(Landroidx/compose/animation/core/FloatAnimationSpec;)V
-HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J
-HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getEndVelocity(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
-HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
-HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
-HSPLandroidx/compose/animation/core/VectorizedSpringSpec;-><clinit>()V
-HSPLandroidx/compose/animation/core/VectorizedSpringSpec;-><init>(FFLandroidx/compose/animation/core/AnimationVector;)V
-HSPLandroidx/compose/animation/core/VectorizedSpringSpec;-><init>(FFLandroidx/compose/animation/core/Animations;)V
-HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J
-HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->getEndVelocity(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
-HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
-HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
-HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->isInfinite()Z
-HSPLandroidx/compose/animation/core/VectorizedTweenSpec;-><clinit>()V
-HSPLandroidx/compose/animation/core/VectorizedTweenSpec;-><init>(IILandroidx/compose/animation/core/Easing;)V
-HSPLandroidx/compose/animation/core/VectorizedTweenSpec;->getDelayMillis()I
-HSPLandroidx/compose/animation/core/VectorizedTweenSpec;->getDurationMillis()I
-HSPLandroidx/compose/animation/core/VectorizedTweenSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
-HSPLandroidx/compose/animation/core/VectorizedTweenSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
-HSPLandroidx/compose/animation/core/VisibilityThresholdsKt;-><clinit>()V
-HSPLandroidx/compose/animation/core/VisibilityThresholdsKt;->getVisibilityThreshold(Landroidx/compose/ui/geometry/Offset$Companion;)J
-HSPLandroidx/compose/animation/core/VisibilityThresholdsKt;->getVisibilityThreshold(Landroidx/compose/ui/geometry/Rect$Companion;)Landroidx/compose/ui/geometry/Rect;
-HSPLandroidx/compose/animation/core/VisibilityThresholdsKt;->getVisibilityThreshold(Landroidx/compose/ui/geometry/Size$Companion;)J
-HSPLandroidx/compose/animation/core/VisibilityThresholdsKt;->getVisibilityThreshold(Landroidx/compose/ui/unit/Dp$Companion;)F
-HSPLandroidx/compose/animation/core/VisibilityThresholdsKt;->getVisibilityThreshold(Landroidx/compose/ui/unit/IntOffset$Companion;)J
-HSPLandroidx/compose/animation/core/VisibilityThresholdsKt;->getVisibilityThreshold(Landroidx/compose/ui/unit/IntSize$Companion;)J
-HSPLandroidx/compose/animation/core/VisibilityThresholdsKt;->getVisibilityThreshold(Lkotlin/jvm/internal/IntCompanionObject;)I
-HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;-><init>(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;->invoke(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;-><init>(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;->invoke(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$onNewSize$1;-><init>(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)V
-HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$onNewSize$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$onNewSize$1;->invoke-ozmzZPI(J)V
-HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;-><init>(Landroid/content/Context;Landroidx/compose/foundation/OverscrollConfiguration;)V
-HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$animateToRelease(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)V
-HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getBottomEffect$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect;
-HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getBottomEffectNegation$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect;
-HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getContainerSize$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)J
-HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getLeftEffect$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect;
-HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getLeftEffectNegation$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect;
-HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getRightEffect$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect;
-HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getRightEffectNegation$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect;
-HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getTopEffect$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect;
-HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getTopEffectNegation$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect;
-HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$invalidateOverscroll(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)V
-HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$setContainerSize$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;J)V
-HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->animateToRelease()V
-HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->drawOverscroll(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V
-HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->getEffectModifier()Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->invalidateOverscroll()V
-HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1$1;-><init>(Landroidx/compose/ui/layout/Placeable;I)V
-HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
-HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1;-><clinit>()V
-HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1;-><init>()V
-HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1;->invoke-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2$1;-><init>(Landroidx/compose/ui/layout/Placeable;I)V
-HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
-HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2;-><clinit>()V
-HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2;-><init>()V
-HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2;->invoke-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/foundation/AndroidOverscrollKt;-><clinit>()V
-HSPLandroidx/compose/foundation/AndroidOverscrollKt;->access$getStretchOverscrollNonClippingLayer$p()Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/AndroidOverscrollKt;->rememberOverscrollEffect(Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/OverscrollEffect;
-HSPLandroidx/compose/foundation/Api31Impl;-><clinit>()V
-HSPLandroidx/compose/foundation/Api31Impl;-><init>()V
-HSPLandroidx/compose/foundation/Api31Impl;->create(Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/widget/EdgeEffect;
-HSPLandroidx/compose/foundation/Api31Impl;->getDistance(Landroid/widget/EdgeEffect;)F
-HSPLandroidx/compose/foundation/Background;-><init>(Landroidx/compose/ui/graphics/Color;Landroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Shape;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/foundation/Background;-><init>(Landroidx/compose/ui/graphics/Color;Landroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Shape;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/foundation/Background;-><init>(Landroidx/compose/ui/graphics/Color;Landroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Shape;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/foundation/Background;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
-HSPLandroidx/compose/foundation/Background;->drawOutline(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
-HSPLandroidx/compose/foundation/Background;->drawRect(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
-HSPLandroidx/compose/foundation/Background;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/foundation/BackgroundKt;->background-bw27NRU$default(Landroidx/compose/ui/Modifier;JLandroidx/compose/ui/graphics/Shape;ILjava/lang/Object;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/BackgroundKt;->background-bw27NRU(Landroidx/compose/ui/Modifier;JLandroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/CanvasKt;->Canvas(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/foundation/CheckScrollableContainerConstraintsKt;->checkScrollableContainerConstraints-K40F9xA(JLandroidx/compose/foundation/gestures/Orientation;)V
-HSPLandroidx/compose/foundation/ClickableKt$PressedInteractionSourceDisposableEffect$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/runtime/MutableState;Ljava/util/Map;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V
-HSPLandroidx/compose/foundation/ClickableKt$PressedInteractionSourceDisposableEffect$1$invoke$$inlined$onDispose$1;->dispose()V
-HSPLandroidx/compose/foundation/ClickableKt$PressedInteractionSourceDisposableEffect$1;-><init>(Landroidx/compose/runtime/MutableState;Ljava/util/Map;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V
-HSPLandroidx/compose/foundation/ClickableKt$PressedInteractionSourceDisposableEffect$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;
-HSPLandroidx/compose/foundation/ClickableKt$PressedInteractionSourceDisposableEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/ClickableKt$clickable$4$1$1;-><init>(Landroidx/compose/runtime/MutableState;)V
-HSPLandroidx/compose/foundation/ClickableKt$clickable$4$1$1;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V
-HSPLandroidx/compose/foundation/ClickableKt$clickable$4$delayPressInteraction$1$1;-><init>(Landroidx/compose/runtime/MutableState;Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/foundation/ClickableKt$clickable$4$delayPressInteraction$1$1;->invoke()Ljava/lang/Boolean;
-HSPLandroidx/compose/foundation/ClickableKt$clickable$4$delayPressInteraction$1$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1$1;-><init>(ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1$1;->invoke-d-4ec7I(Landroidx/compose/foundation/gestures/PressGestureScope;JLkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1$2;-><init>(ZLandroidx/compose/runtime/State;)V
-HSPLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1$2;->invoke-k-4lQ0M(J)V
-HSPLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1;-><init>(Landroidx/compose/runtime/MutableState;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1;->invoke(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/ClickableKt$clickable$4;-><init>(Lkotlin/jvm/functions/Function0;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/Indication;Ljava/lang/String;Landroidx/compose/ui/semantics/Role;)V
-HSPLandroidx/compose/foundation/ClickableKt$clickable$4;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/ClickableKt$clickable$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/ClickableKt$genericClickableWithoutGesture$clickSemantics$1$1;-><init>(Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/foundation/ClickableKt$genericClickableWithoutGesture$clickSemantics$1;-><init>(Landroidx/compose/ui/semantics/Role;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Ljava/lang/String;ZLkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/foundation/ClickableKt$genericClickableWithoutGesture$clickSemantics$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V
-HSPLandroidx/compose/foundation/ClickableKt$genericClickableWithoutGesture$clickSemantics$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/ClickableKt$genericClickableWithoutGesture$detectPressAndClickFromKey$1;-><init>(ZLjava/util/Map;Landroidx/compose/runtime/State;Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function0;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V
-HSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2$delayJob$1;-><init>(Landroidx/compose/runtime/State;JLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2$delayJob$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2$delayJob$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;-><init>(Landroidx/compose/foundation/gestures/PressGestureScope;JLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/ClickableKt;->PressedInteractionSourceDisposableEffect(Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/MutableState;Ljava/util/Map;Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/foundation/ClickableKt;->clickable-O2vRcR0$default(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/Indication;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;ILjava/lang/Object;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/ClickableKt;->clickable-O2vRcR0(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/Indication;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/ClickableKt;->genericClickableWithoutGesture-bdNGguI(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/Indication;Lkotlinx/coroutines/CoroutineScope;Ljava/util/Map;Landroidx/compose/runtime/State;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/ClickableKt;->genericClickableWithoutGesture_bdNGguI$clickSemantics(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/semantics/Role;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Ljava/lang/String;ZLkotlin/jvm/functions/Function0;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/ClickableKt;->genericClickableWithoutGesture_bdNGguI$detectPressAndClickFromKey(Landroidx/compose/ui/Modifier;ZLjava/util/Map;Landroidx/compose/runtime/State;Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function0;Landroidx/compose/foundation/interaction/MutableInteractionSource;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/ClickableKt;->handlePressInteraction-EPk0efs(Landroidx/compose/foundation/gestures/PressGestureScope;JLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/Clickable_androidKt$isComposeRootInScrollableContainer$1;-><init>(Landroid/view/View;)V
-HSPLandroidx/compose/foundation/Clickable_androidKt$isComposeRootInScrollableContainer$1;->invoke()Ljava/lang/Boolean;
-HSPLandroidx/compose/foundation/Clickable_androidKt$isComposeRootInScrollableContainer$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/foundation/Clickable_androidKt;-><clinit>()V
-HSPLandroidx/compose/foundation/Clickable_androidKt;->access$isInScrollableViewGroup(Landroid/view/View;)Z
-HSPLandroidx/compose/foundation/Clickable_androidKt;->isComposeRootInScrollableContainer(Landroidx/compose/runtime/Composer;I)Lkotlin/jvm/functions/Function0;
-HSPLandroidx/compose/foundation/Clickable_androidKt;->isInScrollableViewGroup(Landroid/view/View;)Z
-HSPLandroidx/compose/foundation/ClipScrollableContainerKt$HorizontalScrollableClipModifier$1;-><init>()V
-HSPLandroidx/compose/foundation/ClipScrollableContainerKt$VerticalScrollableClipModifier$1;-><init>()V
-HSPLandroidx/compose/foundation/ClipScrollableContainerKt$VerticalScrollableClipModifier$1;->createOutline-Pq9zytI(JLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Landroidx/compose/ui/graphics/Outline;
-HSPLandroidx/compose/foundation/ClipScrollableContainerKt;-><clinit>()V
-HSPLandroidx/compose/foundation/ClipScrollableContainerKt;->clipScrollableContainer(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/Orientation;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/ClipScrollableContainerKt;->getMaxSupportedElevation()F
-HSPLandroidx/compose/foundation/DarkThemeKt;->isSystemInDarkTheme(Landroidx/compose/runtime/Composer;I)Z
-HSPLandroidx/compose/foundation/DarkTheme_androidKt;->_isSystemInDarkTheme(Landroidx/compose/runtime/Composer;I)Z
-HSPLandroidx/compose/foundation/DrawOverscrollModifier;-><init>(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/foundation/DrawOverscrollModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
-HSPLandroidx/compose/foundation/DrawOverscrollModifier;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/foundation/EdgeEffectCompat;-><clinit>()V
-HSPLandroidx/compose/foundation/EdgeEffectCompat;-><init>()V
-HSPLandroidx/compose/foundation/EdgeEffectCompat;->create(Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/widget/EdgeEffect;
-HSPLandroidx/compose/foundation/EdgeEffectCompat;->getDistanceCompat(Landroid/widget/EdgeEffect;)F
-HSPLandroidx/compose/foundation/FocusableKt$focusGroup$1;-><clinit>()V
-HSPLandroidx/compose/foundation/FocusableKt$focusGroup$1;-><init>()V
-HSPLandroidx/compose/foundation/FocusableKt$focusGroup$1;->invoke(Landroidx/compose/ui/focus/FocusProperties;)V
-HSPLandroidx/compose/foundation/FocusableKt$focusGroup$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$1$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$1$1$invoke$$inlined$onDispose$1;->dispose()V
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$1$1;-><init>(Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$1$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$2$invoke$$inlined$onDispose$1;-><init>()V
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$2$invoke$$inlined$onDispose$1;->dispose()V
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$2;-><init>(ZLkotlinx/coroutines/CoroutineScope;Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$2;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$3$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/runtime/MutableState;)V
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$3$1$invoke$$inlined$onDispose$1;->dispose()V
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$3$1;-><init>(Landroidx/compose/ui/layout/PinnableContainer;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;)V
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$3$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$3$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$4$1$1;-><init>(Landroidx/compose/ui/focus/FocusRequester;Landroidx/compose/runtime/MutableState;)V
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$4$1;-><init>(Landroidx/compose/runtime/MutableState;Landroidx/compose/ui/focus/FocusRequester;)V
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$4$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$5$2;-><init>(Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$5$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$5$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$5;-><init>(Landroidx/compose/ui/layout/PinnableContainer;Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/relocation/BringIntoViewRequester;)V
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$5;->invoke(Landroidx/compose/ui/focus/FocusState;)V
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2$5;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSource;Z)V
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2;->access$invoke$lambda$10(Landroidx/compose/runtime/MutableState;Landroidx/compose/ui/layout/PinnableContainer$PinnedHandle;)V
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2;->access$invoke$lambda$2(Landroidx/compose/runtime/MutableState;)Z
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2;->access$invoke$lambda$3(Landroidx/compose/runtime/MutableState;Z)V
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2;->access$invoke$lambda$9(Landroidx/compose/runtime/MutableState;)Landroidx/compose/ui/layout/PinnableContainer$PinnedHandle;
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2;->invoke$lambda$10(Landroidx/compose/runtime/MutableState;Landroidx/compose/ui/layout/PinnableContainer$PinnedHandle;)V
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2;->invoke$lambda$2(Landroidx/compose/runtime/MutableState;)Z
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2;->invoke$lambda$3(Landroidx/compose/runtime/MutableState;Z)V
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2;->invoke$lambda$9(Landroidx/compose/runtime/MutableState;)Landroidx/compose/ui/layout/PinnableContainer$PinnedHandle;
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/FocusableKt$focusable$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/FocusableKt$focusableInNonTouchMode$2$1;-><init>(Landroidx/compose/ui/input/InputModeManager;)V
-HSPLandroidx/compose/foundation/FocusableKt$focusableInNonTouchMode$2$1;->invoke(Landroidx/compose/ui/focus/FocusProperties;)V
-HSPLandroidx/compose/foundation/FocusableKt$focusableInNonTouchMode$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/FocusableKt$focusableInNonTouchMode$2;-><init>(ZLandroidx/compose/foundation/interaction/MutableInteractionSource;)V
-HSPLandroidx/compose/foundation/FocusableKt$focusableInNonTouchMode$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/FocusableKt$focusableInNonTouchMode$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/FocusableKt;-><clinit>()V
-HSPLandroidx/compose/foundation/FocusableKt;->focusGroup(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/FocusableKt;->focusable(Landroidx/compose/ui/Modifier;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/FocusableKt;->focusableInNonTouchMode(Landroidx/compose/ui/Modifier;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/FocusedBoundsKt$ModifierLocalFocusedBoundsObserver$1;-><clinit>()V
-HSPLandroidx/compose/foundation/FocusedBoundsKt$ModifierLocalFocusedBoundsObserver$1;-><init>()V
-HSPLandroidx/compose/foundation/FocusedBoundsKt$ModifierLocalFocusedBoundsObserver$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/foundation/FocusedBoundsKt$ModifierLocalFocusedBoundsObserver$1;->invoke()Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/foundation/FocusedBoundsKt$onFocusedBoundsChanged$2;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/foundation/FocusedBoundsKt$onFocusedBoundsChanged$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/FocusedBoundsKt$onFocusedBoundsChanged$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/FocusedBoundsKt;-><clinit>()V
-HSPLandroidx/compose/foundation/FocusedBoundsKt;->getModifierLocalFocusedBoundsObserver()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
-HSPLandroidx/compose/foundation/FocusedBoundsKt;->onFocusedBoundsChanged(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/FocusedBoundsObserverModifier;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/foundation/FocusedBoundsObserverModifier;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
-HSPLandroidx/compose/foundation/FocusedBoundsObserverModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V
-HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$1$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V
-HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$1$1$invoke$$inlined$onDispose$1;->dispose()V
-HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$1$1;-><init>(Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V
-HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$1$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;
-HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$2$1;-><init>(ZLandroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$3$1;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$3$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$3$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$3;-><init>(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$3;->invoke(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/HoverableKt$hoverable$2;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSource;Z)V
-HSPLandroidx/compose/foundation/HoverableKt$hoverable$2;->access$invoke$tryEmitExit(Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V
-HSPLandroidx/compose/foundation/HoverableKt$hoverable$2;->invoke$lambda$1(Landroidx/compose/runtime/MutableState;)Landroidx/compose/foundation/interaction/HoverInteraction$Enter;
-HSPLandroidx/compose/foundation/HoverableKt$hoverable$2;->invoke$tryEmitExit(Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V
-HSPLandroidx/compose/foundation/HoverableKt$hoverable$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/HoverableKt$hoverable$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/HoverableKt;->hoverable(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;Z)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/ImageKt$Image$2$measure$1;-><clinit>()V
-HSPLandroidx/compose/foundation/ImageKt$Image$2$measure$1;-><init>()V
-HSPLandroidx/compose/foundation/ImageKt$Image$2$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
-HSPLandroidx/compose/foundation/ImageKt$Image$2$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/ImageKt$Image$2;-><clinit>()V
-HSPLandroidx/compose/foundation/ImageKt$Image$2;-><init>()V
-HSPLandroidx/compose/foundation/ImageKt$Image$2;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/foundation/ImageKt;->Image(Landroidx/compose/ui/graphics/painter/Painter;Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;Landroidx/compose/runtime/Composer;II)V
-HSPLandroidx/compose/foundation/ImageKt;->Image-5h-nEew(Landroidx/compose/ui/graphics/ImageBitmap;Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;ILandroidx/compose/runtime/Composer;II)V
-HSPLandroidx/compose/foundation/IndicationKt$LocalIndication$1;-><clinit>()V
-HSPLandroidx/compose/foundation/IndicationKt$LocalIndication$1;-><init>()V
-HSPLandroidx/compose/foundation/IndicationKt$indication$2;-><init>(Landroidx/compose/foundation/Indication;Landroidx/compose/foundation/interaction/InteractionSource;)V
-HSPLandroidx/compose/foundation/IndicationKt$indication$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/IndicationKt$indication$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/IndicationKt;-><clinit>()V
-HSPLandroidx/compose/foundation/IndicationKt;->getLocalIndication()Landroidx/compose/runtime/ProvidableCompositionLocal;
-HSPLandroidx/compose/foundation/IndicationKt;->indication(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/foundation/Indication;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/IndicationModifier;-><init>(Landroidx/compose/foundation/IndicationInstance;)V
-HSPLandroidx/compose/foundation/IndicationModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
-HSPLandroidx/compose/foundation/MutatePriority;->$values()[Landroidx/compose/foundation/MutatePriority;
-HSPLandroidx/compose/foundation/MutatePriority;-><clinit>()V
-HSPLandroidx/compose/foundation/MutatePriority;-><init>(Ljava/lang/String;I)V
-HSPLandroidx/compose/foundation/MutatorMutex$Mutator;-><init>(Landroidx/compose/foundation/MutatePriority;Lkotlinx/coroutines/Job;)V
-HSPLandroidx/compose/foundation/MutatorMutex$mutateWith$2;-><init>(Landroidx/compose/foundation/MutatePriority;Landroidx/compose/foundation/MutatorMutex;Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/MutatorMutex$mutateWith$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/MutatorMutex$mutateWith$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/MutatorMutex$mutateWith$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/MutatorMutex$mutateWith$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/MutatorMutex;-><clinit>()V
-HSPLandroidx/compose/foundation/MutatorMutex;-><init>()V
-HSPLandroidx/compose/foundation/MutatorMutex;->access$getCurrentMutator$p(Landroidx/compose/foundation/MutatorMutex;)Ljava/util/concurrent/atomic/AtomicReference;
-HSPLandroidx/compose/foundation/MutatorMutex;->access$getMutex$p(Landroidx/compose/foundation/MutatorMutex;)Lkotlinx/coroutines/sync/Mutex;
-HSPLandroidx/compose/foundation/MutatorMutex;->access$tryMutateOrCancel(Landroidx/compose/foundation/MutatorMutex;Landroidx/compose/foundation/MutatorMutex$Mutator;)V
-HSPLandroidx/compose/foundation/MutatorMutex;->mutateWith(Ljava/lang/Object;Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/MutatorMutex;->tryMutateOrCancel(Landroidx/compose/foundation/MutatorMutex$Mutator;)V
-HSPLandroidx/compose/foundation/OverscrollConfiguration;-><clinit>()V
-HSPLandroidx/compose/foundation/OverscrollConfiguration;-><init>(JLandroidx/compose/foundation/layout/PaddingValues;)V
-HSPLandroidx/compose/foundation/OverscrollConfiguration;-><init>(JLandroidx/compose/foundation/layout/PaddingValues;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/foundation/OverscrollConfiguration;-><init>(JLandroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/foundation/OverscrollConfiguration;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/foundation/OverscrollConfiguration;->getGlowColor-0d7_KjU()J
-HSPLandroidx/compose/foundation/OverscrollConfigurationKt$LocalOverscrollConfiguration$1;-><clinit>()V
-HSPLandroidx/compose/foundation/OverscrollConfigurationKt$LocalOverscrollConfiguration$1;-><init>()V
-HSPLandroidx/compose/foundation/OverscrollConfigurationKt$LocalOverscrollConfiguration$1;->invoke()Landroidx/compose/foundation/OverscrollConfiguration;
-HSPLandroidx/compose/foundation/OverscrollConfigurationKt$LocalOverscrollConfiguration$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/foundation/OverscrollConfigurationKt;-><clinit>()V
-HSPLandroidx/compose/foundation/OverscrollConfigurationKt;->getLocalOverscrollConfiguration()Landroidx/compose/runtime/ProvidableCompositionLocal;
-HSPLandroidx/compose/foundation/OverscrollKt;->overscroll(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/OverscrollEffect;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/gestures/AndroidConfig;-><clinit>()V
-HSPLandroidx/compose/foundation/gestures/AndroidConfig;-><init>()V
-HSPLandroidx/compose/foundation/gestures/AndroidScrollable_androidKt;->platformScrollConfig(Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/gestures/ScrollConfig;
-HSPLandroidx/compose/foundation/gestures/BringIntoViewRequestPriorityQueue;-><init>()V
-HSPLandroidx/compose/foundation/gestures/ContentInViewModifier$WhenMappings;-><clinit>()V
-HSPLandroidx/compose/foundation/gestures/ContentInViewModifier$modifier$1;-><init>(Landroidx/compose/foundation/gestures/ContentInViewModifier;)V
-HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;-><init>(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/gestures/ScrollableState;Z)V
-HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->compareTo-TemP2vQ(JJ)I
-HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->getModifier()Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->onPlaced(Landroidx/compose/ui/layout/LayoutCoordinates;)V
-HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->onRemeasured-ozmzZPI(J)V
-HSPLandroidx/compose/foundation/gestures/DefaultDraggableState$drag$2;-><init>(Landroidx/compose/foundation/gestures/DefaultDraggableState;Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/DefaultDraggableState$drag$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/gestures/DefaultDraggableState$drag$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/DefaultDraggableState$drag$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/DefaultDraggableState$drag$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/DefaultDraggableState$dragScope$1;-><init>(Landroidx/compose/foundation/gestures/DefaultDraggableState;)V
-HSPLandroidx/compose/foundation/gestures/DefaultDraggableState$dragScope$1;->dragBy(F)V
-HSPLandroidx/compose/foundation/gestures/DefaultDraggableState;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/foundation/gestures/DefaultDraggableState;->access$getDragScope$p(Landroidx/compose/foundation/gestures/DefaultDraggableState;)Landroidx/compose/foundation/gestures/DragScope;
-HSPLandroidx/compose/foundation/gestures/DefaultDraggableState;->access$getScrollMutex$p(Landroidx/compose/foundation/gestures/DefaultDraggableState;)Landroidx/compose/foundation/MutatorMutex;
-HSPLandroidx/compose/foundation/gestures/DefaultDraggableState;->drag(Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/DefaultDraggableState;->getOnDelta()Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/foundation/gestures/DefaultFlingBehavior;-><init>(Landroidx/compose/animation/core/DecayAnimationSpec;Landroidx/compose/ui/MotionDurationScale;)V
-HSPLandroidx/compose/foundation/gestures/DefaultFlingBehavior;-><init>(Landroidx/compose/animation/core/DecayAnimationSpec;Landroidx/compose/ui/MotionDurationScale;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scrollScope$1;-><init>(Landroidx/compose/foundation/gestures/DefaultScrollableState;)V
-HSPLandroidx/compose/foundation/gestures/DefaultScrollableState;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/foundation/gestures/DragGestureDetectorKt$HorizontalPointerDirectionConfig$1;-><init>()V
-HSPLandroidx/compose/foundation/gestures/DragGestureDetectorKt$VerticalPointerDirectionConfig$1;-><init>()V
-HSPLandroidx/compose/foundation/gestures/DragGestureDetectorKt;-><clinit>()V
-HSPLandroidx/compose/foundation/gestures/DragGestureDetectorKt;->access$isPointerUp-DmW0f2w(Landroidx/compose/ui/input/pointer/PointerEvent;J)Z
-HSPLandroidx/compose/foundation/gestures/DragGestureDetectorKt;->isPointerUp-DmW0f2w(Landroidx/compose/ui/input/pointer/PointerEvent;J)Z
-HSPLandroidx/compose/foundation/gestures/DragGestureDetectorKt;->pointerSlop-E8SPZFQ(Landroidx/compose/ui/platform/ViewConfiguration;I)F
-HSPLandroidx/compose/foundation/gestures/DragGestureDetectorKt;->toPointerDirectionConfig(Landroidx/compose/foundation/gestures/Orientation;)Landroidx/compose/foundation/gestures/PointerDirectionConfig;
-HSPLandroidx/compose/foundation/gestures/DragLogic;-><init>(Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V
-HSPLandroidx/compose/foundation/gestures/DraggableKt$awaitDownAndSlop$1;-><init>(Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/DraggableKt$awaitDownAndSlop$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/DraggableKt$awaitDownAndSlop$postPointerSlop$1;-><init>(Landroidx/compose/ui/input/pointer/util/VelocityTracker;Lkotlin/jvm/internal/Ref$LongRef;)V
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$1;-><init>(Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$3;-><clinit>()V
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$3;-><init>()V
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$3;->invoke(Landroidx/compose/ui/input/pointer/PointerInputChange;)Ljava/lang/Boolean;
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$4;-><init>(Z)V
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$4;->invoke()Ljava/lang/Boolean;
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$4;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$5;-><init>(Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/gestures/Orientation;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$6;-><init>(Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$1$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$1$1$invoke$$inlined$onDispose$1;->dispose()V
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$1$1;-><init>(Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$1$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$2;-><init>(Lkotlinx/coroutines/channels/Channel;Landroidx/compose/foundation/gestures/DraggableState;Landroidx/compose/runtime/State;Landroidx/compose/foundation/gestures/Orientation;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$3$1$1;-><init>(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/foundation/gestures/Orientation;Lkotlinx/coroutines/channels/Channel;ZLkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$3$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$3$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$3$1;-><init>(Landroidx/compose/ui/input/pointer/PointerInputScope;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/foundation/gestures/Orientation;Lkotlinx/coroutines/channels/Channel;ZLkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$3$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$3$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$3$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$3;-><init>(ZLandroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/foundation/gestures/Orientation;Lkotlinx/coroutines/channels/Channel;ZLkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$3;->invoke(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9;-><init>(Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/gestures/DraggableState;Landroidx/compose/foundation/gestures/Orientation;ZZ)V
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/DraggableKt;->DraggableState(Lkotlin/jvm/functions/Function1;)Landroidx/compose/foundation/gestures/DraggableState;
-HSPLandroidx/compose/foundation/gestures/DraggableKt;->access$awaitDownAndSlop(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/ui/input/pointer/util/VelocityTracker;Landroidx/compose/foundation/gestures/Orientation;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/DraggableKt;->awaitDownAndSlop(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/ui/input/pointer/util/VelocityTracker;Landroidx/compose/foundation/gestures/Orientation;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/DraggableKt;->draggable$default(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/DraggableState;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;ZLkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;ZILjava/lang/Object;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/gestures/DraggableKt;->draggable$default(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/DraggableState;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;ZILjava/lang/Object;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/gestures/DraggableKt;->draggable(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/DraggableState;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;ZLkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Z)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/gestures/DraggableKt;->draggable(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/DraggableState;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Z)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/gestures/DraggableState;->drag$default(Landroidx/compose/foundation/gestures/DraggableState;Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/ForEachGestureKt$awaitAllPointersUp$3;-><init>(Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/ForEachGestureKt$awaitEachGesture$2;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/ForEachGestureKt$awaitEachGesture$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/gestures/ForEachGestureKt$awaitEachGesture$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/ForEachGestureKt;->allPointersUp(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;)Z
-HSPLandroidx/compose/foundation/gestures/ForEachGestureKt;->awaitAllPointersUp(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/ForEachGestureKt;->awaitEachGesture(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;-><clinit>()V
-HSPLandroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;-><init>()V
-HSPLandroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
-HSPLandroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;->getValue()Ljava/lang/Boolean;
-HSPLandroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;->getValue()Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/Orientation;->$values()[Landroidx/compose/foundation/gestures/Orientation;
-HSPLandroidx/compose/foundation/gestures/Orientation;-><clinit>()V
-HSPLandroidx/compose/foundation/gestures/Orientation;-><init>(Ljava/lang/String;I)V
-HSPLandroidx/compose/foundation/gestures/Orientation;->values()[Landroidx/compose/foundation/gestures/Orientation;
-HSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl$reset$1;-><init>(Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl$reset$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl$tryAwaitRelease$1;-><init>(Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl$tryAwaitRelease$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl;-><init>(Landroidx/compose/ui/unit/Density;)V
-HSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl;->release()V
-HSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl;->reset(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl;->tryAwaitRelease(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/ScrollDraggableState;-><init>(Landroidx/compose/runtime/State;)V
-HSPLandroidx/compose/foundation/gestures/ScrollableDefaults;-><clinit>()V
-HSPLandroidx/compose/foundation/gestures/ScrollableDefaults;-><init>()V
-HSPLandroidx/compose/foundation/gestures/ScrollableDefaults;->flingBehavior(Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/gestures/FlingBehavior;
-HSPLandroidx/compose/foundation/gestures/ScrollableDefaults;->overscrollEffect(Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/OverscrollEffect;
-HSPLandroidx/compose/foundation/gestures/ScrollableDefaults;->reverseDirection(Landroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/foundation/gestures/Orientation;Z)Z
-HSPLandroidx/compose/foundation/gestures/ScrollableKt$DefaultScrollMotionDurationScale$1;-><init>()V
-HSPLandroidx/compose/foundation/gestures/ScrollableKt$ModifierLocalScrollableContainer$1;-><clinit>()V
-HSPLandroidx/compose/foundation/gestures/ScrollableKt$ModifierLocalScrollableContainer$1;-><init>()V
-HSPLandroidx/compose/foundation/gestures/ScrollableKt$ModifierLocalScrollableContainer$1;->invoke()Ljava/lang/Boolean;
-HSPLandroidx/compose/foundation/gestures/ScrollableKt$ModifierLocalScrollableContainer$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/ScrollableKt$NoOpScrollScope$1;-><init>()V
-HSPLandroidx/compose/foundation/gestures/ScrollableKt$awaitScrollEvent$1;-><init>(Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/ScrollableKt$awaitScrollEvent$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1$1;-><init>(Landroidx/compose/foundation/gestures/ScrollConfig;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1;-><init>(Landroidx/compose/foundation/gestures/ScrollConfig;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1;->invoke(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$1;-><clinit>()V
-HSPLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$1;-><init>()V
-HSPLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$2$1;-><init>(Landroidx/compose/runtime/State;)V
-HSPLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$3$1;-><init>(Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/ScrollableKt$scrollable$2;-><init>(Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/gestures/ScrollableState;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/OverscrollEffect;Z)V
-HSPLandroidx/compose/foundation/gestures/ScrollableKt$scrollable$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/gestures/ScrollableKt$scrollable$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/ScrollableKt$scrollableNestedScrollConnection$1;-><init>(Landroidx/compose/runtime/State;Z)V
-HSPLandroidx/compose/foundation/gestures/ScrollableKt;-><clinit>()V
-HSPLandroidx/compose/foundation/gestures/ScrollableKt;->access$awaitScrollEvent(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/ScrollableKt;->access$getNoOpScrollScope$p()Landroidx/compose/foundation/gestures/ScrollScope;
-HSPLandroidx/compose/foundation/gestures/ScrollableKt;->access$pointerScrollable(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/OverscrollEffect;ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/gestures/ScrollableKt;->access$scrollableNestedScrollConnection(Landroidx/compose/runtime/State;Z)Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;
-HSPLandroidx/compose/foundation/gestures/ScrollableKt;->awaitScrollEvent(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/ScrollableKt;->getDefaultScrollMotionDurationScale()Landroidx/compose/ui/MotionDurationScale;
-HSPLandroidx/compose/foundation/gestures/ScrollableKt;->getModifierLocalScrollableContainer()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
-HSPLandroidx/compose/foundation/gestures/ScrollableKt;->mouseWheelScroll(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/State;Landroidx/compose/foundation/gestures/ScrollConfig;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/gestures/ScrollableKt;->pointerScrollable(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/OverscrollEffect;ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/gestures/ScrollableKt;->scrollable(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/OverscrollEffect;ZZLandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/interaction/MutableInteractionSource;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/gestures/ScrollableKt;->scrollableNestedScrollConnection(Landroidx/compose/runtime/State;Z)Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;
-HSPLandroidx/compose/foundation/gestures/ScrollableStateKt;->ScrollableState(Lkotlin/jvm/functions/Function1;)Landroidx/compose/foundation/gestures/ScrollableState;
-HSPLandroidx/compose/foundation/gestures/ScrollingLogic;-><init>(Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/runtime/State;Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/OverscrollEffect;)V
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$NoPressGesture$1;-><init>(Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$awaitFirstDown$2;-><init>(Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$awaitFirstDown$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$1;-><init>(Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$2;-><init>(Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Landroidx/compose/ui/input/pointer/PointerInputChange;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$4;-><init>(Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$4;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;-><init>(Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;->invoke(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2;-><init>(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2$1;-><init>(Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2$1;->invoke(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2;-><init>(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$waitForUpOrCancellation$2;-><init>(Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$waitForUpOrCancellation$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;-><clinit>()V
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->access$getNoPressGesture$p()Lkotlin/jvm/functions/Function3;
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->awaitFirstDown$default(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;ZLandroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->awaitFirstDown(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;ZLandroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->detectTapAndPress(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->detectTapGestures$default(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->detectTapGestures(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->waitForUpOrCancellation$default(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Landroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->waitForUpOrCancellation(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Landroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState$Companion;-><init>()V
-HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState;-><clinit>()V
-HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState;-><init>()V
-HSPLandroidx/compose/foundation/interaction/InteractionSourceKt;->MutableInteractionSource()Landroidx/compose/foundation/interaction/MutableInteractionSource;
-HSPLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;-><init>()V
-HSPLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;->emit(Landroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;->getInteractions()Lkotlinx/coroutines/flow/Flow;
-HSPLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;->getInteractions()Lkotlinx/coroutines/flow/MutableSharedFlow;
-HSPLandroidx/compose/foundation/interaction/PressInteraction$Press;-><clinit>()V
-HSPLandroidx/compose/foundation/interaction/PressInteraction$Press;-><init>(J)V
-HSPLandroidx/compose/foundation/interaction/PressInteraction$Press;-><init>(JLkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/foundation/interaction/PressInteraction$Press;->getPressPosition-F1C5BW0()J
-HSPLandroidx/compose/foundation/interaction/PressInteraction$Release;-><clinit>()V
-HSPLandroidx/compose/foundation/interaction/PressInteraction$Release;-><init>(Landroidx/compose/foundation/interaction/PressInteraction$Press;)V
-HSPLandroidx/compose/foundation/interaction/PressInteraction$Release;->getPress()Landroidx/compose/foundation/interaction/PressInteraction$Press;
-HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;-><init>(ILjava/lang/String;)V
-HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->getInsets$foundation_layout_release()Landroidx/core/graphics/Insets;
-HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I
-HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I
-HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->getTop(Landroidx/compose/ui/unit/Density;)I
-HSPLandroidx/compose/foundation/layout/Arrangement$Bottom$1;-><init>()V
-HSPLandroidx/compose/foundation/layout/Arrangement$Center$1;-><init>()V
-HSPLandroidx/compose/foundation/layout/Arrangement$Center$1;->arrange(Landroidx/compose/ui/unit/Density;I[ILandroidx/compose/ui/unit/LayoutDirection;[I)V
-HSPLandroidx/compose/foundation/layout/Arrangement$Center$1;->getSpacing-D9Ej5fM()F
-HSPLandroidx/compose/foundation/layout/Arrangement$End$1;-><init>()V
-HSPLandroidx/compose/foundation/layout/Arrangement$End$1;->arrange(Landroidx/compose/ui/unit/Density;I[ILandroidx/compose/ui/unit/LayoutDirection;[I)V
-HSPLandroidx/compose/foundation/layout/Arrangement$Horizontal;->getSpacing-D9Ej5fM()F
-HSPLandroidx/compose/foundation/layout/Arrangement$SpaceAround$1;-><init>()V
-HSPLandroidx/compose/foundation/layout/Arrangement$SpaceBetween$1;-><init>()V
-HSPLandroidx/compose/foundation/layout/Arrangement$SpaceBetween$1;->arrange(Landroidx/compose/ui/unit/Density;I[ILandroidx/compose/ui/unit/LayoutDirection;[I)V
-HSPLandroidx/compose/foundation/layout/Arrangement$SpaceBetween$1;->getSpacing-D9Ej5fM()F
-HSPLandroidx/compose/foundation/layout/Arrangement$SpaceEvenly$1;-><init>()V
-HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;-><init>(FZLkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;-><init>(FZLkotlin/jvm/functions/Function2;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->arrange(Landroidx/compose/ui/unit/Density;I[ILandroidx/compose/ui/unit/LayoutDirection;[I)V
-HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->arrange(Landroidx/compose/ui/unit/Density;I[I[I)V
-HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->getSpacing-D9Ej5fM()F
-HSPLandroidx/compose/foundation/layout/Arrangement$Start$1;-><init>()V
-HSPLandroidx/compose/foundation/layout/Arrangement$Start$1;->arrange(Landroidx/compose/ui/unit/Density;I[ILandroidx/compose/ui/unit/LayoutDirection;[I)V
-HSPLandroidx/compose/foundation/layout/Arrangement$Top$1;-><init>()V
-HSPLandroidx/compose/foundation/layout/Arrangement$Top$1;->arrange(Landroidx/compose/ui/unit/Density;I[I[I)V
-HSPLandroidx/compose/foundation/layout/Arrangement$Vertical;->getSpacing-D9Ej5fM()F
-HSPLandroidx/compose/foundation/layout/Arrangement$spacedBy$1;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/Arrangement$spacedBy$1;-><init>()V
-HSPLandroidx/compose/foundation/layout/Arrangement;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/Arrangement;-><init>()V
-HSPLandroidx/compose/foundation/layout/Arrangement;->getCenter()Landroidx/compose/foundation/layout/Arrangement$HorizontalOrVertical;
-HSPLandroidx/compose/foundation/layout/Arrangement;->getEnd()Landroidx/compose/foundation/layout/Arrangement$Horizontal;
-HSPLandroidx/compose/foundation/layout/Arrangement;->getSpaceBetween()Landroidx/compose/foundation/layout/Arrangement$HorizontalOrVertical;
-HSPLandroidx/compose/foundation/layout/Arrangement;->getStart()Landroidx/compose/foundation/layout/Arrangement$Horizontal;
-HSPLandroidx/compose/foundation/layout/Arrangement;->getTop()Landroidx/compose/foundation/layout/Arrangement$Vertical;
-HSPLandroidx/compose/foundation/layout/Arrangement;->placeCenter$foundation_layout_release(I[I[IZ)V
-HSPLandroidx/compose/foundation/layout/Arrangement;->placeLeftOrTop$foundation_layout_release([I[IZ)V
-HSPLandroidx/compose/foundation/layout/Arrangement;->placeRightOrBottom$foundation_layout_release(I[I[IZ)V
-HSPLandroidx/compose/foundation/layout/Arrangement;->placeSpaceBetween$foundation_layout_release(I[I[IZ)V
-HSPLandroidx/compose/foundation/layout/Arrangement;->spacedBy-0680j_4(F)Landroidx/compose/foundation/layout/Arrangement$HorizontalOrVertical;
-HSPLandroidx/compose/foundation/layout/BoxChildData;-><init>(Landroidx/compose/ui/Alignment;ZLkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/foundation/layout/BoxChildData;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/foundation/layout/BoxChildData;->getAlignment()Landroidx/compose/ui/Alignment;
-HSPLandroidx/compose/foundation/layout/BoxChildData;->getMatchParentSize()Z
-HSPLandroidx/compose/foundation/layout/BoxChildData;->modifyParentData(Landroidx/compose/ui/unit/Density;Ljava/lang/Object;)Landroidx/compose/foundation/layout/BoxChildData;
-HSPLandroidx/compose/foundation/layout/BoxChildData;->modifyParentData(Landroidx/compose/ui/unit/Density;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1$measure$1;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1$measure$1;-><init>()V
-HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
-HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1;-><init>()V
-HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$2;-><init>(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/Measurable;Landroidx/compose/ui/layout/MeasureScope;IILandroidx/compose/ui/Alignment;)V
-HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$2;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
-HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$5;-><init>([Landroidx/compose/ui/layout/Placeable;Ljava/util/List;Landroidx/compose/ui/layout/MeasureScope;Lkotlin/jvm/internal/Ref$IntRef;Lkotlin/jvm/internal/Ref$IntRef;Landroidx/compose/ui/Alignment;)V
-HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$5;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
-HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$5;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1;-><init>(ZLandroidx/compose/ui/Alignment;)V
-HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/foundation/layout/BoxKt;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/BoxKt;->Box(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/foundation/layout/BoxKt;->access$getMatchesParentSize(Landroidx/compose/ui/layout/Measurable;)Z
-HSPLandroidx/compose/foundation/layout/BoxKt;->access$placeInBox(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/Measurable;Landroidx/compose/ui/unit/LayoutDirection;IILandroidx/compose/ui/Alignment;)V
-HSPLandroidx/compose/foundation/layout/BoxKt;->boxMeasurePolicy(Landroidx/compose/ui/Alignment;Z)Landroidx/compose/ui/layout/MeasurePolicy;
-HSPLandroidx/compose/foundation/layout/BoxKt;->getBoxChildData(Landroidx/compose/ui/layout/Measurable;)Landroidx/compose/foundation/layout/BoxChildData;
-HSPLandroidx/compose/foundation/layout/BoxKt;->getMatchesParentSize(Landroidx/compose/ui/layout/Measurable;)Z
-HSPLandroidx/compose/foundation/layout/BoxKt;->placeInBox(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/Measurable;Landroidx/compose/ui/unit/LayoutDirection;IILandroidx/compose/ui/Alignment;)V
-HSPLandroidx/compose/foundation/layout/BoxKt;->rememberBoxMeasurePolicy(Landroidx/compose/ui/Alignment;ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/ui/layout/MeasurePolicy;
-HSPLandroidx/compose/foundation/layout/BoxScopeInstance;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/BoxScopeInstance;-><init>()V
-HSPLandroidx/compose/foundation/layout/BoxScopeInstance;->align(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Alignment;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/layout/BoxWithConstraintsKt$BoxWithConstraints$1$1$measurables$1;-><init>(Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/BoxWithConstraintsScopeImpl;I)V
-HSPLandroidx/compose/foundation/layout/BoxWithConstraintsKt$BoxWithConstraints$1$1$measurables$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/foundation/layout/BoxWithConstraintsKt$BoxWithConstraints$1$1$measurables$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/layout/BoxWithConstraintsKt$BoxWithConstraints$1$1;-><init>(Landroidx/compose/ui/layout/MeasurePolicy;Lkotlin/jvm/functions/Function3;I)V
-HSPLandroidx/compose/foundation/layout/BoxWithConstraintsKt$BoxWithConstraints$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/layout/BoxWithConstraintsKt$BoxWithConstraints$1$1;->invoke-0kLqBqw(Landroidx/compose/ui/layout/SubcomposeMeasureScope;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/foundation/layout/BoxWithConstraintsKt;->BoxWithConstraints(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Alignment;ZLkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
-HSPLandroidx/compose/foundation/layout/BoxWithConstraintsScopeImpl;-><init>(Landroidx/compose/ui/unit/Density;J)V
-HSPLandroidx/compose/foundation/layout/BoxWithConstraintsScopeImpl;-><init>(Landroidx/compose/ui/unit/Density;JLkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/foundation/layout/BoxWithConstraintsScopeImpl;->align(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Alignment;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/layout/BoxWithConstraintsScopeImpl;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/foundation/layout/BoxWithConstraintsScopeImpl;->getConstraints-msEJaDk()J
-HSPLandroidx/compose/foundation/layout/BoxWithConstraintsScopeImpl;->getMaxHeight-D9Ej5fM()F
-HSPLandroidx/compose/foundation/layout/BoxWithConstraintsScopeImpl;->getMaxWidth-D9Ej5fM()F
-HSPLandroidx/compose/foundation/layout/ColumnKt$DefaultColumnMeasurePolicy$1;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/ColumnKt$DefaultColumnMeasurePolicy$1;-><init>()V
-HSPLandroidx/compose/foundation/layout/ColumnKt$DefaultColumnMeasurePolicy$1;->invoke(I[ILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;[I)V
-HSPLandroidx/compose/foundation/layout/ColumnKt$DefaultColumnMeasurePolicy$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/layout/ColumnKt$columnMeasurePolicy$1$1;-><init>(Landroidx/compose/foundation/layout/Arrangement$Vertical;)V
-HSPLandroidx/compose/foundation/layout/ColumnKt$columnMeasurePolicy$1$1;->invoke(I[ILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;[I)V
-HSPLandroidx/compose/foundation/layout/ColumnKt$columnMeasurePolicy$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/layout/ColumnKt;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/ColumnKt;->columnMeasurePolicy(Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/layout/MeasurePolicy;
-HSPLandroidx/compose/foundation/layout/ColumnScopeInstance;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/ColumnScopeInstance;-><init>()V
-HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$CenterCrossAxisAlignment;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$CenterCrossAxisAlignment;-><init>()V
-HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$Companion;-><init>()V
-HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$Companion;->horizontal$foundation_layout_release(Landroidx/compose/ui/Alignment$Horizontal;)Landroidx/compose/foundation/layout/CrossAxisAlignment;
-HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$Companion;->vertical$foundation_layout_release(Landroidx/compose/ui/Alignment$Vertical;)Landroidx/compose/foundation/layout/CrossAxisAlignment;
-HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$EndCrossAxisAlignment;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$EndCrossAxisAlignment;-><init>()V
-HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$HorizontalCrossAxisAlignment;-><init>(Landroidx/compose/ui/Alignment$Horizontal;)V
-HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$HorizontalCrossAxisAlignment;->align$foundation_layout_release(ILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/layout/Placeable;I)I
-HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$StartCrossAxisAlignment;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$StartCrossAxisAlignment;-><init>()V
-HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$VerticalCrossAxisAlignment;-><init>(Landroidx/compose/ui/Alignment$Vertical;)V
-HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$VerticalCrossAxisAlignment;->align$foundation_layout_release(ILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/layout/Placeable;I)I
-HSPLandroidx/compose/foundation/layout/CrossAxisAlignment;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/CrossAxisAlignment;-><init>()V
-HSPLandroidx/compose/foundation/layout/CrossAxisAlignment;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/foundation/layout/Direction;->$values()[Landroidx/compose/foundation/layout/Direction;
-HSPLandroidx/compose/foundation/layout/Direction;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/Direction;-><init>(Ljava/lang/String;I)V
-HSPLandroidx/compose/foundation/layout/ExcludeInsets;-><init>(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)V
-HSPLandroidx/compose/foundation/layout/ExcludeInsets;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/foundation/layout/ExcludeInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I
-HSPLandroidx/compose/foundation/layout/ExcludeInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I
-HSPLandroidx/compose/foundation/layout/ExcludeInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I
-HSPLandroidx/compose/foundation/layout/ExcludeInsets;->getTop(Landroidx/compose/ui/unit/Density;)I
-HSPLandroidx/compose/foundation/layout/FillModifier$measure$1;-><init>(Landroidx/compose/ui/layout/Placeable;)V
-HSPLandroidx/compose/foundation/layout/FillModifier$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
-HSPLandroidx/compose/foundation/layout/FillModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/layout/FillModifier;-><init>(Landroidx/compose/foundation/layout/Direction;FLkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/foundation/layout/FillModifier;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/foundation/layout/FillModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/foundation/layout/FixedIntInsets;-><init>(IIII)V
-HSPLandroidx/compose/foundation/layout/FixedIntInsets;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/foundation/layout/FixedIntInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I
-HSPLandroidx/compose/foundation/layout/FixedIntInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I
-HSPLandroidx/compose/foundation/layout/FixedIntInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I
-HSPLandroidx/compose/foundation/layout/FixedIntInsets;->getTop(Landroidx/compose/ui/unit/Density;)I
-HSPLandroidx/compose/foundation/layout/InsetsListener;-><init>(Landroidx/compose/foundation/layout/WindowInsetsHolder;)V
-HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier$measure$1;-><init>(Landroidx/compose/ui/layout/Placeable;II)V
-HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
-HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;-><init>(Landroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
-HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->getUnconsumedInsets()Landroidx/compose/foundation/layout/WindowInsets;
-HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V
-HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->setConsumedInsets(Landroidx/compose/foundation/layout/WindowInsets;)V
-HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->setUnconsumedInsets(Landroidx/compose/foundation/layout/WindowInsets;)V
-HSPLandroidx/compose/foundation/layout/InsetsValues;-><init>(IIII)V
-HSPLandroidx/compose/foundation/layout/LayoutOrientation;->$values()[Landroidx/compose/foundation/layout/LayoutOrientation;
-HSPLandroidx/compose/foundation/layout/LayoutOrientation;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/LayoutOrientation;-><init>(Ljava/lang/String;I)V
-HSPLandroidx/compose/foundation/layout/LayoutWeightImpl;-><init>(FZLkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/foundation/layout/LayoutWeightImpl;->modifyParentData(Landroidx/compose/ui/unit/Density;Ljava/lang/Object;)Landroidx/compose/foundation/layout/RowColumnParentData;
-HSPLandroidx/compose/foundation/layout/LayoutWeightImpl;->modifyParentData(Landroidx/compose/ui/unit/Density;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/layout/LimitInsets;-><init>(Landroidx/compose/foundation/layout/WindowInsets;I)V
-HSPLandroidx/compose/foundation/layout/LimitInsets;-><init>(Landroidx/compose/foundation/layout/WindowInsets;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/foundation/layout/LimitInsets;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/foundation/layout/LimitInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I
-HSPLandroidx/compose/foundation/layout/LimitInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I
-HSPLandroidx/compose/foundation/layout/LimitInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I
-HSPLandroidx/compose/foundation/layout/LimitInsets;->getTop(Landroidx/compose/ui/unit/Density;)I
-HSPLandroidx/compose/foundation/layout/OffsetKt;->offset(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/layout/OffsetPxModifier$measure$1;-><init>(Landroidx/compose/foundation/layout/OffsetPxModifier;Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Placeable;)V
-HSPLandroidx/compose/foundation/layout/OffsetPxModifier$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
-HSPLandroidx/compose/foundation/layout/OffsetPxModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/layout/OffsetPxModifier;-><init>(Lkotlin/jvm/functions/Function1;ZLkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/foundation/layout/OffsetPxModifier;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/foundation/layout/OffsetPxModifier;->getOffset()Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/foundation/layout/OffsetPxModifier;->getRtlAware()Z
-HSPLandroidx/compose/foundation/layout/OffsetPxModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/foundation/layout/OrientationIndependentConstraints;-><init>(IIII)V
-HSPLandroidx/compose/foundation/layout/OrientationIndependentConstraints;-><init>(JLandroidx/compose/foundation/layout/LayoutOrientation;)V
-HSPLandroidx/compose/foundation/layout/OrientationIndependentConstraints;-><init>(JLandroidx/compose/foundation/layout/LayoutOrientation;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/foundation/layout/OrientationIndependentConstraints;->copy$default(Landroidx/compose/foundation/layout/OrientationIndependentConstraints;IIIIILjava/lang/Object;)Landroidx/compose/foundation/layout/OrientationIndependentConstraints;
-HSPLandroidx/compose/foundation/layout/OrientationIndependentConstraints;->copy(IIII)Landroidx/compose/foundation/layout/OrientationIndependentConstraints;
-HSPLandroidx/compose/foundation/layout/OrientationIndependentConstraints;->getCrossAxisMax()I
-HSPLandroidx/compose/foundation/layout/OrientationIndependentConstraints;->getCrossAxisMin()I
-HSPLandroidx/compose/foundation/layout/OrientationIndependentConstraints;->getMainAxisMax()I
-HSPLandroidx/compose/foundation/layout/OrientationIndependentConstraints;->getMainAxisMin()I
-HSPLandroidx/compose/foundation/layout/OrientationIndependentConstraints;->toBoxConstraints-OenEA2s(Landroidx/compose/foundation/layout/LayoutOrientation;)J
-HSPLandroidx/compose/foundation/layout/PaddingKt;->PaddingValues-0680j_4(F)Landroidx/compose/foundation/layout/PaddingValues;
-HSPLandroidx/compose/foundation/layout/PaddingKt;->PaddingValues-YgX7TsA$default(FFILjava/lang/Object;)Landroidx/compose/foundation/layout/PaddingValues;
-HSPLandroidx/compose/foundation/layout/PaddingKt;->PaddingValues-YgX7TsA(FF)Landroidx/compose/foundation/layout/PaddingValues;
-HSPLandroidx/compose/foundation/layout/PaddingKt;->PaddingValues-a9UjIt4(FFFF)Landroidx/compose/foundation/layout/PaddingValues;
-HSPLandroidx/compose/foundation/layout/PaddingKt;->padding(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/PaddingValues;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/layout/PaddingKt;->padding-VpY3zN4$default(Landroidx/compose/ui/Modifier;FFILjava/lang/Object;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/layout/PaddingKt;->padding-VpY3zN4(Landroidx/compose/ui/Modifier;FF)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/layout/PaddingKt;->padding-qDBjuR0$default(Landroidx/compose/ui/Modifier;FFFFILjava/lang/Object;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/layout/PaddingKt;->padding-qDBjuR0(Landroidx/compose/ui/Modifier;FFFF)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/layout/PaddingModifier$measure$1;-><init>(Landroidx/compose/foundation/layout/PaddingModifier;Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/MeasureScope;)V
-HSPLandroidx/compose/foundation/layout/PaddingModifier$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
-HSPLandroidx/compose/foundation/layout/PaddingModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/layout/PaddingModifier;-><init>(FFFFZLkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/foundation/layout/PaddingModifier;-><init>(FFFFZLkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/foundation/layout/PaddingModifier;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/foundation/layout/PaddingModifier;->getRtlAware()Z
-HSPLandroidx/compose/foundation/layout/PaddingModifier;->getStart-D9Ej5fM()F
-HSPLandroidx/compose/foundation/layout/PaddingModifier;->getTop-D9Ej5fM()F
-HSPLandroidx/compose/foundation/layout/PaddingModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/foundation/layout/PaddingValuesImpl;-><init>(FFFF)V
-HSPLandroidx/compose/foundation/layout/PaddingValuesImpl;-><init>(FFFFLkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/foundation/layout/PaddingValuesImpl;->calculateBottomPadding-D9Ej5fM()F
-HSPLandroidx/compose/foundation/layout/PaddingValuesImpl;->calculateLeftPadding-u2uoSUM(Landroidx/compose/ui/unit/LayoutDirection;)F
-HSPLandroidx/compose/foundation/layout/PaddingValuesImpl;->calculateRightPadding-u2uoSUM(Landroidx/compose/ui/unit/LayoutDirection;)F
-HSPLandroidx/compose/foundation/layout/PaddingValuesImpl;->calculateTopPadding-D9Ej5fM()F
-HSPLandroidx/compose/foundation/layout/PaddingValuesImpl;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/foundation/layout/PaddingValuesModifier$measure$2;-><init>(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/foundation/layout/PaddingValuesModifier;)V
-HSPLandroidx/compose/foundation/layout/PaddingValuesModifier$measure$2;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
-HSPLandroidx/compose/foundation/layout/PaddingValuesModifier$measure$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/layout/PaddingValuesModifier;-><init>(Landroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/foundation/layout/PaddingValuesModifier;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/foundation/layout/PaddingValuesModifier;->getPaddingValues()Landroidx/compose/foundation/layout/PaddingValues;
-HSPLandroidx/compose/foundation/layout/PaddingValuesModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1$measure$1;-><init>(Landroidx/compose/foundation/layout/RowColumnMeasurementHelper;Landroidx/compose/foundation/layout/RowColumnMeasureHelperResult;Landroidx/compose/ui/layout/MeasureScope;)V
-HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
-HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1;-><init>(Landroidx/compose/foundation/layout/LayoutOrientation;Lkotlin/jvm/functions/Function5;FLandroidx/compose/foundation/layout/SizeMode;Landroidx/compose/foundation/layout/CrossAxisAlignment;)V
-HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/foundation/layout/RowColumnImplKt;->getCrossAxisAlignment(Landroidx/compose/foundation/layout/RowColumnParentData;)Landroidx/compose/foundation/layout/CrossAxisAlignment;
-HSPLandroidx/compose/foundation/layout/RowColumnImplKt;->getFill(Landroidx/compose/foundation/layout/RowColumnParentData;)Z
-HSPLandroidx/compose/foundation/layout/RowColumnImplKt;->getRowColumnParentData(Landroidx/compose/ui/layout/IntrinsicMeasurable;)Landroidx/compose/foundation/layout/RowColumnParentData;
-HSPLandroidx/compose/foundation/layout/RowColumnImplKt;->getWeight(Landroidx/compose/foundation/layout/RowColumnParentData;)F
-HSPLandroidx/compose/foundation/layout/RowColumnImplKt;->isRelative(Landroidx/compose/foundation/layout/RowColumnParentData;)Z
-HSPLandroidx/compose/foundation/layout/RowColumnImplKt;->rowColumnMeasurePolicy-TDGSqEk(Landroidx/compose/foundation/layout/LayoutOrientation;Lkotlin/jvm/functions/Function5;FLandroidx/compose/foundation/layout/SizeMode;Landroidx/compose/foundation/layout/CrossAxisAlignment;)Landroidx/compose/ui/layout/MeasurePolicy;
-HSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;-><init>(IIIII[I)V
-HSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->getBeforeCrossAxisAlignmentLine()I
-HSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->getCrossAxisSize()I
-HSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->getEndIndex()I
-HSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->getMainAxisPositions()[I
-HSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->getMainAxisSize()I
-HSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->getStartIndex()I
-HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;-><init>(Landroidx/compose/foundation/layout/LayoutOrientation;Lkotlin/jvm/functions/Function5;FLandroidx/compose/foundation/layout/SizeMode;Landroidx/compose/foundation/layout/CrossAxisAlignment;Ljava/util/List;[Landroidx/compose/ui/layout/Placeable;)V
-HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;-><init>(Landroidx/compose/foundation/layout/LayoutOrientation;Lkotlin/jvm/functions/Function5;FLandroidx/compose/foundation/layout/SizeMode;Landroidx/compose/foundation/layout/CrossAxisAlignment;Ljava/util/List;[Landroidx/compose/ui/layout/Placeable;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->crossAxisSize(Landroidx/compose/ui/layout/Placeable;)I
-HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->getCrossAxisPosition(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/foundation/layout/RowColumnParentData;ILandroidx/compose/ui/unit/LayoutDirection;I)I
-HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->mainAxisPositions(I[I[ILandroidx/compose/ui/layout/MeasureScope;)[I
-HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->mainAxisSize(Landroidx/compose/ui/layout/Placeable;)I
-HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->measureWithoutPlacing-_EkL_-Y(Landroidx/compose/ui/layout/MeasureScope;JII)Landroidx/compose/foundation/layout/RowColumnMeasureHelperResult;
-HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->placeHelper(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/foundation/layout/RowColumnMeasureHelperResult;ILandroidx/compose/ui/unit/LayoutDirection;)V
-HSPLandroidx/compose/foundation/layout/RowColumnParentData;-><init>(FZLandroidx/compose/foundation/layout/CrossAxisAlignment;)V
-HSPLandroidx/compose/foundation/layout/RowColumnParentData;-><init>(FZLandroidx/compose/foundation/layout/CrossAxisAlignment;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/foundation/layout/RowColumnParentData;->getCrossAxisAlignment()Landroidx/compose/foundation/layout/CrossAxisAlignment;
-HSPLandroidx/compose/foundation/layout/RowColumnParentData;->getFill()Z
-HSPLandroidx/compose/foundation/layout/RowColumnParentData;->getWeight()F
-HSPLandroidx/compose/foundation/layout/RowColumnParentData;->setFill(Z)V
-HSPLandroidx/compose/foundation/layout/RowColumnParentData;->setWeight(F)V
-HSPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;-><init>()V
-HSPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;->invoke(I[ILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;[I)V
-HSPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;-><init>(Landroidx/compose/foundation/layout/Arrangement$Horizontal;)V
-HSPLandroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;->invoke(I[ILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;[I)V
-HSPLandroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/layout/RowKt;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/RowKt;->rowMeasurePolicy(Landroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/layout/MeasurePolicy;
-HSPLandroidx/compose/foundation/layout/RowScope;->weight$default(Landroidx/compose/foundation/layout/RowScope;Landroidx/compose/ui/Modifier;FZILjava/lang/Object;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/layout/RowScopeInstance;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/RowScopeInstance;-><init>()V
-HSPLandroidx/compose/foundation/layout/RowScopeInstance;->weight(Landroidx/compose/ui/Modifier;FZ)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/layout/SizeKt$createFillHeightModifier$1;-><init>(F)V
-HSPLandroidx/compose/foundation/layout/SizeKt$createFillSizeModifier$1;-><init>(F)V
-HSPLandroidx/compose/foundation/layout/SizeKt$createFillWidthModifier$1;-><init>(F)V
-HSPLandroidx/compose/foundation/layout/SizeKt$createWrapContentHeightModifier$1;-><init>(Landroidx/compose/ui/Alignment$Vertical;)V
-HSPLandroidx/compose/foundation/layout/SizeKt$createWrapContentHeightModifier$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/layout/SizeKt$createWrapContentHeightModifier$1;->invoke-5SAbXVA(JLandroidx/compose/ui/unit/LayoutDirection;)J
-HSPLandroidx/compose/foundation/layout/SizeKt$createWrapContentHeightModifier$2;-><init>(Landroidx/compose/ui/Alignment$Vertical;Z)V
-HSPLandroidx/compose/foundation/layout/SizeKt$createWrapContentSizeModifier$1;-><init>(Landroidx/compose/ui/Alignment;)V
-HSPLandroidx/compose/foundation/layout/SizeKt$createWrapContentSizeModifier$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/layout/SizeKt$createWrapContentSizeModifier$1;->invoke-5SAbXVA(JLandroidx/compose/ui/unit/LayoutDirection;)J
-HSPLandroidx/compose/foundation/layout/SizeKt$createWrapContentSizeModifier$2;-><init>(Landroidx/compose/ui/Alignment;Z)V
-HSPLandroidx/compose/foundation/layout/SizeKt$createWrapContentWidthModifier$1;-><init>(Landroidx/compose/ui/Alignment$Horizontal;)V
-HSPLandroidx/compose/foundation/layout/SizeKt$createWrapContentWidthModifier$2;-><init>(Landroidx/compose/ui/Alignment$Horizontal;Z)V
-HSPLandroidx/compose/foundation/layout/SizeKt;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/SizeKt;->createFillHeightModifier(F)Landroidx/compose/foundation/layout/FillModifier;
-HSPLandroidx/compose/foundation/layout/SizeKt;->createFillSizeModifier(F)Landroidx/compose/foundation/layout/FillModifier;
-HSPLandroidx/compose/foundation/layout/SizeKt;->createFillWidthModifier(F)Landroidx/compose/foundation/layout/FillModifier;
-HSPLandroidx/compose/foundation/layout/SizeKt;->createWrapContentHeightModifier(Landroidx/compose/ui/Alignment$Vertical;Z)Landroidx/compose/foundation/layout/WrapContentModifier;
-HSPLandroidx/compose/foundation/layout/SizeKt;->createWrapContentSizeModifier(Landroidx/compose/ui/Alignment;Z)Landroidx/compose/foundation/layout/WrapContentModifier;
-HSPLandroidx/compose/foundation/layout/SizeKt;->createWrapContentWidthModifier(Landroidx/compose/ui/Alignment$Horizontal;Z)Landroidx/compose/foundation/layout/WrapContentModifier;
-HSPLandroidx/compose/foundation/layout/SizeKt;->defaultMinSize-VpY3zN4$default(Landroidx/compose/ui/Modifier;FFILjava/lang/Object;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/layout/SizeKt;->defaultMinSize-VpY3zN4(Landroidx/compose/ui/Modifier;FF)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/layout/SizeKt;->fillMaxSize$default(Landroidx/compose/ui/Modifier;FILjava/lang/Object;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/layout/SizeKt;->fillMaxSize(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/layout/SizeKt;->fillMaxWidth$default(Landroidx/compose/ui/Modifier;FILjava/lang/Object;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/layout/SizeKt;->fillMaxWidth(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/layout/SizeKt;->heightIn-VpY3zN4$default(Landroidx/compose/ui/Modifier;FFILjava/lang/Object;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/layout/SizeKt;->heightIn-VpY3zN4(Landroidx/compose/ui/Modifier;FF)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/layout/SizeKt;->size-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/layout/SizeKt;->sizeIn-qDBjuR0$default(Landroidx/compose/ui/Modifier;FFFFILjava/lang/Object;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/layout/SizeKt;->sizeIn-qDBjuR0(Landroidx/compose/ui/Modifier;FFFF)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/layout/SizeKt;->width-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/layout/SizeKt;->wrapContentHeight$default(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Alignment$Vertical;ZILjava/lang/Object;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/layout/SizeKt;->wrapContentHeight(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Alignment$Vertical;Z)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/layout/SizeKt;->wrapContentSize$default(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Alignment;ZILjava/lang/Object;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/layout/SizeKt;->wrapContentSize(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Alignment;Z)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/layout/SizeMode;->$values()[Landroidx/compose/foundation/layout/SizeMode;
-HSPLandroidx/compose/foundation/layout/SizeMode;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/SizeMode;-><init>(Ljava/lang/String;I)V
-HSPLandroidx/compose/foundation/layout/SizeModifier$measure$1;-><init>(Landroidx/compose/ui/layout/Placeable;)V
-HSPLandroidx/compose/foundation/layout/SizeModifier$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
-HSPLandroidx/compose/foundation/layout/SizeModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/layout/SizeModifier;-><init>(FFFFZLkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/foundation/layout/SizeModifier;-><init>(FFFFZLkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/foundation/layout/SizeModifier;-><init>(FFFFZLkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/foundation/layout/SizeModifier;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/foundation/layout/SizeModifier;->getTargetConstraints-OenEA2s(Landroidx/compose/ui/unit/Density;)J
-HSPLandroidx/compose/foundation/layout/SizeModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/foundation/layout/SpacerKt;->Spacer(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy$measure$1$1;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy$measure$1$1;-><init>()V
-HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy$measure$1$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
-HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy$measure$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy;-><init>()V
-HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/foundation/layout/UnionInsets;-><init>(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)V
-HSPLandroidx/compose/foundation/layout/UnionInsets;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsModifier$measure$1;-><init>(Landroidx/compose/ui/layout/Placeable;)V
-HSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsModifier$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
-HSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsModifier;-><init>(FFLkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsModifier;-><init>(FFLkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsModifier;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/foundation/layout/ValueInsets;-><init>(Landroidx/compose/foundation/layout/InsetsValues;Ljava/lang/String;)V
-HSPLandroidx/compose/foundation/layout/WindowInsets$Companion;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/WindowInsets$Companion;-><init>()V
-HSPLandroidx/compose/foundation/layout/WindowInsets;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/foundation/layout/WindowInsetsHolder;Landroid/view/View;)V
-HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1$invoke$$inlined$onDispose$1;->dispose()V
-HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1;-><init>(Landroidx/compose/foundation/layout/WindowInsetsHolder;Landroid/view/View;)V
-HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;
-HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion;-><init>()V
-HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion;->access$systemInsets(Landroidx/compose/foundation/layout/WindowInsetsHolder$Companion;Landroidx/core/view/WindowInsetsCompat;ILjava/lang/String;)Landroidx/compose/foundation/layout/AndroidWindowInsets;
-HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion;->access$valueInsetsIgnoringVisibility(Landroidx/compose/foundation/layout/WindowInsetsHolder$Companion;Landroidx/core/view/WindowInsetsCompat;ILjava/lang/String;)Landroidx/compose/foundation/layout/ValueInsets;
-HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion;->current(Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/layout/WindowInsetsHolder;
-HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion;->getOrCreateFor(Landroid/view/View;)Landroidx/compose/foundation/layout/WindowInsetsHolder;
-HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion;->systemInsets(Landroidx/core/view/WindowInsetsCompat;ILjava/lang/String;)Landroidx/compose/foundation/layout/AndroidWindowInsets;
-HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion;->valueInsetsIgnoringVisibility(Landroidx/core/view/WindowInsetsCompat;ILjava/lang/String;)Landroidx/compose/foundation/layout/ValueInsets;
-HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;-><init>(Landroidx/core/view/WindowInsetsCompat;Landroid/view/View;)V
-HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;-><init>(Landroidx/core/view/WindowInsetsCompat;Landroid/view/View;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->access$getViewMap$cp()Ljava/util/WeakHashMap;
-HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->decrementAccessors(Landroid/view/View;)V
-HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->getConsumes()Z
-HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->getSystemBars()Landroidx/compose/foundation/layout/AndroidWindowInsets;
-HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->incrementAccessors(Landroid/view/View;)V
-HSPLandroidx/compose/foundation/layout/WindowInsetsKt;->WindowInsets(IIII)Landroidx/compose/foundation/layout/WindowInsets;
-HSPLandroidx/compose/foundation/layout/WindowInsetsKt;->exclude(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)Landroidx/compose/foundation/layout/WindowInsets;
-HSPLandroidx/compose/foundation/layout/WindowInsetsKt;->only-bOOhFvg(Landroidx/compose/foundation/layout/WindowInsets;I)Landroidx/compose/foundation/layout/WindowInsets;
-HSPLandroidx/compose/foundation/layout/WindowInsetsKt;->union(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)Landroidx/compose/foundation/layout/WindowInsets;
-HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$ModifierLocalConsumedWindowInsets$1;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$ModifierLocalConsumedWindowInsets$1;-><init>()V
-HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$ModifierLocalConsumedWindowInsets$1;->invoke()Landroidx/compose/foundation/layout/WindowInsets;
-HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$ModifierLocalConsumedWindowInsets$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt;->getModifierLocalConsumedWindowInsets()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
-HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt;->windowInsetsPadding(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/WindowInsets;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/layout/WindowInsetsSides$Companion;-><init>()V
-HSPLandroidx/compose/foundation/layout/WindowInsetsSides$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/foundation/layout/WindowInsetsSides$Companion;->getAllowLeftInLtr-JoeWqyM$foundation_layout_release()I
-HSPLandroidx/compose/foundation/layout/WindowInsetsSides$Companion;->getAllowRightInLtr-JoeWqyM$foundation_layout_release()I
-HSPLandroidx/compose/foundation/layout/WindowInsetsSides$Companion;->getBottom-JoeWqyM()I
-HSPLandroidx/compose/foundation/layout/WindowInsetsSides$Companion;->getHorizontal-JoeWqyM()I
-HSPLandroidx/compose/foundation/layout/WindowInsetsSides$Companion;->getTop-JoeWqyM()I
-HSPLandroidx/compose/foundation/layout/WindowInsetsSides;-><clinit>()V
-HSPLandroidx/compose/foundation/layout/WindowInsetsSides;->access$getAllowLeftInLtr$cp()I
-HSPLandroidx/compose/foundation/layout/WindowInsetsSides;->access$getAllowRightInLtr$cp()I
-HSPLandroidx/compose/foundation/layout/WindowInsetsSides;->access$getBottom$cp()I
-HSPLandroidx/compose/foundation/layout/WindowInsetsSides;->access$getHorizontal$cp()I
-HSPLandroidx/compose/foundation/layout/WindowInsetsSides;->access$getTop$cp()I
-HSPLandroidx/compose/foundation/layout/WindowInsetsSides;->constructor-impl(I)I
-HSPLandroidx/compose/foundation/layout/WindowInsetsSides;->hasAny-bkgdKaI$foundation_layout_release(II)Z
-HSPLandroidx/compose/foundation/layout/WindowInsetsSides;->plus-gK_yJZ4(II)I
-HSPLandroidx/compose/foundation/layout/WindowInsets_androidKt;->ValueInsets(Landroidx/core/graphics/Insets;Ljava/lang/String;)Landroidx/compose/foundation/layout/ValueInsets;
-HSPLandroidx/compose/foundation/layout/WindowInsets_androidKt;->getSystemBars(Landroidx/compose/foundation/layout/WindowInsets$Companion;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/layout/WindowInsets;
-HSPLandroidx/compose/foundation/layout/WindowInsets_androidKt;->toInsetsValues(Landroidx/core/graphics/Insets;)Landroidx/compose/foundation/layout/InsetsValues;
-HSPLandroidx/compose/foundation/layout/WrapContentModifier$measure$1;-><init>(Landroidx/compose/foundation/layout/WrapContentModifier;ILandroidx/compose/ui/layout/Placeable;ILandroidx/compose/ui/layout/MeasureScope;)V
-HSPLandroidx/compose/foundation/layout/WrapContentModifier$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
-HSPLandroidx/compose/foundation/layout/WrapContentModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/layout/WrapContentModifier;-><init>(Landroidx/compose/foundation/layout/Direction;ZLkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/foundation/layout/WrapContentModifier;->access$getAlignmentCallback$p(Landroidx/compose/foundation/layout/WrapContentModifier;)Lkotlin/jvm/functions/Function2;
-HSPLandroidx/compose/foundation/layout/WrapContentModifier;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/foundation/layout/WrapContentModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/foundation/lazy/AwaitFirstLayoutModifier;-><init>()V
-HSPLandroidx/compose/foundation/lazy/AwaitFirstLayoutModifier;->onGloballyPositioned(Landroidx/compose/ui/layout/LayoutCoordinates;)V
-HSPLandroidx/compose/foundation/lazy/DataIndex;-><init>(I)V
-HSPLandroidx/compose/foundation/lazy/DataIndex;->box-impl(I)Landroidx/compose/foundation/lazy/DataIndex;
-HSPLandroidx/compose/foundation/lazy/DataIndex;->constructor-impl(I)I
-HSPLandroidx/compose/foundation/lazy/DataIndex;->equals-impl0(II)Z
-HSPLandroidx/compose/foundation/lazy/DataIndex;->unbox-impl()I
-HSPLandroidx/compose/foundation/lazy/EmptyLazyListLayoutInfo;-><clinit>()V
-HSPLandroidx/compose/foundation/lazy/EmptyLazyListLayoutInfo;-><init>()V
-HSPLandroidx/compose/foundation/lazy/LazyBeyondBoundsModifierKt;->lazyListBeyondBoundsModifier(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo;ZLandroidx/compose/foundation/gestures/Orientation;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/lazy/LazyDslKt;->LazyColumn(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/layout/PaddingValues;ZLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/foundation/gestures/FlingBehavior;ZLkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V
-HSPLandroidx/compose/foundation/lazy/LazyItemScopeImpl;-><init>()V
-HSPLandroidx/compose/foundation/lazy/LazyItemScopeImpl;->setMaxSize(II)V
-HSPLandroidx/compose/foundation/lazy/LazyListAnimateScrollScope;-><init>(Landroidx/compose/foundation/lazy/LazyListState;)V
-HSPLandroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo;-><init>()V
-HSPLandroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo;->hasIntervals()Z
-HSPLandroidx/compose/foundation/lazy/LazyListBeyondBoundsModifierLocal$Companion$emptyBeyondBoundsScope$1;-><init>()V
-HSPLandroidx/compose/foundation/lazy/LazyListBeyondBoundsModifierLocal$Companion;-><init>()V
-HSPLandroidx/compose/foundation/lazy/LazyListBeyondBoundsModifierLocal$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/foundation/lazy/LazyListBeyondBoundsModifierLocal;-><clinit>()V
-HSPLandroidx/compose/foundation/lazy/LazyListBeyondBoundsModifierLocal;-><init>(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo;ZLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/foundation/gestures/Orientation;)V
-HSPLandroidx/compose/foundation/lazy/LazyListBeyondBoundsModifierLocal;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
-HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function4;)V
-HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent;->getItem()Lkotlin/jvm/functions/Function4;
-HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent;->getKey()Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent;->getType()Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;-><init>(Lkotlinx/coroutines/CoroutineScope;Z)V
-HSPLandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;->onMeasured(IIILjava/util/List;Landroidx/compose/foundation/lazy/LazyMeasuredItemProvider;)V
-HSPLandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;->reset()V
-HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl$1$1;-><init>(Landroidx/compose/foundation/lazy/layout/IntervalList$Interval;Landroidx/compose/foundation/lazy/LazyItemScopeImpl;I)V
-HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl$1;-><init>(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyItemScopeImpl;)V
-HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl$1;->invoke(Landroidx/compose/foundation/lazy/layout/IntervalList$Interval;ILandroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;-><init>(Landroidx/compose/foundation/lazy/layout/IntervalList;Lkotlin/ranges/IntRange;Ljava/util/List;Landroidx/compose/foundation/lazy/LazyItemScopeImpl;Landroidx/compose/foundation/lazy/LazyListState;)V
-HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->Item(ILandroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getContentType(I)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getHeaderIndexes()Ljava/util/List;
-HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getItemCount()I
-HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getItemScope()Landroidx/compose/foundation/lazy/LazyItemScopeImpl;
-HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getKey(I)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getKeyToIndexMap()Ljava/util/Map;
-HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;-><init>(Landroidx/compose/runtime/State;)V
-HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->Item(ILandroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->getContentType(I)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->getHeaderIndexes()Ljava/util/List;
-HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->getItemCount()I
-HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->getItemScope()Landroidx/compose/foundation/lazy/LazyItemScopeImpl;
-HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->getKey(I)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->getKeyToIndexMap()Ljava/util/Map;
-HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$itemProviderState$1;-><init>(Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/foundation/lazy/LazyItemScopeImpl;Landroidx/compose/foundation/lazy/LazyListState;)V
-HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$itemProviderState$1;->invoke()Landroidx/compose/foundation/lazy/LazyListItemProviderImpl;
-HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$itemProviderState$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$1$1;-><init>(Landroidx/compose/foundation/lazy/LazyListState;)V
-HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$1$1;->invoke()Ljava/lang/Integer;
-HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$1$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$2;-><clinit>()V
-HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$2;-><init>()V
-HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$2;->invoke()Ljava/lang/Integer;
-HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$2;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$3;-><clinit>()V
-HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$3;-><init>()V
-HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$3;->invoke()Ljava/lang/Integer;
-HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$3;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt;->rememberLazyListItemProvider(Landroidx/compose/foundation/lazy/LazyListState;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/lazy/LazyListItemProvider;
-HSPLandroidx/compose/foundation/lazy/LazyListKt$ScrollPositionUpdater$1;-><init>(Landroidx/compose/foundation/lazy/LazyListItemProvider;Landroidx/compose/foundation/lazy/LazyListState;I)V
-HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$2;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;JII)V
-HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$2;->invoke(IILkotlin/jvm/functions/Function1;)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;-><init>(IILandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;ZLandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;ZIILandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;J)V
-HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;->createItem-HK0c1C0(ILjava/lang/Object;Ljava/util/List;)Landroidx/compose/foundation/lazy/LazyMeasuredItem;
-HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1;-><init>(ZLandroidx/compose/foundation/layout/PaddingValues;ZLandroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyListItemProvider;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;Landroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo;ILandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;)V
-HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1;->invoke-0kLqBqw(Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;J)Landroidx/compose/foundation/lazy/LazyListMeasureResult;
-HSPLandroidx/compose/foundation/lazy/LazyListKt;->LazyList(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/layout/PaddingValues;ZZLandroidx/compose/foundation/gestures/FlingBehavior;ZILandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;III)V
-HSPLandroidx/compose/foundation/lazy/LazyListKt;->ScrollPositionUpdater(Landroidx/compose/foundation/lazy/LazyListItemProvider;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/foundation/lazy/LazyListKt;->rememberLazyListMeasurePolicy(Landroidx/compose/foundation/lazy/LazyListItemProvider;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo;Landroidx/compose/foundation/layout/PaddingValues;ZZILandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;Landroidx/compose/runtime/Composer;III)Lkotlin/jvm/functions/Function2;
-HSPLandroidx/compose/foundation/lazy/LazyListMeasureKt$measureLazyList$5;-><init>(Ljava/util/List;Landroidx/compose/foundation/lazy/LazyListPositionedItem;)V
-HSPLandroidx/compose/foundation/lazy/LazyListMeasureKt$measureLazyList$5;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
-HSPLandroidx/compose/foundation/lazy/LazyListMeasureKt$measureLazyList$5;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/LazyListMeasureKt;-><clinit>()V
-HSPLandroidx/compose/foundation/lazy/LazyListMeasureKt;->calculateItemsOffsets(Ljava/util/List;Ljava/util/List;Ljava/util/List;IIIIIZLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;ZLandroidx/compose/ui/unit/Density;)Ljava/util/List;
-HSPLandroidx/compose/foundation/lazy/LazyListMeasureKt;->createItemsAfterList(Landroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo;Ljava/util/List;Landroidx/compose/foundation/lazy/LazyMeasuredItemProvider;IILandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;)Ljava/util/List;
-HSPLandroidx/compose/foundation/lazy/LazyListMeasureKt;->createItemsBeforeList-_ok666U(Landroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo;ILandroidx/compose/foundation/lazy/LazyMeasuredItemProvider;IILandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;)Ljava/util/List;
-HSPLandroidx/compose/foundation/lazy/LazyListMeasureKt;->measureLazyList-QaF8Ofo(ILandroidx/compose/foundation/lazy/LazyMeasuredItemProvider;IIIIIIFJZLjava/util/List;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;ZLandroidx/compose/ui/unit/Density;Landroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;Landroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo;ILandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;Lkotlin/jvm/functions/Function3;)Landroidx/compose/foundation/lazy/LazyListMeasureResult;
-HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;-><init>(Landroidx/compose/foundation/lazy/LazyMeasuredItem;IZFLandroidx/compose/ui/layout/MeasureResult;Ljava/util/List;IIIZLandroidx/compose/foundation/gestures/Orientation;II)V
-HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getAlignmentLines()Ljava/util/Map;
-HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getCanScrollForward()Z
-HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getConsumedScroll()F
-HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getFirstVisibleItem()Landroidx/compose/foundation/lazy/LazyMeasuredItem;
-HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getFirstVisibleItemScrollOffset()I
-HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getHeight()I
-HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getTotalItemsCount()I
-HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getWidth()I
-HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->placeChildren()V
-HSPLandroidx/compose/foundation/lazy/LazyListPlaceableWrapper;-><init>(JLandroidx/compose/ui/layout/Placeable;)V
-HSPLandroidx/compose/foundation/lazy/LazyListPlaceableWrapper;-><init>(JLandroidx/compose/ui/layout/Placeable;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/foundation/lazy/LazyListPlaceableWrapper;->getOffset-nOcc-ac()J
-HSPLandroidx/compose/foundation/lazy/LazyListPlaceableWrapper;->getPlaceable()Landroidx/compose/ui/layout/Placeable;
-HSPLandroidx/compose/foundation/lazy/LazyListPositionedItem;-><init>(IILjava/lang/Object;IIIZLjava/util/List;Landroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;JZI)V
-HSPLandroidx/compose/foundation/lazy/LazyListPositionedItem;-><init>(IILjava/lang/Object;IIIZLjava/util/List;Landroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;JZILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/foundation/lazy/LazyListPositionedItem;->getAnimationSpec(I)Landroidx/compose/animation/core/FiniteAnimationSpec;
-HSPLandroidx/compose/foundation/lazy/LazyListPositionedItem;->getHasAnimations()Z
-HSPLandroidx/compose/foundation/lazy/LazyListPositionedItem;->getMainAxisSize(Landroidx/compose/ui/layout/Placeable;)I
-HSPLandroidx/compose/foundation/lazy/LazyListPositionedItem;->getOffset-Bjo55l4(I)J
-HSPLandroidx/compose/foundation/lazy/LazyListPositionedItem;->getPlaceablesCount()I
-HSPLandroidx/compose/foundation/lazy/LazyListPositionedItem;->place(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
-HSPLandroidx/compose/foundation/lazy/LazyListScope;->item$default(Landroidx/compose/foundation/lazy/LazyListScope;Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function3;ILjava/lang/Object;)V
-HSPLandroidx/compose/foundation/lazy/LazyListScopeImpl$item$2;-><init>(Ljava/lang/Object;)V
-HSPLandroidx/compose/foundation/lazy/LazyListScopeImpl$item$2;->invoke(I)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/LazyListScopeImpl$item$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/LazyListScopeImpl$item$3;-><init>(Lkotlin/jvm/functions/Function3;)V
-HSPLandroidx/compose/foundation/lazy/LazyListScopeImpl$item$3;->invoke(Landroidx/compose/foundation/lazy/LazyItemScope;ILandroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/foundation/lazy/LazyListScopeImpl$item$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/LazyListScopeImpl;-><init>()V
-HSPLandroidx/compose/foundation/lazy/LazyListScopeImpl;->getHeaderIndexes()Ljava/util/List;
-HSPLandroidx/compose/foundation/lazy/LazyListScopeImpl;->getIntervals()Landroidx/compose/foundation/lazy/layout/IntervalList;
-HSPLandroidx/compose/foundation/lazy/LazyListScopeImpl;->item(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function3;)V
-HSPLandroidx/compose/foundation/lazy/LazyListScopeImpl;->items(ILkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function4;)V
-HSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;-><init>(II)V
-HSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->getIndex-jQJCoq8()I
-HSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->getScrollOffset()I
-HSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->update-AhXoVpI(II)V
-HSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->updateFromMeasureResult(Landroidx/compose/foundation/lazy/LazyListMeasureResult;)V
-HSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->updateScrollPositionIfTheFirstItemWasMoved(Landroidx/compose/foundation/lazy/LazyListItemProvider;)V
-HSPLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$1;-><clinit>()V
-HSPLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$1;-><init>()V
-HSPLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$1;->invoke(Landroidx/compose/runtime/saveable/SaverScope;Landroidx/compose/foundation/lazy/LazyListState;)Ljava/util/List;
-HSPLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$2;-><clinit>()V
-HSPLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$2;-><init>()V
-HSPLandroidx/compose/foundation/lazy/LazyListState$Companion;-><init>()V
-HSPLandroidx/compose/foundation/lazy/LazyListState$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/foundation/lazy/LazyListState$Companion;->getSaver()Landroidx/compose/runtime/saveable/Saver;
-HSPLandroidx/compose/foundation/lazy/LazyListState$remeasurementModifier$1;-><init>(Landroidx/compose/foundation/lazy/LazyListState;)V
-HSPLandroidx/compose/foundation/lazy/LazyListState$remeasurementModifier$1;->onRemeasurementAvailable(Landroidx/compose/ui/layout/Remeasurement;)V
-HSPLandroidx/compose/foundation/lazy/LazyListState$scrollableState$1;-><init>(Landroidx/compose/foundation/lazy/LazyListState;)V
-HSPLandroidx/compose/foundation/lazy/LazyListState;-><clinit>()V
-HSPLandroidx/compose/foundation/lazy/LazyListState;-><init>(II)V
-HSPLandroidx/compose/foundation/lazy/LazyListState;->access$getSaver$cp()Landroidx/compose/runtime/saveable/Saver;
-HSPLandroidx/compose/foundation/lazy/LazyListState;->access$setRemeasurement(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/ui/layout/Remeasurement;)V
-HSPLandroidx/compose/foundation/lazy/LazyListState;->applyMeasureResult$foundation_release(Landroidx/compose/foundation/lazy/LazyListMeasureResult;)V
-HSPLandroidx/compose/foundation/lazy/LazyListState;->cancelPrefetchIfVisibleItemsChanged(Landroidx/compose/foundation/lazy/LazyListLayoutInfo;)V
-HSPLandroidx/compose/foundation/lazy/LazyListState;->getAwaitLayoutModifier$foundation_release()Landroidx/compose/foundation/lazy/AwaitFirstLayoutModifier;
-HSPLandroidx/compose/foundation/lazy/LazyListState;->getFirstVisibleItemIndex()I
-HSPLandroidx/compose/foundation/lazy/LazyListState;->getFirstVisibleItemScrollOffset()I
-HSPLandroidx/compose/foundation/lazy/LazyListState;->getInternalInteractionSource$foundation_release()Landroidx/compose/foundation/interaction/MutableInteractionSource;
-HSPLandroidx/compose/foundation/lazy/LazyListState;->getPinnedItems$foundation_release()Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;
-HSPLandroidx/compose/foundation/lazy/LazyListState;->getPrefetchState$foundation_release()Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;
-HSPLandroidx/compose/foundation/lazy/LazyListState;->getRemeasurementModifier$foundation_release()Landroidx/compose/ui/layout/RemeasurementModifier;
-HSPLandroidx/compose/foundation/lazy/LazyListState;->getScrollToBeConsumed$foundation_release()F
-HSPLandroidx/compose/foundation/lazy/LazyListState;->setCanScrollBackward(Z)V
-HSPLandroidx/compose/foundation/lazy/LazyListState;->setCanScrollForward(Z)V
-HSPLandroidx/compose/foundation/lazy/LazyListState;->setDensity$foundation_release(Landroidx/compose/ui/unit/Density;)V
-HSPLandroidx/compose/foundation/lazy/LazyListState;->setPlacementAnimator$foundation_release(Landroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;)V
-HSPLandroidx/compose/foundation/lazy/LazyListState;->setPremeasureConstraints-BRTryo0$foundation_release(J)V
-HSPLandroidx/compose/foundation/lazy/LazyListState;->setRemeasurement(Landroidx/compose/ui/layout/Remeasurement;)V
-HSPLandroidx/compose/foundation/lazy/LazyListState;->updateScrollPositionIfTheFirstItemWasMoved$foundation_release(Landroidx/compose/foundation/lazy/LazyListItemProvider;)V
-HSPLandroidx/compose/foundation/lazy/LazyListStateKt$rememberLazyListState$1$1;-><init>(II)V
-HSPLandroidx/compose/foundation/lazy/LazyListStateKt$rememberLazyListState$1$1;->invoke()Landroidx/compose/foundation/lazy/LazyListState;
-HSPLandroidx/compose/foundation/lazy/LazyListStateKt$rememberLazyListState$1$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/LazyListStateKt;->rememberLazyListState(IILandroidx/compose/runtime/Composer;II)Landroidx/compose/foundation/lazy/LazyListState;
-HSPLandroidx/compose/foundation/lazy/LazyMeasuredItem;-><init>(ILjava/util/List;ZLandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/ui/unit/LayoutDirection;ZIILandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;IJLjava/lang/Object;)V
-HSPLandroidx/compose/foundation/lazy/LazyMeasuredItem;-><init>(ILjava/util/List;ZLandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/ui/unit/LayoutDirection;ZIILandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;IJLjava/lang/Object;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/foundation/lazy/LazyMeasuredItem;->getCrossAxisSize()I
-HSPLandroidx/compose/foundation/lazy/LazyMeasuredItem;->getIndex()I
-HSPLandroidx/compose/foundation/lazy/LazyMeasuredItem;->getKey()Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/LazyMeasuredItem;->getSizeWithSpacings()I
-HSPLandroidx/compose/foundation/lazy/LazyMeasuredItem;->position(III)Landroidx/compose/foundation/lazy/LazyListPositionedItem;
-HSPLandroidx/compose/foundation/lazy/LazyMeasuredItemProvider;-><init>(JZLandroidx/compose/foundation/lazy/LazyListItemProvider;Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;Landroidx/compose/foundation/lazy/MeasuredItemFactory;)V
-HSPLandroidx/compose/foundation/lazy/LazyMeasuredItemProvider;-><init>(JZLandroidx/compose/foundation/lazy/LazyListItemProvider;Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;Landroidx/compose/foundation/lazy/MeasuredItemFactory;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/foundation/lazy/LazyMeasuredItemProvider;->getAndMeasure-ZjPyQlc(I)Landroidx/compose/foundation/lazy/LazyMeasuredItem;
-HSPLandroidx/compose/foundation/lazy/LazyMeasuredItemProvider;->getChildConstraints-msEJaDk()J
-HSPLandroidx/compose/foundation/lazy/LazySemanticsKt$rememberLazyListSemanticState$1$1$scrollAxisRange$1;-><init>(Landroidx/compose/foundation/lazy/LazyListState;)V
-HSPLandroidx/compose/foundation/lazy/LazySemanticsKt$rememberLazyListSemanticState$1$1$scrollAxisRange$2;-><init>(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;)V
-HSPLandroidx/compose/foundation/lazy/LazySemanticsKt$rememberLazyListSemanticState$1$1;-><init>(ZLandroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Z)V
-HSPLandroidx/compose/foundation/lazy/LazySemanticsKt$rememberLazyListSemanticState$1$1;->collectionInfo()Landroidx/compose/ui/semantics/CollectionInfo;
-HSPLandroidx/compose/foundation/lazy/LazySemanticsKt$rememberLazyListSemanticState$1$1;->scrollAxisRange()Landroidx/compose/ui/semantics/ScrollAxisRange;
-HSPLandroidx/compose/foundation/lazy/LazySemanticsKt;->rememberLazyListSemanticState(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;ZZLandroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState;
-HSPLandroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider$Item$1;-><init>(Landroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider;II)V
-HSPLandroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider;-><init>(Landroidx/compose/runtime/State;)V
-HSPLandroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider;->Item(ILandroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider;->getContentType(I)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider;->getItemCount()I
-HSPLandroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider;->getKey(I)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider;->getKeyToIndexMap()Ljava/util/Map;
-HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey$Companion$CREATOR$1;-><init>()V
-HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey$Companion;-><init>()V
-HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;-><clinit>()V
-HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;-><init>(I)V
-HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;->hashCode()I
-HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider$generateKeyToIndexMap$1$1;-><init>(IILjava/util/HashMap;)V
-HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider$generateKeyToIndexMap$1$1;->invoke(Landroidx/compose/foundation/lazy/layout/IntervalList$Interval;)V
-HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider$generateKeyToIndexMap$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider;-><init>(Lkotlin/jvm/functions/Function4;Landroidx/compose/foundation/lazy/layout/IntervalList;Lkotlin/ranges/IntRange;)V
-HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider;->Item(ILandroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider;->generateKeyToIndexMap(Lkotlin/ranges/IntRange;Landroidx/compose/foundation/lazy/layout/IntervalList;)Ljava/util/Map;
-HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider;->getContentType(I)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider;->getItemCount()I
-HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider;->getKey(I)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider;->getKeyToIndexMap()Ljava/util/Map;
-HSPLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;-><clinit>()V
-HSPLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;-><init>(IILjava/lang/Object;)V
-HSPLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;->getSize()I
-HSPLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;->getStartIndex()I
-HSPLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;->getValue()Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/IntervalListKt;->access$binarySearch(Landroidx/compose/runtime/collection/MutableVector;I)I
-HSPLandroidx/compose/foundation/lazy/layout/IntervalListKt;->binarySearch(Landroidx/compose/runtime/collection/MutableVector;I)I
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;I)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2$invoke$$inlined$onDispose$1;->dispose()V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;ILjava/lang/Object;Ljava/lang/Object;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->access$set_content$p(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->createContentLambda()Lkotlin/jvm/functions/Function2;
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->getContent()Lkotlin/jvm/functions/Function2;
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->getKey()Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->getLastKnownIndex()I
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->getType()Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;-><init>(Landroidx/compose/runtime/saveable/SaveableStateHolder;Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->access$getSaveableStateHolder$p(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;)Landroidx/compose/runtime/saveable/SaveableStateHolder;
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->getContent(ILjava/lang/Object;)Lkotlin/jvm/functions/Function2;
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->getItemProvider()Lkotlin/jvm/functions/Function0;
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemProviderKt;->DelegatingLazyLayoutItemProvider(Landroidx/compose/runtime/State;)Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemProviderKt;->LazyLayoutItemProvider(Landroidx/compose/foundation/lazy/layout/IntervalList;Lkotlin/ranges/IntRange;Lkotlin/jvm/functions/Function4;)Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemProviderKt;->findIndexByKey(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Ljava/lang/Object;I)I
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1$2$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1$2$1;->invoke-0kLqBqw(Landroidx/compose/ui/layout/SubcomposeMeasureScope;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1$itemContentFactory$1$1;-><init>(Landroidx/compose/runtime/State;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1$itemContentFactory$1$1;->invoke()Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1$itemContentFactory$1$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;ILandroidx/compose/runtime/State;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1;->invoke(Landroidx/compose/runtime/saveable/SaveableStateHolder;Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;->LazyLayout(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroidx/compose/ui/layout/SubcomposeMeasureScope;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->layout(IILjava/util/Map;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->measure-0kLqBqw(IJ)Ljava/util/List;
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->roundToPx-0680j_4(F)I
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->getPinsCount()I
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->get_parentPinnableContainer()Landroidx/compose/ui/layout/PinnableContainer;
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->onDisposed()V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->setIndex(I)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->setParentPinnableContainer(Landroidx/compose/ui/layout/PinnableContainer;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1$invoke$$inlined$onDispose$1;->dispose()V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt;->LazyLayoutPinnableItem(ILandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;-><clinit>()V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;-><init>()V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;-><init>(Ljava/util/List;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;->getSize()I
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;->size()I
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;-><clinit>()V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;-><init>()V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;->setPrefetcher$foundation_release(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState$Prefetcher;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$Companion;-><init>()V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$Companion;->access$calculateFrameIntervalIfNeeded(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$Companion;Landroid/view/View;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$Companion;->calculateFrameIntervalIfNeeded(Landroid/view/View;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;-><clinit>()V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroid/view/View;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->access$getFrameIntervalNs$cp()J
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->access$setFrameIntervalNs$cp(J)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->onForgotten()V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->onRemembered()V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher_androidKt;->LazyLayoutPrefetcher(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$1;-><init>(Lkotlin/jvm/functions/Function1;ZLandroidx/compose/ui/semantics/ScrollAxisRange;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/semantics/CollectionInfo;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$indexForKeyMapping$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$scrollByAction$1;-><init>(ZLkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$scrollToIndexAction$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt;->lazyLayoutSemantics(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1$1;-><init>(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1$1;->invoke()Lkotlin/ranges/IntRange;
-HSPLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1$2;-><init>(Landroidx/compose/runtime/MutableState;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1$2;->emit(Lkotlin/ranges/IntRange;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1;-><init>(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt;->access$calculateNearestItemsRange(III)Lkotlin/ranges/IntRange;
-HSPLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt;->calculateNearestItemsRange(III)Lkotlin/ranges/IntRange;
-HSPLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt;->rememberLazyNearestItemsRangeState(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State;
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1;->invoke(Ljava/lang/Object;)Ljava/lang/Boolean;
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1;-><clinit>()V
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1;-><init>()V
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1;->invoke(Landroidx/compose/runtime/saveable/SaverScope;Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;)Ljava/util/Map;
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$2;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion;-><init>()V
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion;->saver(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)Landroidx/compose/runtime/saveable/Saver;
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;Ljava/lang/Object;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1$invoke$$inlined$onDispose$1;->dispose()V
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;Ljava/lang/Object;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2;-><init>(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;I)V
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;-><clinit>()V
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/util/Map;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->SaveableStateProvider(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->access$getPreviouslyComposedKeys$p(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;)Ljava/util/Set;
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->canBeSaved(Ljava/lang/Object;)Z
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->consumeRestored(Ljava/lang/String;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->getWrappedHolder()Landroidx/compose/runtime/saveable/SaveableStateHolder;
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->performSave()Ljava/util/Map;
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->registerProvider(Ljava/lang/String;Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/saveable/SaveableStateRegistry$Entry;
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->setWrappedHolder(Landroidx/compose/runtime/saveable/SaveableStateHolder;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$1;-><init>(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;Lkotlin/jvm/functions/Function3;I)V
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$holder$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$holder$1;->invoke()Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$holder$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt;->LazySaveableStateHolderProvider(Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/foundation/lazy/layout/Lazy_androidKt;->getDefaultLazyLayoutKey(I)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;-><clinit>()V
-HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;-><init>()V
-HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->addInterval(ILjava/lang/Object;)V
-HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->checkIndexBounds(I)V
-HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->contains(Landroidx/compose/foundation/lazy/layout/IntervalList$Interval;I)Z
-HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->forEach(IILkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->get(I)Landroidx/compose/foundation/lazy/layout/IntervalList$Interval;
-HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->getIntervalForIndex(I)Landroidx/compose/foundation/lazy/layout/IntervalList$Interval;
-HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->getSize()I
-HSPLandroidx/compose/foundation/relocation/AndroidBringIntoViewParent;-><init>(Landroid/view/View;)V
-HSPLandroidx/compose/foundation/relocation/BringIntoViewChildModifier;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewParent;)V
-HSPLandroidx/compose/foundation/relocation/BringIntoViewChildModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V
-HSPLandroidx/compose/foundation/relocation/BringIntoViewChildModifier;->onPlaced(Landroidx/compose/ui/layout/LayoutCoordinates;)V
-HSPLandroidx/compose/foundation/relocation/BringIntoViewKt$ModifierLocalBringIntoViewParent$1;-><clinit>()V
-HSPLandroidx/compose/foundation/relocation/BringIntoViewKt$ModifierLocalBringIntoViewParent$1;-><init>()V
-HSPLandroidx/compose/foundation/relocation/BringIntoViewKt$ModifierLocalBringIntoViewParent$1;->invoke()Landroidx/compose/foundation/relocation/BringIntoViewParent;
-HSPLandroidx/compose/foundation/relocation/BringIntoViewKt$ModifierLocalBringIntoViewParent$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/foundation/relocation/BringIntoViewKt;-><clinit>()V
-HSPLandroidx/compose/foundation/relocation/BringIntoViewKt;->getModifierLocalBringIntoViewParent()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
-HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;-><init>()V
-HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;->getModifiers()Landroidx/compose/runtime/collection/MutableVector;
-HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterKt$bringIntoViewRequester$2$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewRequester;Landroidx/compose/foundation/relocation/BringIntoViewRequesterModifier;)V
-HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterKt$bringIntoViewRequester$2$1$invoke$$inlined$onDispose$1;->dispose()V
-HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterKt$bringIntoViewRequester$2$1;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewRequester;Landroidx/compose/foundation/relocation/BringIntoViewRequesterModifier;)V
-HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterKt$bringIntoViewRequester$2$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;
-HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterKt$bringIntoViewRequester$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterKt$bringIntoViewRequester$2;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewRequester;)V
-HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterKt$bringIntoViewRequester$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterKt$bringIntoViewRequester$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterKt;->BringIntoViewRequester()Landroidx/compose/foundation/relocation/BringIntoViewRequester;
-HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterKt;->bringIntoViewRequester(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/relocation/BringIntoViewRequester;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterModifier;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewParent;)V
-HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderKt$bringIntoViewResponder$2;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewResponder;)V
-HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderKt$bringIntoViewResponder$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderKt$bringIntoViewResponder$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderKt;->bringIntoViewResponder(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/relocation/BringIntoViewResponder;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderModifier;-><init>(Landroidx/compose/foundation/relocation/BringIntoViewParent;)V
-HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderModifier;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
-HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderModifier;->getValue()Landroidx/compose/foundation/relocation/BringIntoViewParent;
-HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderModifier;->getValue()Ljava/lang/Object;
-HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderModifier;->setResponder(Landroidx/compose/foundation/relocation/BringIntoViewResponder;)V
-HSPLandroidx/compose/foundation/relocation/BringIntoViewResponder_androidKt;->rememberDefaultBringIntoViewParent(Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/relocation/BringIntoViewParent;
-HSPLandroidx/compose/foundation/shape/CornerBasedShape;-><clinit>()V
-HSPLandroidx/compose/foundation/shape/CornerBasedShape;-><init>(Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;)V
-HSPLandroidx/compose/foundation/shape/CornerBasedShape;->createOutline-Pq9zytI(JLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Landroidx/compose/ui/graphics/Outline;
-HSPLandroidx/compose/foundation/shape/CornerBasedShape;->getBottomEnd()Landroidx/compose/foundation/shape/CornerSize;
-HSPLandroidx/compose/foundation/shape/CornerBasedShape;->getTopEnd()Landroidx/compose/foundation/shape/CornerSize;
-HSPLandroidx/compose/foundation/shape/CornerBasedShape;->getTopStart()Landroidx/compose/foundation/shape/CornerSize;
-HSPLandroidx/compose/foundation/shape/CornerSizeKt$ZeroCornerSize$1;-><init>()V
-HSPLandroidx/compose/foundation/shape/CornerSizeKt;-><clinit>()V
-HSPLandroidx/compose/foundation/shape/CornerSizeKt;->CornerSize(I)Landroidx/compose/foundation/shape/CornerSize;
-HSPLandroidx/compose/foundation/shape/CornerSizeKt;->CornerSize-0680j_4(F)Landroidx/compose/foundation/shape/CornerSize;
-HSPLandroidx/compose/foundation/shape/DpCornerSize;-><init>(F)V
-HSPLandroidx/compose/foundation/shape/DpCornerSize;-><init>(FLkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/foundation/shape/DpCornerSize;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/foundation/shape/DpCornerSize;->toPx-TmRCtEA(JLandroidx/compose/ui/unit/Density;)F
-HSPLandroidx/compose/foundation/shape/PercentCornerSize;-><init>(F)V
-HSPLandroidx/compose/foundation/shape/PercentCornerSize;->toPx-TmRCtEA(JLandroidx/compose/ui/unit/Density;)F
-HSPLandroidx/compose/foundation/shape/RoundedCornerShape;-><clinit>()V
-HSPLandroidx/compose/foundation/shape/RoundedCornerShape;-><init>(Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;)V
-HSPLandroidx/compose/foundation/shape/RoundedCornerShape;->createOutline-LjSzlW0(JFFFFLandroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/graphics/Outline;
-HSPLandroidx/compose/foundation/shape/RoundedCornerShape;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/foundation/shape/RoundedCornerShapeKt;-><clinit>()V
-HSPLandroidx/compose/foundation/shape/RoundedCornerShapeKt;->RoundedCornerShape(I)Landroidx/compose/foundation/shape/RoundedCornerShape;
-HSPLandroidx/compose/foundation/shape/RoundedCornerShapeKt;->RoundedCornerShape(Landroidx/compose/foundation/shape/CornerSize;)Landroidx/compose/foundation/shape/RoundedCornerShape;
-HSPLandroidx/compose/foundation/shape/RoundedCornerShapeKt;->RoundedCornerShape-0680j_4(F)Landroidx/compose/foundation/shape/RoundedCornerShape;
-HSPLandroidx/compose/foundation/shape/RoundedCornerShapeKt;->RoundedCornerShape-a9UjIt4(FFFF)Landroidx/compose/foundation/shape/RoundedCornerShape;
-HSPLandroidx/compose/foundation/shape/RoundedCornerShapeKt;->getCircleShape()Landroidx/compose/foundation/shape/RoundedCornerShape;
-HSPLandroidx/compose/foundation/text/BasicTextKt$BasicText-4YKlhWE$$inlined$Layout$1;-><init>(Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/foundation/text/BasicTextKt$BasicText-4YKlhWE$$inlined$Layout$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/foundation/text/BasicTextKt;->BasicText-4YKlhWE(Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function1;IZIILandroidx/compose/runtime/Composer;II)V
-HSPLandroidx/compose/foundation/text/CoreTextKt;-><clinit>()V
-HSPLandroidx/compose/foundation/text/CoreTextKt;->updateTextDelegate-x_uQXYA(Landroidx/compose/foundation/text/TextDelegate;Ljava/lang/String;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;ZIII)Landroidx/compose/foundation/text/TextDelegate;
-HSPLandroidx/compose/foundation/text/HeightInLinesModifierKt$heightInLines$2;-><init>(IILandroidx/compose/ui/text/TextStyle;)V
-HSPLandroidx/compose/foundation/text/HeightInLinesModifierKt$heightInLines$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/text/HeightInLinesModifierKt$heightInLines$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/text/HeightInLinesModifierKt;->heightInLines$default(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/text/TextStyle;IIILjava/lang/Object;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/text/HeightInLinesModifierKt;->heightInLines(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/text/TextStyle;II)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/text/HeightInLinesModifierKt;->validateMinMaxLines(II)V
-HSPLandroidx/compose/foundation/text/TextController$coreModifiers$1;-><init>(Landroidx/compose/foundation/text/TextController;)V
-HSPLandroidx/compose/foundation/text/TextController$coreModifiers$1;->invoke(Landroidx/compose/ui/layout/LayoutCoordinates;)V
-HSPLandroidx/compose/foundation/text/TextController$coreModifiers$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/text/TextController$createSemanticsModifierFor$1$1;-><init>(Landroidx/compose/foundation/text/TextController;)V
-HSPLandroidx/compose/foundation/text/TextController$createSemanticsModifierFor$1;-><init>(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/foundation/text/TextController;)V
-HSPLandroidx/compose/foundation/text/TextController$createSemanticsModifierFor$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V
-HSPLandroidx/compose/foundation/text/TextController$createSemanticsModifierFor$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/text/TextController$drawTextAndSelectionBehind$1;-><init>(Landroidx/compose/foundation/text/TextController;)V
-HSPLandroidx/compose/foundation/text/TextController$drawTextAndSelectionBehind$1;->invoke(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V
-HSPLandroidx/compose/foundation/text/TextController$drawTextAndSelectionBehind$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/text/TextController$measurePolicy$1$measure$2;-><init>(Ljava/util/List;)V
-HSPLandroidx/compose/foundation/text/TextController$measurePolicy$1$measure$2;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
-HSPLandroidx/compose/foundation/text/TextController$measurePolicy$1$measure$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/foundation/text/TextController$measurePolicy$1;-><init>(Landroidx/compose/foundation/text/TextController;)V
-HSPLandroidx/compose/foundation/text/TextController$measurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/foundation/text/TextController;-><init>(Landroidx/compose/foundation/text/TextState;)V
-HSPLandroidx/compose/foundation/text/TextController;->access$getSelectionRegistrar$p(Landroidx/compose/foundation/text/TextController;)Landroidx/compose/foundation/text/selection/SelectionRegistrar;
-HSPLandroidx/compose/foundation/text/TextController;->createSemanticsModifierFor(Landroidx/compose/ui/text/AnnotatedString;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/text/TextController;->drawTextAndSelectionBehind(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/text/TextController;->getMeasurePolicy()Landroidx/compose/ui/layout/MeasurePolicy;
-HSPLandroidx/compose/foundation/text/TextController;->getModifiers()Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/foundation/text/TextController;->getState()Landroidx/compose/foundation/text/TextState;
-HSPLandroidx/compose/foundation/text/TextController;->onForgotten()V
-HSPLandroidx/compose/foundation/text/TextController;->onRemembered()V
-HSPLandroidx/compose/foundation/text/TextController;->setTextDelegate(Landroidx/compose/foundation/text/TextDelegate;)V
-HSPLandroidx/compose/foundation/text/TextController;->update(Landroidx/compose/foundation/text/selection/SelectionRegistrar;)V
-HSPLandroidx/compose/foundation/text/TextDelegate$Companion;-><init>()V
-HSPLandroidx/compose/foundation/text/TextDelegate$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/foundation/text/TextDelegate$Companion;->paint(Landroidx/compose/ui/graphics/Canvas;Landroidx/compose/ui/text/TextLayoutResult;)V
-HSPLandroidx/compose/foundation/text/TextDelegate;-><clinit>()V
-HSPLandroidx/compose/foundation/text/TextDelegate;-><init>(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;IIZILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;Ljava/util/List;)V
-HSPLandroidx/compose/foundation/text/TextDelegate;-><init>(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;IIZILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/foundation/text/TextDelegate;-><init>(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;IIZILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;Ljava/util/List;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/foundation/text/TextDelegate;->getDensity()Landroidx/compose/ui/unit/Density;
-HSPLandroidx/compose/foundation/text/TextDelegate;->getFontFamilyResolver()Landroidx/compose/ui/text/font/FontFamily$Resolver;
-HSPLandroidx/compose/foundation/text/TextDelegate;->getMaxIntrinsicWidth()I
-HSPLandroidx/compose/foundation/text/TextDelegate;->getMaxLines()I
-HSPLandroidx/compose/foundation/text/TextDelegate;->getMinLines()I
-HSPLandroidx/compose/foundation/text/TextDelegate;->getNonNullIntrinsics()Landroidx/compose/ui/text/MultiParagraphIntrinsics;
-HSPLandroidx/compose/foundation/text/TextDelegate;->getOverflow-gIe3tQ8()I
-HSPLandroidx/compose/foundation/text/TextDelegate;->getSoftWrap()Z
-HSPLandroidx/compose/foundation/text/TextDelegate;->getStyle()Landroidx/compose/ui/text/TextStyle;
-HSPLandroidx/compose/foundation/text/TextDelegate;->getText()Landroidx/compose/ui/text/AnnotatedString;
-HSPLandroidx/compose/foundation/text/TextDelegate;->layout-NN6Ew-U(JLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/text/TextLayoutResult;)Landroidx/compose/ui/text/TextLayoutResult;
-HSPLandroidx/compose/foundation/text/TextDelegate;->layoutIntrinsics(Landroidx/compose/ui/unit/LayoutDirection;)V
-HSPLandroidx/compose/foundation/text/TextDelegate;->layoutText-K40F9xA(JLandroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/text/MultiParagraph;
-HSPLandroidx/compose/foundation/text/TextDelegateKt;->ceilToIntPx(F)I
-HSPLandroidx/compose/foundation/text/TextLayoutHelperKt;->canReuse-7_7YC6M(Landroidx/compose/ui/text/TextLayoutResult;Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;IZILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/text/font/FontFamily$Resolver;J)Z
-HSPLandroidx/compose/foundation/text/TextState$onTextLayout$1;-><clinit>()V
-HSPLandroidx/compose/foundation/text/TextState$onTextLayout$1;-><init>()V
-HSPLandroidx/compose/foundation/text/TextState;-><init>(Landroidx/compose/foundation/text/TextDelegate;J)V
-HSPLandroidx/compose/foundation/text/TextState;->getDrawScopeInvalidation()Lkotlin/Unit;
-HSPLandroidx/compose/foundation/text/TextState;->getLayoutInvalidation()Lkotlin/Unit;
-HSPLandroidx/compose/foundation/text/TextState;->getLayoutResult()Landroidx/compose/ui/text/TextLayoutResult;
-HSPLandroidx/compose/foundation/text/TextState;->getOnTextLayout()Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/foundation/text/TextState;->getSelectable()Landroidx/compose/foundation/text/selection/Selectable;
-HSPLandroidx/compose/foundation/text/TextState;->getSelectableId()J
-HSPLandroidx/compose/foundation/text/TextState;->getTextDelegate()Landroidx/compose/foundation/text/TextDelegate;
-HSPLandroidx/compose/foundation/text/TextState;->setDrawScopeInvalidation(Lkotlin/Unit;)V
-HSPLandroidx/compose/foundation/text/TextState;->setLayoutCoordinates(Landroidx/compose/ui/layout/LayoutCoordinates;)V
-HSPLandroidx/compose/foundation/text/TextState;->setLayoutResult(Landroidx/compose/ui/text/TextLayoutResult;)V
-HSPLandroidx/compose/foundation/text/TextState;->setOnTextLayout(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt$LocalSelectionRegistrar$1;-><clinit>()V
-HSPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt$LocalSelectionRegistrar$1;-><init>()V
-HSPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt$LocalSelectionRegistrar$1;->invoke()Landroidx/compose/foundation/text/selection/SelectionRegistrar;
-HSPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt$LocalSelectionRegistrar$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt;-><clinit>()V
-HSPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt;->getLocalSelectionRegistrar()Landroidx/compose/runtime/ProvidableCompositionLocal;
-HSPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt;->hasSelection(Landroidx/compose/foundation/text/selection/SelectionRegistrar;J)Z
-HSPLandroidx/compose/foundation/text/selection/TextSelectionColors;-><clinit>()V
-HSPLandroidx/compose/foundation/text/selection/TextSelectionColors;-><init>(JJ)V
-HSPLandroidx/compose/foundation/text/selection/TextSelectionColors;-><init>(JJLkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/foundation/text/selection/TextSelectionColors;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/foundation/text/selection/TextSelectionColorsKt$LocalTextSelectionColors$1;-><clinit>()V
-HSPLandroidx/compose/foundation/text/selection/TextSelectionColorsKt$LocalTextSelectionColors$1;-><init>()V
-HSPLandroidx/compose/foundation/text/selection/TextSelectionColorsKt;-><clinit>()V
-HSPLandroidx/compose/foundation/text/selection/TextSelectionColorsKt;->getLocalTextSelectionColors()Landroidx/compose/runtime/ProvidableCompositionLocal;
-HSPLandroidx/compose/material/icons/Icons$Filled;-><clinit>()V
-HSPLandroidx/compose/material/icons/Icons$Filled;-><init>()V
-HSPLandroidx/compose/material/icons/Icons$Outlined;-><clinit>()V
-HSPLandroidx/compose/material/icons/Icons$Outlined;-><init>()V
-HSPLandroidx/compose/material/icons/filled/ArrowBackKt;-><clinit>()V
-HSPLandroidx/compose/material/icons/filled/ArrowBackKt;->getArrowBack(Landroidx/compose/material/icons/Icons$Filled;)Landroidx/compose/ui/graphics/vector/ImageVector;
-HSPLandroidx/compose/material/icons/filled/CloseKt;-><clinit>()V
-HSPLandroidx/compose/material/icons/filled/CloseKt;->getClose(Landroidx/compose/material/icons/Icons$Filled;)Landroidx/compose/ui/graphics/vector/ImageVector;
-HSPLandroidx/compose/material/icons/outlined/QrCodeScannerKt;-><clinit>()V
-HSPLandroidx/compose/material/icons/outlined/QrCodeScannerKt;->getQrCodeScanner(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector;
-HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance$onInvalidateRipple$1;-><init>(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)V
-HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance$onInvalidateRipple$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance$onInvalidateRipple$1;->invoke()V
-HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;-><init>(ZFLandroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/material/ripple/RippleContainer;)V
-HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;-><init>(ZFLandroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/material/ripple/RippleContainer;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->access$getInvalidateTick(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)Z
-HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->access$setInvalidateTick(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;Z)V
-HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->addRipple(Landroidx/compose/foundation/interaction/PressInteraction$Press;Lkotlinx/coroutines/CoroutineScope;)V
-HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->dispose()V
-HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->drawIndication(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
-HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->getInvalidateTick()Z
-HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->getRippleHostView()Landroidx/compose/material/ripple/RippleHostView;
-HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->onForgotten()V
-HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->onRemembered()V
-HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->removeRipple(Landroidx/compose/foundation/interaction/PressInteraction$Press;)V
-HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->resetHostView()V
-HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->setInvalidateTick(Z)V
-HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->setRippleHostView(Landroidx/compose/material/ripple/RippleHostView;)V
-HSPLandroidx/compose/material/ripple/PlatformRipple;-><init>(ZFLandroidx/compose/runtime/State;)V
-HSPLandroidx/compose/material/ripple/PlatformRipple;-><init>(ZFLandroidx/compose/runtime/State;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/material/ripple/PlatformRipple;->findNearestViewGroup(Landroidx/compose/runtime/Composer;I)Landroid/view/ViewGroup;
-HSPLandroidx/compose/material/ripple/PlatformRipple;->rememberUpdatedRippleInstance-942rkJo(Landroidx/compose/foundation/interaction/InteractionSource;ZFLandroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/Composer;I)Landroidx/compose/material/ripple/RippleIndicationInstance;
-HSPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1$1;-><init>(Landroidx/compose/material/ripple/RippleIndicationInstance;Lkotlinx/coroutines/CoroutineScope;)V
-HSPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1$1;->emit(Landroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1;-><init>(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/material/ripple/RippleIndicationInstance;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/material/ripple/Ripple;-><init>(ZFLandroidx/compose/runtime/State;)V
-HSPLandroidx/compose/material/ripple/Ripple;-><init>(ZFLandroidx/compose/runtime/State;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/material/ripple/Ripple;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/material/ripple/Ripple;->rememberUpdatedInstance(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/IndicationInstance;
-HSPLandroidx/compose/material/ripple/RippleAlpha;-><clinit>()V
-HSPLandroidx/compose/material/ripple/RippleAlpha;-><init>(FFFF)V
-HSPLandroidx/compose/material/ripple/RippleAlpha;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/material/ripple/RippleAlpha;->getPressedAlpha()F
-HSPLandroidx/compose/material/ripple/RippleAnimationKt;-><clinit>()V
-HSPLandroidx/compose/material/ripple/RippleAnimationKt;->getRippleEndRadius-cSwnlzA(Landroidx/compose/ui/unit/Density;ZJ)F
-HSPLandroidx/compose/material/ripple/RippleContainer;-><init>(Landroid/content/Context;)V
-HSPLandroidx/compose/material/ripple/RippleContainer;->disposeRippleIfNeeded(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)V
-HSPLandroidx/compose/material/ripple/RippleContainer;->getRippleHostView(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)Landroidx/compose/material/ripple/RippleHostView;
-HSPLandroidx/compose/material/ripple/RippleHostMap;-><init>()V
-HSPLandroidx/compose/material/ripple/RippleHostMap;->get(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)Landroidx/compose/material/ripple/RippleHostView;
-HSPLandroidx/compose/material/ripple/RippleHostMap;->remove(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)V
-HSPLandroidx/compose/material/ripple/RippleHostMap;->set(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;Landroidx/compose/material/ripple/RippleHostView;)V
-HSPLandroidx/compose/material/ripple/RippleHostView$Companion;-><init>()V
-HSPLandroidx/compose/material/ripple/RippleHostView$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/material/ripple/RippleHostView;-><clinit>()V
-HSPLandroidx/compose/material/ripple/RippleHostView;-><init>(Landroid/content/Context;)V
-HSPLandroidx/compose/material/ripple/RippleHostView;->addRipple-KOepWvA(Landroidx/compose/foundation/interaction/PressInteraction$Press;ZJIJFLkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/material/ripple/RippleHostView;->createRipple(Z)V
-HSPLandroidx/compose/material/ripple/RippleHostView;->disposeRipple()V
-HSPLandroidx/compose/material/ripple/RippleHostView;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V
-HSPLandroidx/compose/material/ripple/RippleHostView;->refreshDrawableState()V
-HSPLandroidx/compose/material/ripple/RippleHostView;->removeRipple()V
-HSPLandroidx/compose/material/ripple/RippleHostView;->setRippleState(Z)V
-HSPLandroidx/compose/material/ripple/RippleHostView;->updateRippleProperties-biQXAtU(JIJF)V
-HSPLandroidx/compose/material/ripple/RippleIndicationInstance;-><init>(ZLandroidx/compose/runtime/State;)V
-HSPLandroidx/compose/material/ripple/RippleIndicationInstance;->drawStateLayer-H2RKhps(Landroidx/compose/ui/graphics/drawscope/DrawScope;FJ)V
-HSPLandroidx/compose/material/ripple/RippleKt;-><clinit>()V
-HSPLandroidx/compose/material/ripple/RippleKt;->rememberRipple-9IZ8Weo(ZFJLandroidx/compose/runtime/Composer;II)Landroidx/compose/foundation/Indication;
-HSPLandroidx/compose/material/ripple/RippleThemeKt$LocalRippleTheme$1;-><clinit>()V
-HSPLandroidx/compose/material/ripple/RippleThemeKt$LocalRippleTheme$1;-><init>()V
-HSPLandroidx/compose/material/ripple/RippleThemeKt;-><clinit>()V
-HSPLandroidx/compose/material/ripple/RippleThemeKt;->getLocalRippleTheme()Landroidx/compose/runtime/ProvidableCompositionLocal;
-HSPLandroidx/compose/material/ripple/StateLayer;-><init>(ZLandroidx/compose/runtime/State;)V
-HSPLandroidx/compose/material/ripple/StateLayer;->drawStateLayer-H2RKhps(Landroidx/compose/ui/graphics/drawscope/DrawScope;FJ)V
-HSPLandroidx/compose/material/ripple/UnprojectedRipple$Companion;-><init>()V
-HSPLandroidx/compose/material/ripple/UnprojectedRipple$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/material/ripple/UnprojectedRipple$MRadiusHelper;-><clinit>()V
-HSPLandroidx/compose/material/ripple/UnprojectedRipple$MRadiusHelper;-><init>()V
-HSPLandroidx/compose/material/ripple/UnprojectedRipple$MRadiusHelper;->setRadius(Landroid/graphics/drawable/RippleDrawable;I)V
-HSPLandroidx/compose/material/ripple/UnprojectedRipple;-><clinit>()V
-HSPLandroidx/compose/material/ripple/UnprojectedRipple;-><init>(Z)V
-HSPLandroidx/compose/material/ripple/UnprojectedRipple;->calculateRippleColor-5vOe2sY(JF)J
-HSPLandroidx/compose/material/ripple/UnprojectedRipple;->getDirtyBounds()Landroid/graphics/Rect;
-HSPLandroidx/compose/material/ripple/UnprojectedRipple;->isProjected()Z
-HSPLandroidx/compose/material/ripple/UnprojectedRipple;->setColor-DxMtmZc(JF)V
-HSPLandroidx/compose/material/ripple/UnprojectedRipple;->trySetRadius(I)V
-HSPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$1$1;-><init>(Landroidx/compose/material3/TopAppBarScrollBehavior;F)V
-HSPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$1$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$1$1;->invoke()V
-HSPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$2;-><init>(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/material3/TopAppBarColors;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;ILandroidx/compose/material3/TopAppBarScrollBehavior;)V
-HSPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$2;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$3;-><init>(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/material3/TopAppBarColors;Landroidx/compose/material3/TopAppBarScrollBehavior;II)V
-HSPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$actionsRow$1;-><init>(Lkotlin/jvm/functions/Function3;I)V
-HSPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$actionsRow$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$actionsRow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/material3/AppBarKt$TopAppBarLayout$1$3$1;-><init>(JLkotlin/jvm/functions/Function2;I)V
-HSPLandroidx/compose/material3/AppBarKt$TopAppBarLayout$1$3$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/material3/AppBarKt$TopAppBarLayout$1$3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/material3/AppBarKt$TopAppBarLayout$2$measure$1;-><init>(Landroidx/compose/ui/layout/Placeable;ILandroidx/compose/ui/layout/Placeable;Landroidx/compose/foundation/layout/Arrangement$Horizontal;JLandroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/foundation/layout/Arrangement$Vertical;II)V
-HSPLandroidx/compose/material3/AppBarKt$TopAppBarLayout$2$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
-HSPLandroidx/compose/material3/AppBarKt$TopAppBarLayout$2$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/material3/AppBarKt$TopAppBarLayout$2;-><init>(FLandroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/foundation/layout/Arrangement$Vertical;I)V
-HSPLandroidx/compose/material3/AppBarKt$TopAppBarLayout$2;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/material3/AppBarKt;-><clinit>()V
-HSPLandroidx/compose/material3/AppBarKt;->SingleRowTopAppBar$lambda$3(Landroidx/compose/runtime/State;)J
-HSPLandroidx/compose/material3/AppBarKt;->SingleRowTopAppBar(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/material3/TopAppBarColors;Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/runtime/Composer;II)V
-HSPLandroidx/compose/material3/AppBarKt;->TopAppBar(Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/material3/TopAppBarColors;Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/runtime/Composer;II)V
-HSPLandroidx/compose/material3/AppBarKt;->TopAppBarLayout-kXwM9vE(Landroidx/compose/ui/Modifier;FJJJLkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;FLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;IZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
-HSPLandroidx/compose/material3/AppBarKt;->access$TopAppBarLayout-kXwM9vE(Landroidx/compose/ui/Modifier;FJJJLkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;FLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;IZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
-HSPLandroidx/compose/material3/AppBarKt;->access$getTopAppBarTitleInset$p()F
-HSPLandroidx/compose/material3/ButtonColors;-><clinit>()V
-HSPLandroidx/compose/material3/ButtonColors;-><init>(JJJJ)V
-HSPLandroidx/compose/material3/ButtonColors;-><init>(JJJJLkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/material3/ButtonColors;->containerColor$material3_release(ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State;
-HSPLandroidx/compose/material3/ButtonColors;->contentColor$material3_release(ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State;
-HSPLandroidx/compose/material3/ButtonColors;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/material3/ButtonDefaults;-><clinit>()V
-HSPLandroidx/compose/material3/ButtonDefaults;-><init>()V
-HSPLandroidx/compose/material3/ButtonDefaults;->getMinHeight-D9Ej5fM()F
-HSPLandroidx/compose/material3/ButtonDefaults;->getMinWidth-D9Ej5fM()F
-HSPLandroidx/compose/material3/ButtonDefaults;->getTextShape(Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/graphics/Shape;
-HSPLandroidx/compose/material3/ButtonDefaults;->textButtonColors-ro_MJ88(JJJJLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/ButtonColors;
-HSPLandroidx/compose/material3/ButtonKt$Button$2$1$1;-><init>(Landroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/functions/Function3;I)V
-HSPLandroidx/compose/material3/ButtonKt$Button$2$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/material3/ButtonKt$Button$2$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/material3/ButtonKt$Button$2$1;-><init>(Landroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/functions/Function3;I)V
-HSPLandroidx/compose/material3/ButtonKt$Button$2$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/material3/ButtonKt$Button$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/material3/ButtonKt$Button$2;-><init>(JLandroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/functions/Function3;I)V
-HSPLandroidx/compose/material3/ButtonKt$Button$2;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/material3/ButtonKt$Button$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/material3/ButtonKt$Button$3;-><init>(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/ButtonColors;Landroidx/compose/material3/ButtonElevation;Landroidx/compose/foundation/BorderStroke;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function3;II)V
-HSPLandroidx/compose/material3/ButtonKt$TextButton$2;-><init>(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/ButtonColors;Landroidx/compose/material3/ButtonElevation;Landroidx/compose/foundation/BorderStroke;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function3;II)V
-HSPLandroidx/compose/material3/ButtonKt;->Button(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/ButtonColors;Landroidx/compose/material3/ButtonElevation;Landroidx/compose/foundation/BorderStroke;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
-HSPLandroidx/compose/material3/ButtonKt;->TextButton(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/ButtonColors;Landroidx/compose/material3/ButtonElevation;Landroidx/compose/foundation/BorderStroke;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
-HSPLandroidx/compose/material3/CardColors;-><clinit>()V
-HSPLandroidx/compose/material3/CardColors;-><init>(JJJJ)V
-HSPLandroidx/compose/material3/CardColors;-><init>(JJJJLkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/material3/CardColors;->containerColor$material3_release(ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State;
-HSPLandroidx/compose/material3/CardColors;->contentColor$material3_release(ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State;
-HSPLandroidx/compose/material3/CardColors;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/material3/CardDefaults;-><clinit>()V
-HSPLandroidx/compose/material3/CardDefaults;-><init>()V
-HSPLandroidx/compose/material3/CardDefaults;->cardColors-ro_MJ88(JJJJLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/CardColors;
-HSPLandroidx/compose/material3/CardDefaults;->cardElevation-aqJV_2Y(FFFFFFLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/CardElevation;
-HSPLandroidx/compose/material3/CardDefaults;->getShape(Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/graphics/Shape;
-HSPLandroidx/compose/material3/CardElevation;-><clinit>()V
-HSPLandroidx/compose/material3/CardElevation;-><init>(FFFFFF)V
-HSPLandroidx/compose/material3/CardElevation;-><init>(FFFFFFLkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/material3/CardElevation;->access$getDefaultElevation$p(Landroidx/compose/material3/CardElevation;)F
-HSPLandroidx/compose/material3/CardElevation;->shadowElevation$material3_release(ZLandroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State;
-HSPLandroidx/compose/material3/CardElevation;->tonalElevation$material3_release(ZLandroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State;
-HSPLandroidx/compose/material3/CardKt$Card$1;-><init>(Lkotlin/jvm/functions/Function3;I)V
-HSPLandroidx/compose/material3/CardKt$Card$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/material3/CardKt$Card$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/material3/CardKt$Card$2;-><init>(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/CardColors;Landroidx/compose/material3/CardElevation;Landroidx/compose/foundation/BorderStroke;Lkotlin/jvm/functions/Function3;II)V
-HSPLandroidx/compose/material3/CardKt;->Card(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/CardColors;Landroidx/compose/material3/CardElevation;Landroidx/compose/foundation/BorderStroke;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
-HSPLandroidx/compose/material3/ChipColors;-><clinit>()V
-HSPLandroidx/compose/material3/ChipColors;-><init>(JJJJJJJJ)V
-HSPLandroidx/compose/material3/ChipColors;-><init>(JJJJJJJJLkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/material3/ChipColors;->containerColor$material3_release(ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State;
-HSPLandroidx/compose/material3/ChipColors;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/material3/ChipColors;->labelColor$material3_release(ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State;
-HSPLandroidx/compose/material3/ChipColors;->leadingIconContentColor$material3_release(ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State;
-HSPLandroidx/compose/material3/ChipColors;->trailingIconContentColor$material3_release(ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State;
-HSPLandroidx/compose/material3/ChipElevation$animateElevation$1$1$1;-><init>(Landroidx/compose/runtime/snapshots/SnapshotStateList;)V
-HSPLandroidx/compose/material3/ChipElevation$animateElevation$1$1;-><init>(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/snapshots/SnapshotStateList;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/material3/ChipElevation$animateElevation$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/material3/ChipElevation$animateElevation$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/material3/ChipElevation$animateElevation$3;-><init>(Landroidx/compose/animation/core/Animatable;Landroidx/compose/material3/ChipElevation;FLandroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/material3/ChipElevation$animateElevation$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/material3/ChipElevation$animateElevation$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/material3/ChipElevation;-><clinit>()V
-HSPLandroidx/compose/material3/ChipElevation;-><init>(FFFFFF)V
-HSPLandroidx/compose/material3/ChipElevation;-><init>(FFFFFFLkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/material3/ChipElevation;->access$getPressedElevation$p(Landroidx/compose/material3/ChipElevation;)F
-HSPLandroidx/compose/material3/ChipElevation;->animateElevation(ZLandroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State;
-HSPLandroidx/compose/material3/ChipElevation;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/material3/ChipElevation;->shadowElevation$material3_release(ZLandroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State;
-HSPLandroidx/compose/material3/ChipElevation;->tonalElevation$material3_release(ZLandroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State;
-HSPLandroidx/compose/material3/ChipKt$Chip$1;-><init>(Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;JLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/material3/ChipColors;ZIFLandroidx/compose/foundation/layout/PaddingValues;I)V
-HSPLandroidx/compose/material3/ChipKt$Chip$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/material3/ChipKt$Chip$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/material3/ChipKt$Chip$2;-><init>(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function0;ZLkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;JLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/ChipColors;Landroidx/compose/material3/ChipElevation;Landroidx/compose/foundation/BorderStroke;FLandroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/interaction/MutableInteractionSource;II)V
-HSPLandroidx/compose/material3/ChipKt$ChipContent$1;-><init>(FLandroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/functions/Function2;ILkotlin/jvm/functions/Function2;JLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;J)V
-HSPLandroidx/compose/material3/ChipKt$ChipContent$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/material3/ChipKt$ChipContent$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/material3/ChipKt$SuggestionChip$2;-><init>(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function2;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/ChipColors;Landroidx/compose/material3/ChipElevation;Landroidx/compose/material3/ChipBorder;Landroidx/compose/foundation/interaction/MutableInteractionSource;II)V
-HSPLandroidx/compose/material3/ChipKt;-><clinit>()V
-HSPLandroidx/compose/material3/ChipKt;->Chip-nkUnTEs(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function0;ZLkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;JLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/ChipColors;Landroidx/compose/material3/ChipElevation;Landroidx/compose/foundation/BorderStroke;FLandroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/Composer;II)V
-HSPLandroidx/compose/material3/ChipKt;->ChipContent-fe0OD_I(Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;JLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;JJFLandroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/material3/ChipKt;->SuggestionChip(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function2;Landroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/ChipColors;Landroidx/compose/material3/ChipElevation;Landroidx/compose/material3/ChipBorder;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/Composer;II)V
-HSPLandroidx/compose/material3/ChipKt;->access$ChipContent-fe0OD_I(Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;JLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;JJFLandroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/material3/ChipKt;->access$getHorizontalElementsPadding$p()F
-HSPLandroidx/compose/material3/ColorResourceHelper;-><clinit>()V
-HSPLandroidx/compose/material3/ColorResourceHelper;-><init>()V
-HSPLandroidx/compose/material3/ColorResourceHelper;->getColor-WaAFU9c(Landroid/content/Context;I)J
-HSPLandroidx/compose/material3/ColorScheme;-><clinit>()V
-HSPLandroidx/compose/material3/ColorScheme;-><init>(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJ)V
-HSPLandroidx/compose/material3/ColorScheme;-><init>(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJLkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/material3/ColorScheme;->copy-G1PFc-w$default(Landroidx/compose/material3/ColorScheme;JJJJJJJJJJJJJJJJJJJJJJJJJJJJJILjava/lang/Object;)Landroidx/compose/material3/ColorScheme;
-HSPLandroidx/compose/material3/ColorScheme;->copy-G1PFc-w(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJ)Landroidx/compose/material3/ColorScheme;
-HSPLandroidx/compose/material3/ColorScheme;->getBackground-0d7_KjU()J
-HSPLandroidx/compose/material3/ColorScheme;->getError-0d7_KjU()J
-HSPLandroidx/compose/material3/ColorScheme;->getErrorContainer-0d7_KjU()J
-HSPLandroidx/compose/material3/ColorScheme;->getInverseOnSurface-0d7_KjU()J
-HSPLandroidx/compose/material3/ColorScheme;->getInversePrimary-0d7_KjU()J
-HSPLandroidx/compose/material3/ColorScheme;->getInverseSurface-0d7_KjU()J
-HSPLandroidx/compose/material3/ColorScheme;->getOnBackground-0d7_KjU()J
-HSPLandroidx/compose/material3/ColorScheme;->getOnError-0d7_KjU()J
-HSPLandroidx/compose/material3/ColorScheme;->getOnErrorContainer-0d7_KjU()J
-HSPLandroidx/compose/material3/ColorScheme;->getOnPrimary-0d7_KjU()J
-HSPLandroidx/compose/material3/ColorScheme;->getOnPrimaryContainer-0d7_KjU()J
-HSPLandroidx/compose/material3/ColorScheme;->getOnSecondary-0d7_KjU()J
-HSPLandroidx/compose/material3/ColorScheme;->getOnSecondaryContainer-0d7_KjU()J
-HSPLandroidx/compose/material3/ColorScheme;->getOnSurface-0d7_KjU()J
-HSPLandroidx/compose/material3/ColorScheme;->getOnSurfaceVariant-0d7_KjU()J
-HSPLandroidx/compose/material3/ColorScheme;->getOnTertiary-0d7_KjU()J
-HSPLandroidx/compose/material3/ColorScheme;->getOnTertiaryContainer-0d7_KjU()J
-HSPLandroidx/compose/material3/ColorScheme;->getOutline-0d7_KjU()J
-HSPLandroidx/compose/material3/ColorScheme;->getOutlineVariant-0d7_KjU()J
-HSPLandroidx/compose/material3/ColorScheme;->getPrimary-0d7_KjU()J
-HSPLandroidx/compose/material3/ColorScheme;->getPrimaryContainer-0d7_KjU()J
-HSPLandroidx/compose/material3/ColorScheme;->getScrim-0d7_KjU()J
-HSPLandroidx/compose/material3/ColorScheme;->getSecondary-0d7_KjU()J
-HSPLandroidx/compose/material3/ColorScheme;->getSecondaryContainer-0d7_KjU()J
-HSPLandroidx/compose/material3/ColorScheme;->getSurface-0d7_KjU()J
-HSPLandroidx/compose/material3/ColorScheme;->getSurfaceTint-0d7_KjU()J
-HSPLandroidx/compose/material3/ColorScheme;->getSurfaceVariant-0d7_KjU()J
-HSPLandroidx/compose/material3/ColorScheme;->getTertiary-0d7_KjU()J
-HSPLandroidx/compose/material3/ColorScheme;->getTertiaryContainer-0d7_KjU()J
-HSPLandroidx/compose/material3/ColorScheme;->setBackground-8_81llA$material3_release(J)V
-HSPLandroidx/compose/material3/ColorScheme;->setError-8_81llA$material3_release(J)V
-HSPLandroidx/compose/material3/ColorScheme;->setErrorContainer-8_81llA$material3_release(J)V
-HSPLandroidx/compose/material3/ColorScheme;->setInverseOnSurface-8_81llA$material3_release(J)V
-HSPLandroidx/compose/material3/ColorScheme;->setInversePrimary-8_81llA$material3_release(J)V
-HSPLandroidx/compose/material3/ColorScheme;->setInverseSurface-8_81llA$material3_release(J)V
-HSPLandroidx/compose/material3/ColorScheme;->setOnBackground-8_81llA$material3_release(J)V
-HSPLandroidx/compose/material3/ColorScheme;->setOnError-8_81llA$material3_release(J)V
-HSPLandroidx/compose/material3/ColorScheme;->setOnErrorContainer-8_81llA$material3_release(J)V
-HSPLandroidx/compose/material3/ColorScheme;->setOnPrimary-8_81llA$material3_release(J)V
-HSPLandroidx/compose/material3/ColorScheme;->setOnPrimaryContainer-8_81llA$material3_release(J)V
-HSPLandroidx/compose/material3/ColorScheme;->setOnSecondary-8_81llA$material3_release(J)V
-HSPLandroidx/compose/material3/ColorScheme;->setOnSecondaryContainer-8_81llA$material3_release(J)V
-HSPLandroidx/compose/material3/ColorScheme;->setOnSurface-8_81llA$material3_release(J)V
-HSPLandroidx/compose/material3/ColorScheme;->setOnSurfaceVariant-8_81llA$material3_release(J)V
-HSPLandroidx/compose/material3/ColorScheme;->setOnTertiary-8_81llA$material3_release(J)V
-HSPLandroidx/compose/material3/ColorScheme;->setOnTertiaryContainer-8_81llA$material3_release(J)V
-HSPLandroidx/compose/material3/ColorScheme;->setOutline-8_81llA$material3_release(J)V
-HSPLandroidx/compose/material3/ColorScheme;->setOutlineVariant-8_81llA$material3_release(J)V
-HSPLandroidx/compose/material3/ColorScheme;->setPrimary-8_81llA$material3_release(J)V
-HSPLandroidx/compose/material3/ColorScheme;->setPrimaryContainer-8_81llA$material3_release(J)V
-HSPLandroidx/compose/material3/ColorScheme;->setScrim-8_81llA$material3_release(J)V
-HSPLandroidx/compose/material3/ColorScheme;->setSecondary-8_81llA$material3_release(J)V
-HSPLandroidx/compose/material3/ColorScheme;->setSecondaryContainer-8_81llA$material3_release(J)V
-HSPLandroidx/compose/material3/ColorScheme;->setSurface-8_81llA$material3_release(J)V
-HSPLandroidx/compose/material3/ColorScheme;->setSurfaceTint-8_81llA$material3_release(J)V
-HSPLandroidx/compose/material3/ColorScheme;->setSurfaceVariant-8_81llA$material3_release(J)V
-HSPLandroidx/compose/material3/ColorScheme;->setTertiary-8_81llA$material3_release(J)V
-HSPLandroidx/compose/material3/ColorScheme;->setTertiaryContainer-8_81llA$material3_release(J)V
-HSPLandroidx/compose/material3/ColorSchemeKt$LocalColorScheme$1;-><clinit>()V
-HSPLandroidx/compose/material3/ColorSchemeKt$LocalColorScheme$1;-><init>()V
-HSPLandroidx/compose/material3/ColorSchemeKt$WhenMappings;-><clinit>()V
-HSPLandroidx/compose/material3/ColorSchemeKt;-><clinit>()V
-HSPLandroidx/compose/material3/ColorSchemeKt;->applyTonalElevation-Hht5A8o(Landroidx/compose/material3/ColorScheme;JF)J
-HSPLandroidx/compose/material3/ColorSchemeKt;->contentColorFor-4WTKRHQ(Landroidx/compose/material3/ColorScheme;J)J
-HSPLandroidx/compose/material3/ColorSchemeKt;->contentColorFor-ek8zF_U(JLandroidx/compose/runtime/Composer;I)J
-HSPLandroidx/compose/material3/ColorSchemeKt;->darkColorScheme-G1PFc-w$default(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJILjava/lang/Object;)Landroidx/compose/material3/ColorScheme;
-HSPLandroidx/compose/material3/ColorSchemeKt;->darkColorScheme-G1PFc-w(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJ)Landroidx/compose/material3/ColorScheme;
-HSPLandroidx/compose/material3/ColorSchemeKt;->fromToken(Landroidx/compose/material3/ColorScheme;Landroidx/compose/material3/tokens/ColorSchemeKeyTokens;)J
-HSPLandroidx/compose/material3/ColorSchemeKt;->getLocalColorScheme()Landroidx/compose/runtime/ProvidableCompositionLocal;
-HSPLandroidx/compose/material3/ColorSchemeKt;->surfaceColorAtElevation-3ABfNKs(Landroidx/compose/material3/ColorScheme;F)J
-HSPLandroidx/compose/material3/ColorSchemeKt;->toColor(Landroidx/compose/material3/tokens/ColorSchemeKeyTokens;Landroidx/compose/runtime/Composer;I)J
-HSPLandroidx/compose/material3/ColorSchemeKt;->updateColorSchemeFrom(Landroidx/compose/material3/ColorScheme;Landroidx/compose/material3/ColorScheme;)V
-HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-1$1;-><clinit>()V
-HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-1$1;-><init>()V
-HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-10$1;-><clinit>()V
-HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-10$1;-><init>()V
-HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-11$1;-><clinit>()V
-HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-11$1;-><init>()V
-HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-12$1;-><clinit>()V
-HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-12$1;-><init>()V
-HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-2$1;-><clinit>()V
-HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-2$1;-><init>()V
-HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-2$1;->invoke(Landroidx/compose/foundation/layout/RowScope;Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-3$1;-><clinit>()V
-HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-3$1;-><init>()V
-HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-4$1;-><clinit>()V
-HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-4$1;-><init>()V
-HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-5$1;-><clinit>()V
-HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-5$1;-><init>()V
-HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-6$1;-><clinit>()V
-HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-6$1;-><init>()V
-HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-7$1;-><clinit>()V
-HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-7$1;-><init>()V
-HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-8$1;-><clinit>()V
-HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-8$1;-><init>()V
-HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-9$1;-><clinit>()V
-HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-9$1;-><init>()V
-HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt;-><clinit>()V
-HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt;-><init>()V
-HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt;->getLambda-2$material3_release()Lkotlin/jvm/functions/Function3;
-HSPLandroidx/compose/material3/ContentColorKt$LocalContentColor$1;-><clinit>()V
-HSPLandroidx/compose/material3/ContentColorKt$LocalContentColor$1;-><init>()V
-HSPLandroidx/compose/material3/ContentColorKt$LocalContentColor$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/material3/ContentColorKt$LocalContentColor$1;->invoke-0d7_KjU()J
-HSPLandroidx/compose/material3/ContentColorKt;-><clinit>()V
-HSPLandroidx/compose/material3/ContentColorKt;->getLocalContentColor()Landroidx/compose/runtime/ProvidableCompositionLocal;
-HSPLandroidx/compose/material3/DynamicTonalPaletteKt;->dynamicDarkColorScheme(Landroid/content/Context;)Landroidx/compose/material3/ColorScheme;
-HSPLandroidx/compose/material3/DynamicTonalPaletteKt;->dynamicTonalPalette(Landroid/content/Context;)Landroidx/compose/material3/TonalPalette;
-HSPLandroidx/compose/material3/ElevationDefaults;-><clinit>()V
-HSPLandroidx/compose/material3/ElevationDefaults;-><init>()V
-HSPLandroidx/compose/material3/ElevationDefaults;->outgoingAnimationSpecForInteraction(Landroidx/compose/foundation/interaction/Interaction;)Landroidx/compose/animation/core/AnimationSpec;
-HSPLandroidx/compose/material3/ElevationKt;-><clinit>()V
-HSPLandroidx/compose/material3/ElevationKt;->access$getDefaultOutgoingSpec$p()Landroidx/compose/animation/core/TweenSpec;
-HSPLandroidx/compose/material3/ElevationKt;->animateElevation-rAjV9yQ(Landroidx/compose/animation/core/Animatable;FLandroidx/compose/foundation/interaction/Interaction;Landroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/material3/IconButtonColors;-><clinit>()V
-HSPLandroidx/compose/material3/IconButtonColors;-><init>(JJJJ)V
-HSPLandroidx/compose/material3/IconButtonColors;-><init>(JJJJLkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/material3/IconButtonColors;->containerColor$material3_release(ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State;
-HSPLandroidx/compose/material3/IconButtonColors;->contentColor$material3_release(ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State;
-HSPLandroidx/compose/material3/IconButtonDefaults;-><clinit>()V
-HSPLandroidx/compose/material3/IconButtonDefaults;-><init>()V
-HSPLandroidx/compose/material3/IconButtonDefaults;->iconButtonColors-ro_MJ88(JJJJLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/IconButtonColors;
-HSPLandroidx/compose/material3/IconButtonKt$IconButton$3;-><init>(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/material3/IconButtonColors;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function2;II)V
-HSPLandroidx/compose/material3/IconButtonKt;->IconButton(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/material3/IconButtonColors;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
-HSPLandroidx/compose/material3/IconKt$Icon$3;-><init>(Landroidx/compose/ui/graphics/painter/Painter;Ljava/lang/String;Landroidx/compose/ui/Modifier;JII)V
-HSPLandroidx/compose/material3/IconKt$Icon$semantics$1$1;-><init>(Ljava/lang/String;)V
-HSPLandroidx/compose/material3/IconKt$Icon$semantics$1$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V
-HSPLandroidx/compose/material3/IconKt$Icon$semantics$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/material3/IconKt;-><clinit>()V
-HSPLandroidx/compose/material3/IconKt;->Icon-ww6aTOc(Landroidx/compose/ui/graphics/painter/Painter;Ljava/lang/String;Landroidx/compose/ui/Modifier;JLandroidx/compose/runtime/Composer;II)V
-HSPLandroidx/compose/material3/IconKt;->Icon-ww6aTOc(Landroidx/compose/ui/graphics/vector/ImageVector;Ljava/lang/String;Landroidx/compose/ui/Modifier;JLandroidx/compose/runtime/Composer;II)V
-HSPLandroidx/compose/material3/IconKt;->defaultSizeFor(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/painter/Painter;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/material3/IconKt;->isInfinite-uvyYCjk(J)Z
-HSPLandroidx/compose/material3/InteractiveComponentSizeKt$LocalMinimumInteractiveComponentEnforcement$1;-><clinit>()V
-HSPLandroidx/compose/material3/InteractiveComponentSizeKt$LocalMinimumInteractiveComponentEnforcement$1;-><init>()V
-HSPLandroidx/compose/material3/InteractiveComponentSizeKt$LocalMinimumInteractiveComponentEnforcement$1;->invoke()Ljava/lang/Boolean;
-HSPLandroidx/compose/material3/InteractiveComponentSizeKt$LocalMinimumInteractiveComponentEnforcement$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/material3/InteractiveComponentSizeKt$minimumInteractiveComponentSize$2;-><clinit>()V
-HSPLandroidx/compose/material3/InteractiveComponentSizeKt$minimumInteractiveComponentSize$2;-><init>()V
-HSPLandroidx/compose/material3/InteractiveComponentSizeKt$minimumInteractiveComponentSize$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/material3/InteractiveComponentSizeKt$minimumInteractiveComponentSize$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/material3/InteractiveComponentSizeKt;-><clinit>()V
-HSPLandroidx/compose/material3/InteractiveComponentSizeKt;->access$getMinimumInteractiveComponentSize$p()J
-HSPLandroidx/compose/material3/InteractiveComponentSizeKt;->getLocalMinimumInteractiveComponentEnforcement()Landroidx/compose/runtime/ProvidableCompositionLocal;
-HSPLandroidx/compose/material3/InteractiveComponentSizeKt;->minimumInteractiveComponentSize(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/material3/MaterialRippleTheme;-><clinit>()V
-HSPLandroidx/compose/material3/MaterialRippleTheme;-><init>()V
-HSPLandroidx/compose/material3/MaterialRippleTheme;->defaultColor-WaAFU9c(Landroidx/compose/runtime/Composer;I)J
-HSPLandroidx/compose/material3/MaterialRippleTheme;->rippleAlpha(Landroidx/compose/runtime/Composer;I)Landroidx/compose/material/ripple/RippleAlpha;
-HSPLandroidx/compose/material3/MaterialTheme;-><clinit>()V
-HSPLandroidx/compose/material3/MaterialTheme;-><init>()V
-HSPLandroidx/compose/material3/MaterialTheme;->getColorScheme(Landroidx/compose/runtime/Composer;I)Landroidx/compose/material3/ColorScheme;
-HSPLandroidx/compose/material3/MaterialTheme;->getShapes(Landroidx/compose/runtime/Composer;I)Landroidx/compose/material3/Shapes;
-HSPLandroidx/compose/material3/MaterialTheme;->getTypography(Landroidx/compose/runtime/Composer;I)Landroidx/compose/material3/Typography;
-HSPLandroidx/compose/material3/MaterialThemeKt$MaterialTheme$1;-><init>(Landroidx/compose/material3/Typography;Lkotlin/jvm/functions/Function2;I)V
-HSPLandroidx/compose/material3/MaterialThemeKt$MaterialTheme$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/material3/MaterialThemeKt$MaterialTheme$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/material3/MaterialThemeKt$MaterialTheme$2;-><init>(Landroidx/compose/material3/ColorScheme;Landroidx/compose/material3/Shapes;Landroidx/compose/material3/Typography;Lkotlin/jvm/functions/Function2;II)V
-HSPLandroidx/compose/material3/MaterialThemeKt;-><clinit>()V
-HSPLandroidx/compose/material3/MaterialThemeKt;->MaterialTheme(Landroidx/compose/material3/ColorScheme;Landroidx/compose/material3/Shapes;Landroidx/compose/material3/Typography;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
-HSPLandroidx/compose/material3/MaterialThemeKt;->access$getDefaultRippleAlpha$p()Landroidx/compose/material/ripple/RippleAlpha;
-HSPLandroidx/compose/material3/MaterialThemeKt;->rememberTextSelectionColors(Landroidx/compose/material3/ColorScheme;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/text/selection/TextSelectionColors;
-HSPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier$measure$1;-><init>(ILandroidx/compose/ui/layout/Placeable;I)V
-HSPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
-HSPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier;-><init>(J)V
-HSPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier;-><init>(JLkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/material3/ShapeDefaults;-><clinit>()V
-HSPLandroidx/compose/material3/ShapeDefaults;-><init>()V
-HSPLandroidx/compose/material3/ShapeDefaults;->getExtraLarge()Landroidx/compose/foundation/shape/CornerBasedShape;
-HSPLandroidx/compose/material3/ShapeDefaults;->getExtraSmall()Landroidx/compose/foundation/shape/CornerBasedShape;
-HSPLandroidx/compose/material3/ShapeDefaults;->getLarge()Landroidx/compose/foundation/shape/CornerBasedShape;
-HSPLandroidx/compose/material3/ShapeDefaults;->getMedium()Landroidx/compose/foundation/shape/CornerBasedShape;
-HSPLandroidx/compose/material3/ShapeDefaults;->getSmall()Landroidx/compose/foundation/shape/CornerBasedShape;
-HSPLandroidx/compose/material3/Shapes;-><clinit>()V
-HSPLandroidx/compose/material3/Shapes;-><init>(Landroidx/compose/foundation/shape/CornerBasedShape;Landroidx/compose/foundation/shape/CornerBasedShape;Landroidx/compose/foundation/shape/CornerBasedShape;Landroidx/compose/foundation/shape/CornerBasedShape;Landroidx/compose/foundation/shape/CornerBasedShape;)V
-HSPLandroidx/compose/material3/Shapes;-><init>(Landroidx/compose/foundation/shape/CornerBasedShape;Landroidx/compose/foundation/shape/CornerBasedShape;Landroidx/compose/foundation/shape/CornerBasedShape;Landroidx/compose/foundation/shape/CornerBasedShape;Landroidx/compose/foundation/shape/CornerBasedShape;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/material3/Shapes;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/material3/Shapes;->getLarge()Landroidx/compose/foundation/shape/CornerBasedShape;
-HSPLandroidx/compose/material3/Shapes;->getMedium()Landroidx/compose/foundation/shape/CornerBasedShape;
-HSPLandroidx/compose/material3/ShapesKt$LocalShapes$1;-><clinit>()V
-HSPLandroidx/compose/material3/ShapesKt$LocalShapes$1;-><init>()V
-HSPLandroidx/compose/material3/ShapesKt$LocalShapes$1;->invoke()Landroidx/compose/material3/Shapes;
-HSPLandroidx/compose/material3/ShapesKt$LocalShapes$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/material3/ShapesKt$WhenMappings;-><clinit>()V
-HSPLandroidx/compose/material3/ShapesKt;-><clinit>()V
-HSPLandroidx/compose/material3/ShapesKt;->fromToken(Landroidx/compose/material3/Shapes;Landroidx/compose/material3/tokens/ShapeKeyTokens;)Landroidx/compose/ui/graphics/Shape;
-HSPLandroidx/compose/material3/ShapesKt;->getLocalShapes()Landroidx/compose/runtime/ProvidableCompositionLocal;
-HSPLandroidx/compose/material3/ShapesKt;->toShape(Landroidx/compose/material3/tokens/ShapeKeyTokens;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/graphics/Shape;
-HSPLandroidx/compose/material3/SuggestionChipDefaults;-><clinit>()V
-HSPLandroidx/compose/material3/SuggestionChipDefaults;-><init>()V
-HSPLandroidx/compose/material3/SuggestionChipDefaults;->getHeight-D9Ej5fM()F
-HSPLandroidx/compose/material3/SuggestionChipDefaults;->suggestionChipColors-5tl4gsc(JJJJJJLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/ChipColors;
-HSPLandroidx/compose/material3/SuggestionChipDefaults;->suggestionChipElevation-aqJV_2Y(FFFFFFLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/ChipElevation;
-HSPLandroidx/compose/material3/SurfaceKt$LocalAbsoluteTonalElevation$1;-><clinit>()V
-HSPLandroidx/compose/material3/SurfaceKt$LocalAbsoluteTonalElevation$1;-><init>()V
-HSPLandroidx/compose/material3/SurfaceKt$LocalAbsoluteTonalElevation$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/material3/SurfaceKt$LocalAbsoluteTonalElevation$1;->invoke-D9Ej5fM()F
-HSPLandroidx/compose/material3/SurfaceKt$Surface$1$1;-><clinit>()V
-HSPLandroidx/compose/material3/SurfaceKt$Surface$1$1;-><init>()V
-HSPLandroidx/compose/material3/SurfaceKt$Surface$1$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V
-HSPLandroidx/compose/material3/SurfaceKt$Surface$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/material3/SurfaceKt$Surface$1$2;-><init>(Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/material3/SurfaceKt$Surface$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/material3/SurfaceKt$Surface$1$2;->invoke(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/material3/SurfaceKt$Surface$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/material3/SurfaceKt$Surface$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/material3/SurfaceKt$Surface$1;-><init>(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;JFILandroidx/compose/foundation/BorderStroke;FLkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/material3/SurfaceKt$Surface$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/material3/SurfaceKt$Surface$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/material3/SurfaceKt$Surface$3;-><init>(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;JFILandroidx/compose/foundation/BorderStroke;FLandroidx/compose/foundation/interaction/MutableInteractionSource;ZLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;I)V
-HSPLandroidx/compose/material3/SurfaceKt$Surface$3;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/material3/SurfaceKt$Surface$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/material3/SurfaceKt;-><clinit>()V
-HSPLandroidx/compose/material3/SurfaceKt;->Surface-T9BRK9s(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;JJFFLandroidx/compose/foundation/BorderStroke;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
-HSPLandroidx/compose/material3/SurfaceKt;->Surface-o_FOJdg(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;JJFFLandroidx/compose/foundation/BorderStroke;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;III)V
-HSPLandroidx/compose/material3/SurfaceKt;->access$surface-8ww4TTg(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;JLandroidx/compose/foundation/BorderStroke;F)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/material3/SurfaceKt;->access$surfaceColorAtElevation-CLU3JFs(JFLandroidx/compose/runtime/Composer;I)J
-HSPLandroidx/compose/material3/SurfaceKt;->surface-8ww4TTg(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;JLandroidx/compose/foundation/BorderStroke;F)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/material3/SurfaceKt;->surfaceColorAtElevation-CLU3JFs(JFLandroidx/compose/runtime/Composer;I)J
-HSPLandroidx/compose/material3/SystemBarsDefaultInsets_androidKt;->getSystemBarsForVisualComponents(Landroidx/compose/foundation/layout/WindowInsets$Companion;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/layout/WindowInsets;
-HSPLandroidx/compose/material3/TextKt$LocalTextStyle$1;-><clinit>()V
-HSPLandroidx/compose/material3/TextKt$LocalTextStyle$1;-><init>()V
-HSPLandroidx/compose/material3/TextKt$LocalTextStyle$1;->invoke()Landroidx/compose/ui/text/TextStyle;
-HSPLandroidx/compose/material3/TextKt$LocalTextStyle$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/material3/TextKt$ProvideTextStyle$1;-><init>(Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function2;I)V
-HSPLandroidx/compose/material3/TextKt$Text$1;-><clinit>()V
-HSPLandroidx/compose/material3/TextKt$Text$1;-><init>()V
-HSPLandroidx/compose/material3/TextKt$Text$1;->invoke(Landroidx/compose/ui/text/TextLayoutResult;)V
-HSPLandroidx/compose/material3/TextKt$Text$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/material3/TextKt;-><clinit>()V
-HSPLandroidx/compose/material3/TextKt;->ProvideTextStyle(Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/material3/TextKt;->Text--4IGK_g(Ljava/lang/String;Landroidx/compose/ui/Modifier;JJLandroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontFamily;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/text/style/TextAlign;JIZIILkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/runtime/Composer;III)V
-HSPLandroidx/compose/material3/TextKt;->getLocalTextStyle()Landroidx/compose/runtime/ProvidableCompositionLocal;
-HSPLandroidx/compose/material3/TonalPalette;-><init>(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ)V
-HSPLandroidx/compose/material3/TonalPalette;-><init>(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJLkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/material3/TonalPalette;->getNeutral10-0d7_KjU()J
-HSPLandroidx/compose/material3/TonalPalette;->getNeutral20-0d7_KjU()J
-HSPLandroidx/compose/material3/TonalPalette;->getNeutral90-0d7_KjU()J
-HSPLandroidx/compose/material3/TonalPalette;->getNeutralVariant30-0d7_KjU()J
-HSPLandroidx/compose/material3/TonalPalette;->getNeutralVariant60-0d7_KjU()J
-HSPLandroidx/compose/material3/TonalPalette;->getNeutralVariant80-0d7_KjU()J
-HSPLandroidx/compose/material3/TonalPalette;->getPrimary20-0d7_KjU()J
-HSPLandroidx/compose/material3/TonalPalette;->getPrimary30-0d7_KjU()J
-HSPLandroidx/compose/material3/TonalPalette;->getPrimary40-0d7_KjU()J
-HSPLandroidx/compose/material3/TonalPalette;->getPrimary80-0d7_KjU()J
-HSPLandroidx/compose/material3/TonalPalette;->getPrimary90-0d7_KjU()J
-HSPLandroidx/compose/material3/TonalPalette;->getSecondary20-0d7_KjU()J
-HSPLandroidx/compose/material3/TonalPalette;->getSecondary30-0d7_KjU()J
-HSPLandroidx/compose/material3/TonalPalette;->getSecondary80-0d7_KjU()J
-HSPLandroidx/compose/material3/TonalPalette;->getSecondary90-0d7_KjU()J
-HSPLandroidx/compose/material3/TonalPalette;->getTertiary20-0d7_KjU()J
-HSPLandroidx/compose/material3/TonalPalette;->getTertiary30-0d7_KjU()J
-HSPLandroidx/compose/material3/TonalPalette;->getTertiary80-0d7_KjU()J
-HSPLandroidx/compose/material3/TonalPalette;->getTertiary90-0d7_KjU()J
-HSPLandroidx/compose/material3/TopAppBarColors;-><clinit>()V
-HSPLandroidx/compose/material3/TopAppBarColors;-><init>(JJJJJ)V
-HSPLandroidx/compose/material3/TopAppBarColors;-><init>(JJJJJLkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/material3/TopAppBarColors;->containerColor-XeAY9LY$material3_release(FLandroidx/compose/runtime/Composer;I)J
-HSPLandroidx/compose/material3/TopAppBarColors;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/material3/TopAppBarColors;->getActionIconContentColor-0d7_KjU$material3_release()J
-HSPLandroidx/compose/material3/TopAppBarColors;->getNavigationIconContentColor-0d7_KjU$material3_release()J
-HSPLandroidx/compose/material3/TopAppBarColors;->getTitleContentColor-0d7_KjU$material3_release()J
-HSPLandroidx/compose/material3/TopAppBarDefaults;-><clinit>()V
-HSPLandroidx/compose/material3/TopAppBarDefaults;-><init>()V
-HSPLandroidx/compose/material3/TopAppBarDefaults;->getWindowInsets(Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/layout/WindowInsets;
-HSPLandroidx/compose/material3/TopAppBarDefaults;->topAppBarColors-zjMxDiM(JJJJJLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/TopAppBarColors;
-HSPLandroidx/compose/material3/Typography;-><clinit>()V
-HSPLandroidx/compose/material3/Typography;-><init>(Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;)V
-HSPLandroidx/compose/material3/Typography;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/material3/Typography;->getBodyLarge()Landroidx/compose/ui/text/TextStyle;
-HSPLandroidx/compose/material3/Typography;->getBodyMedium()Landroidx/compose/ui/text/TextStyle;
-HSPLandroidx/compose/material3/Typography;->getBodySmall()Landroidx/compose/ui/text/TextStyle;
-HSPLandroidx/compose/material3/Typography;->getLabelLarge()Landroidx/compose/ui/text/TextStyle;
-HSPLandroidx/compose/material3/Typography;->getTitleLarge()Landroidx/compose/ui/text/TextStyle;
-HSPLandroidx/compose/material3/Typography;->getTitleSmall()Landroidx/compose/ui/text/TextStyle;
-HSPLandroidx/compose/material3/TypographyKt$LocalTypography$1;-><clinit>()V
-HSPLandroidx/compose/material3/TypographyKt$LocalTypography$1;-><init>()V
-HSPLandroidx/compose/material3/TypographyKt$WhenMappings;-><clinit>()V
-HSPLandroidx/compose/material3/TypographyKt;-><clinit>()V
-HSPLandroidx/compose/material3/TypographyKt;->fromToken(Landroidx/compose/material3/Typography;Landroidx/compose/material3/tokens/TypographyKeyTokens;)Landroidx/compose/ui/text/TextStyle;
-HSPLandroidx/compose/material3/TypographyKt;->getLocalTypography()Landroidx/compose/runtime/ProvidableCompositionLocal;
-HSPLandroidx/compose/material3/tokens/ColorDarkTokens;-><clinit>()V
-HSPLandroidx/compose/material3/tokens/ColorDarkTokens;-><init>()V
-HSPLandroidx/compose/material3/tokens/ColorDarkTokens;->getError-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/ColorDarkTokens;->getErrorContainer-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/ColorDarkTokens;->getOnError-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/ColorDarkTokens;->getOnErrorContainer-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/ColorDarkTokens;->getOutlineVariant-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/ColorDarkTokens;->getScrim-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/ColorSchemeKeyTokens;->$values()[Landroidx/compose/material3/tokens/ColorSchemeKeyTokens;
-HSPLandroidx/compose/material3/tokens/ColorSchemeKeyTokens;-><clinit>()V
-HSPLandroidx/compose/material3/tokens/ColorSchemeKeyTokens;-><init>(Ljava/lang/String;I)V
-HSPLandroidx/compose/material3/tokens/ColorSchemeKeyTokens;->values()[Landroidx/compose/material3/tokens/ColorSchemeKeyTokens;
-HSPLandroidx/compose/material3/tokens/ElevationTokens;-><clinit>()V
-HSPLandroidx/compose/material3/tokens/ElevationTokens;-><init>()V
-HSPLandroidx/compose/material3/tokens/ElevationTokens;->getLevel0-D9Ej5fM()F
-HSPLandroidx/compose/material3/tokens/ElevationTokens;->getLevel1-D9Ej5fM()F
-HSPLandroidx/compose/material3/tokens/ElevationTokens;->getLevel2-D9Ej5fM()F
-HSPLandroidx/compose/material3/tokens/ElevationTokens;->getLevel3-D9Ej5fM()F
-HSPLandroidx/compose/material3/tokens/ElevationTokens;->getLevel4-D9Ej5fM()F
-HSPLandroidx/compose/material3/tokens/FilledButtonTokens;-><clinit>()V
-HSPLandroidx/compose/material3/tokens/FilledButtonTokens;-><init>()V
-HSPLandroidx/compose/material3/tokens/FilledButtonTokens;->getIconSize-D9Ej5fM()F
-HSPLandroidx/compose/material3/tokens/FilledCardTokens;-><clinit>()V
-HSPLandroidx/compose/material3/tokens/FilledCardTokens;-><init>()V
-HSPLandroidx/compose/material3/tokens/FilledCardTokens;->getContainerElevation-D9Ej5fM()F
-HSPLandroidx/compose/material3/tokens/FilledCardTokens;->getContainerShape()Landroidx/compose/material3/tokens/ShapeKeyTokens;
-HSPLandroidx/compose/material3/tokens/FilledCardTokens;->getDisabledContainerColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens;
-HSPLandroidx/compose/material3/tokens/FilledCardTokens;->getDisabledContainerElevation-D9Ej5fM()F
-HSPLandroidx/compose/material3/tokens/FilledCardTokens;->getDraggedContainerElevation-D9Ej5fM()F
-HSPLandroidx/compose/material3/tokens/FilledCardTokens;->getFocusContainerElevation-D9Ej5fM()F
-HSPLandroidx/compose/material3/tokens/FilledCardTokens;->getHoverContainerElevation-D9Ej5fM()F
-HSPLandroidx/compose/material3/tokens/FilledCardTokens;->getPressedContainerElevation-D9Ej5fM()F
-HSPLandroidx/compose/material3/tokens/IconButtonTokens;-><clinit>()V
-HSPLandroidx/compose/material3/tokens/IconButtonTokens;-><init>()V
-HSPLandroidx/compose/material3/tokens/IconButtonTokens;->getIconSize-D9Ej5fM()F
-HSPLandroidx/compose/material3/tokens/IconButtonTokens;->getStateLayerShape()Landroidx/compose/material3/tokens/ShapeKeyTokens;
-HSPLandroidx/compose/material3/tokens/IconButtonTokens;->getStateLayerSize-D9Ej5fM()F
-HSPLandroidx/compose/material3/tokens/PaletteTokens;-><clinit>()V
-HSPLandroidx/compose/material3/tokens/PaletteTokens;-><init>()V
-HSPLandroidx/compose/material3/tokens/PaletteTokens;->getError20-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/PaletteTokens;->getError30-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/PaletteTokens;->getError80-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/PaletteTokens;->getError90-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral0-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral10-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral20-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral90-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutralVariant30-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutralVariant60-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutralVariant80-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/PaletteTokens;->getPrimary20-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/PaletteTokens;->getPrimary30-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/PaletteTokens;->getPrimary40-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/PaletteTokens;->getPrimary80-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/PaletteTokens;->getPrimary90-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/PaletteTokens;->getSecondary20-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/PaletteTokens;->getSecondary30-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/PaletteTokens;->getSecondary80-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/PaletteTokens;->getSecondary90-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/PaletteTokens;->getTertiary20-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/PaletteTokens;->getTertiary30-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/PaletteTokens;->getTertiary80-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/PaletteTokens;->getTertiary90-0d7_KjU()J
-HSPLandroidx/compose/material3/tokens/ShapeKeyTokens;->$values()[Landroidx/compose/material3/tokens/ShapeKeyTokens;
-HSPLandroidx/compose/material3/tokens/ShapeKeyTokens;-><clinit>()V
-HSPLandroidx/compose/material3/tokens/ShapeKeyTokens;-><init>(Ljava/lang/String;I)V
-HSPLandroidx/compose/material3/tokens/ShapeKeyTokens;->values()[Landroidx/compose/material3/tokens/ShapeKeyTokens;
-HSPLandroidx/compose/material3/tokens/ShapeTokens;-><clinit>()V
-HSPLandroidx/compose/material3/tokens/ShapeTokens;-><init>()V
-HSPLandroidx/compose/material3/tokens/ShapeTokens;->getCornerExtraLarge()Landroidx/compose/foundation/shape/RoundedCornerShape;
-HSPLandroidx/compose/material3/tokens/ShapeTokens;->getCornerExtraSmall()Landroidx/compose/foundation/shape/RoundedCornerShape;
-HSPLandroidx/compose/material3/tokens/ShapeTokens;->getCornerLarge()Landroidx/compose/foundation/shape/RoundedCornerShape;
-HSPLandroidx/compose/material3/tokens/ShapeTokens;->getCornerMedium()Landroidx/compose/foundation/shape/RoundedCornerShape;
-HSPLandroidx/compose/material3/tokens/ShapeTokens;->getCornerSmall()Landroidx/compose/foundation/shape/RoundedCornerShape;
-HSPLandroidx/compose/material3/tokens/SuggestionChipTokens;-><clinit>()V
-HSPLandroidx/compose/material3/tokens/SuggestionChipTokens;-><init>()V
-HSPLandroidx/compose/material3/tokens/SuggestionChipTokens;->getContainerHeight-D9Ej5fM()F
-HSPLandroidx/compose/material3/tokens/SuggestionChipTokens;->getDisabledLabelTextColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens;
-HSPLandroidx/compose/material3/tokens/SuggestionChipTokens;->getDisabledLeadingIconColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens;
-HSPLandroidx/compose/material3/tokens/SuggestionChipTokens;->getDraggedContainerElevation-D9Ej5fM()F
-HSPLandroidx/compose/material3/tokens/SuggestionChipTokens;->getFlatContainerElevation-D9Ej5fM()F
-HSPLandroidx/compose/material3/tokens/SuggestionChipTokens;->getLabelTextColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens;
-HSPLandroidx/compose/material3/tokens/SuggestionChipTokens;->getLabelTextFont()Landroidx/compose/material3/tokens/TypographyKeyTokens;
-HSPLandroidx/compose/material3/tokens/SuggestionChipTokens;->getLeadingIconColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens;
-HSPLandroidx/compose/material3/tokens/SuggestionChipTokens;->getLeadingIconSize-D9Ej5fM()F
-HSPLandroidx/compose/material3/tokens/TextButtonTokens;-><clinit>()V
-HSPLandroidx/compose/material3/tokens/TextButtonTokens;-><init>()V
-HSPLandroidx/compose/material3/tokens/TextButtonTokens;->getContainerShape()Landroidx/compose/material3/tokens/ShapeKeyTokens;
-HSPLandroidx/compose/material3/tokens/TextButtonTokens;->getDisabledLabelTextColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens;
-HSPLandroidx/compose/material3/tokens/TextButtonTokens;->getLabelTextColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens;
-HSPLandroidx/compose/material3/tokens/TopAppBarSmallTokens;-><clinit>()V
-HSPLandroidx/compose/material3/tokens/TopAppBarSmallTokens;-><init>()V
-HSPLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->getContainerHeight-D9Ej5fM()F
-HSPLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->getHeadlineColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens;
-HSPLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->getHeadlineFont()Landroidx/compose/material3/tokens/TypographyKeyTokens;
-HSPLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->getLeadingIconColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens;
-HSPLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->getOnScrollContainerElevation-D9Ej5fM()F
-HSPLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->getTrailingIconColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens;
-HSPLandroidx/compose/material3/tokens/TypographyKeyTokens;->$values()[Landroidx/compose/material3/tokens/TypographyKeyTokens;
-HSPLandroidx/compose/material3/tokens/TypographyKeyTokens;-><clinit>()V
-HSPLandroidx/compose/material3/tokens/TypographyKeyTokens;-><init>(Ljava/lang/String;I)V
-HSPLandroidx/compose/material3/tokens/TypographyKeyTokens;->values()[Landroidx/compose/material3/tokens/TypographyKeyTokens;
-HSPLandroidx/compose/runtime/AbstractApplier;-><clinit>()V
-HSPLandroidx/compose/runtime/AbstractApplier;-><init>(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/AbstractApplier;->clear()V
-HSPLandroidx/compose/runtime/AbstractApplier;->down(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/AbstractApplier;->getCurrent()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/AbstractApplier;->getRoot()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/AbstractApplier;->setCurrent(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/AbstractApplier;->up()V
-HSPLandroidx/compose/runtime/ActualAndroid_androidKt$DefaultMonotonicFrameClock$2;-><clinit>()V
-HSPLandroidx/compose/runtime/ActualAndroid_androidKt$DefaultMonotonicFrameClock$2;-><init>()V
-HSPLandroidx/compose/runtime/ActualAndroid_androidKt;-><clinit>()V
-HSPLandroidx/compose/runtime/ActualAndroid_androidKt;->createSnapshotMutableState(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;)Landroidx/compose/runtime/snapshots/SnapshotMutableState;
-HSPLandroidx/compose/runtime/ActualJvm_jvmKt;->identityHashCode(Ljava/lang/Object;)I
-HSPLandroidx/compose/runtime/ActualJvm_jvmKt;->invokeComposable(Landroidx/compose/runtime/Composer;Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/runtime/ActualJvm_jvmKt;->invokeComposableForResult(Landroidx/compose/runtime/Composer;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Anchor;-><init>(I)V
-HSPLandroidx/compose/runtime/Anchor;->getLocation$runtime_release()I
-HSPLandroidx/compose/runtime/Anchor;->getValid()Z
-HSPLandroidx/compose/runtime/Anchor;->setLocation$runtime_release(I)V
-HSPLandroidx/compose/runtime/Anchor;->toIndexFor(Landroidx/compose/runtime/SlotTable;)I
-HSPLandroidx/compose/runtime/Anchor;->toIndexFor(Landroidx/compose/runtime/SlotWriter;)I
-HSPLandroidx/compose/runtime/Applier;->onBeginChanges()V
-HSPLandroidx/compose/runtime/Applier;->onEndChanges()V
-HSPLandroidx/compose/runtime/BroadcastFrameClock$FrameAwaiter;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/runtime/BroadcastFrameClock$FrameAwaiter;->resume(J)V
-HSPLandroidx/compose/runtime/BroadcastFrameClock$withFrameNanos$2$1;-><init>(Landroidx/compose/runtime/BroadcastFrameClock;Lkotlin/jvm/internal/Ref$ObjectRef;)V
-HSPLandroidx/compose/runtime/BroadcastFrameClock;-><clinit>()V
-HSPLandroidx/compose/runtime/BroadcastFrameClock;-><init>(Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/runtime/BroadcastFrameClock;->access$getAwaiters$p(Landroidx/compose/runtime/BroadcastFrameClock;)Ljava/util/List;
-HSPLandroidx/compose/runtime/BroadcastFrameClock;->access$getFailureCause$p(Landroidx/compose/runtime/BroadcastFrameClock;)Ljava/lang/Throwable;
-HSPLandroidx/compose/runtime/BroadcastFrameClock;->access$getLock$p(Landroidx/compose/runtime/BroadcastFrameClock;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/BroadcastFrameClock;->access$getOnNewAwaiters$p(Landroidx/compose/runtime/BroadcastFrameClock;)Lkotlin/jvm/functions/Function0;
-HSPLandroidx/compose/runtime/BroadcastFrameClock;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/BroadcastFrameClock;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
-HSPLandroidx/compose/runtime/BroadcastFrameClock;->getHasAwaiters()Z
-HSPLandroidx/compose/runtime/BroadcastFrameClock;->sendFrame(J)V
-HSPLandroidx/compose/runtime/BroadcastFrameClock;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt$lambda-1$1;-><clinit>()V
-HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt$lambda-1$1;-><init>()V
-HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt$lambda-2$1;-><clinit>()V
-HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt$lambda-2$1;-><init>()V
-HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt;-><clinit>()V
-HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt;-><init>()V
-HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt;->getLambda-1$runtime_release()Lkotlin/jvm/functions/Function2;
-HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt;->getLambda-2$runtime_release()Lkotlin/jvm/functions/Function2;
-HSPLandroidx/compose/runtime/ComposablesKt;->getCurrentCompositeKeyHash(Landroidx/compose/runtime/Composer;I)I
-HSPLandroidx/compose/runtime/ComposablesKt;->rememberCompositionContext(Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/CompositionContext;
-HSPLandroidx/compose/runtime/Composer$Companion$Empty$1;-><init>()V
-HSPLandroidx/compose/runtime/Composer$Companion;-><clinit>()V
-HSPLandroidx/compose/runtime/Composer$Companion;-><init>()V
-HSPLandroidx/compose/runtime/Composer$Companion;->getEmpty()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Composer;-><clinit>()V
-HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;-><init>(Landroidx/compose/runtime/ComposerImpl$CompositionContextImpl;)V
-HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;->getRef()Landroidx/compose/runtime/ComposerImpl$CompositionContextImpl;
-HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;->onForgotten()V
-HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;->onRemembered()V
-HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;-><init>(Landroidx/compose/runtime/ComposerImpl;IZ)V
-HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->composeInitial$runtime_release(Landroidx/compose/runtime/ControlledComposition;Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->dispose()V
-HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->doneComposing$runtime_release()V
-HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getCollectingParameterInformation$runtime_release()Z
-HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getComposers()Ljava/util/Set;
-HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getCompositionLocalScope$runtime_release()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;
-HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getCompositionLocalScope()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;
-HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getCompoundHashKey$runtime_release()I
-HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getEffectCoroutineContext$runtime_release()Lkotlin/coroutines/CoroutineContext;
-HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->invalidate$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V
-HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->registerComposer$runtime_release(Landroidx/compose/runtime/Composer;)V
-HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->setCompositionLocalScope(Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;)V
-HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->startComposing$runtime_release()V
-HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->unregisterComposer$runtime_release(Landroidx/compose/runtime/Composer;)V
-HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->unregisterComposition$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V
-HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->updateCompositionLocalScope(Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;)V
-HSPLandroidx/compose/runtime/ComposerImpl$apply$operation$1;-><init>(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/ComposerImpl$apply$operation$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V
-HSPLandroidx/compose/runtime/ComposerImpl$apply$operation$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl$createNode$2;-><init>(Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Anchor;I)V
-HSPLandroidx/compose/runtime/ComposerImpl$createNode$2;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V
-HSPLandroidx/compose/runtime/ComposerImpl$createNode$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl$createNode$3;-><init>(Landroidx/compose/runtime/Anchor;I)V
-HSPLandroidx/compose/runtime/ComposerImpl$createNode$3;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V
-HSPLandroidx/compose/runtime/ComposerImpl$createNode$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl$doCompose$2$3;-><init>(Landroidx/compose/runtime/ComposerImpl;)V
-HSPLandroidx/compose/runtime/ComposerImpl$doCompose$2$3;->invoke(Landroidx/compose/runtime/State;)V
-HSPLandroidx/compose/runtime/ComposerImpl$doCompose$2$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl$doCompose$2$4;-><init>(Landroidx/compose/runtime/ComposerImpl;)V
-HSPLandroidx/compose/runtime/ComposerImpl$doCompose$2$4;->invoke(Landroidx/compose/runtime/State;)V
-HSPLandroidx/compose/runtime/ComposerImpl$doCompose$2$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl$doCompose$2$5;-><init>(Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/ComposerImpl;Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/ComposerImpl$doCompose$2$5;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl$doCompose$2$5;->invoke()V
-HSPLandroidx/compose/runtime/ComposerImpl$doCompose$lambda$37$$inlined$sortBy$1;-><init>()V
-HSPLandroidx/compose/runtime/ComposerImpl$doCompose$lambda$37$$inlined$sortBy$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
-HSPLandroidx/compose/runtime/ComposerImpl$endRestartGroup$1$1;-><init>(Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/ComposerImpl;)V
-HSPLandroidx/compose/runtime/ComposerImpl$endRestartGroup$1$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V
-HSPLandroidx/compose/runtime/ComposerImpl$endRestartGroup$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl$realizeDowns$1;-><init>([Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/ComposerImpl$realizeDowns$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V
-HSPLandroidx/compose/runtime/ComposerImpl$realizeDowns$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl$realizeMovement$1;-><init>(II)V
-HSPLandroidx/compose/runtime/ComposerImpl$realizeMovement$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V
-HSPLandroidx/compose/runtime/ComposerImpl$realizeMovement$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl$realizeOperationLocation$2;-><init>(I)V
-HSPLandroidx/compose/runtime/ComposerImpl$realizeOperationLocation$2;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V
-HSPLandroidx/compose/runtime/ComposerImpl$realizeOperationLocation$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl$realizeUps$1;-><init>(I)V
-HSPLandroidx/compose/runtime/ComposerImpl$realizeUps$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V
-HSPLandroidx/compose/runtime/ComposerImpl$realizeUps$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl$recordInsert$1;-><init>(Landroidx/compose/runtime/SlotTable;Landroidx/compose/runtime/Anchor;)V
-HSPLandroidx/compose/runtime/ComposerImpl$recordInsert$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V
-HSPLandroidx/compose/runtime/ComposerImpl$recordInsert$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl$recordInsert$2;-><init>(Landroidx/compose/runtime/SlotTable;Landroidx/compose/runtime/Anchor;Ljava/util/List;)V
-HSPLandroidx/compose/runtime/ComposerImpl$recordInsert$2;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V
-HSPLandroidx/compose/runtime/ComposerImpl$recordInsert$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl$recordSideEffect$1;-><init>(Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/runtime/ComposerImpl$recordSideEffect$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V
-HSPLandroidx/compose/runtime/ComposerImpl$recordSideEffect$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl$recordSlotEditing$1;-><init>(Landroidx/compose/runtime/Anchor;)V
-HSPLandroidx/compose/runtime/ComposerImpl$recordSlotEditing$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V
-HSPLandroidx/compose/runtime/ComposerImpl$recordSlotEditing$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl$start$2;-><init>(I)V
-HSPLandroidx/compose/runtime/ComposerImpl$start$2;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V
-HSPLandroidx/compose/runtime/ComposerImpl$start$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl$startProviders$currentProviders$1;-><init>([Landroidx/compose/runtime/ProvidedValue;Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;)V
-HSPLandroidx/compose/runtime/ComposerImpl$startProviders$currentProviders$1;->invoke(Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;
-HSPLandroidx/compose/runtime/ComposerImpl$startProviders$currentProviders$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl$startReaderGroup$1;-><init>(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/ComposerImpl$startReaderGroup$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V
-HSPLandroidx/compose/runtime/ComposerImpl$startReaderGroup$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl$updateValue$1;-><init>(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/ComposerImpl$updateValue$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V
-HSPLandroidx/compose/runtime/ComposerImpl$updateValue$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl$updateValue$2;-><init>(Ljava/lang/Object;I)V
-HSPLandroidx/compose/runtime/ComposerImpl$updateValue$2;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V
-HSPLandroidx/compose/runtime/ComposerImpl$updateValue$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl;-><init>(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/CompositionContext;Landroidx/compose/runtime/SlotTable;Ljava/util/Set;Ljava/util/List;Ljava/util/List;Landroidx/compose/runtime/ControlledComposition;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->access$endGroup(Landroidx/compose/runtime/ComposerImpl;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->access$getChanges$p(Landroidx/compose/runtime/ComposerImpl;)Ljava/util/List;
-HSPLandroidx/compose/runtime/ComposerImpl;->access$getChildrenComposing$p(Landroidx/compose/runtime/ComposerImpl;)I
-HSPLandroidx/compose/runtime/ComposerImpl;->access$getForciblyRecompose$p(Landroidx/compose/runtime/ComposerImpl;)Z
-HSPLandroidx/compose/runtime/ComposerImpl;->access$getParentContext$p(Landroidx/compose/runtime/ComposerImpl;)Landroidx/compose/runtime/CompositionContext;
-HSPLandroidx/compose/runtime/ComposerImpl;->access$getProvidersInvalid$p(Landroidx/compose/runtime/ComposerImpl;)Z
-HSPLandroidx/compose/runtime/ComposerImpl;->access$setChanges$p(Landroidx/compose/runtime/ComposerImpl;Ljava/util/List;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->access$setChildrenComposing$p(Landroidx/compose/runtime/ComposerImpl;I)V
-HSPLandroidx/compose/runtime/ComposerImpl;->access$startGroup(Landroidx/compose/runtime/ComposerImpl;ILjava/lang/Object;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->addRecomposeScope()V
-HSPLandroidx/compose/runtime/ComposerImpl;->apply(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->buildContext()Landroidx/compose/runtime/CompositionContext;
-HSPLandroidx/compose/runtime/ComposerImpl;->changed(F)Z
-HSPLandroidx/compose/runtime/ComposerImpl;->changed(I)Z
-HSPLandroidx/compose/runtime/ComposerImpl;->changed(J)Z
-HSPLandroidx/compose/runtime/ComposerImpl;->changed(Ljava/lang/Object;)Z
-HSPLandroidx/compose/runtime/ComposerImpl;->changed(Z)Z
-HSPLandroidx/compose/runtime/ComposerImpl;->changedInstance(Ljava/lang/Object;)Z
-HSPLandroidx/compose/runtime/ComposerImpl;->changesApplied$runtime_release()V
-HSPLandroidx/compose/runtime/ComposerImpl;->cleanUpCompose()V
-HSPLandroidx/compose/runtime/ComposerImpl;->clearUpdatedNodeCounts()V
-HSPLandroidx/compose/runtime/ComposerImpl;->composeContent$runtime_release(Landroidx/compose/runtime/collection/IdentityArrayMap;Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->compoundKeyOf(III)I
-HSPLandroidx/compose/runtime/ComposerImpl;->consume(Landroidx/compose/runtime/CompositionLocal;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl;->createNode(Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->currentCompositionLocalScope()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;
-HSPLandroidx/compose/runtime/ComposerImpl;->currentCompositionLocalScope(I)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;
-HSPLandroidx/compose/runtime/ComposerImpl;->disableReusing()V
-HSPLandroidx/compose/runtime/ComposerImpl;->dispose$runtime_release()V
-HSPLandroidx/compose/runtime/ComposerImpl;->doCompose(Landroidx/compose/runtime/collection/IdentityArrayMap;Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->doRecordDownsFor(II)V
-HSPLandroidx/compose/runtime/ComposerImpl;->enableReusing()V
-HSPLandroidx/compose/runtime/ComposerImpl;->end(Z)V
-HSPLandroidx/compose/runtime/ComposerImpl;->endDefaults()V
-HSPLandroidx/compose/runtime/ComposerImpl;->endGroup()V
-HSPLandroidx/compose/runtime/ComposerImpl;->endNode()V
-HSPLandroidx/compose/runtime/ComposerImpl;->endProviders()V
-HSPLandroidx/compose/runtime/ComposerImpl;->endReplaceableGroup()V
-HSPLandroidx/compose/runtime/ComposerImpl;->endRestartGroup()Landroidx/compose/runtime/ScopeUpdateScope;
-HSPLandroidx/compose/runtime/ComposerImpl;->endReusableGroup()V
-HSPLandroidx/compose/runtime/ComposerImpl;->endRoot()V
-HSPLandroidx/compose/runtime/ComposerImpl;->ensureWriter()V
-HSPLandroidx/compose/runtime/ComposerImpl;->enterGroup(ZLandroidx/compose/runtime/Pending;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->exitGroup(IZ)V
-HSPLandroidx/compose/runtime/ComposerImpl;->finalizeCompose()V
-HSPLandroidx/compose/runtime/ComposerImpl;->getApplier()Landroidx/compose/runtime/Applier;
-HSPLandroidx/compose/runtime/ComposerImpl;->getApplyCoroutineContext()Lkotlin/coroutines/CoroutineContext;
-HSPLandroidx/compose/runtime/ComposerImpl;->getAreChildrenComposing$runtime_release()Z
-HSPLandroidx/compose/runtime/ComposerImpl;->getComposition()Landroidx/compose/runtime/ControlledComposition;
-HSPLandroidx/compose/runtime/ComposerImpl;->getCompoundKeyHash()I
-HSPLandroidx/compose/runtime/ComposerImpl;->getCurrentRecomposeScope$runtime_release()Landroidx/compose/runtime/RecomposeScopeImpl;
-HSPLandroidx/compose/runtime/ComposerImpl;->getDefaultsInvalid()Z
-HSPLandroidx/compose/runtime/ComposerImpl;->getDeferredChanges$runtime_release()Ljava/util/List;
-HSPLandroidx/compose/runtime/ComposerImpl;->getInserting()Z
-HSPLandroidx/compose/runtime/ComposerImpl;->getNode(Landroidx/compose/runtime/SlotReader;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl;->getRecomposeScope()Landroidx/compose/runtime/RecomposeScope;
-HSPLandroidx/compose/runtime/ComposerImpl;->getSkipping()Z
-HSPLandroidx/compose/runtime/ComposerImpl;->groupCompoundKeyPart(Landroidx/compose/runtime/SlotReader;I)I
-HSPLandroidx/compose/runtime/ComposerImpl;->insertedGroupVirtualIndex(I)I
-HSPLandroidx/compose/runtime/ComposerImpl;->isComposing$runtime_release()Z
-HSPLandroidx/compose/runtime/ComposerImpl;->nextSlot()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl;->nodeAt(Landroidx/compose/runtime/SlotReader;I)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl;->nodeIndexOf(IIII)I
-HSPLandroidx/compose/runtime/ComposerImpl;->prepareCompose$runtime_release(Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->realizeDowns()V
-HSPLandroidx/compose/runtime/ComposerImpl;->realizeDowns([Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->realizeMovement()V
-HSPLandroidx/compose/runtime/ComposerImpl;->realizeOperationLocation$default(Landroidx/compose/runtime/ComposerImpl;ZILjava/lang/Object;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->realizeOperationLocation(Z)V
-HSPLandroidx/compose/runtime/ComposerImpl;->realizeUps()V
-HSPLandroidx/compose/runtime/ComposerImpl;->recompose$runtime_release(Landroidx/compose/runtime/collection/IdentityArrayMap;)Z
-HSPLandroidx/compose/runtime/ComposerImpl;->recomposeToGroupEnd()V
-HSPLandroidx/compose/runtime/ComposerImpl;->record(Lkotlin/jvm/functions/Function3;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->recordApplierOperation(Lkotlin/jvm/functions/Function3;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->recordDelete()V
-HSPLandroidx/compose/runtime/ComposerImpl;->recordDown(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->recordEndGroup()V
-HSPLandroidx/compose/runtime/ComposerImpl;->recordEndRoot()V
-HSPLandroidx/compose/runtime/ComposerImpl;->recordFixup(Lkotlin/jvm/functions/Function3;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->recordInsert(Landroidx/compose/runtime/Anchor;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->recordInsertUpFixup(Lkotlin/jvm/functions/Function3;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->recordReaderMoving(I)V
-HSPLandroidx/compose/runtime/ComposerImpl;->recordRemoveNode(II)V
-HSPLandroidx/compose/runtime/ComposerImpl;->recordSideEffect(Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->recordSlotEditing()V
-HSPLandroidx/compose/runtime/ComposerImpl;->recordSlotEditingOperation(Lkotlin/jvm/functions/Function3;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->recordSlotTableOperation$default(Landroidx/compose/runtime/ComposerImpl;ZLkotlin/jvm/functions/Function3;ILjava/lang/Object;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->recordSlotTableOperation(ZLkotlin/jvm/functions/Function3;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->recordUp()V
-HSPLandroidx/compose/runtime/ComposerImpl;->recordUpsAndDowns(III)V
-HSPLandroidx/compose/runtime/ComposerImpl;->recordUsed(Landroidx/compose/runtime/RecomposeScope;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->registerInsertUpFixup()V
-HSPLandroidx/compose/runtime/ComposerImpl;->rememberedValue()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl;->reportAllMovableContent()V
-HSPLandroidx/compose/runtime/ComposerImpl;->reportFreeMovableContent$reportGroup(Landroidx/compose/runtime/ComposerImpl;IZI)I
-HSPLandroidx/compose/runtime/ComposerImpl;->reportFreeMovableContent(I)V
-HSPLandroidx/compose/runtime/ComposerImpl;->resolveCompositionLocal(Landroidx/compose/runtime/CompositionLocal;Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerImpl;->skipCurrentGroup()V
-HSPLandroidx/compose/runtime/ComposerImpl;->skipGroup()V
-HSPLandroidx/compose/runtime/ComposerImpl;->skipReaderToGroupEnd()V
-HSPLandroidx/compose/runtime/ComposerImpl;->skipToGroupEnd()V
-HSPLandroidx/compose/runtime/ComposerImpl;->start-BaiHCIY(ILjava/lang/Object;ILjava/lang/Object;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->startDefaults()V
-HSPLandroidx/compose/runtime/ComposerImpl;->startGroup(I)V
-HSPLandroidx/compose/runtime/ComposerImpl;->startGroup(ILjava/lang/Object;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->startNode()V
-HSPLandroidx/compose/runtime/ComposerImpl;->startProviders([Landroidx/compose/runtime/ProvidedValue;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->startReaderGroup(ZLjava/lang/Object;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->startReplaceableGroup(I)V
-HSPLandroidx/compose/runtime/ComposerImpl;->startRestartGroup(I)Landroidx/compose/runtime/Composer;
-HSPLandroidx/compose/runtime/ComposerImpl;->startReusableGroup(ILjava/lang/Object;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->startReusableNode()V
-HSPLandroidx/compose/runtime/ComposerImpl;->startRoot()V
-HSPLandroidx/compose/runtime/ComposerImpl;->tryImminentInvalidation$runtime_release(Landroidx/compose/runtime/RecomposeScopeImpl;Ljava/lang/Object;)Z
-HSPLandroidx/compose/runtime/ComposerImpl;->updateCompoundKeyWhenWeEnterGroup(ILjava/lang/Object;Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->updateCompoundKeyWhenWeEnterGroupKeyHash(I)V
-HSPLandroidx/compose/runtime/ComposerImpl;->updateCompoundKeyWhenWeExitGroup(ILjava/lang/Object;Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->updateCompoundKeyWhenWeExitGroupKeyHash(I)V
-HSPLandroidx/compose/runtime/ComposerImpl;->updateNodeCount(II)V
-HSPLandroidx/compose/runtime/ComposerImpl;->updateNodeCountOverrides(II)V
-HSPLandroidx/compose/runtime/ComposerImpl;->updateProviderMapGroup(Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;
-HSPLandroidx/compose/runtime/ComposerImpl;->updateRememberedValue(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->updateValue(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/ComposerImpl;->updatedNodeCount(I)I
-HSPLandroidx/compose/runtime/ComposerImpl;->useNode()V
-HSPLandroidx/compose/runtime/ComposerImpl;->validateNodeExpected()V
-HSPLandroidx/compose/runtime/ComposerImpl;->validateNodeNotExpected()V
-HSPLandroidx/compose/runtime/ComposerKt$endGroupInstance$1;-><clinit>()V
-HSPLandroidx/compose/runtime/ComposerKt$endGroupInstance$1;-><init>()V
-HSPLandroidx/compose/runtime/ComposerKt$endGroupInstance$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V
-HSPLandroidx/compose/runtime/ComposerKt$endGroupInstance$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerKt$removeCurrentGroupInstance$1;-><clinit>()V
-HSPLandroidx/compose/runtime/ComposerKt$removeCurrentGroupInstance$1;-><init>()V
-HSPLandroidx/compose/runtime/ComposerKt$removeCurrentGroupInstance$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V
-HSPLandroidx/compose/runtime/ComposerKt$removeCurrentGroupInstance$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerKt$resetSlotsInstance$1;-><clinit>()V
-HSPLandroidx/compose/runtime/ComposerKt$resetSlotsInstance$1;-><init>()V
-HSPLandroidx/compose/runtime/ComposerKt$skipToGroupEndInstance$1;-><clinit>()V
-HSPLandroidx/compose/runtime/ComposerKt$skipToGroupEndInstance$1;-><init>()V
-HSPLandroidx/compose/runtime/ComposerKt$startRootGroup$1;-><clinit>()V
-HSPLandroidx/compose/runtime/ComposerKt$startRootGroup$1;-><init>()V
-HSPLandroidx/compose/runtime/ComposerKt$startRootGroup$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V
-HSPLandroidx/compose/runtime/ComposerKt$startRootGroup$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerKt;-><clinit>()V
-HSPLandroidx/compose/runtime/ComposerKt;->access$asBool(I)Z
-HSPLandroidx/compose/runtime/ComposerKt;->access$asInt(Z)I
-HSPLandroidx/compose/runtime/ComposerKt;->access$compositionLocalMapOf([Landroidx/compose/runtime/ProvidedValue;Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;
-HSPLandroidx/compose/runtime/ComposerKt;->access$firstInRange(Ljava/util/List;II)Landroidx/compose/runtime/Invalidation;
-HSPLandroidx/compose/runtime/ComposerKt;->access$getEndGroupInstance$p()Lkotlin/jvm/functions/Function3;
-HSPLandroidx/compose/runtime/ComposerKt;->access$getJoinedKey(Landroidx/compose/runtime/KeyInfo;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerKt;->access$getRemoveCurrentGroupInstance$p()Lkotlin/jvm/functions/Function3;
-HSPLandroidx/compose/runtime/ComposerKt;->access$getStartRootGroup$p()Lkotlin/jvm/functions/Function3;
-HSPLandroidx/compose/runtime/ComposerKt;->access$insertIfMissing(Ljava/util/List;ILandroidx/compose/runtime/RecomposeScopeImpl;Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/ComposerKt;->access$multiMap()Ljava/util/HashMap;
-HSPLandroidx/compose/runtime/ComposerKt;->access$nearestCommonRootOf(Landroidx/compose/runtime/SlotReader;III)I
-HSPLandroidx/compose/runtime/ComposerKt;->access$pop(Ljava/util/HashMap;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerKt;->access$put(Ljava/util/HashMap;Ljava/lang/Object;Ljava/lang/Object;)Z
-HSPLandroidx/compose/runtime/ComposerKt;->access$removeLocation(Ljava/util/List;I)Landroidx/compose/runtime/Invalidation;
-HSPLandroidx/compose/runtime/ComposerKt;->access$removeRange(Ljava/util/List;II)V
-HSPLandroidx/compose/runtime/ComposerKt;->asBool(I)Z
-HSPLandroidx/compose/runtime/ComposerKt;->asInt(Z)I
-HSPLandroidx/compose/runtime/ComposerKt;->compositionLocalMapOf([Landroidx/compose/runtime/ProvidedValue;Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;
-HSPLandroidx/compose/runtime/ComposerKt;->contains(Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;Landroidx/compose/runtime/CompositionLocal;)Z
-HSPLandroidx/compose/runtime/ComposerKt;->distanceFrom(Landroidx/compose/runtime/SlotReader;II)I
-HSPLandroidx/compose/runtime/ComposerKt;->findInsertLocation(Ljava/util/List;I)I
-HSPLandroidx/compose/runtime/ComposerKt;->findLocation(Ljava/util/List;I)I
-HSPLandroidx/compose/runtime/ComposerKt;->firstInRange(Ljava/util/List;II)Landroidx/compose/runtime/Invalidation;
-HSPLandroidx/compose/runtime/ComposerKt;->getCompositionLocalMap()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerKt;->getInvocation()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerKt;->getJoinedKey(Landroidx/compose/runtime/KeyInfo;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerKt;->getProvider()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerKt;->getProviderMaps()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerKt;->getProviderValues()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerKt;->getReference()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerKt;->getValueOf(Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;Landroidx/compose/runtime/CompositionLocal;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerKt;->insertIfMissing(Ljava/util/List;ILandroidx/compose/runtime/RecomposeScopeImpl;Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/ComposerKt;->isTraceInProgress()Z
-HSPLandroidx/compose/runtime/ComposerKt;->multiMap()Ljava/util/HashMap;
-HSPLandroidx/compose/runtime/ComposerKt;->nearestCommonRootOf(Landroidx/compose/runtime/SlotReader;III)I
-HSPLandroidx/compose/runtime/ComposerKt;->pop(Ljava/util/HashMap;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/ComposerKt;->put(Ljava/util/HashMap;Ljava/lang/Object;Ljava/lang/Object;)Z
-HSPLandroidx/compose/runtime/ComposerKt;->remove(Ljava/util/HashMap;Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Unit;
-HSPLandroidx/compose/runtime/ComposerKt;->removeCurrentGroup(Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V
-HSPLandroidx/compose/runtime/ComposerKt;->removeLocation(Ljava/util/List;I)Landroidx/compose/runtime/Invalidation;
-HSPLandroidx/compose/runtime/ComposerKt;->removeRange(Ljava/util/List;II)V
-HSPLandroidx/compose/runtime/ComposerKt;->runtimeCheck(Z)V
-HSPLandroidx/compose/runtime/CompositionContext;-><clinit>()V
-HSPLandroidx/compose/runtime/CompositionContext;-><init>()V
-HSPLandroidx/compose/runtime/CompositionContext;->doneComposing$runtime_release()V
-HSPLandroidx/compose/runtime/CompositionContext;->getCompositionLocalScope$runtime_release()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;
-HSPLandroidx/compose/runtime/CompositionContext;->registerComposer$runtime_release(Landroidx/compose/runtime/Composer;)V
-HSPLandroidx/compose/runtime/CompositionContext;->startComposing$runtime_release()V
-HSPLandroidx/compose/runtime/CompositionContext;->unregisterComposer$runtime_release(Landroidx/compose/runtime/Composer;)V
-HSPLandroidx/compose/runtime/CompositionContextKt;-><clinit>()V
-HSPLandroidx/compose/runtime/CompositionContextKt;->access$getEmptyCompositionLocalMap$p()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;
-HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;-><init>(Ljava/util/Set;)V
-HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->dispatchAbandons()V
-HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->dispatchNodeCallbacks()V
-HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->dispatchRememberObservers()V
-HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->dispatchSideEffects()V
-HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->forgetting(Landroidx/compose/runtime/RememberObserver;)V
-HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->remembering(Landroidx/compose/runtime/RememberObserver;)V
-HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->sideEffect(Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/runtime/CompositionImpl;-><init>(Landroidx/compose/runtime/CompositionContext;Landroidx/compose/runtime/Applier;Lkotlin/coroutines/CoroutineContext;)V
-HSPLandroidx/compose/runtime/CompositionImpl;-><init>(Landroidx/compose/runtime/CompositionContext;Landroidx/compose/runtime/Applier;Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/runtime/CompositionImpl;->addPendingInvalidationsLocked$invalidate(Landroidx/compose/runtime/CompositionImpl;ZLkotlin/jvm/internal/Ref$ObjectRef;Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/CompositionImpl;->addPendingInvalidationsLocked(Ljava/util/Set;Z)V
-HSPLandroidx/compose/runtime/CompositionImpl;->applyChanges()V
-HSPLandroidx/compose/runtime/CompositionImpl;->applyChangesInLocked(Ljava/util/List;)V
-HSPLandroidx/compose/runtime/CompositionImpl;->applyLateChanges()V
-HSPLandroidx/compose/runtime/CompositionImpl;->changesApplied()V
-HSPLandroidx/compose/runtime/CompositionImpl;->cleanUpDerivedStateObservations()V
-HSPLandroidx/compose/runtime/CompositionImpl;->composeContent(Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/runtime/CompositionImpl;->dispose()V
-HSPLandroidx/compose/runtime/CompositionImpl;->drainPendingModificationsForCompositionLocked()V
-HSPLandroidx/compose/runtime/CompositionImpl;->drainPendingModificationsLocked()V
-HSPLandroidx/compose/runtime/CompositionImpl;->getAreChildrenComposing()Z
-HSPLandroidx/compose/runtime/CompositionImpl;->getHasInvalidations()Z
-HSPLandroidx/compose/runtime/CompositionImpl;->invalidate(Landroidx/compose/runtime/RecomposeScopeImpl;Ljava/lang/Object;)Landroidx/compose/runtime/InvalidationResult;
-HSPLandroidx/compose/runtime/CompositionImpl;->invalidateChecked(Landroidx/compose/runtime/RecomposeScopeImpl;Landroidx/compose/runtime/Anchor;Ljava/lang/Object;)Landroidx/compose/runtime/InvalidationResult;
-HSPLandroidx/compose/runtime/CompositionImpl;->invalidateScopeOfLocked(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/CompositionImpl;->isComposing()Z
-HSPLandroidx/compose/runtime/CompositionImpl;->isDisposed()Z
-HSPLandroidx/compose/runtime/CompositionImpl;->observesAnyOf(Ljava/util/Set;)Z
-HSPLandroidx/compose/runtime/CompositionImpl;->prepareCompose(Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/runtime/CompositionImpl;->recompose()Z
-HSPLandroidx/compose/runtime/CompositionImpl;->recordModificationsOf(Ljava/util/Set;)V
-HSPLandroidx/compose/runtime/CompositionImpl;->recordReadOf(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/CompositionImpl;->recordWriteOf(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/CompositionImpl;->removeObservation$runtime_release(Ljava/lang/Object;Landroidx/compose/runtime/RecomposeScopeImpl;)V
-HSPLandroidx/compose/runtime/CompositionImpl;->setContent(Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/runtime/CompositionImpl;->setPendingInvalidScopes$runtime_release(Z)V
-HSPLandroidx/compose/runtime/CompositionImpl;->takeInvalidations()Landroidx/compose/runtime/collection/IdentityArrayMap;
-HSPLandroidx/compose/runtime/CompositionKt;-><clinit>()V
-HSPLandroidx/compose/runtime/CompositionKt;->Composition(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/CompositionContext;)Landroidx/compose/runtime/Composition;
-HSPLandroidx/compose/runtime/CompositionKt;->access$addValue(Landroidx/compose/runtime/collection/IdentityArrayMap;Ljava/lang/Object;Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/CompositionKt;->access$getPendingApplyNoModifications$p()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/CompositionKt;->addValue(Landroidx/compose/runtime/collection/IdentityArrayMap;Ljava/lang/Object;Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/CompositionLocal;-><clinit>()V
-HSPLandroidx/compose/runtime/CompositionLocal;-><init>(Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/runtime/CompositionLocal;-><init>(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/runtime/CompositionLocal;->getDefaultValueHolder$runtime_release()Landroidx/compose/runtime/LazyValueHolder;
-HSPLandroidx/compose/runtime/CompositionLocalKt;->CompositionLocalProvider([Landroidx/compose/runtime/ProvidedValue;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/runtime/CompositionLocalKt;->compositionLocalOf$default(Landroidx/compose/runtime/SnapshotMutationPolicy;Lkotlin/jvm/functions/Function0;ILjava/lang/Object;)Landroidx/compose/runtime/ProvidableCompositionLocal;
-HSPLandroidx/compose/runtime/CompositionLocalKt;->compositionLocalOf(Landroidx/compose/runtime/SnapshotMutationPolicy;Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/ProvidableCompositionLocal;
-HSPLandroidx/compose/runtime/CompositionLocalKt;->staticCompositionLocalOf(Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/ProvidableCompositionLocal;
-HSPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;-><init>(Lkotlinx/coroutines/CoroutineScope;)V
-HSPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;->getCoroutineScope()Lkotlinx/coroutines/CoroutineScope;
-HSPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;->onForgotten()V
-HSPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;->onRemembered()V
-HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord$Companion;-><init>()V
-HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord$Companion;->getUnset()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;-><clinit>()V
-HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;-><init>()V
-HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->access$getUnset$cp()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V
-HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord;
-HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->getDependencies()Landroidx/compose/runtime/collection/IdentityArrayMap;
-HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->getResult()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->isValid(Landroidx/compose/runtime/DerivedState;Landroidx/compose/runtime/snapshots/Snapshot;)Z
-HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->readableHash(Landroidx/compose/runtime/DerivedState;Landroidx/compose/runtime/snapshots/Snapshot;)I
-HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->setDependencies(Landroidx/compose/runtime/collection/IdentityArrayMap;)V
-HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->setResult(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->setResultHash(I)V
-HSPLandroidx/compose/runtime/DerivedSnapshotState$currentRecord$result$1$result$1;-><init>(Landroidx/compose/runtime/DerivedSnapshotState;Landroidx/compose/runtime/collection/IdentityArrayMap;I)V
-HSPLandroidx/compose/runtime/DerivedSnapshotState$currentRecord$result$1$result$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/DerivedSnapshotState$currentRecord$result$1$result$1;->invoke(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/DerivedSnapshotState;-><init>(Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/SnapshotMutationPolicy;)V
-HSPLandroidx/compose/runtime/DerivedSnapshotState;->currentRecord(Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord;Landroidx/compose/runtime/snapshots/Snapshot;ZLkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord;
-HSPLandroidx/compose/runtime/DerivedSnapshotState;->getCurrentValue()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/DerivedSnapshotState;->getDependencies()[Ljava/lang/Object;
-HSPLandroidx/compose/runtime/DerivedSnapshotState;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord;
-HSPLandroidx/compose/runtime/DerivedSnapshotState;->getPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy;
-HSPLandroidx/compose/runtime/DerivedSnapshotState;->getValue()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/DerivedSnapshotState;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V
-HSPLandroidx/compose/runtime/DisposableEffectImpl;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/runtime/DisposableEffectImpl;->onForgotten()V
-HSPLandroidx/compose/runtime/DisposableEffectImpl;->onRemembered()V
-HSPLandroidx/compose/runtime/DisposableEffectScope;-><clinit>()V
-HSPLandroidx/compose/runtime/DisposableEffectScope;-><init>()V
-HSPLandroidx/compose/runtime/DynamicProvidableCompositionLocal;-><init>(Landroidx/compose/runtime/SnapshotMutationPolicy;Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/runtime/DynamicProvidableCompositionLocal;->access$getPolicy$p(Landroidx/compose/runtime/DynamicProvidableCompositionLocal;)Landroidx/compose/runtime/SnapshotMutationPolicy;
-HSPLandroidx/compose/runtime/DynamicProvidableCompositionLocal;->provided$runtime_release(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State;
-HSPLandroidx/compose/runtime/EffectsKt;-><clinit>()V
-HSPLandroidx/compose/runtime/EffectsKt;->DisposableEffect(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/runtime/EffectsKt;->DisposableEffect(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/runtime/EffectsKt;->DisposableEffect(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/runtime/EffectsKt;->LaunchedEffect(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/runtime/EffectsKt;->LaunchedEffect(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/runtime/EffectsKt;->LaunchedEffect(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/runtime/EffectsKt;->LaunchedEffect([Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/runtime/EffectsKt;->SideEffect(Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/runtime/EffectsKt;->access$getInternalDisposableEffectScope$p()Landroidx/compose/runtime/DisposableEffectScope;
-HSPLandroidx/compose/runtime/EffectsKt;->createCompositionCoroutineScope(Lkotlin/coroutines/CoroutineContext;Landroidx/compose/runtime/Composer;)Lkotlinx/coroutines/CoroutineScope;
-HSPLandroidx/compose/runtime/GroupInfo;-><init>(III)V
-HSPLandroidx/compose/runtime/GroupInfo;->getNodeCount()I
-HSPLandroidx/compose/runtime/GroupInfo;->getNodeIndex()I
-HSPLandroidx/compose/runtime/GroupInfo;->getSlotIndex()I
-HSPLandroidx/compose/runtime/GroupInfo;->setNodeCount(I)V
-HSPLandroidx/compose/runtime/GroupInfo;->setNodeIndex(I)V
-HSPLandroidx/compose/runtime/GroupInfo;->setSlotIndex(I)V
-HSPLandroidx/compose/runtime/GroupKind$Companion;-><init>()V
-HSPLandroidx/compose/runtime/GroupKind$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/runtime/GroupKind$Companion;->getGroup-ULZAiWs()I
-HSPLandroidx/compose/runtime/GroupKind$Companion;->getNode-ULZAiWs()I
-HSPLandroidx/compose/runtime/GroupKind$Companion;->getReusableNode-ULZAiWs()I
-HSPLandroidx/compose/runtime/GroupKind;-><clinit>()V
-HSPLandroidx/compose/runtime/GroupKind;->access$getGroup$cp()I
-HSPLandroidx/compose/runtime/GroupKind;->access$getNode$cp()I
-HSPLandroidx/compose/runtime/GroupKind;->access$getReusableNode$cp()I
-HSPLandroidx/compose/runtime/GroupKind;->constructor-impl(I)I
-HSPLandroidx/compose/runtime/IntStack;-><init>()V
-HSPLandroidx/compose/runtime/IntStack;->clear()V
-HSPLandroidx/compose/runtime/IntStack;->getSize()I
-HSPLandroidx/compose/runtime/IntStack;->isEmpty()Z
-HSPLandroidx/compose/runtime/IntStack;->peek()I
-HSPLandroidx/compose/runtime/IntStack;->peekOr(I)I
-HSPLandroidx/compose/runtime/IntStack;->pop()I
-HSPLandroidx/compose/runtime/IntStack;->push(I)V
-HSPLandroidx/compose/runtime/Invalidation;-><init>(Landroidx/compose/runtime/RecomposeScopeImpl;ILandroidx/compose/runtime/collection/IdentityArraySet;)V
-HSPLandroidx/compose/runtime/Invalidation;->getLocation()I
-HSPLandroidx/compose/runtime/Invalidation;->getScope()Landroidx/compose/runtime/RecomposeScopeImpl;
-HSPLandroidx/compose/runtime/Invalidation;->isInvalid()Z
-HSPLandroidx/compose/runtime/InvalidationResult;->$values()[Landroidx/compose/runtime/InvalidationResult;
-HSPLandroidx/compose/runtime/InvalidationResult;-><clinit>()V
-HSPLandroidx/compose/runtime/InvalidationResult;-><init>(Ljava/lang/String;I)V
-HSPLandroidx/compose/runtime/KeyInfo;-><init>(ILjava/lang/Object;III)V
-HSPLandroidx/compose/runtime/KeyInfo;->getKey()I
-HSPLandroidx/compose/runtime/KeyInfo;->getLocation()I
-HSPLandroidx/compose/runtime/KeyInfo;->getNodes()I
-HSPLandroidx/compose/runtime/KeyInfo;->getObjectKey()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Latch;-><init>()V
-HSPLandroidx/compose/runtime/Latch;->await(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Latch;->closeLatch()V
-HSPLandroidx/compose/runtime/Latch;->isOpen()Z
-HSPLandroidx/compose/runtime/Latch;->openLatch()V
-HSPLandroidx/compose/runtime/LaunchedEffectImpl;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/runtime/LaunchedEffectImpl;->onForgotten()V
-HSPLandroidx/compose/runtime/LaunchedEffectImpl;->onRemembered()V
-HSPLandroidx/compose/runtime/LazyValueHolder;-><init>(Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/runtime/LazyValueHolder;->getCurrent()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/LazyValueHolder;->getValue()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/MonotonicFrameClock$DefaultImpls;->fold(Landroidx/compose/runtime/MonotonicFrameClock;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/MonotonicFrameClock$DefaultImpls;->get(Landroidx/compose/runtime/MonotonicFrameClock;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
-HSPLandroidx/compose/runtime/MonotonicFrameClock$DefaultImpls;->minusKey(Landroidx/compose/runtime/MonotonicFrameClock;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
-HSPLandroidx/compose/runtime/MonotonicFrameClock$Key;-><clinit>()V
-HSPLandroidx/compose/runtime/MonotonicFrameClock$Key;-><init>()V
-HSPLandroidx/compose/runtime/MonotonicFrameClock;-><clinit>()V
-HSPLandroidx/compose/runtime/MonotonicFrameClock;->getKey()Lkotlin/coroutines/CoroutineContext$Key;
-HSPLandroidx/compose/runtime/MonotonicFrameClockKt;->getMonotonicFrameClock(Lkotlin/coroutines/CoroutineContext;)Landroidx/compose/runtime/MonotonicFrameClock;
-HSPLandroidx/compose/runtime/MonotonicFrameClockKt;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/NeverEqualPolicy;-><clinit>()V
-HSPLandroidx/compose/runtime/NeverEqualPolicy;-><init>()V
-HSPLandroidx/compose/runtime/NeverEqualPolicy;->equivalent(Ljava/lang/Object;Ljava/lang/Object;)Z
-HSPLandroidx/compose/runtime/OpaqueKey;-><init>(Ljava/lang/String;)V
-HSPLandroidx/compose/runtime/OpaqueKey;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/runtime/OpaqueKey;->hashCode()I
-HSPLandroidx/compose/runtime/ParcelableSnapshotMutableState$Companion$CREATOR$1;-><init>()V
-HSPLandroidx/compose/runtime/ParcelableSnapshotMutableState$Companion;-><init>()V
-HSPLandroidx/compose/runtime/ParcelableSnapshotMutableState$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/runtime/ParcelableSnapshotMutableState;-><clinit>()V
-HSPLandroidx/compose/runtime/ParcelableSnapshotMutableState;-><init>(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;)V
-HSPLandroidx/compose/runtime/PausableMonotonicFrameClock$withFrameNanos$1;-><init>(Landroidx/compose/runtime/PausableMonotonicFrameClock;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/runtime/PausableMonotonicFrameClock$withFrameNanos$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;-><clinit>()V
-HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;-><init>(Landroidx/compose/runtime/MonotonicFrameClock;)V
-HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
-HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
-HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->pause()V
-HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->resume()V
-HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Pending$keyMap$2;-><init>(Landroidx/compose/runtime/Pending;)V
-HSPLandroidx/compose/runtime/Pending$keyMap$2;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Pending$keyMap$2;->invoke()Ljava/util/HashMap;
-HSPLandroidx/compose/runtime/Pending;-><init>(Ljava/util/List;I)V
-HSPLandroidx/compose/runtime/Pending;->getGroupIndex()I
-HSPLandroidx/compose/runtime/Pending;->getKeyInfos()Ljava/util/List;
-HSPLandroidx/compose/runtime/Pending;->getKeyMap()Ljava/util/HashMap;
-HSPLandroidx/compose/runtime/Pending;->getNext(ILjava/lang/Object;)Landroidx/compose/runtime/KeyInfo;
-HSPLandroidx/compose/runtime/Pending;->getStartIndex()I
-HSPLandroidx/compose/runtime/Pending;->getUsed()Ljava/util/List;
-HSPLandroidx/compose/runtime/Pending;->nodePositionOf(Landroidx/compose/runtime/KeyInfo;)I
-HSPLandroidx/compose/runtime/Pending;->recordUsed(Landroidx/compose/runtime/KeyInfo;)Z
-HSPLandroidx/compose/runtime/Pending;->registerInsert(Landroidx/compose/runtime/KeyInfo;I)V
-HSPLandroidx/compose/runtime/Pending;->registerMoveSlot(II)V
-HSPLandroidx/compose/runtime/Pending;->setGroupIndex(I)V
-HSPLandroidx/compose/runtime/Pending;->slotPositionOf(Landroidx/compose/runtime/KeyInfo;)I
-HSPLandroidx/compose/runtime/Pending;->updateNodeCount(II)Z
-HSPLandroidx/compose/runtime/Pending;->updatedNodeCountOf(Landroidx/compose/runtime/KeyInfo;)I
-HSPLandroidx/compose/runtime/PrioritySet;-><init>(Ljava/util/List;)V
-HSPLandroidx/compose/runtime/PrioritySet;-><init>(Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/runtime/PrioritySet;->add(I)V
-HSPLandroidx/compose/runtime/PrioritySet;->isNotEmpty()Z
-HSPLandroidx/compose/runtime/PrioritySet;->peek()I
-HSPLandroidx/compose/runtime/PrioritySet;->takeMax()I
-HSPLandroidx/compose/runtime/ProvidableCompositionLocal;-><clinit>()V
-HSPLandroidx/compose/runtime/ProvidableCompositionLocal;-><init>(Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/runtime/ProvidableCompositionLocal;->provides(Ljava/lang/Object;)Landroidx/compose/runtime/ProvidedValue;
-HSPLandroidx/compose/runtime/ProvidableCompositionLocal;->providesDefault(Ljava/lang/Object;)Landroidx/compose/runtime/ProvidedValue;
-HSPLandroidx/compose/runtime/ProvidedValue;-><clinit>()V
-HSPLandroidx/compose/runtime/ProvidedValue;-><init>(Landroidx/compose/runtime/CompositionLocal;Ljava/lang/Object;Z)V
-HSPLandroidx/compose/runtime/ProvidedValue;->getCanOverride()Z
-HSPLandroidx/compose/runtime/ProvidedValue;->getCompositionLocal()Landroidx/compose/runtime/CompositionLocal;
-HSPLandroidx/compose/runtime/ProvidedValue;->getValue()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/RecomposeScopeImpl$end$1$2;-><init>(Landroidx/compose/runtime/RecomposeScopeImpl;ILandroidx/compose/runtime/collection/IdentityArrayIntMap;)V
-HSPLandroidx/compose/runtime/RecomposeScopeImpl$end$1$2;->invoke(Landroidx/compose/runtime/Composition;)V
-HSPLandroidx/compose/runtime/RecomposeScopeImpl$end$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/RecomposeScopeImpl;-><init>(Landroidx/compose/runtime/CompositionImpl;)V
-HSPLandroidx/compose/runtime/RecomposeScopeImpl;->access$getCurrentToken$p(Landroidx/compose/runtime/RecomposeScopeImpl;)I
-HSPLandroidx/compose/runtime/RecomposeScopeImpl;->access$getTrackedInstances$p(Landroidx/compose/runtime/RecomposeScopeImpl;)Landroidx/compose/runtime/collection/IdentityArrayIntMap;
-HSPLandroidx/compose/runtime/RecomposeScopeImpl;->access$setTrackedInstances$p(Landroidx/compose/runtime/RecomposeScopeImpl;Landroidx/compose/runtime/collection/IdentityArrayIntMap;)V
-HSPLandroidx/compose/runtime/RecomposeScopeImpl;->compose(Landroidx/compose/runtime/Composer;)V
-HSPLandroidx/compose/runtime/RecomposeScopeImpl;->end(I)Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/runtime/RecomposeScopeImpl;->getAnchor()Landroidx/compose/runtime/Anchor;
-HSPLandroidx/compose/runtime/RecomposeScopeImpl;->getCanRecompose()Z
-HSPLandroidx/compose/runtime/RecomposeScopeImpl;->getComposition()Landroidx/compose/runtime/CompositionImpl;
-HSPLandroidx/compose/runtime/RecomposeScopeImpl;->getDefaultsInScope()Z
-HSPLandroidx/compose/runtime/RecomposeScopeImpl;->getDefaultsInvalid()Z
-HSPLandroidx/compose/runtime/RecomposeScopeImpl;->getRequiresRecompose()Z
-HSPLandroidx/compose/runtime/RecomposeScopeImpl;->getRereading()Z
-HSPLandroidx/compose/runtime/RecomposeScopeImpl;->getSkipped$runtime_release()Z
-HSPLandroidx/compose/runtime/RecomposeScopeImpl;->getUsed()Z
-HSPLandroidx/compose/runtime/RecomposeScopeImpl;->getValid()Z
-HSPLandroidx/compose/runtime/RecomposeScopeImpl;->invalidate()V
-HSPLandroidx/compose/runtime/RecomposeScopeImpl;->invalidateForResult(Ljava/lang/Object;)Landroidx/compose/runtime/InvalidationResult;
-HSPLandroidx/compose/runtime/RecomposeScopeImpl;->isConditional()Z
-HSPLandroidx/compose/runtime/RecomposeScopeImpl;->isInvalidFor(Landroidx/compose/runtime/collection/IdentityArraySet;)Z
-HSPLandroidx/compose/runtime/RecomposeScopeImpl;->recordRead(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/RecomposeScopeImpl;->release()V
-HSPLandroidx/compose/runtime/RecomposeScopeImpl;->scopeSkipped()V
-HSPLandroidx/compose/runtime/RecomposeScopeImpl;->setAnchor(Landroidx/compose/runtime/Anchor;)V
-HSPLandroidx/compose/runtime/RecomposeScopeImpl;->setDefaultsInScope(Z)V
-HSPLandroidx/compose/runtime/RecomposeScopeImpl;->setDefaultsInvalid(Z)V
-HSPLandroidx/compose/runtime/RecomposeScopeImpl;->setRequiresRecompose(Z)V
-HSPLandroidx/compose/runtime/RecomposeScopeImpl;->setSkipped(Z)V
-HSPLandroidx/compose/runtime/RecomposeScopeImpl;->setUsed(Z)V
-HSPLandroidx/compose/runtime/RecomposeScopeImpl;->start(I)V
-HSPLandroidx/compose/runtime/RecomposeScopeImpl;->updateScope(Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/runtime/RecomposeScopeImplKt;->updateChangedFlags(I)I
-HSPLandroidx/compose/runtime/Recomposer$Companion;-><init>()V
-HSPLandroidx/compose/runtime/Recomposer$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/runtime/Recomposer$Companion;->access$addRunning(Landroidx/compose/runtime/Recomposer$Companion;Landroidx/compose/runtime/Recomposer$RecomposerInfoImpl;)V
-HSPLandroidx/compose/runtime/Recomposer$Companion;->access$removeRunning(Landroidx/compose/runtime/Recomposer$Companion;Landroidx/compose/runtime/Recomposer$RecomposerInfoImpl;)V
-HSPLandroidx/compose/runtime/Recomposer$Companion;->addRunning(Landroidx/compose/runtime/Recomposer$RecomposerInfoImpl;)V
-HSPLandroidx/compose/runtime/Recomposer$Companion;->removeRunning(Landroidx/compose/runtime/Recomposer$RecomposerInfoImpl;)V
-HSPLandroidx/compose/runtime/Recomposer$RecomposerInfoImpl;-><init>(Landroidx/compose/runtime/Recomposer;)V
-HSPLandroidx/compose/runtime/Recomposer$State;->$values()[Landroidx/compose/runtime/Recomposer$State;
-HSPLandroidx/compose/runtime/Recomposer$State;-><clinit>()V
-HSPLandroidx/compose/runtime/Recomposer$State;-><init>(Ljava/lang/String;I)V
-HSPLandroidx/compose/runtime/Recomposer$broadcastFrameClock$1;-><init>(Landroidx/compose/runtime/Recomposer;)V
-HSPLandroidx/compose/runtime/Recomposer$broadcastFrameClock$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Recomposer$broadcastFrameClock$1;->invoke()V
-HSPLandroidx/compose/runtime/Recomposer$effectJob$1$1$1$1;-><init>(Landroidx/compose/runtime/Recomposer;Ljava/lang/Throwable;)V
-HSPLandroidx/compose/runtime/Recomposer$effectJob$1$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Recomposer$effectJob$1$1$1$1;->invoke(Ljava/lang/Throwable;)V
-HSPLandroidx/compose/runtime/Recomposer$effectJob$1$1;-><init>(Landroidx/compose/runtime/Recomposer;)V
-HSPLandroidx/compose/runtime/Recomposer$effectJob$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Recomposer$effectJob$1$1;->invoke(Ljava/lang/Throwable;)V
-HSPLandroidx/compose/runtime/Recomposer$join$2;-><init>(Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/runtime/Recomposer$join$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/runtime/Recomposer$join$2;->invoke(Landroidx/compose/runtime/Recomposer$State;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Recomposer$join$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Recomposer$join$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Recomposer$performRecompose$1$1;-><init>(Landroidx/compose/runtime/collection/IdentityArraySet;Landroidx/compose/runtime/ControlledComposition;)V
-HSPLandroidx/compose/runtime/Recomposer$performRecompose$1$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Recomposer$performRecompose$1$1;->invoke()V
-HSPLandroidx/compose/runtime/Recomposer$readObserverOf$1;-><init>(Landroidx/compose/runtime/ControlledComposition;)V
-HSPLandroidx/compose/runtime/Recomposer$readObserverOf$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Recomposer$readObserverOf$1;->invoke(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$2;-><init>(Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/MonotonicFrameClock;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$unregisterApplyObserver$1;-><init>(Landroidx/compose/runtime/Recomposer;)V
-HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$unregisterApplyObserver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$unregisterApplyObserver$1;->invoke(Ljava/util/Set;Landroidx/compose/runtime/snapshots/Snapshot;)V
-HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;-><init>(Landroidx/compose/runtime/Recomposer;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/MonotonicFrameClock;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2$2;-><init>(Landroidx/compose/runtime/Recomposer;Ljava/util/List;Ljava/util/List;Ljava/util/Set;Ljava/util/List;Ljava/util/Set;)V
-HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2$2;->invoke(J)V
-HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;-><init>(Landroidx/compose/runtime/Recomposer;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;->access$invokeSuspend$fillToInsert(Ljava/util/List;Landroidx/compose/runtime/Recomposer;)V
-HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/runtime/MonotonicFrameClock;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;->invokeSuspend$fillToInsert(Ljava/util/List;Landroidx/compose/runtime/Recomposer;)V
-HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Recomposer$writeObserverOf$1;-><init>(Landroidx/compose/runtime/ControlledComposition;Landroidx/compose/runtime/collection/IdentityArraySet;)V
-HSPLandroidx/compose/runtime/Recomposer$writeObserverOf$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Recomposer$writeObserverOf$1;->invoke(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/Recomposer;-><clinit>()V
-HSPLandroidx/compose/runtime/Recomposer;-><init>(Lkotlin/coroutines/CoroutineContext;)V
-HSPLandroidx/compose/runtime/Recomposer;->access$awaitWorkAvailable(Landroidx/compose/runtime/Recomposer;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Recomposer;->access$deriveStateLocked(Landroidx/compose/runtime/Recomposer;)Lkotlinx/coroutines/CancellableContinuation;
-HSPLandroidx/compose/runtime/Recomposer;->access$discardUnusedValues(Landroidx/compose/runtime/Recomposer;)V
-HSPLandroidx/compose/runtime/Recomposer;->access$getBroadcastFrameClock$p(Landroidx/compose/runtime/Recomposer;)Landroidx/compose/runtime/BroadcastFrameClock;
-HSPLandroidx/compose/runtime/Recomposer;->access$getCompositionInvalidations$p(Landroidx/compose/runtime/Recomposer;)Ljava/util/List;
-HSPLandroidx/compose/runtime/Recomposer;->access$getCompositionValuesAwaitingInsert$p(Landroidx/compose/runtime/Recomposer;)Ljava/util/List;
-HSPLandroidx/compose/runtime/Recomposer;->access$getHasFrameWorkLocked(Landroidx/compose/runtime/Recomposer;)Z
-HSPLandroidx/compose/runtime/Recomposer;->access$getHasSchedulingWork(Landroidx/compose/runtime/Recomposer;)Z
-HSPLandroidx/compose/runtime/Recomposer;->access$getKnownCompositions$p(Landroidx/compose/runtime/Recomposer;)Ljava/util/List;
-HSPLandroidx/compose/runtime/Recomposer;->access$getRecomposerInfo$p(Landroidx/compose/runtime/Recomposer;)Landroidx/compose/runtime/Recomposer$RecomposerInfoImpl;
-HSPLandroidx/compose/runtime/Recomposer;->access$getRunnerJob$p(Landroidx/compose/runtime/Recomposer;)Lkotlinx/coroutines/Job;
-HSPLandroidx/compose/runtime/Recomposer;->access$getShouldKeepRecomposing(Landroidx/compose/runtime/Recomposer;)Z
-HSPLandroidx/compose/runtime/Recomposer;->access$getSnapshotInvalidations$p(Landroidx/compose/runtime/Recomposer;)Ljava/util/Set;
-HSPLandroidx/compose/runtime/Recomposer;->access$getStateLock$p(Landroidx/compose/runtime/Recomposer;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Recomposer;->access$get_runningRecomposers$cp()Lkotlinx/coroutines/flow/MutableStateFlow;
-HSPLandroidx/compose/runtime/Recomposer;->access$get_state$p(Landroidx/compose/runtime/Recomposer;)Lkotlinx/coroutines/flow/MutableStateFlow;
-HSPLandroidx/compose/runtime/Recomposer;->access$isClosed$p(Landroidx/compose/runtime/Recomposer;)Z
-HSPLandroidx/compose/runtime/Recomposer;->access$performRecompose(Landroidx/compose/runtime/Recomposer;Landroidx/compose/runtime/ControlledComposition;Landroidx/compose/runtime/collection/IdentityArraySet;)Landroidx/compose/runtime/ControlledComposition;
-HSPLandroidx/compose/runtime/Recomposer;->access$recordComposerModificationsLocked(Landroidx/compose/runtime/Recomposer;)V
-HSPLandroidx/compose/runtime/Recomposer;->access$registerRunnerJob(Landroidx/compose/runtime/Recomposer;Lkotlinx/coroutines/Job;)V
-HSPLandroidx/compose/runtime/Recomposer;->access$setChangeCount$p(Landroidx/compose/runtime/Recomposer;J)V
-HSPLandroidx/compose/runtime/Recomposer;->access$setCloseCause$p(Landroidx/compose/runtime/Recomposer;Ljava/lang/Throwable;)V
-HSPLandroidx/compose/runtime/Recomposer;->access$setRunnerJob$p(Landroidx/compose/runtime/Recomposer;Lkotlinx/coroutines/Job;)V
-HSPLandroidx/compose/runtime/Recomposer;->access$setWorkContinuation$p(Landroidx/compose/runtime/Recomposer;Lkotlinx/coroutines/CancellableContinuation;)V
-HSPLandroidx/compose/runtime/Recomposer;->applyAndCheck(Landroidx/compose/runtime/snapshots/MutableSnapshot;)V
-HSPLandroidx/compose/runtime/Recomposer;->awaitWorkAvailable(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Recomposer;->cancel()V
-HSPLandroidx/compose/runtime/Recomposer;->composeInitial$runtime_release(Landroidx/compose/runtime/ControlledComposition;Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/runtime/Recomposer;->deriveStateLocked()Lkotlinx/coroutines/CancellableContinuation;
-HSPLandroidx/compose/runtime/Recomposer;->discardUnusedValues()V
-HSPLandroidx/compose/runtime/Recomposer;->getChangeCount()J
-HSPLandroidx/compose/runtime/Recomposer;->getCollectingParameterInformation$runtime_release()Z
-HSPLandroidx/compose/runtime/Recomposer;->getCompoundHashKey$runtime_release()I
-HSPLandroidx/compose/runtime/Recomposer;->getCurrentState()Lkotlinx/coroutines/flow/StateFlow;
-HSPLandroidx/compose/runtime/Recomposer;->getEffectCoroutineContext$runtime_release()Lkotlin/coroutines/CoroutineContext;
-HSPLandroidx/compose/runtime/Recomposer;->getHasFrameWorkLocked()Z
-HSPLandroidx/compose/runtime/Recomposer;->getHasSchedulingWork()Z
-HSPLandroidx/compose/runtime/Recomposer;->getShouldKeepRecomposing()Z
-HSPLandroidx/compose/runtime/Recomposer;->invalidate$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V
-HSPLandroidx/compose/runtime/Recomposer;->join(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Recomposer;->performInitialMovableContentInserts(Landroidx/compose/runtime/ControlledComposition;)V
-HSPLandroidx/compose/runtime/Recomposer;->performRecompose(Landroidx/compose/runtime/ControlledComposition;Landroidx/compose/runtime/collection/IdentityArraySet;)Landroidx/compose/runtime/ControlledComposition;
-HSPLandroidx/compose/runtime/Recomposer;->readObserverOf(Landroidx/compose/runtime/ControlledComposition;)Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/runtime/Recomposer;->recompositionRunner(Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Recomposer;->recordComposerModificationsLocked()V
-HSPLandroidx/compose/runtime/Recomposer;->registerRunnerJob(Lkotlinx/coroutines/Job;)V
-HSPLandroidx/compose/runtime/Recomposer;->runRecomposeAndApplyChanges(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Recomposer;->unregisterComposition$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V
-HSPLandroidx/compose/runtime/Recomposer;->writeObserverOf(Landroidx/compose/runtime/ControlledComposition;Landroidx/compose/runtime/collection/IdentityArraySet;)Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/runtime/ReferentialEqualityPolicy;-><clinit>()V
-HSPLandroidx/compose/runtime/ReferentialEqualityPolicy;-><init>()V
-HSPLandroidx/compose/runtime/SkippableUpdater;-><init>(Landroidx/compose/runtime/Composer;)V
-HSPLandroidx/compose/runtime/SkippableUpdater;->box-impl(Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/SkippableUpdater;
-HSPLandroidx/compose/runtime/SkippableUpdater;->constructor-impl(Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/Composer;
-HSPLandroidx/compose/runtime/SkippableUpdater;->unbox-impl()Landroidx/compose/runtime/Composer;
-HSPLandroidx/compose/runtime/SlotReader;-><init>(Landroidx/compose/runtime/SlotTable;)V
-HSPLandroidx/compose/runtime/SlotReader;->anchor(I)Landroidx/compose/runtime/Anchor;
-HSPLandroidx/compose/runtime/SlotReader;->aux([II)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/SlotReader;->beginEmpty()V
-HSPLandroidx/compose/runtime/SlotReader;->close()V
-HSPLandroidx/compose/runtime/SlotReader;->containsMark(I)Z
-HSPLandroidx/compose/runtime/SlotReader;->endEmpty()V
-HSPLandroidx/compose/runtime/SlotReader;->endGroup()V
-HSPLandroidx/compose/runtime/SlotReader;->extractKeys()Ljava/util/List;
-HSPLandroidx/compose/runtime/SlotReader;->getCurrentGroup()I
-HSPLandroidx/compose/runtime/SlotReader;->getGroupAux()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/SlotReader;->getGroupEnd()I
-HSPLandroidx/compose/runtime/SlotReader;->getGroupKey()I
-HSPLandroidx/compose/runtime/SlotReader;->getGroupObjectKey()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/SlotReader;->getGroupSize()I
-HSPLandroidx/compose/runtime/SlotReader;->getGroupSlotIndex()I
-HSPLandroidx/compose/runtime/SlotReader;->getInEmpty()Z
-HSPLandroidx/compose/runtime/SlotReader;->getParent()I
-HSPLandroidx/compose/runtime/SlotReader;->getParentNodes()I
-HSPLandroidx/compose/runtime/SlotReader;->getSize()I
-HSPLandroidx/compose/runtime/SlotReader;->getTable$runtime_release()Landroidx/compose/runtime/SlotTable;
-HSPLandroidx/compose/runtime/SlotReader;->groupAux(I)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/SlotReader;->groupGet(I)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/SlotReader;->groupGet(II)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/SlotReader;->groupKey(I)I
-HSPLandroidx/compose/runtime/SlotReader;->groupObjectKey(I)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/SlotReader;->groupSize(I)I
-HSPLandroidx/compose/runtime/SlotReader;->hasMark(I)Z
-HSPLandroidx/compose/runtime/SlotReader;->hasObjectKey(I)Z
-HSPLandroidx/compose/runtime/SlotReader;->isGroupEnd()Z
-HSPLandroidx/compose/runtime/SlotReader;->isNode()Z
-HSPLandroidx/compose/runtime/SlotReader;->isNode(I)Z
-HSPLandroidx/compose/runtime/SlotReader;->next()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/SlotReader;->node(I)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/SlotReader;->node([II)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/SlotReader;->nodeCount(I)I
-HSPLandroidx/compose/runtime/SlotReader;->objectKey([II)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/SlotReader;->parent(I)I
-HSPLandroidx/compose/runtime/SlotReader;->reposition(I)V
-HSPLandroidx/compose/runtime/SlotReader;->restoreParent(I)V
-HSPLandroidx/compose/runtime/SlotReader;->skipGroup()I
-HSPLandroidx/compose/runtime/SlotReader;->skipToGroupEnd()V
-HSPLandroidx/compose/runtime/SlotReader;->startGroup()V
-HSPLandroidx/compose/runtime/SlotReader;->startNode()V
-HSPLandroidx/compose/runtime/SlotTable;-><init>()V
-HSPLandroidx/compose/runtime/SlotTable;->anchorIndex(Landroidx/compose/runtime/Anchor;)I
-HSPLandroidx/compose/runtime/SlotTable;->close$runtime_release(Landroidx/compose/runtime/SlotReader;)V
-HSPLandroidx/compose/runtime/SlotTable;->close$runtime_release(Landroidx/compose/runtime/SlotWriter;[II[Ljava/lang/Object;ILjava/util/ArrayList;)V
-HSPLandroidx/compose/runtime/SlotTable;->containsMark()Z
-HSPLandroidx/compose/runtime/SlotTable;->getAnchors$runtime_release()Ljava/util/ArrayList;
-HSPLandroidx/compose/runtime/SlotTable;->getGroups()[I
-HSPLandroidx/compose/runtime/SlotTable;->getGroupsSize()I
-HSPLandroidx/compose/runtime/SlotTable;->getSlots()[Ljava/lang/Object;
-HSPLandroidx/compose/runtime/SlotTable;->getSlotsSize()I
-HSPLandroidx/compose/runtime/SlotTable;->isEmpty()Z
-HSPLandroidx/compose/runtime/SlotTable;->openReader()Landroidx/compose/runtime/SlotReader;
-HSPLandroidx/compose/runtime/SlotTable;->openWriter()Landroidx/compose/runtime/SlotWriter;
-HSPLandroidx/compose/runtime/SlotTable;->ownsAnchor(Landroidx/compose/runtime/Anchor;)Z
-HSPLandroidx/compose/runtime/SlotTable;->setTo$runtime_release([II[Ljava/lang/Object;ILjava/util/ArrayList;)V
-HSPLandroidx/compose/runtime/SlotTableKt;->access$auxIndex([II)I
-HSPLandroidx/compose/runtime/SlotTableKt;->access$containsAnyMark([II)Z
-HSPLandroidx/compose/runtime/SlotTableKt;->access$containsMark([II)Z
-HSPLandroidx/compose/runtime/SlotTableKt;->access$countOneBits(I)I
-HSPLandroidx/compose/runtime/SlotTableKt;->access$dataAnchor([II)I
-HSPLandroidx/compose/runtime/SlotTableKt;->access$groupInfo([II)I
-HSPLandroidx/compose/runtime/SlotTableKt;->access$groupSize([II)I
-HSPLandroidx/compose/runtime/SlotTableKt;->access$hasAux([II)Z
-HSPLandroidx/compose/runtime/SlotTableKt;->access$hasMark([II)Z
-HSPLandroidx/compose/runtime/SlotTableKt;->access$hasObjectKey([II)Z
-HSPLandroidx/compose/runtime/SlotTableKt;->access$initGroup([IIIZZZII)V
-HSPLandroidx/compose/runtime/SlotTableKt;->access$isNode([II)Z
-HSPLandroidx/compose/runtime/SlotTableKt;->access$key([II)I
-HSPLandroidx/compose/runtime/SlotTableKt;->access$locationOf(Ljava/util/ArrayList;II)I
-HSPLandroidx/compose/runtime/SlotTableKt;->access$nodeCount([II)I
-HSPLandroidx/compose/runtime/SlotTableKt;->access$nodeIndex([II)I
-HSPLandroidx/compose/runtime/SlotTableKt;->access$objectKeyIndex([II)I
-HSPLandroidx/compose/runtime/SlotTableKt;->access$parentAnchor([II)I
-HSPLandroidx/compose/runtime/SlotTableKt;->access$search(Ljava/util/ArrayList;II)I
-HSPLandroidx/compose/runtime/SlotTableKt;->access$slotAnchor([II)I
-HSPLandroidx/compose/runtime/SlotTableKt;->access$updateContainsMark([IIZ)V
-HSPLandroidx/compose/runtime/SlotTableKt;->access$updateDataAnchor([III)V
-HSPLandroidx/compose/runtime/SlotTableKt;->access$updateGroupSize([III)V
-HSPLandroidx/compose/runtime/SlotTableKt;->access$updateMark([IIZ)V
-HSPLandroidx/compose/runtime/SlotTableKt;->access$updateNodeCount([III)V
-HSPLandroidx/compose/runtime/SlotTableKt;->access$updateParentAnchor([III)V
-HSPLandroidx/compose/runtime/SlotTableKt;->auxIndex([II)I
-HSPLandroidx/compose/runtime/SlotTableKt;->containsAnyMark([II)Z
-HSPLandroidx/compose/runtime/SlotTableKt;->containsMark([II)Z
-HSPLandroidx/compose/runtime/SlotTableKt;->countOneBits(I)I
-HSPLandroidx/compose/runtime/SlotTableKt;->dataAnchor([II)I
-HSPLandroidx/compose/runtime/SlotTableKt;->groupInfo([II)I
-HSPLandroidx/compose/runtime/SlotTableKt;->groupSize([II)I
-HSPLandroidx/compose/runtime/SlotTableKt;->hasAux([II)Z
-HSPLandroidx/compose/runtime/SlotTableKt;->hasMark([II)Z
-HSPLandroidx/compose/runtime/SlotTableKt;->hasObjectKey([II)Z
-HSPLandroidx/compose/runtime/SlotTableKt;->initGroup([IIIZZZII)V
-HSPLandroidx/compose/runtime/SlotTableKt;->isNode([II)Z
-HSPLandroidx/compose/runtime/SlotTableKt;->key([II)I
-HSPLandroidx/compose/runtime/SlotTableKt;->locationOf(Ljava/util/ArrayList;II)I
-HSPLandroidx/compose/runtime/SlotTableKt;->nodeCount([II)I
-HSPLandroidx/compose/runtime/SlotTableKt;->nodeIndex([II)I
-HSPLandroidx/compose/runtime/SlotTableKt;->objectKeyIndex([II)I
-HSPLandroidx/compose/runtime/SlotTableKt;->parentAnchor([II)I
-HSPLandroidx/compose/runtime/SlotTableKt;->search(Ljava/util/ArrayList;II)I
-HSPLandroidx/compose/runtime/SlotTableKt;->slotAnchor([II)I
-HSPLandroidx/compose/runtime/SlotTableKt;->updateContainsMark([IIZ)V
-HSPLandroidx/compose/runtime/SlotTableKt;->updateDataAnchor([III)V
-HSPLandroidx/compose/runtime/SlotTableKt;->updateGroupSize([III)V
-HSPLandroidx/compose/runtime/SlotTableKt;->updateMark([IIZ)V
-HSPLandroidx/compose/runtime/SlotTableKt;->updateNodeCount([III)V
-HSPLandroidx/compose/runtime/SlotTableKt;->updateParentAnchor([III)V
-HSPLandroidx/compose/runtime/SlotWriter$Companion;-><init>()V
-HSPLandroidx/compose/runtime/SlotWriter$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/runtime/SlotWriter$Companion;->access$moveGroup(Landroidx/compose/runtime/SlotWriter$Companion;Landroidx/compose/runtime/SlotWriter;ILandroidx/compose/runtime/SlotWriter;ZZ)Ljava/util/List;
-HSPLandroidx/compose/runtime/SlotWriter$Companion;->moveGroup(Landroidx/compose/runtime/SlotWriter;ILandroidx/compose/runtime/SlotWriter;ZZ)Ljava/util/List;
-HSPLandroidx/compose/runtime/SlotWriter$groupSlots$1;-><init>(IILandroidx/compose/runtime/SlotWriter;)V
-HSPLandroidx/compose/runtime/SlotWriter$groupSlots$1;->hasNext()Z
-HSPLandroidx/compose/runtime/SlotWriter$groupSlots$1;->next()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/SlotWriter;-><clinit>()V
-HSPLandroidx/compose/runtime/SlotWriter;-><init>(Landroidx/compose/runtime/SlotTable;)V
-HSPLandroidx/compose/runtime/SlotWriter;->access$containsAnyGroupMarks(Landroidx/compose/runtime/SlotWriter;I)Z
-HSPLandroidx/compose/runtime/SlotWriter;->access$dataIndex(Landroidx/compose/runtime/SlotWriter;I)I
-HSPLandroidx/compose/runtime/SlotWriter;->access$dataIndex(Landroidx/compose/runtime/SlotWriter;[II)I
-HSPLandroidx/compose/runtime/SlotWriter;->access$dataIndexToDataAddress(Landroidx/compose/runtime/SlotWriter;I)I
-HSPLandroidx/compose/runtime/SlotWriter;->access$dataIndexToDataAnchor(Landroidx/compose/runtime/SlotWriter;IIII)I
-HSPLandroidx/compose/runtime/SlotWriter;->access$getAnchors$p(Landroidx/compose/runtime/SlotWriter;)Ljava/util/ArrayList;
-HSPLandroidx/compose/runtime/SlotWriter;->access$getCurrentSlot$p(Landroidx/compose/runtime/SlotWriter;)I
-HSPLandroidx/compose/runtime/SlotWriter;->access$getGroupGapStart$p(Landroidx/compose/runtime/SlotWriter;)I
-HSPLandroidx/compose/runtime/SlotWriter;->access$getGroups$p(Landroidx/compose/runtime/SlotWriter;)[I
-HSPLandroidx/compose/runtime/SlotWriter;->access$getNodeCount$p(Landroidx/compose/runtime/SlotWriter;)I
-HSPLandroidx/compose/runtime/SlotWriter;->access$getSlots$p(Landroidx/compose/runtime/SlotWriter;)[Ljava/lang/Object;
-HSPLandroidx/compose/runtime/SlotWriter;->access$getSlotsGapLen$p(Landroidx/compose/runtime/SlotWriter;)I
-HSPLandroidx/compose/runtime/SlotWriter;->access$getSlotsGapOwner$p(Landroidx/compose/runtime/SlotWriter;)I
-HSPLandroidx/compose/runtime/SlotWriter;->access$getSlotsGapStart$p(Landroidx/compose/runtime/SlotWriter;)I
-HSPLandroidx/compose/runtime/SlotWriter;->access$insertGroups(Landroidx/compose/runtime/SlotWriter;I)V
-HSPLandroidx/compose/runtime/SlotWriter;->access$insertSlots(Landroidx/compose/runtime/SlotWriter;II)V
-HSPLandroidx/compose/runtime/SlotWriter;->access$setCurrentGroup$p(Landroidx/compose/runtime/SlotWriter;I)V
-HSPLandroidx/compose/runtime/SlotWriter;->access$setCurrentSlot$p(Landroidx/compose/runtime/SlotWriter;I)V
-HSPLandroidx/compose/runtime/SlotWriter;->access$setNodeCount$p(Landroidx/compose/runtime/SlotWriter;I)V
-HSPLandroidx/compose/runtime/SlotWriter;->access$setSlotsGapOwner$p(Landroidx/compose/runtime/SlotWriter;I)V
-HSPLandroidx/compose/runtime/SlotWriter;->access$updateContainsMark(Landroidx/compose/runtime/SlotWriter;I)V
-HSPLandroidx/compose/runtime/SlotWriter;->advanceBy(I)V
-HSPLandroidx/compose/runtime/SlotWriter;->anchor(I)Landroidx/compose/runtime/Anchor;
-HSPLandroidx/compose/runtime/SlotWriter;->anchorIndex(Landroidx/compose/runtime/Anchor;)I
-HSPLandroidx/compose/runtime/SlotWriter;->auxIndex([II)I
-HSPLandroidx/compose/runtime/SlotWriter;->beginInsert()V
-HSPLandroidx/compose/runtime/SlotWriter;->childContainsAnyMarks(I)Z
-HSPLandroidx/compose/runtime/SlotWriter;->close()V
-HSPLandroidx/compose/runtime/SlotWriter;->containsAnyGroupMarks(I)Z
-HSPLandroidx/compose/runtime/SlotWriter;->containsGroupMark(I)Z
-HSPLandroidx/compose/runtime/SlotWriter;->dataAnchorToDataIndex(III)I
-HSPLandroidx/compose/runtime/SlotWriter;->dataIndex(I)I
-HSPLandroidx/compose/runtime/SlotWriter;->dataIndex([II)I
-HSPLandroidx/compose/runtime/SlotWriter;->dataIndexToDataAddress(I)I
-HSPLandroidx/compose/runtime/SlotWriter;->dataIndexToDataAnchor(IIII)I
-HSPLandroidx/compose/runtime/SlotWriter;->endGroup()I
-HSPLandroidx/compose/runtime/SlotWriter;->endInsert()V
-HSPLandroidx/compose/runtime/SlotWriter;->ensureStarted(I)V
-HSPLandroidx/compose/runtime/SlotWriter;->ensureStarted(Landroidx/compose/runtime/Anchor;)V
-HSPLandroidx/compose/runtime/SlotWriter;->fixParentAnchorsFor(III)V
-HSPLandroidx/compose/runtime/SlotWriter;->getCapacity()I
-HSPLandroidx/compose/runtime/SlotWriter;->getClosed()Z
-HSPLandroidx/compose/runtime/SlotWriter;->getCurrentGroup()I
-HSPLandroidx/compose/runtime/SlotWriter;->getParent()I
-HSPLandroidx/compose/runtime/SlotWriter;->getSize$runtime_release()I
-HSPLandroidx/compose/runtime/SlotWriter;->getTable$runtime_release()Landroidx/compose/runtime/SlotTable;
-HSPLandroidx/compose/runtime/SlotWriter;->groupAux(I)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/SlotWriter;->groupIndexToAddress(I)I
-HSPLandroidx/compose/runtime/SlotWriter;->groupKey(I)I
-HSPLandroidx/compose/runtime/SlotWriter;->groupObjectKey(I)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/SlotWriter;->groupSize(I)I
-HSPLandroidx/compose/runtime/SlotWriter;->groupSlots()Ljava/util/Iterator;
-HSPLandroidx/compose/runtime/SlotWriter;->insertGroups(I)V
-HSPLandroidx/compose/runtime/SlotWriter;->insertSlots(II)V
-HSPLandroidx/compose/runtime/SlotWriter;->markGroup$default(Landroidx/compose/runtime/SlotWriter;IILjava/lang/Object;)V
-HSPLandroidx/compose/runtime/SlotWriter;->markGroup(I)V
-HSPLandroidx/compose/runtime/SlotWriter;->moveAnchors(III)V
-HSPLandroidx/compose/runtime/SlotWriter;->moveFrom(Landroidx/compose/runtime/SlotTable;I)Ljava/util/List;
-HSPLandroidx/compose/runtime/SlotWriter;->moveGroup(I)V
-HSPLandroidx/compose/runtime/SlotWriter;->moveGroupGapTo(I)V
-HSPLandroidx/compose/runtime/SlotWriter;->moveSlotGapTo(II)V
-HSPLandroidx/compose/runtime/SlotWriter;->node(I)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/SlotWriter;->node(Landroidx/compose/runtime/Anchor;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/SlotWriter;->nodeIndex([II)I
-HSPLandroidx/compose/runtime/SlotWriter;->parent(I)I
-HSPLandroidx/compose/runtime/SlotWriter;->parent([II)I
-HSPLandroidx/compose/runtime/SlotWriter;->parentAnchorToIndex(I)I
-HSPLandroidx/compose/runtime/SlotWriter;->parentIndexToAnchor(II)I
-HSPLandroidx/compose/runtime/SlotWriter;->recalculateMarks()V
-HSPLandroidx/compose/runtime/SlotWriter;->removeAnchors(II)Z
-HSPLandroidx/compose/runtime/SlotWriter;->removeGroup()Z
-HSPLandroidx/compose/runtime/SlotWriter;->removeGroups(II)Z
-HSPLandroidx/compose/runtime/SlotWriter;->removeSlots(III)V
-HSPLandroidx/compose/runtime/SlotWriter;->restoreCurrentGroupEnd()I
-HSPLandroidx/compose/runtime/SlotWriter;->saveCurrentGroupEnd()V
-HSPLandroidx/compose/runtime/SlotWriter;->set(ILjava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/SlotWriter;->set(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/SlotWriter;->skip()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/SlotWriter;->skipGroup()I
-HSPLandroidx/compose/runtime/SlotWriter;->skipToGroupEnd()V
-HSPLandroidx/compose/runtime/SlotWriter;->slotIndex([II)I
-HSPLandroidx/compose/runtime/SlotWriter;->startData(ILjava/lang/Object;Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/SlotWriter;->startGroup()V
-HSPLandroidx/compose/runtime/SlotWriter;->startGroup(ILjava/lang/Object;)V
-HSPLandroidx/compose/runtime/SlotWriter;->startGroup(ILjava/lang/Object;ZLjava/lang/Object;)V
-HSPLandroidx/compose/runtime/SlotWriter;->startNode(ILjava/lang/Object;)V
-HSPLandroidx/compose/runtime/SlotWriter;->update(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/SlotWriter;->updateAnchors(II)V
-HSPLandroidx/compose/runtime/SlotWriter;->updateAux(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/SlotWriter;->updateContainsMark(I)V
-HSPLandroidx/compose/runtime/SlotWriter;->updateContainsMarkNow(ILandroidx/compose/runtime/PrioritySet;)V
-HSPLandroidx/compose/runtime/SlotWriter;->updateDataIndex([III)V
-HSPLandroidx/compose/runtime/SlotWriter;->updateNode(Landroidx/compose/runtime/Anchor;Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/SlotWriter;->updateNodeOfGroup(ILjava/lang/Object;)V
-HSPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;-><init>(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V
-HSPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord;
-HSPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;->getValue()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;->setValue(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;-><init>(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;)V
-HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord;
-HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->getPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy;
-HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->getValue()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V
-HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->setValue(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/SnapshotStateKt;->derivedStateOf(Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/State;
-HSPLandroidx/compose/runtime/SnapshotStateKt;->mutableStateListOf()Landroidx/compose/runtime/snapshots/SnapshotStateList;
-HSPLandroidx/compose/runtime/SnapshotStateKt;->mutableStateOf$default(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;ILjava/lang/Object;)Landroidx/compose/runtime/MutableState;
-HSPLandroidx/compose/runtime/SnapshotStateKt;->mutableStateOf(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;)Landroidx/compose/runtime/MutableState;
-HSPLandroidx/compose/runtime/SnapshotStateKt;->neverEqualPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy;
-HSPLandroidx/compose/runtime/SnapshotStateKt;->observeDerivedStateRecalculations(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/runtime/SnapshotStateKt;->referentialEqualityPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy;
-HSPLandroidx/compose/runtime/SnapshotStateKt;->rememberUpdatedState(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State;
-HSPLandroidx/compose/runtime/SnapshotStateKt;->snapshotFlow(Lkotlin/jvm/functions/Function0;)Lkotlinx/coroutines/flow/Flow;
-HSPLandroidx/compose/runtime/SnapshotStateKt;->structuralEqualityPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy;
-HSPLandroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;-><clinit>()V
-HSPLandroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;->access$getCalculationBlockNestedLevel$p()Landroidx/compose/runtime/SnapshotThreadLocal;
-HSPLandroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;->access$getDerivedStateObservers$p()Landroidx/compose/runtime/SnapshotThreadLocal;
-HSPLandroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;->derivedStateOf(Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/State;
-HSPLandroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;->observeDerivedStateRecalculations(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$readObserver$1;-><init>(Ljava/util/Set;)V
-HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$readObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$readObserver$1;->invoke(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$unregisterApplyObserver$1;-><init>(Lkotlinx/coroutines/channels/Channel;)V
-HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$unregisterApplyObserver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$unregisterApplyObserver$1;->invoke(Ljava/util/Set;Landroidx/compose/runtime/snapshots/Snapshot;)V
-HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;-><init>(Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt;->access$intersects(Ljava/util/Set;Ljava/util/Set;)Z
-HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt;->intersects$SnapshotStateKt__SnapshotFlowKt(Ljava/util/Set;Ljava/util/Set;)Z
-HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt;->snapshotFlow(Lkotlin/jvm/functions/Function0;)Lkotlinx/coroutines/flow/Flow;
-HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotMutationPolicyKt;->neverEqualPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy;
-HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotMutationPolicyKt;->referentialEqualityPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy;
-HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotMutationPolicyKt;->structuralEqualityPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy;
-HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotStateKt;->mutableStateListOf()Landroidx/compose/runtime/snapshots/SnapshotStateList;
-HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotStateKt;->mutableStateOf$default(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;ILjava/lang/Object;)Landroidx/compose/runtime/MutableState;
-HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotStateKt;->mutableStateOf(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;)Landroidx/compose/runtime/MutableState;
-HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotStateKt;->rememberUpdatedState(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State;
-HSPLandroidx/compose/runtime/SnapshotThreadLocal;-><init>()V
-HSPLandroidx/compose/runtime/SnapshotThreadLocal;->get()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/SnapshotThreadLocal;->set(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/Stack;-><init>()V
-HSPLandroidx/compose/runtime/Stack;->clear()V
-HSPLandroidx/compose/runtime/Stack;->getSize()I
-HSPLandroidx/compose/runtime/Stack;->isEmpty()Z
-HSPLandroidx/compose/runtime/Stack;->isNotEmpty()Z
-HSPLandroidx/compose/runtime/Stack;->peek()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Stack;->peek(I)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Stack;->pop()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Stack;->push(Ljava/lang/Object;)Z
-HSPLandroidx/compose/runtime/Stack;->toArray()[Ljava/lang/Object;
-HSPLandroidx/compose/runtime/StaticProvidableCompositionLocal;-><init>(Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/runtime/StaticProvidableCompositionLocal;->provided$runtime_release(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State;
-HSPLandroidx/compose/runtime/StaticValueHolder;-><init>(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/StaticValueHolder;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/runtime/StaticValueHolder;->getValue()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/StructuralEqualityPolicy;-><clinit>()V
-HSPLandroidx/compose/runtime/StructuralEqualityPolicy;-><init>()V
-HSPLandroidx/compose/runtime/StructuralEqualityPolicy;->equivalent(Ljava/lang/Object;Ljava/lang/Object;)Z
-HSPLandroidx/compose/runtime/Trace;-><clinit>()V
-HSPLandroidx/compose/runtime/Trace;-><init>()V
-HSPLandroidx/compose/runtime/Trace;->beginSection(Ljava/lang/String;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/Trace;->endSection(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/Updater;->constructor-impl(Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/Composer;
-HSPLandroidx/compose/runtime/Updater;->set-impl(Landroidx/compose/runtime/Composer;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;-><init>()V
-HSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->add(Ljava/lang/Object;I)I
-HSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->find(Ljava/lang/Object;)I
-HSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->getKeys()[Ljava/lang/Object;
-HSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->getSize()I
-HSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->getValues()[I
-HSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->setSize(I)V
-HSPLandroidx/compose/runtime/collection/IdentityArrayMap;-><init>(I)V
-HSPLandroidx/compose/runtime/collection/IdentityArrayMap;-><init>(IILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->clear()V
-HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->contains(Ljava/lang/Object;)Z
-HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->find(Ljava/lang/Object;)I
-HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->getKeys$runtime_release()[Ljava/lang/Object;
-HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->getSize$runtime_release()I
-HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->getValues$runtime_release()[Ljava/lang/Object;
-HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->isNotEmpty()Z
-HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->set(Ljava/lang/Object;Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->setSize$runtime_release(I)V
-HSPLandroidx/compose/runtime/collection/IdentityArraySet$iterator$1;-><init>(Landroidx/compose/runtime/collection/IdentityArraySet;)V
-HSPLandroidx/compose/runtime/collection/IdentityArraySet$iterator$1;->hasNext()Z
-HSPLandroidx/compose/runtime/collection/IdentityArraySet$iterator$1;->next()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/collection/IdentityArraySet;-><init>()V
-HSPLandroidx/compose/runtime/collection/IdentityArraySet;->add(Ljava/lang/Object;)Z
-HSPLandroidx/compose/runtime/collection/IdentityArraySet;->checkIndexBounds(I)V
-HSPLandroidx/compose/runtime/collection/IdentityArraySet;->clear()V
-HSPLandroidx/compose/runtime/collection/IdentityArraySet;->contains(Ljava/lang/Object;)Z
-HSPLandroidx/compose/runtime/collection/IdentityArraySet;->find(Ljava/lang/Object;)I
-HSPLandroidx/compose/runtime/collection/IdentityArraySet;->get(I)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/collection/IdentityArraySet;->getSize()I
-HSPLandroidx/compose/runtime/collection/IdentityArraySet;->getValues()[Ljava/lang/Object;
-HSPLandroidx/compose/runtime/collection/IdentityArraySet;->isEmpty()Z
-HSPLandroidx/compose/runtime/collection/IdentityArraySet;->isNotEmpty()Z
-HSPLandroidx/compose/runtime/collection/IdentityArraySet;->iterator()Ljava/util/Iterator;
-HSPLandroidx/compose/runtime/collection/IdentityArraySet;->remove(Ljava/lang/Object;)Z
-HSPLandroidx/compose/runtime/collection/IdentityArraySet;->setSize(I)V
-HSPLandroidx/compose/runtime/collection/IdentityArraySet;->size()I
-HSPLandroidx/compose/runtime/collection/IdentityScopeMap;-><init>()V
-HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->access$find(Landroidx/compose/runtime/collection/IdentityScopeMap;Ljava/lang/Object;)I
-HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->access$scopeSetAt(Landroidx/compose/runtime/collection/IdentityScopeMap;I)Landroidx/compose/runtime/collection/IdentityArraySet;
-HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->add(Ljava/lang/Object;Ljava/lang/Object;)Z
-HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->clear()V
-HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->contains(Ljava/lang/Object;)Z
-HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->find(Ljava/lang/Object;)I
-HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->getOrCreateIdentitySet(Ljava/lang/Object;)Landroidx/compose/runtime/collection/IdentityArraySet;
-HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->getScopeSets()[Landroidx/compose/runtime/collection/IdentityArraySet;
-HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->getSize()I
-HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->getValueOrder()[I
-HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->getValues()[Ljava/lang/Object;
-HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->remove(Ljava/lang/Object;Ljava/lang/Object;)Z
-HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->removeScope(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->scopeSetAt(I)Landroidx/compose/runtime/collection/IdentityArraySet;
-HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->setSize(I)V
-HSPLandroidx/compose/runtime/collection/IntMap;-><init>(I)V
-HSPLandroidx/compose/runtime/collection/IntMap;-><init>(IILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/runtime/collection/IntMap;-><init>(Landroid/util/SparseArray;)V
-HSPLandroidx/compose/runtime/collection/IntMap;->clear()V
-HSPLandroidx/compose/runtime/collection/IntMap;->get(I)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/collection/IntMap;->set(ILjava/lang/Object;)V
-HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;-><init>(Landroidx/compose/runtime/collection/MutableVector;)V
-HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->get(I)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->getSize()I
-HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->indexOf(Ljava/lang/Object;)I
-HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->isEmpty()Z
-HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->iterator()Ljava/util/Iterator;
-HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->size()I
-HSPLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;-><init>(Ljava/util/List;I)V
-HSPLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;->hasNext()Z
-HSPLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;->next()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/collection/MutableVector;-><clinit>()V
-HSPLandroidx/compose/runtime/collection/MutableVector;-><init>([Ljava/lang/Object;I)V
-HSPLandroidx/compose/runtime/collection/MutableVector;->add(ILjava/lang/Object;)V
-HSPLandroidx/compose/runtime/collection/MutableVector;->add(Ljava/lang/Object;)Z
-HSPLandroidx/compose/runtime/collection/MutableVector;->addAll(ILandroidx/compose/runtime/collection/MutableVector;)Z
-HSPLandroidx/compose/runtime/collection/MutableVector;->asMutableList()Ljava/util/List;
-HSPLandroidx/compose/runtime/collection/MutableVector;->clear()V
-HSPLandroidx/compose/runtime/collection/MutableVector;->contains(Ljava/lang/Object;)Z
-HSPLandroidx/compose/runtime/collection/MutableVector;->ensureCapacity(I)V
-HSPLandroidx/compose/runtime/collection/MutableVector;->getContent()[Ljava/lang/Object;
-HSPLandroidx/compose/runtime/collection/MutableVector;->getSize()I
-HSPLandroidx/compose/runtime/collection/MutableVector;->indexOf(Ljava/lang/Object;)I
-HSPLandroidx/compose/runtime/collection/MutableVector;->isEmpty()Z
-HSPLandroidx/compose/runtime/collection/MutableVector;->isNotEmpty()Z
-HSPLandroidx/compose/runtime/collection/MutableVector;->remove(Ljava/lang/Object;)Z
-HSPLandroidx/compose/runtime/collection/MutableVector;->removeAt(I)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/collection/MutableVector;->removeRange(II)V
-HSPLandroidx/compose/runtime/collection/MutableVector;->set(ILjava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/collection/MutableVector;->sortWith(Ljava/util/Comparator;)V
-HSPLandroidx/compose/runtime/collection/MutableVectorKt;->access$checkIndex(Ljava/util/List;I)V
-HSPLandroidx/compose/runtime/collection/MutableVectorKt;->checkIndex(Ljava/util/List;I)V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/ExtensionsKt;->persistentHashMapOf()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/ExtensionsKt;->persistentListOf()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/ExtensionsKt;->persistentSetOf()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentSet;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList;-><init>()V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector$Companion;-><init>()V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector$Companion;->getEMPTY()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;-><clinit>()V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;-><init>([Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->access$getEMPTY$cp()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->getSize()I
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/UtilsKt;->persistentVectorOf()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/MapEntry;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/MapEntry;->getKey()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/MapEntry;->getValue()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap$Companion;-><init>()V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap$Companion;->emptyOf$runtime_release()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;-><clinit>()V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;I)V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->access$getEMPTY$cp()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->builder()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap$Builder;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->builder()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->containsKey(Ljava/lang/Object;)Z
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->createEntries()Landroidx/compose/runtime/external/kotlinx/collections/immutable/ImmutableSet;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->getEntries()Ljava/util/Set;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->getNode$runtime_release()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->getSize()I
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->remove(Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;[Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;)V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->checkHasNext()V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->ensureNextEntryIsReady()V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->hasNext()Z
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->moveToNextNodeWithData(I)I
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->next()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;)V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->build()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->build()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->getModCount$runtime_release()I
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->getOwnership$runtime_release()Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/MutabilityOwnership;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->getSize()I
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->putAll(Ljava/util/Map;)V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->setModCount$runtime_release(I)V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->setOperationResult$runtime_release(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->setSize(I)V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntries;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;)V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntries;->getSize()I
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntries;->iterator()Ljava/util/Iterator;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntriesIterator;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;)V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode$Companion;-><init>()V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode$Companion;->getEMPTY$runtime_release()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode$ModificationResult;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;I)V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode$ModificationResult;->getNode()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode$ModificationResult;->getSizeDelta()I
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;-><clinit>()V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;-><init>(II[Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;-><init>(II[Ljava/lang/Object;Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/MutabilityOwnership;)V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->access$getEMPTY$cp()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->asInsertResult()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode$ModificationResult;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->bufferMoveEntryToNode(IIILjava/lang/Object;Ljava/lang/Object;ILandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/MutabilityOwnership;)[Ljava/lang/Object;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->containsKey(ILjava/lang/Object;I)Z
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->elementsIdentityEquals(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;)Z
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->entryCount$runtime_release()I
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->entryKeyIndex$runtime_release(I)I
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->get(ILjava/lang/Object;I)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->getBuffer$runtime_release()[Ljava/lang/Object;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->hasEntryAt$runtime_release(I)Z
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->hasNodeAt(I)Z
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->insertEntryAt(ILjava/lang/Object;Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->keyAtIndex(I)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->makeNode(ILjava/lang/Object;Ljava/lang/Object;ILjava/lang/Object;Ljava/lang/Object;ILandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/MutabilityOwnership;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->mutableInsertEntryAt(ILjava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/MutabilityOwnership;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->mutableMoveEntryToNode(IIILjava/lang/Object;Ljava/lang/Object;ILandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/MutabilityOwnership;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->mutablePut(ILjava/lang/Object;Ljava/lang/Object;ILandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->mutablePutAll(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;ILandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->mutablePutAllFromOtherNodeCell(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;IILandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->mutableUpdateValueAtIndex(ILjava/lang/Object;Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->nodeAtIndex$runtime_release(I)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->nodeIndex$runtime_release(I)I
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->put(ILjava/lang/Object;Ljava/lang/Object;I)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode$ModificationResult;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->remove(ILjava/lang/Object;I)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->removeEntryAtIndex(II)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->valueAtKeyIndex(I)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;-><init>()V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->currentNode()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->getBuffer()[Ljava/lang/Object;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->getIndex()I
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->hasNextKey()Z
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->hasNextNode()Z
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->moveToNextNode()V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->reset([Ljava/lang/Object;I)V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->reset([Ljava/lang/Object;II)V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->setIndex(I)V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeEntriesIterator;-><init>()V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeEntriesIterator;->next()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeEntriesIterator;->next()Ljava/util/Map$Entry;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKt;->access$insertEntryAtIndex([Ljava/lang/Object;ILjava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKt;->access$replaceEntryWithNode([Ljava/lang/Object;IILandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;)[Ljava/lang/Object;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKt;->indexSegment(II)I
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKt;->insertEntryAtIndex([Ljava/lang/Object;ILjava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKt;->replaceEntryWithNode([Ljava/lang/Object;IILandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;)[Ljava/lang/Object;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;-><init>()V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;->getHasNext()Z
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;->getHasPrevious()Z
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;->getNext()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;->getPrevious()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet$Companion;-><init>()V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet$Companion;->emptyOf$runtime_release()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentSet;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;-><clinit>()V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;-><init>(Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;)V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->access$getEMPTY$cp()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->add(Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentSet;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->getSize()I
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->remove(Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentSet;
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/CommonFunctionsKt;->assert(Z)V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;-><init>(I)V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;-><init>(IILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;->getCount()I
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;->setCount(I)V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/EndOfChain;-><clinit>()V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/EndOfChain;-><init>()V
-HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/MutabilityOwnership;-><init>()V
-HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$1;-><init>(Landroidx/compose/runtime/internal/ComposableLambdaImpl;Ljava/lang/Object;I)V
-HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$2;-><init>(Landroidx/compose/runtime/internal/ComposableLambdaImpl;Ljava/lang/Object;Ljava/lang/Object;I)V
-HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;-><init>(IZ)V
-HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Landroidx/compose/runtime/Composer;I)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->trackRead(Landroidx/compose/runtime/Composer;)V
-HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->trackWrite()V
-HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->update(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/internal/ComposableLambdaKt;->bitsForSlot(II)I
-HSPLandroidx/compose/runtime/internal/ComposableLambdaKt;->composableLambda(Landroidx/compose/runtime/Composer;IZLjava/lang/Object;)Landroidx/compose/runtime/internal/ComposableLambda;
-HSPLandroidx/compose/runtime/internal/ComposableLambdaKt;->composableLambdaInstance(IZLjava/lang/Object;)Landroidx/compose/runtime/internal/ComposableLambda;
-HSPLandroidx/compose/runtime/internal/ComposableLambdaKt;->differentBits(I)I
-HSPLandroidx/compose/runtime/internal/ComposableLambdaKt;->replacableWith(Landroidx/compose/runtime/RecomposeScope;Landroidx/compose/runtime/RecomposeScope;)Z
-HSPLandroidx/compose/runtime/internal/ComposableLambdaKt;->sameBits(I)I
-HSPLandroidx/compose/runtime/internal/ThreadMap;-><init>(I[J[Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/internal/ThreadMap;->find(J)I
-HSPLandroidx/compose/runtime/internal/ThreadMap;->get(J)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/internal/ThreadMap;->newWith(JLjava/lang/Object;)Landroidx/compose/runtime/internal/ThreadMap;
-HSPLandroidx/compose/runtime/internal/ThreadMap;->trySet(JLjava/lang/Object;)Z
-HSPLandroidx/compose/runtime/internal/ThreadMapKt;-><clinit>()V
-HSPLandroidx/compose/runtime/internal/ThreadMapKt;->getEmptyThreadMap()Landroidx/compose/runtime/internal/ThreadMap;
-HSPLandroidx/compose/runtime/saveable/ListSaverKt$listSaver$1;-><init>(Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/runtime/saveable/ListSaverKt$listSaver$1;->invoke(Landroidx/compose/runtime/saveable/SaverScope;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/saveable/ListSaverKt$listSaver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/saveable/ListSaverKt;->listSaver(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/saveable/Saver;
-HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry$Entry;)V
-HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$invoke$$inlined$onDispose$1;->dispose()V
-HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1$1$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V
-HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1$1$1;->canBeSaved(Ljava/lang/Object;)Z
-HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1;-><init>(Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V
-HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/lang/String;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;)V
-HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;
-HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/saveable/RememberSaveableKt;-><clinit>()V
-HSPLandroidx/compose/runtime/saveable/RememberSaveableKt;->access$requireCanBeSaved(Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/saveable/RememberSaveableKt;->rememberSaveable([Ljava/lang/Object;Landroidx/compose/runtime/saveable/Saver;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/saveable/RememberSaveableKt;->requireCanBeSaved(Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$1;-><clinit>()V
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$1;-><init>()V
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$1;->invoke(Landroidx/compose/runtime/saveable/SaverScope;Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;)Ljava/util/Map;
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$2;-><clinit>()V
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$2;-><init>()V
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion;-><init>()V
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion;->getSaver()Landroidx/compose/runtime/saveable/Saver;
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder$registry$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;)V
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;-><init>(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;->getRegistry()Landroidx/compose/runtime/saveable/SaveableStateRegistry;
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;->saveTo(Ljava/util/Map;)V
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1$invoke$$inlined$onDispose$1;->dispose()V
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;Ljava/lang/Object;Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;)V
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;-><clinit>()V
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;-><init>(Ljava/util/Map;)V
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;-><init>(Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->SaveableStateProvider(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->access$getRegistryHolders$p(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;)Ljava/util/Map;
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->access$getSavedStates$p(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;)Ljava/util/Map;
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->access$getSaver$cp()Landroidx/compose/runtime/saveable/Saver;
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->access$saveAll(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;)Ljava/util/Map;
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->getParentSaveableStateRegistry()Landroidx/compose/runtime/saveable/SaveableStateRegistry;
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->saveAll()Ljava/util/Map;
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->setParentSaveableStateRegistry(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1;-><clinit>()V
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1;-><init>()V
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1;->invoke()Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/saveable/SaveableStateHolderKt;->rememberSaveableStateHolder(Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/saveable/SaveableStateHolder;
-HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;->unregister()V
-HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;-><init>(Ljava/util/Map;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->access$getValueProviders$p(Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl;)Ljava/util/Map;
-HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->canBeSaved(Ljava/lang/Object;)Z
-HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->consumeRestored(Ljava/lang/String;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->performSave()Ljava/util/Map;
-HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->registerProvider(Ljava/lang/String;Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/saveable/SaveableStateRegistry$Entry;
-HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryKt$LocalSaveableStateRegistry$1;-><clinit>()V
-HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryKt$LocalSaveableStateRegistry$1;-><init>()V
-HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryKt;-><clinit>()V
-HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryKt;->SaveableStateRegistry(Ljava/util/Map;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/saveable/SaveableStateRegistry;
-HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryKt;->getLocalSaveableStateRegistry()Landroidx/compose/runtime/ProvidableCompositionLocal;
-HSPLandroidx/compose/runtime/saveable/SaverKt$AutoSaver$1;-><clinit>()V
-HSPLandroidx/compose/runtime/saveable/SaverKt$AutoSaver$1;-><init>()V
-HSPLandroidx/compose/runtime/saveable/SaverKt$AutoSaver$1;->invoke(Landroidx/compose/runtime/saveable/SaverScope;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/saveable/SaverKt$AutoSaver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/saveable/SaverKt$AutoSaver$2;-><clinit>()V
-HSPLandroidx/compose/runtime/saveable/SaverKt$AutoSaver$2;-><init>()V
-HSPLandroidx/compose/runtime/saveable/SaverKt$Saver$1;-><init>(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/runtime/saveable/SaverKt$Saver$1;->save(Landroidx/compose/runtime/saveable/SaverScope;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/saveable/SaverKt;-><clinit>()V
-HSPLandroidx/compose/runtime/saveable/SaverKt;->Saver(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/saveable/Saver;
-HSPLandroidx/compose/runtime/saveable/SaverKt;->autoSaver()Landroidx/compose/runtime/saveable/Saver;
-HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedMutableSnapshot$1;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedMutableSnapshot$1;->invoke(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/MutableSnapshot;
-HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedMutableSnapshot$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedSnapshot$1;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedSnapshot$1;->invoke(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/ReadonlySnapshot;
-HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedSnapshot$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;-><init>(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)V
-HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->dispose()V
-HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->notifyObjectsInitialized$runtime_release()V
-HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->takeNestedMutableSnapshot(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/MutableSnapshot;
-HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->takeNestedSnapshot(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/Snapshot;
-HSPLandroidx/compose/runtime/snapshots/ListUtilsKt;->fastToSet(Ljava/util/List;)Ljava/util/Set;
-HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;-><clinit>()V
-HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;-><init>(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->advance$runtime_release()V
-HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->apply()Landroidx/compose/runtime/snapshots/SnapshotApplyResult;
-HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->closeLocked$runtime_release()V
-HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->dispose()V
-HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getApplied$runtime_release()Z
-HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getModified$runtime_release()Ljava/util/Set;
-HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getPreviousIds$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotIdSet;
-HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getPreviousPinnedSnapshots$runtime_release()[I
-HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getReadObserver$runtime_release()Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getReadOnly()Z
-HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getWriteObserver$runtime_release()Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->innerApplyLocked$runtime_release(ILjava/util/Map;Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/SnapshotApplyResult;
-HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->nestedActivated$runtime_release(Landroidx/compose/runtime/snapshots/Snapshot;)V
-HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->nestedDeactivated$runtime_release(Landroidx/compose/runtime/snapshots/Snapshot;)V
-HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->notifyObjectsInitialized$runtime_release()V
-HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordModified$runtime_release(Landroidx/compose/runtime/snapshots/StateObject;)V
-HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordPrevious$runtime_release(I)V
-HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordPreviousList$runtime_release(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)V
-HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordPreviousPinnedSnapshot$runtime_release(I)V
-HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordPreviousPinnedSnapshots$runtime_release([I)V
-HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->releasePinnedSnapshotsForCloseLocked$runtime_release()V
-HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->releasePreviouslyPinnedSnapshotsLocked$runtime_release()V
-HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->setApplied$runtime_release(Z)V
-HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->setModified(Ljava/util/Set;)V
-HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->takeNestedMutableSnapshot(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/MutableSnapshot;
-HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->validateNotAppliedOrPinned$runtime_release()V
-HSPLandroidx/compose/runtime/snapshots/NestedMutableSnapshot;-><init>(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/snapshots/MutableSnapshot;)V
-HSPLandroidx/compose/runtime/snapshots/NestedMutableSnapshot;->apply()Landroidx/compose/runtime/snapshots/SnapshotApplyResult;
-HSPLandroidx/compose/runtime/snapshots/NestedMutableSnapshot;->deactivate()V
-HSPLandroidx/compose/runtime/snapshots/NestedMutableSnapshot;->dispose()V
-HSPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;-><init>(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;->dispose()V
-HSPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;->getReadObserver$runtime_release()Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;->nestedDeactivated$runtime_release(Landroidx/compose/runtime/snapshots/Snapshot;)V
-HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion$registerApplyObserver$2;-><init>(Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion$registerApplyObserver$2;->dispose()V
-HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion$registerGlobalWriteObserver$2;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;-><init>()V
-HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->createNonObservableSnapshot()Landroidx/compose/runtime/snapshots/Snapshot;
-HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->getCurrent()Landroidx/compose/runtime/snapshots/Snapshot;
-HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->notifyObjectsInitialized()V
-HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->observe(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->registerApplyObserver(Lkotlin/jvm/functions/Function2;)Landroidx/compose/runtime/snapshots/ObserverHandle;
-HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->registerGlobalWriteObserver(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/ObserverHandle;
-HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->sendApplyNotifications()V
-HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->takeMutableSnapshot(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/MutableSnapshot;
-HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->takeSnapshot(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/Snapshot;
-HSPLandroidx/compose/runtime/snapshots/Snapshot;-><clinit>()V
-HSPLandroidx/compose/runtime/snapshots/Snapshot;-><init>(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)V
-HSPLandroidx/compose/runtime/snapshots/Snapshot;-><init>(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/runtime/snapshots/Snapshot;->closeAndReleasePinning$runtime_release()V
-HSPLandroidx/compose/runtime/snapshots/Snapshot;->closeLocked$runtime_release()V
-HSPLandroidx/compose/runtime/snapshots/Snapshot;->dispose()V
-HSPLandroidx/compose/runtime/snapshots/Snapshot;->getDisposed$runtime_release()Z
-HSPLandroidx/compose/runtime/snapshots/Snapshot;->getId()I
-HSPLandroidx/compose/runtime/snapshots/Snapshot;->getInvalid$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotIdSet;
-HSPLandroidx/compose/runtime/snapshots/Snapshot;->makeCurrent()Landroidx/compose/runtime/snapshots/Snapshot;
-HSPLandroidx/compose/runtime/snapshots/Snapshot;->releasePinnedSnapshotLocked$runtime_release()V
-HSPLandroidx/compose/runtime/snapshots/Snapshot;->releasePinnedSnapshotsForCloseLocked$runtime_release()V
-HSPLandroidx/compose/runtime/snapshots/Snapshot;->restoreCurrent(Landroidx/compose/runtime/snapshots/Snapshot;)V
-HSPLandroidx/compose/runtime/snapshots/Snapshot;->setDisposed$runtime_release(Z)V
-HSPLandroidx/compose/runtime/snapshots/Snapshot;->setId$runtime_release(I)V
-HSPLandroidx/compose/runtime/snapshots/Snapshot;->setInvalid$runtime_release(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)V
-HSPLandroidx/compose/runtime/snapshots/Snapshot;->takeoverPinnedSnapshot$runtime_release()I
-HSPLandroidx/compose/runtime/snapshots/Snapshot;->validateNotDisposed$runtime_release()V
-HSPLandroidx/compose/runtime/snapshots/SnapshotApplyResult$Success;-><clinit>()V
-HSPLandroidx/compose/runtime/snapshots/SnapshotApplyResult$Success;-><init>()V
-HSPLandroidx/compose/runtime/snapshots/SnapshotApplyResult;-><clinit>()V
-HSPLandroidx/compose/runtime/snapshots/SnapshotApplyResult;-><init>()V
-HSPLandroidx/compose/runtime/snapshots/SnapshotApplyResult;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;-><init>()V
-HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->add(I)I
-HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->allocateHandle()I
-HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->ensure(I)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->freeHandle(I)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->lowestOrDefault(I)I
-HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->remove(I)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->shiftDown(I)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->shiftUp(I)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->swap(II)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet$Companion;-><init>()V
-HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet$Companion;->getEMPTY()Landroidx/compose/runtime/snapshots/SnapshotIdSet;
-HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;-><clinit>()V
-HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;-><init>(JJI[I)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->access$getEMPTY$cp()Landroidx/compose/runtime/snapshots/SnapshotIdSet;
-HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->andNot(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/SnapshotIdSet;
-HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->clear(I)Landroidx/compose/runtime/snapshots/SnapshotIdSet;
-HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->lowest(I)I
-HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->or(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/SnapshotIdSet;
-HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->set(I)Landroidx/compose/runtime/snapshots/SnapshotIdSet;
-HSPLandroidx/compose/runtime/snapshots/SnapshotIdSetKt;->access$lowestBitOf(J)I
-HSPLandroidx/compose/runtime/snapshots/SnapshotIdSetKt;->lowestBitOf(J)I
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt$advanceGlobalSnapshot$3;-><clinit>()V
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt$advanceGlobalSnapshot$3;-><init>()V
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt$advanceGlobalSnapshot$3;->invoke(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt$advanceGlobalSnapshot$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt$emptyLambda$1;-><clinit>()V
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt$emptyLambda$1;-><init>()V
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt$emptyLambda$1;->invoke(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt$emptyLambda$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;->invoke(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedWriteObserver$1;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedWriteObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedWriteObserver$1;->invoke(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt$takeNewSnapshot$1;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt$takeNewSnapshot$1;->invoke(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/Snapshot;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt$takeNewSnapshot$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;-><clinit>()V
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$advanceGlobalSnapshot()V
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$advanceGlobalSnapshot(Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getApplyObservers$p()Ljava/util/List;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getCurrentGlobalSnapshot$p()Ljava/util/concurrent/atomic/AtomicReference;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getEmptyLambda$p()Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getGlobalWriteObservers$p()Ljava/util/List;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getNextSnapshotId$p()I
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getOpenSnapshots$p()Landroidx/compose/runtime/snapshots/SnapshotIdSet;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getThreadSnapshot$p()Landroidx/compose/runtime/SnapshotThreadLocal;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$mergedReadObserver(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Z)Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$mergedWriteObserver(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$optimisticMerges(Landroidx/compose/runtime/snapshots/MutableSnapshot;Landroidx/compose/runtime/snapshots/MutableSnapshot;Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Ljava/util/Map;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$overwriteUnusedRecordsLocked(Landroidx/compose/runtime/snapshots/StateObject;)Z
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$readable(Landroidx/compose/runtime/snapshots/StateRecord;ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/StateRecord;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$setNextSnapshotId$p(I)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$setOpenSnapshots$p(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$takeNewGlobalSnapshot(Landroidx/compose/runtime/snapshots/Snapshot;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$takeNewSnapshot(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/Snapshot;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$validateOpen(Landroidx/compose/runtime/snapshots/Snapshot;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->addRange(Landroidx/compose/runtime/snapshots/SnapshotIdSet;II)Landroidx/compose/runtime/snapshots/SnapshotIdSet;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->advanceGlobalSnapshot()V
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->advanceGlobalSnapshot(Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->createTransparentSnapshotWithNoParentReadObserver$default(Landroidx/compose/runtime/snapshots/Snapshot;Lkotlin/jvm/functions/Function1;ZILjava/lang/Object;)Landroidx/compose/runtime/snapshots/Snapshot;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->createTransparentSnapshotWithNoParentReadObserver(Landroidx/compose/runtime/snapshots/Snapshot;Lkotlin/jvm/functions/Function1;Z)Landroidx/compose/runtime/snapshots/Snapshot;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->current(Landroidx/compose/runtime/snapshots/StateRecord;)Landroidx/compose/runtime/snapshots/StateRecord;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->current(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/snapshots/StateRecord;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->currentSnapshot()Landroidx/compose/runtime/snapshots/Snapshot;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->getLock()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->getSnapshotInitializer()Landroidx/compose/runtime/snapshots/Snapshot;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->mergedReadObserver$default(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ZILjava/lang/Object;)Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->mergedReadObserver(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Z)Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->mergedWriteObserver(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->newOverwritableRecordLocked(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;)Landroidx/compose/runtime/snapshots/StateRecord;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->newWritableRecord(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/snapshots/StateRecord;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->newWritableRecordLocked(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/snapshots/StateRecord;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->notifyWrite(Landroidx/compose/runtime/snapshots/Snapshot;Landroidx/compose/runtime/snapshots/StateObject;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->optimisticMerges(Landroidx/compose/runtime/snapshots/MutableSnapshot;Landroidx/compose/runtime/snapshots/MutableSnapshot;Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Ljava/util/Map;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->overwritableRecord(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;Landroidx/compose/runtime/snapshots/Snapshot;Landroidx/compose/runtime/snapshots/StateRecord;)Landroidx/compose/runtime/snapshots/StateRecord;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->overwriteUnusedRecordsLocked(Landroidx/compose/runtime/snapshots/StateObject;)Z
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->readable(Landroidx/compose/runtime/snapshots/StateRecord;ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/StateRecord;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->readable(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;)Landroidx/compose/runtime/snapshots/StateRecord;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->releasePinningLocked(I)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->takeNewGlobalSnapshot(Landroidx/compose/runtime/snapshots/Snapshot;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->takeNewSnapshot(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/Snapshot;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->trackPinning(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)I
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->usedLocked(Landroidx/compose/runtime/snapshots/StateObject;)Landroidx/compose/runtime/snapshots/StateRecord;
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->valid(IILandroidx/compose/runtime/snapshots/SnapshotIdSet;)Z
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->valid(Landroidx/compose/runtime/snapshots/StateRecord;ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)Z
-HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->validateOpen(Landroidx/compose/runtime/snapshots/Snapshot;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;-><init>(Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->getList$runtime_release()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;-><clinit>()V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;-><init>()V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord;
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->getReadable$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->getSize()I
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->isEmpty()Z
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->size()I
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateEnterObserver$1;-><init>(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateEnterObserver$1;->invoke(Landroidx/compose/runtime/State;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateEnterObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateExitObserver$1;-><init>(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateExitObserver$1;->invoke(Landroidx/compose/runtime/State;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateExitObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->access$clearObsoleteStateReads(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->access$getCurrentScope$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->access$getCurrentScopeReads$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;)Landroidx/compose/runtime/collection/IdentityArrayIntMap;
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->access$getCurrentToken$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;)I
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->access$getDeriveStateScopeCount$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;)I
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->access$getScopeToValues$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;)Landroidx/compose/runtime/collection/IdentityArrayMap;
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->access$setCurrentScope$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->access$setCurrentScopeReads$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;Landroidx/compose/runtime/collection/IdentityArrayIntMap;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->access$setCurrentToken$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;I)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->access$setDeriveStateScopeCount$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;I)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->clear()V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->clearObsoleteStateReads(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->getDerivedStateEnterObserver()Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->getDerivedStateExitObserver()Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->getOnChanged()Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->notifyInvalidatedScopes()V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->recordInvalidation(Ljava/util/Set;)Z
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->recordRead(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->removeObservation(Ljava/lang/Object;Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->removeScopeIf(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$applyObserver$1;-><init>(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$applyObserver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$applyObserver$1;->invoke(Ljava/util/Set;Landroidx/compose/runtime/snapshots/Snapshot;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$observeReads$1$1;-><init>(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$observeReads$1$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$observeReads$1$1;->invoke()V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$readObserver$1;-><init>(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$readObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$readObserver$1;->invoke(Ljava/lang/Object;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$sendNotifications$1;-><init>(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$sendNotifications$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$sendNotifications$1;->invoke()V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;-><clinit>()V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$addChanges(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;Ljava/util/Set;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$drainChanges(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Z
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$getCurrentMap$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$getObservedScopeMaps$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Landroidx/compose/runtime/collection/MutableVector;
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$getReadObserver$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$getSendingNotifications$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Z
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$isPaused$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Z
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$sendNotifications(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$setSendingNotifications$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;Z)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->addChanges(Ljava/util/Set;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->clear()V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->clearIf(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->drainChanges()Z
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->ensureMap(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->observeReads(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->removeChanges()Ljava/util/Set;
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->sendNotifications()V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->start()V
-HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->stop()V
-HSPLandroidx/compose/runtime/snapshots/StateRecord;-><clinit>()V
-HSPLandroidx/compose/runtime/snapshots/StateRecord;-><init>()V
-HSPLandroidx/compose/runtime/snapshots/StateRecord;->getNext$runtime_release()Landroidx/compose/runtime/snapshots/StateRecord;
-HSPLandroidx/compose/runtime/snapshots/StateRecord;->getSnapshotId$runtime_release()I
-HSPLandroidx/compose/runtime/snapshots/StateRecord;->setNext$runtime_release(Landroidx/compose/runtime/snapshots/StateRecord;)V
-HSPLandroidx/compose/runtime/snapshots/StateRecord;->setSnapshotId$runtime_release(I)V
-HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;-><init>(Landroidx/compose/runtime/snapshots/MutableSnapshot;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ZZ)V
-HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->apply()Landroidx/compose/runtime/snapshots/SnapshotApplyResult;
-HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->dispose()V
-HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getCurrentSnapshot()Landroidx/compose/runtime/snapshots/MutableSnapshot;
-HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getId()I
-HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getInvalid$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotIdSet;
-HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getReadOnly()Z
-HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->notifyObjectsInitialized$runtime_release()V
-HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->recordModified$runtime_release(Landroidx/compose/runtime/snapshots/StateObject;)V
-HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->takeNestedMutableSnapshot(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/MutableSnapshot;
-HSPLandroidx/compose/runtime/tooling/InspectionTablesKt$LocalInspectionTables$1;-><clinit>()V
-HSPLandroidx/compose/runtime/tooling/InspectionTablesKt$LocalInspectionTables$1;-><init>()V
-HSPLandroidx/compose/runtime/tooling/InspectionTablesKt$LocalInspectionTables$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/runtime/tooling/InspectionTablesKt$LocalInspectionTables$1;->invoke()Ljava/util/Set;
-HSPLandroidx/compose/runtime/tooling/InspectionTablesKt;-><clinit>()V
-HSPLandroidx/compose/runtime/tooling/InspectionTablesKt;->getLocalInspectionTables()Landroidx/compose/runtime/ProvidableCompositionLocal;
-HSPLandroidx/compose/ui/ActualKt;->areObjectsOfSameType(Ljava/lang/Object;Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/Alignment$Companion;-><clinit>()V
-HSPLandroidx/compose/ui/Alignment$Companion;-><init>()V
-HSPLandroidx/compose/ui/Alignment$Companion;->getBottomCenter()Landroidx/compose/ui/Alignment;
-HSPLandroidx/compose/ui/Alignment$Companion;->getCenter()Landroidx/compose/ui/Alignment;
-HSPLandroidx/compose/ui/Alignment$Companion;->getCenterHorizontally()Landroidx/compose/ui/Alignment$Horizontal;
-HSPLandroidx/compose/ui/Alignment$Companion;->getCenterVertically()Landroidx/compose/ui/Alignment$Vertical;
-HSPLandroidx/compose/ui/Alignment$Companion;->getStart()Landroidx/compose/ui/Alignment$Horizontal;
-HSPLandroidx/compose/ui/Alignment$Companion;->getTop()Landroidx/compose/ui/Alignment$Vertical;
-HSPLandroidx/compose/ui/Alignment$Companion;->getTopCenter()Landroidx/compose/ui/Alignment;
-HSPLandroidx/compose/ui/Alignment$Companion;->getTopStart()Landroidx/compose/ui/Alignment;
-HSPLandroidx/compose/ui/Alignment;-><clinit>()V
-HSPLandroidx/compose/ui/BiasAlignment$Horizontal;-><clinit>()V
-HSPLandroidx/compose/ui/BiasAlignment$Horizontal;-><init>(F)V
-HSPLandroidx/compose/ui/BiasAlignment$Horizontal;->align(IILandroidx/compose/ui/unit/LayoutDirection;)I
-HSPLandroidx/compose/ui/BiasAlignment$Horizontal;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/BiasAlignment$Vertical;-><clinit>()V
-HSPLandroidx/compose/ui/BiasAlignment$Vertical;-><init>(F)V
-HSPLandroidx/compose/ui/BiasAlignment$Vertical;->align(II)I
-HSPLandroidx/compose/ui/BiasAlignment$Vertical;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/BiasAlignment;-><clinit>()V
-HSPLandroidx/compose/ui/BiasAlignment;-><init>(FF)V
-HSPLandroidx/compose/ui/BiasAlignment;->align-KFBX0sM(JJLandroidx/compose/ui/unit/LayoutDirection;)J
-HSPLandroidx/compose/ui/BiasAlignment;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/CombinedModifier;-><clinit>()V
-HSPLandroidx/compose/ui/CombinedModifier;-><init>(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;)V
-HSPLandroidx/compose/ui/CombinedModifier;->all(Lkotlin/jvm/functions/Function1;)Z
-HSPLandroidx/compose/ui/CombinedModifier;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/CombinedModifier;->foldIn(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/CombinedModifier;->getInner$ui_release()Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/CombinedModifier;->getOuter$ui_release()Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/ComposedModifier;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;)V
-HSPLandroidx/compose/ui/ComposedModifier;->getFactory()Lkotlin/jvm/functions/Function3;
-HSPLandroidx/compose/ui/ComposedModifierKt$materialize$1;-><clinit>()V
-HSPLandroidx/compose/ui/ComposedModifierKt$materialize$1;-><init>()V
-HSPLandroidx/compose/ui/ComposedModifierKt$materialize$1;->invoke(Landroidx/compose/ui/Modifier$Element;)Ljava/lang/Boolean;
-HSPLandroidx/compose/ui/ComposedModifierKt$materialize$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/ComposedModifierKt$materialize$result$1;-><init>(Landroidx/compose/runtime/Composer;)V
-HSPLandroidx/compose/ui/ComposedModifierKt$materialize$result$1;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier$Element;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/ComposedModifierKt$materialize$result$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/ComposedModifierKt;->composed$default(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;ILjava/lang/Object;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/ComposedModifierKt;->composed(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/ComposedModifierKt;->materialize(Landroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/Modifier$Companion;-><clinit>()V
-HSPLandroidx/compose/ui/Modifier$Companion;-><init>()V
-HSPLandroidx/compose/ui/Modifier$Companion;->all(Lkotlin/jvm/functions/Function1;)Z
-HSPLandroidx/compose/ui/Modifier$Companion;->then(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/Modifier$Element;->all(Lkotlin/jvm/functions/Function1;)Z
-HSPLandroidx/compose/ui/Modifier$Element;->foldIn(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/Modifier$Node;-><clinit>()V
-HSPLandroidx/compose/ui/Modifier$Node;-><init>()V
-HSPLandroidx/compose/ui/Modifier$Node;->attach$ui_release()V
-HSPLandroidx/compose/ui/Modifier$Node;->detach$ui_release()V
-HSPLandroidx/compose/ui/Modifier$Node;->getAggregateChildKindSet$ui_release()I
-HSPLandroidx/compose/ui/Modifier$Node;->getChild$ui_release()Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/Modifier$Node;->getCoordinator$ui_release()Landroidx/compose/ui/node/NodeCoordinator;
-HSPLandroidx/compose/ui/Modifier$Node;->getKindSet$ui_release()I
-HSPLandroidx/compose/ui/Modifier$Node;->getNode()Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/Modifier$Node;->getParent$ui_release()Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/Modifier$Node;->isAttached()Z
-HSPLandroidx/compose/ui/Modifier$Node;->onAttach()V
-HSPLandroidx/compose/ui/Modifier$Node;->onDetach()V
-HSPLandroidx/compose/ui/Modifier$Node;->setAggregateChildKindSet$ui_release(I)V
-HSPLandroidx/compose/ui/Modifier$Node;->setChild$ui_release(Landroidx/compose/ui/Modifier$Node;)V
-HSPLandroidx/compose/ui/Modifier$Node;->setKindSet$ui_release(I)V
-HSPLandroidx/compose/ui/Modifier$Node;->setParent$ui_release(Landroidx/compose/ui/Modifier$Node;)V
-HSPLandroidx/compose/ui/Modifier$Node;->updateCoordinator$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)V
-HSPLandroidx/compose/ui/Modifier;-><clinit>()V
-HSPLandroidx/compose/ui/Modifier;->then(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/MotionDurationScale$DefaultImpls;->fold(Landroidx/compose/ui/MotionDurationScale;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/MotionDurationScale$DefaultImpls;->get(Landroidx/compose/ui/MotionDurationScale;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
-HSPLandroidx/compose/ui/MotionDurationScale$DefaultImpls;->minusKey(Landroidx/compose/ui/MotionDurationScale;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
-HSPLandroidx/compose/ui/MotionDurationScale$Key;-><clinit>()V
-HSPLandroidx/compose/ui/MotionDurationScale$Key;-><init>()V
-HSPLandroidx/compose/ui/MotionDurationScale;-><clinit>()V
-HSPLandroidx/compose/ui/MotionDurationScale;->getKey()Lkotlin/coroutines/CoroutineContext$Key;
-HSPLandroidx/compose/ui/autofill/AndroidAutofill;-><init>(Landroid/view/View;Landroidx/compose/ui/autofill/AutofillTree;)V
-HSPLandroidx/compose/ui/autofill/AndroidAutofill;->getAutofillManager()Landroid/view/autofill/AutofillManager;
-HSPLandroidx/compose/ui/autofill/AutofillCallback;-><clinit>()V
-HSPLandroidx/compose/ui/autofill/AutofillCallback;-><init>()V
-HSPLandroidx/compose/ui/autofill/AutofillCallback;->register(Landroidx/compose/ui/autofill/AndroidAutofill;)V
-HSPLandroidx/compose/ui/autofill/AutofillCallback;->unregister(Landroidx/compose/ui/autofill/AndroidAutofill;)V
-HSPLandroidx/compose/ui/autofill/AutofillTree;-><clinit>()V
-HSPLandroidx/compose/ui/autofill/AutofillTree;-><init>()V
-HSPLandroidx/compose/ui/draw/ClipKt;->clip(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/draw/ClipKt;->clipToBounds(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/draw/DrawBackgroundModifier;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/draw/DrawBackgroundModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
-HSPLandroidx/compose/ui/draw/DrawModifierKt$drawBehind$$inlined$modifierElementOf$1;-><init>(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/draw/DrawModifierKt$drawBehind$$inlined$modifierElementOf$1;->create()Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/draw/DrawModifierKt;->drawBehind(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/draw/PainterModifier$measure$1;-><init>(Landroidx/compose/ui/layout/Placeable;)V
-HSPLandroidx/compose/ui/draw/PainterModifier$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
-HSPLandroidx/compose/ui/draw/PainterModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/draw/PainterModifier;-><init>(Landroidx/compose/ui/graphics/painter/Painter;ZLandroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/draw/PainterModifier;->calculateScaledSize-E7KxVPU(J)J
-HSPLandroidx/compose/ui/draw/PainterModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
-HSPLandroidx/compose/ui/draw/PainterModifier;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/draw/PainterModifier;->getUseIntrinsicSize()Z
-HSPLandroidx/compose/ui/draw/PainterModifier;->hasSpecifiedAndFiniteHeight-uvyYCjk(J)Z
-HSPLandroidx/compose/ui/draw/PainterModifier;->hasSpecifiedAndFiniteWidth-uvyYCjk(J)Z
-HSPLandroidx/compose/ui/draw/PainterModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/ui/draw/PainterModifier;->modifyConstraints-ZezNO4M(J)J
-HSPLandroidx/compose/ui/draw/PainterModifierKt;->paint$default(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/painter/Painter;ZLandroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;ILjava/lang/Object;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/draw/PainterModifierKt;->paint(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/painter/Painter;ZLandroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/draw/ShadowKt$shadow$2$1;-><init>(FLandroidx/compose/ui/graphics/Shape;ZJJ)V
-HSPLandroidx/compose/ui/draw/ShadowKt$shadow$2$1;->invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)V
-HSPLandroidx/compose/ui/draw/ShadowKt$shadow$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/draw/ShadowKt;->shadow-s4CzXII$default(Landroidx/compose/ui/Modifier;FLandroidx/compose/ui/graphics/Shape;ZJJILjava/lang/Object;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/draw/ShadowKt;->shadow-s4CzXII(Landroidx/compose/ui/Modifier;FLandroidx/compose/ui/graphics/Shape;ZJJ)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/focus/FocusChangedModifierKt$onFocusChanged$$inlined$modifierElementOf$2;-><init>(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/focus/FocusChangedModifierKt$onFocusChanged$$inlined$modifierElementOf$2;->create()Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/focus/FocusChangedModifierKt$onFocusChanged$$inlined$modifierElementOf$2;->update(Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/focus/FocusChangedModifierKt;->onFocusChanged(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/focus/FocusChangedModifierNode;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/focus/FocusChangedModifierNode;->onFocusEvent(Landroidx/compose/ui/focus/FocusState;)V
-HSPLandroidx/compose/ui/focus/FocusChangedModifierNode;->setOnFocusChanged(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/focus/FocusEventModifierNodeKt$WhenMappings;-><clinit>()V
-HSPLandroidx/compose/ui/focus/FocusEventModifierNodeKt;->getFocusState(Landroidx/compose/ui/focus/FocusEventModifierNode;)Landroidx/compose/ui/focus/FocusState;
-HSPLandroidx/compose/ui/focus/FocusEventModifierNodeKt;->refreshFocusEventNodes(Landroidx/compose/ui/focus/FocusTargetModifierNode;)V
-HSPLandroidx/compose/ui/focus/FocusInvalidationManager$invalidateNodes$1;-><init>(Landroidx/compose/ui/focus/FocusInvalidationManager;)V
-HSPLandroidx/compose/ui/focus/FocusInvalidationManager$invalidateNodes$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/focus/FocusInvalidationManager$invalidateNodes$1;->invoke()V
-HSPLandroidx/compose/ui/focus/FocusInvalidationManager;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/focus/FocusInvalidationManager;->access$getFocusEventNodes$p(Landroidx/compose/ui/focus/FocusInvalidationManager;)Ljava/util/Set;
-HSPLandroidx/compose/ui/focus/FocusInvalidationManager;->access$getFocusPropertiesNodes$p(Landroidx/compose/ui/focus/FocusInvalidationManager;)Ljava/util/Set;
-HSPLandroidx/compose/ui/focus/FocusInvalidationManager;->access$getFocusTargetNodes$p(Landroidx/compose/ui/focus/FocusInvalidationManager;)Ljava/util/Set;
-HSPLandroidx/compose/ui/focus/FocusInvalidationManager;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusEventModifierNode;)V
-HSPLandroidx/compose/ui/focus/FocusInvalidationManager;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusPropertiesModifierNode;)V
-HSPLandroidx/compose/ui/focus/FocusInvalidationManager;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusTargetModifierNode;)V
-HSPLandroidx/compose/ui/focus/FocusInvalidationManager;->scheduleInvalidation(Ljava/util/Set;Ljava/lang/Object;)V
-HSPLandroidx/compose/ui/focus/FocusModifierKt;->focusTarget(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/focus/FocusOwnerImpl$special$$inlined$modifierElementOf$2;-><init>(Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/focus/FocusOwnerImpl;)V
-HSPLandroidx/compose/ui/focus/FocusOwnerImpl$special$$inlined$modifierElementOf$2;->create()Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/focus/FocusOwnerImpl;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->getModifier()Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->getRootFocusNode$ui_release()Landroidx/compose/ui/focus/FocusTargetModifierNode;
-HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusEventModifierNode;)V
-HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusPropertiesModifierNode;)V
-HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusTargetModifierNode;)V
-HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)V
-HSPLandroidx/compose/ui/focus/FocusPropertiesKt$focusProperties$$inlined$modifierElementOf$2;-><init>(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/focus/FocusPropertiesKt$focusProperties$$inlined$modifierElementOf$2;->create()Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/focus/FocusPropertiesKt$focusProperties$$inlined$modifierElementOf$2;->update(Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/focus/FocusPropertiesKt;->focusProperties(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/focus/FocusPropertiesModifierNodeImpl;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/focus/FocusPropertiesModifierNodeImpl;->modifyFocusProperties(Landroidx/compose/ui/focus/FocusProperties;)V
-HSPLandroidx/compose/ui/focus/FocusPropertiesModifierNodeImpl;->setFocusPropertiesScope(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/focus/FocusRequester$Companion;-><init>()V
-HSPLandroidx/compose/ui/focus/FocusRequester$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/focus/FocusRequester;-><clinit>()V
-HSPLandroidx/compose/ui/focus/FocusRequester;-><init>()V
-HSPLandroidx/compose/ui/focus/FocusRequester;->getFocusRequesterNodes$ui_release()Landroidx/compose/runtime/collection/MutableVector;
-HSPLandroidx/compose/ui/focus/FocusRequesterModifierKt$focusRequester$$inlined$modifierElementOf$2;-><init>(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/focus/FocusRequester;Landroidx/compose/ui/focus/FocusRequester;)V
-HSPLandroidx/compose/ui/focus/FocusRequesterModifierKt$focusRequester$$inlined$modifierElementOf$2;->create()Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/focus/FocusRequesterModifierKt;->focusRequester(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/focus/FocusRequester;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/focus/FocusRequesterModifierNodeImpl;-><init>(Landroidx/compose/ui/focus/FocusRequester;)V
-HSPLandroidx/compose/ui/focus/FocusRequesterModifierNodeImpl;->onAttach()V
-HSPLandroidx/compose/ui/focus/FocusRequesterModifierNodeImpl;->onDetach()V
-HSPLandroidx/compose/ui/focus/FocusStateImpl$WhenMappings;-><clinit>()V
-HSPLandroidx/compose/ui/focus/FocusStateImpl;->$values()[Landroidx/compose/ui/focus/FocusStateImpl;
-HSPLandroidx/compose/ui/focus/FocusStateImpl;-><clinit>()V
-HSPLandroidx/compose/ui/focus/FocusStateImpl;-><init>(Ljava/lang/String;I)V
-HSPLandroidx/compose/ui/focus/FocusStateImpl;->isFocused()Z
-HSPLandroidx/compose/ui/focus/FocusStateImpl;->values()[Landroidx/compose/ui/focus/FocusStateImpl;
-HSPLandroidx/compose/ui/focus/FocusTargetModifierNode$Companion;-><init>()V
-HSPLandroidx/compose/ui/focus/FocusTargetModifierNode$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/focus/FocusTargetModifierNode$Companion;->getFocusTargetModifierElement$ui_release()Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/focus/FocusTargetModifierNode$special$$inlined$modifierElementOf$2;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/focus/FocusTargetModifierNode$special$$inlined$modifierElementOf$2;->create()Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/focus/FocusTargetModifierNode;-><clinit>()V
-HSPLandroidx/compose/ui/focus/FocusTargetModifierNode;-><init>()V
-HSPLandroidx/compose/ui/focus/FocusTargetModifierNode;->access$getFocusTargetModifierElement$cp()Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/focus/FocusTargetModifierNode;->getFocusState()Landroidx/compose/ui/focus/FocusState;
-HSPLandroidx/compose/ui/focus/FocusTargetModifierNode;->getFocusStateImpl$ui_release()Landroidx/compose/ui/focus/FocusStateImpl;
-HSPLandroidx/compose/ui/focus/FocusTargetModifierNode;->invalidateFocus$ui_release()V
-HSPLandroidx/compose/ui/geometry/CornerRadius$Companion;-><init>()V
-HSPLandroidx/compose/ui/geometry/CornerRadius$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/geometry/CornerRadius$Companion;->getZero-kKHJgLs()J
-HSPLandroidx/compose/ui/geometry/CornerRadius;-><clinit>()V
-HSPLandroidx/compose/ui/geometry/CornerRadius;->access$getZero$cp()J
-HSPLandroidx/compose/ui/geometry/CornerRadius;->constructor-impl(J)J
-HSPLandroidx/compose/ui/geometry/CornerRadius;->getX-impl(J)F
-HSPLandroidx/compose/ui/geometry/CornerRadius;->getY-impl(J)F
-HSPLandroidx/compose/ui/geometry/CornerRadiusKt;->CornerRadius$default(FFILjava/lang/Object;)J
-HSPLandroidx/compose/ui/geometry/CornerRadiusKt;->CornerRadius(FF)J
-HSPLandroidx/compose/ui/geometry/Offset$Companion;-><init>()V
-HSPLandroidx/compose/ui/geometry/Offset$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/geometry/Offset$Companion;->getInfinite-F1C5BW0()J
-HSPLandroidx/compose/ui/geometry/Offset$Companion;->getUnspecified-F1C5BW0()J
-HSPLandroidx/compose/ui/geometry/Offset$Companion;->getZero-F1C5BW0()J
-HSPLandroidx/compose/ui/geometry/Offset;-><clinit>()V
-HSPLandroidx/compose/ui/geometry/Offset;-><init>(J)V
-HSPLandroidx/compose/ui/geometry/Offset;->access$getInfinite$cp()J
-HSPLandroidx/compose/ui/geometry/Offset;->access$getUnspecified$cp()J
-HSPLandroidx/compose/ui/geometry/Offset;->access$getZero$cp()J
-HSPLandroidx/compose/ui/geometry/Offset;->box-impl(J)Landroidx/compose/ui/geometry/Offset;
-HSPLandroidx/compose/ui/geometry/Offset;->constructor-impl(J)J
-HSPLandroidx/compose/ui/geometry/Offset;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/geometry/Offset;->equals-impl(JLjava/lang/Object;)Z
-HSPLandroidx/compose/ui/geometry/Offset;->equals-impl0(JJ)Z
-HSPLandroidx/compose/ui/geometry/Offset;->getDistance-impl(J)F
-HSPLandroidx/compose/ui/geometry/Offset;->getX-impl(J)F
-HSPLandroidx/compose/ui/geometry/Offset;->getY-impl(J)F
-HSPLandroidx/compose/ui/geometry/Offset;->minus-MK-Hz9U(JJ)J
-HSPLandroidx/compose/ui/geometry/Offset;->plus-MK-Hz9U(JJ)J
-HSPLandroidx/compose/ui/geometry/Offset;->unbox-impl()J
-HSPLandroidx/compose/ui/geometry/OffsetKt;->Offset(FF)J
-HSPLandroidx/compose/ui/geometry/OffsetKt;->isFinite-k-4lQ0M(J)Z
-HSPLandroidx/compose/ui/geometry/Rect$Companion;-><init>()V
-HSPLandroidx/compose/ui/geometry/Rect$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/geometry/Rect$Companion;->getZero()Landroidx/compose/ui/geometry/Rect;
-HSPLandroidx/compose/ui/geometry/Rect;-><clinit>()V
-HSPLandroidx/compose/ui/geometry/Rect;-><init>(FFFF)V
-HSPLandroidx/compose/ui/geometry/Rect;->access$getZero$cp()Landroidx/compose/ui/geometry/Rect;
-HSPLandroidx/compose/ui/geometry/Rect;->getBottom()F
-HSPLandroidx/compose/ui/geometry/Rect;->getHeight()F
-HSPLandroidx/compose/ui/geometry/Rect;->getLeft()F
-HSPLandroidx/compose/ui/geometry/Rect;->getRight()F
-HSPLandroidx/compose/ui/geometry/Rect;->getTop()F
-HSPLandroidx/compose/ui/geometry/Rect;->getWidth()F
-HSPLandroidx/compose/ui/geometry/RectKt;->Rect-tz77jQw(JJ)Landroidx/compose/ui/geometry/Rect;
-HSPLandroidx/compose/ui/geometry/RoundRect$Companion;-><init>()V
-HSPLandroidx/compose/ui/geometry/RoundRect$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/geometry/RoundRect;-><clinit>()V
-HSPLandroidx/compose/ui/geometry/RoundRect;-><init>(FFFFJJJJ)V
-HSPLandroidx/compose/ui/geometry/RoundRect;-><init>(FFFFJJJJLkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/geometry/RoundRect;->getBottom()F
-HSPLandroidx/compose/ui/geometry/RoundRect;->getBottomLeftCornerRadius-kKHJgLs()J
-HSPLandroidx/compose/ui/geometry/RoundRect;->getBottomRightCornerRadius-kKHJgLs()J
-HSPLandroidx/compose/ui/geometry/RoundRect;->getHeight()F
-HSPLandroidx/compose/ui/geometry/RoundRect;->getLeft()F
-HSPLandroidx/compose/ui/geometry/RoundRect;->getRight()F
-HSPLandroidx/compose/ui/geometry/RoundRect;->getTop()F
-HSPLandroidx/compose/ui/geometry/RoundRect;->getTopLeftCornerRadius-kKHJgLs()J
-HSPLandroidx/compose/ui/geometry/RoundRect;->getTopRightCornerRadius-kKHJgLs()J
-HSPLandroidx/compose/ui/geometry/RoundRect;->getWidth()F
-HSPLandroidx/compose/ui/geometry/RoundRectKt;->RoundRect(FFFFFF)Landroidx/compose/ui/geometry/RoundRect;
-HSPLandroidx/compose/ui/geometry/RoundRectKt;->RoundRect-ZAM2FJo(Landroidx/compose/ui/geometry/Rect;JJJJ)Landroidx/compose/ui/geometry/RoundRect;
-HSPLandroidx/compose/ui/geometry/RoundRectKt;->RoundRect-gG7oq9Y(FFFFJ)Landroidx/compose/ui/geometry/RoundRect;
-HSPLandroidx/compose/ui/geometry/RoundRectKt;->isSimple(Landroidx/compose/ui/geometry/RoundRect;)Z
-HSPLandroidx/compose/ui/geometry/Size$Companion;-><init>()V
-HSPLandroidx/compose/ui/geometry/Size$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/geometry/Size$Companion;->getUnspecified-NH-jbRc()J
-HSPLandroidx/compose/ui/geometry/Size$Companion;->getZero-NH-jbRc()J
-HSPLandroidx/compose/ui/geometry/Size;-><clinit>()V
-HSPLandroidx/compose/ui/geometry/Size;-><init>(J)V
-HSPLandroidx/compose/ui/geometry/Size;->access$getUnspecified$cp()J
-HSPLandroidx/compose/ui/geometry/Size;->access$getZero$cp()J
-HSPLandroidx/compose/ui/geometry/Size;->box-impl(J)Landroidx/compose/ui/geometry/Size;
-HSPLandroidx/compose/ui/geometry/Size;->constructor-impl(J)J
-HSPLandroidx/compose/ui/geometry/Size;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/geometry/Size;->equals-impl(JLjava/lang/Object;)Z
-HSPLandroidx/compose/ui/geometry/Size;->equals-impl0(JJ)Z
-HSPLandroidx/compose/ui/geometry/Size;->getHeight-impl(J)F
-HSPLandroidx/compose/ui/geometry/Size;->getMinDimension-impl(J)F
-HSPLandroidx/compose/ui/geometry/Size;->getWidth-impl(J)F
-HSPLandroidx/compose/ui/geometry/Size;->isEmpty-impl(J)Z
-HSPLandroidx/compose/ui/geometry/Size;->unbox-impl()J
-HSPLandroidx/compose/ui/geometry/SizeKt;->Size(FF)J
-HSPLandroidx/compose/ui/geometry/SizeKt;->toRect-uvyYCjk(J)Landroidx/compose/ui/geometry/Rect;
-HSPLandroidx/compose/ui/graphics/AndroidBlendMode_androidKt;->toAndroidBlendMode-s9anfk8(I)Landroid/graphics/BlendMode;
-HSPLandroidx/compose/ui/graphics/AndroidCanvas;-><init>()V
-HSPLandroidx/compose/ui/graphics/AndroidCanvas;->concat-58bKbWc([F)V
-HSPLandroidx/compose/ui/graphics/AndroidCanvas;->disableZ()V
-HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawImageRect-HPBpro0(Landroidx/compose/ui/graphics/ImageBitmap;JJJJLandroidx/compose/ui/graphics/Paint;)V
-HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawPath(Landroidx/compose/ui/graphics/Path;Landroidx/compose/ui/graphics/Paint;)V
-HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawRect(FFFFLandroidx/compose/ui/graphics/Paint;)V
-HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawRoundRect(FFFFFFLandroidx/compose/ui/graphics/Paint;)V
-HSPLandroidx/compose/ui/graphics/AndroidCanvas;->enableZ()V
-HSPLandroidx/compose/ui/graphics/AndroidCanvas;->getInternalCanvas()Landroid/graphics/Canvas;
-HSPLandroidx/compose/ui/graphics/AndroidCanvas;->restore()V
-HSPLandroidx/compose/ui/graphics/AndroidCanvas;->save()V
-HSPLandroidx/compose/ui/graphics/AndroidCanvas;->setInternalCanvas(Landroid/graphics/Canvas;)V
-HSPLandroidx/compose/ui/graphics/AndroidCanvas;->translate(FF)V
-HSPLandroidx/compose/ui/graphics/AndroidCanvas_androidKt;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/AndroidCanvas_androidKt;->ActualCanvas(Landroidx/compose/ui/graphics/ImageBitmap;)Landroidx/compose/ui/graphics/Canvas;
-HSPLandroidx/compose/ui/graphics/AndroidCanvas_androidKt;->access$getEmptyCanvas$p()Landroid/graphics/Canvas;
-HSPLandroidx/compose/ui/graphics/AndroidCanvas_androidKt;->getNativeCanvas(Landroidx/compose/ui/graphics/Canvas;)Landroid/graphics/Canvas;
-HSPLandroidx/compose/ui/graphics/AndroidColorFilter_androidKt;->actualTintColorFilter-xETnrds(JI)Landroidx/compose/ui/graphics/ColorFilter;
-HSPLandroidx/compose/ui/graphics/AndroidColorFilter_androidKt;->asAndroidColorFilter(Landroidx/compose/ui/graphics/ColorFilter;)Landroid/graphics/ColorFilter;
-HSPLandroidx/compose/ui/graphics/AndroidImageBitmap;-><init>(Landroid/graphics/Bitmap;)V
-HSPLandroidx/compose/ui/graphics/AndroidImageBitmap;->getBitmap$ui_graphics_release()Landroid/graphics/Bitmap;
-HSPLandroidx/compose/ui/graphics/AndroidImageBitmap;->getHeight()I
-HSPLandroidx/compose/ui/graphics/AndroidImageBitmap;->getWidth()I
-HSPLandroidx/compose/ui/graphics/AndroidImageBitmap;->prepareToDraw()V
-HSPLandroidx/compose/ui/graphics/AndroidImageBitmap_androidKt;->ActualImageBitmap-x__-hDU(IIIZLandroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroidx/compose/ui/graphics/ImageBitmap;
-HSPLandroidx/compose/ui/graphics/AndroidImageBitmap_androidKt;->asAndroidBitmap(Landroidx/compose/ui/graphics/ImageBitmap;)Landroid/graphics/Bitmap;
-HSPLandroidx/compose/ui/graphics/AndroidImageBitmap_androidKt;->asImageBitmap(Landroid/graphics/Bitmap;)Landroidx/compose/ui/graphics/ImageBitmap;
-HSPLandroidx/compose/ui/graphics/AndroidImageBitmap_androidKt;->toBitmapConfig-1JJdX4A(I)Landroid/graphics/Bitmap$Config;
-HSPLandroidx/compose/ui/graphics/AndroidMatrixConversions_androidKt;->setFrom-EL8BTi8(Landroid/graphics/Matrix;[F)V
-HSPLandroidx/compose/ui/graphics/AndroidMatrixConversions_androidKt;->setFrom-tU-YjHk([FLandroid/graphics/Matrix;)V
-HSPLandroidx/compose/ui/graphics/AndroidPaint;-><init>()V
-HSPLandroidx/compose/ui/graphics/AndroidPaint;-><init>(Landroid/graphics/Paint;)V
-HSPLandroidx/compose/ui/graphics/AndroidPaint;->asFrameworkPaint()Landroid/graphics/Paint;
-HSPLandroidx/compose/ui/graphics/AndroidPaint;->getAlpha()F
-HSPLandroidx/compose/ui/graphics/AndroidPaint;->getBlendMode-0nO6VwU()I
-HSPLandroidx/compose/ui/graphics/AndroidPaint;->getColor-0d7_KjU()J
-HSPLandroidx/compose/ui/graphics/AndroidPaint;->getColorFilter()Landroidx/compose/ui/graphics/ColorFilter;
-HSPLandroidx/compose/ui/graphics/AndroidPaint;->getFilterQuality-f-v9h1I()I
-HSPLandroidx/compose/ui/graphics/AndroidPaint;->getShader()Landroid/graphics/Shader;
-HSPLandroidx/compose/ui/graphics/AndroidPaint;->setAlpha(F)V
-HSPLandroidx/compose/ui/graphics/AndroidPaint;->setBlendMode-s9anfk8(I)V
-HSPLandroidx/compose/ui/graphics/AndroidPaint;->setColor-8_81llA(J)V
-HSPLandroidx/compose/ui/graphics/AndroidPaint;->setColorFilter(Landroidx/compose/ui/graphics/ColorFilter;)V
-HSPLandroidx/compose/ui/graphics/AndroidPaint;->setShader(Landroid/graphics/Shader;)V
-HSPLandroidx/compose/ui/graphics/AndroidPaint;->setStrokeWidth(F)V
-HSPLandroidx/compose/ui/graphics/AndroidPaint;->setStyle-k9PVt8s(I)V
-HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->Paint()Landroidx/compose/ui/graphics/Paint;
-HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->getNativeAlpha(Landroid/graphics/Paint;)F
-HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->getNativeColor(Landroid/graphics/Paint;)J
-HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->getNativeFilterQuality(Landroid/graphics/Paint;)I
-HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->makeNativePaint()Landroid/graphics/Paint;
-HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->setNativeAlpha(Landroid/graphics/Paint;F)V
-HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->setNativeBlendMode-GB0RdKg(Landroid/graphics/Paint;I)V
-HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->setNativeColor-4WTKRHQ(Landroid/graphics/Paint;J)V
-HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->setNativeColorFilter(Landroid/graphics/Paint;Landroidx/compose/ui/graphics/ColorFilter;)V
-HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->setNativeShader(Landroid/graphics/Paint;Landroid/graphics/Shader;)V
-HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->setNativeStrokeWidth(Landroid/graphics/Paint;F)V
-HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->setNativeStyle--5YerkU(Landroid/graphics/Paint;I)V
-HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->toComposePaint(Landroid/graphics/Paint;)Landroidx/compose/ui/graphics/Paint;
-HSPLandroidx/compose/ui/graphics/AndroidPath;-><init>(Landroid/graphics/Path;)V
-HSPLandroidx/compose/ui/graphics/AndroidPath;-><init>(Landroid/graphics/Path;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/AndroidPath;->addPath-Uv8p0NA(Landroidx/compose/ui/graphics/Path;J)V
-HSPLandroidx/compose/ui/graphics/AndroidPath;->addRoundRect(Landroidx/compose/ui/geometry/RoundRect;)V
-HSPLandroidx/compose/ui/graphics/AndroidPath;->close()V
-HSPLandroidx/compose/ui/graphics/AndroidPath;->getInternalPath()Landroid/graphics/Path;
-HSPLandroidx/compose/ui/graphics/AndroidPath;->lineTo(FF)V
-HSPLandroidx/compose/ui/graphics/AndroidPath;->moveTo(FF)V
-HSPLandroidx/compose/ui/graphics/AndroidPath;->relativeLineTo(FF)V
-HSPLandroidx/compose/ui/graphics/AndroidPath;->reset()V
-HSPLandroidx/compose/ui/graphics/AndroidPath;->setFillType-oQ8Xj4U(I)V
-HSPLandroidx/compose/ui/graphics/AndroidPath_androidKt;->Path()Landroidx/compose/ui/graphics/Path;
-HSPLandroidx/compose/ui/graphics/Api26Bitmap;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/Api26Bitmap;-><init>()V
-HSPLandroidx/compose/ui/graphics/Api26Bitmap;->createBitmap-x__-hDU$ui_graphics_release(IIIZLandroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroid/graphics/Bitmap;
-HSPLandroidx/compose/ui/graphics/Api26Bitmap;->toFrameworkColorSpace$ui_graphics_release(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroid/graphics/ColorSpace;
-HSPLandroidx/compose/ui/graphics/BlendMode$Companion;-><init>()V
-HSPLandroidx/compose/ui/graphics/BlendMode$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/BlendMode$Companion;->getClear-0nO6VwU()I
-HSPLandroidx/compose/ui/graphics/BlendMode$Companion;->getDst-0nO6VwU()I
-HSPLandroidx/compose/ui/graphics/BlendMode$Companion;->getDstOver-0nO6VwU()I
-HSPLandroidx/compose/ui/graphics/BlendMode$Companion;->getSrc-0nO6VwU()I
-HSPLandroidx/compose/ui/graphics/BlendMode$Companion;->getSrcIn-0nO6VwU()I
-HSPLandroidx/compose/ui/graphics/BlendMode$Companion;->getSrcOver-0nO6VwU()I
-HSPLandroidx/compose/ui/graphics/BlendMode;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/BlendMode;-><init>(I)V
-HSPLandroidx/compose/ui/graphics/BlendMode;->access$getClear$cp()I
-HSPLandroidx/compose/ui/graphics/BlendMode;->access$getDst$cp()I
-HSPLandroidx/compose/ui/graphics/BlendMode;->access$getDstOver$cp()I
-HSPLandroidx/compose/ui/graphics/BlendMode;->access$getSrc$cp()I
-HSPLandroidx/compose/ui/graphics/BlendMode;->access$getSrcIn$cp()I
-HSPLandroidx/compose/ui/graphics/BlendMode;->access$getSrcOver$cp()I
-HSPLandroidx/compose/ui/graphics/BlendMode;->box-impl(I)Landroidx/compose/ui/graphics/BlendMode;
-HSPLandroidx/compose/ui/graphics/BlendMode;->constructor-impl(I)I
-HSPLandroidx/compose/ui/graphics/BlendMode;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/graphics/BlendMode;->equals-impl(ILjava/lang/Object;)Z
-HSPLandroidx/compose/ui/graphics/BlendMode;->equals-impl0(II)Z
-HSPLandroidx/compose/ui/graphics/BlendMode;->unbox-impl()I
-HSPLandroidx/compose/ui/graphics/BlendModeColorFilterHelper;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/BlendModeColorFilterHelper;-><init>()V
-HSPLandroidx/compose/ui/graphics/BlendModeColorFilterHelper;->BlendModeColorFilter-xETnrds(JI)Landroid/graphics/BlendModeColorFilter;
-HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier$measure$1;-><init>(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/graphics/BlockGraphicsLayerModifier;)V
-HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
-HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier;->getLayerBlock()Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier;->setLayerBlock(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/graphics/Brush$Companion;-><init>()V
-HSPLandroidx/compose/ui/graphics/Brush$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/Brush;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/Brush;-><init>()V
-HSPLandroidx/compose/ui/graphics/Brush;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/CanvasHolder;-><init>()V
-HSPLandroidx/compose/ui/graphics/CanvasHolder;->getAndroidCanvas()Landroidx/compose/ui/graphics/AndroidCanvas;
-HSPLandroidx/compose/ui/graphics/CanvasKt;->Canvas(Landroidx/compose/ui/graphics/ImageBitmap;)Landroidx/compose/ui/graphics/Canvas;
-HSPLandroidx/compose/ui/graphics/CanvasUtils;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/CanvasUtils;-><init>()V
-HSPLandroidx/compose/ui/graphics/CanvasUtils;->enableZ(Landroid/graphics/Canvas;Z)V
-HSPLandroidx/compose/ui/graphics/CanvasZHelper;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/CanvasZHelper;-><init>()V
-HSPLandroidx/compose/ui/graphics/CanvasZHelper;->enableZ(Landroid/graphics/Canvas;Z)V
-HSPLandroidx/compose/ui/graphics/Color$Companion;-><init>()V
-HSPLandroidx/compose/ui/graphics/Color$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/Color$Companion;->getBlack-0d7_KjU()J
-HSPLandroidx/compose/ui/graphics/Color$Companion;->getBlue-0d7_KjU()J
-HSPLandroidx/compose/ui/graphics/Color$Companion;->getRed-0d7_KjU()J
-HSPLandroidx/compose/ui/graphics/Color$Companion;->getTransparent-0d7_KjU()J
-HSPLandroidx/compose/ui/graphics/Color$Companion;->getUnspecified-0d7_KjU()J
-HSPLandroidx/compose/ui/graphics/Color;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/Color;-><init>(J)V
-HSPLandroidx/compose/ui/graphics/Color;->access$getBlack$cp()J
-HSPLandroidx/compose/ui/graphics/Color;->access$getBlue$cp()J
-HSPLandroidx/compose/ui/graphics/Color;->access$getRed$cp()J
-HSPLandroidx/compose/ui/graphics/Color;->access$getTransparent$cp()J
-HSPLandroidx/compose/ui/graphics/Color;->access$getUnspecified$cp()J
-HSPLandroidx/compose/ui/graphics/Color;->box-impl(J)Landroidx/compose/ui/graphics/Color;
-HSPLandroidx/compose/ui/graphics/Color;->constructor-impl(J)J
-HSPLandroidx/compose/ui/graphics/Color;->convert-vNxB06k(JLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J
-HSPLandroidx/compose/ui/graphics/Color;->copy-wmQWz5c$default(JFFFFILjava/lang/Object;)J
-HSPLandroidx/compose/ui/graphics/Color;->copy-wmQWz5c(JFFFF)J
-HSPLandroidx/compose/ui/graphics/Color;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/graphics/Color;->equals-impl(JLjava/lang/Object;)Z
-HSPLandroidx/compose/ui/graphics/Color;->equals-impl0(JJ)Z
-HSPLandroidx/compose/ui/graphics/Color;->getAlpha-impl(J)F
-HSPLandroidx/compose/ui/graphics/Color;->getBlue-impl(J)F
-HSPLandroidx/compose/ui/graphics/Color;->getColorSpace-impl(J)Landroidx/compose/ui/graphics/colorspace/ColorSpace;
-HSPLandroidx/compose/ui/graphics/Color;->getGreen-impl(J)F
-HSPLandroidx/compose/ui/graphics/Color;->getRed-impl(J)F
-HSPLandroidx/compose/ui/graphics/Color;->unbox-impl()J
-HSPLandroidx/compose/ui/graphics/ColorFilter$Companion;-><init>()V
-HSPLandroidx/compose/ui/graphics/ColorFilter$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/ColorFilter$Companion;->tint-xETnrds$default(Landroidx/compose/ui/graphics/ColorFilter$Companion;JIILjava/lang/Object;)Landroidx/compose/ui/graphics/ColorFilter;
-HSPLandroidx/compose/ui/graphics/ColorFilter$Companion;->tint-xETnrds(JI)Landroidx/compose/ui/graphics/ColorFilter;
-HSPLandroidx/compose/ui/graphics/ColorFilter;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/ColorFilter;-><init>(Landroid/graphics/ColorFilter;)V
-HSPLandroidx/compose/ui/graphics/ColorFilter;->getNativeColorFilter$ui_graphics_release()Landroid/graphics/ColorFilter;
-HSPLandroidx/compose/ui/graphics/ColorKt;->Color$default(FFFFLandroidx/compose/ui/graphics/colorspace/ColorSpace;ILjava/lang/Object;)J
-HSPLandroidx/compose/ui/graphics/ColorKt;->Color$default(IIIIILjava/lang/Object;)J
-HSPLandroidx/compose/ui/graphics/ColorKt;->Color(FFFFLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J
-HSPLandroidx/compose/ui/graphics/ColorKt;->Color(I)J
-HSPLandroidx/compose/ui/graphics/ColorKt;->Color(IIII)J
-HSPLandroidx/compose/ui/graphics/ColorKt;->Color(J)J
-HSPLandroidx/compose/ui/graphics/ColorKt;->compositeOver--OWjLjI(JJ)J
-HSPLandroidx/compose/ui/graphics/ColorKt;->lerp-jxsXWHM(JJF)J
-HSPLandroidx/compose/ui/graphics/ColorKt;->toArgb-8_81llA(J)I
-HSPLandroidx/compose/ui/graphics/CompositingStrategy$Companion;-><init>()V
-HSPLandroidx/compose/ui/graphics/CompositingStrategy$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/CompositingStrategy$Companion;->getAuto--NrFUSI()I
-HSPLandroidx/compose/ui/graphics/CompositingStrategy$Companion;->getModulateAlpha--NrFUSI()I
-HSPLandroidx/compose/ui/graphics/CompositingStrategy$Companion;->getOffscreen--NrFUSI()I
-HSPLandroidx/compose/ui/graphics/CompositingStrategy;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/CompositingStrategy;->access$getAuto$cp()I
-HSPLandroidx/compose/ui/graphics/CompositingStrategy;->access$getModulateAlpha$cp()I
-HSPLandroidx/compose/ui/graphics/CompositingStrategy;->access$getOffscreen$cp()I
-HSPLandroidx/compose/ui/graphics/CompositingStrategy;->constructor-impl(I)I
-HSPLandroidx/compose/ui/graphics/CompositingStrategy;->equals-impl0(II)Z
-HSPLandroidx/compose/ui/graphics/FilterQuality$Companion;-><init>()V
-HSPLandroidx/compose/ui/graphics/FilterQuality$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/FilterQuality$Companion;->getLow-f-v9h1I()I
-HSPLandroidx/compose/ui/graphics/FilterQuality;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/FilterQuality;->access$getLow$cp()I
-HSPLandroidx/compose/ui/graphics/FilterQuality;->constructor-impl(I)I
-HSPLandroidx/compose/ui/graphics/FilterQuality;->equals-impl0(II)Z
-HSPLandroidx/compose/ui/graphics/Float16$Companion;-><init>()V
-HSPLandroidx/compose/ui/graphics/Float16$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/Float16$Companion;->access$floatToHalf(Landroidx/compose/ui/graphics/Float16$Companion;F)S
-HSPLandroidx/compose/ui/graphics/Float16$Companion;->floatToHalf(F)S
-HSPLandroidx/compose/ui/graphics/Float16;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/Float16;->constructor-impl(F)S
-HSPLandroidx/compose/ui/graphics/Float16;->constructor-impl(S)S
-HSPLandroidx/compose/ui/graphics/Float16;->toFloat-impl(S)F
-HSPLandroidx/compose/ui/graphics/GraphicsLayerModifierKt$graphicsLayer$$inlined$modifierElementOf$1;-><init>(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/graphics/GraphicsLayerModifierKt$graphicsLayer$$inlined$modifierElementOf$1;->create()Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/graphics/GraphicsLayerModifierKt$graphicsLayer$$inlined$modifierElementOf$1;->update(Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/graphics/GraphicsLayerModifierKt;->graphicsLayer(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/graphics/GraphicsLayerModifierKt;->graphicsLayer-Ap8cVGQ$default(Landroidx/compose/ui/Modifier;FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZLandroidx/compose/ui/graphics/RenderEffect;JJIILjava/lang/Object;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/graphics/GraphicsLayerModifierKt;->graphicsLayer-Ap8cVGQ(Landroidx/compose/ui/Modifier;FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZLandroidx/compose/ui/graphics/RenderEffect;JJI)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/graphics/GraphicsLayerModifierKt;->toolingGraphicsLayer(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/graphics/GraphicsLayerModifierNodeElement;-><init>(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZLandroidx/compose/ui/graphics/RenderEffect;JJI)V
-HSPLandroidx/compose/ui/graphics/GraphicsLayerModifierNodeElement;-><init>(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZLandroidx/compose/ui/graphics/RenderEffect;JJILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/GraphicsLayerModifierNodeElement;->create()Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/graphics/GraphicsLayerModifierNodeElement;->create()Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;
-HSPLandroidx/compose/ui/graphics/GraphicsLayerModifierNodeElement;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/graphics/GraphicsLayerScopeKt;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/GraphicsLayerScopeKt;->getDefaultShadowColor()J
-HSPLandroidx/compose/ui/graphics/ImageBitmapConfig$Companion;-><init>()V
-HSPLandroidx/compose/ui/graphics/ImageBitmapConfig$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/ImageBitmapConfig$Companion;->getArgb8888-_sVssgQ()I
-HSPLandroidx/compose/ui/graphics/ImageBitmapConfig;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/ImageBitmapConfig;->access$getArgb8888$cp()I
-HSPLandroidx/compose/ui/graphics/ImageBitmapConfig;->constructor-impl(I)I
-HSPLandroidx/compose/ui/graphics/ImageBitmapConfig;->equals-impl0(II)Z
-HSPLandroidx/compose/ui/graphics/ImageBitmapKt;->ImageBitmap-x__-hDU$default(IIIZLandroidx/compose/ui/graphics/colorspace/ColorSpace;ILjava/lang/Object;)Landroidx/compose/ui/graphics/ImageBitmap;
-HSPLandroidx/compose/ui/graphics/ImageBitmapKt;->ImageBitmap-x__-hDU(IIIZLandroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroidx/compose/ui/graphics/ImageBitmap;
-HSPLandroidx/compose/ui/graphics/Matrix$Companion;-><init>()V
-HSPLandroidx/compose/ui/graphics/Matrix$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/Matrix;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/Matrix;-><init>([F)V
-HSPLandroidx/compose/ui/graphics/Matrix;->box-impl([F)Landroidx/compose/ui/graphics/Matrix;
-HSPLandroidx/compose/ui/graphics/Matrix;->constructor-impl$default([FILkotlin/jvm/internal/DefaultConstructorMarker;)[F
-HSPLandroidx/compose/ui/graphics/Matrix;->constructor-impl([F)[F
-HSPLandroidx/compose/ui/graphics/Matrix;->map-MK-Hz9U([FJ)J
-HSPLandroidx/compose/ui/graphics/Matrix;->reset-impl([F)V
-HSPLandroidx/compose/ui/graphics/Matrix;->rotateZ-impl([FF)V
-HSPLandroidx/compose/ui/graphics/Matrix;->scale-impl([FFFF)V
-HSPLandroidx/compose/ui/graphics/Matrix;->translate-impl$default([FFFFILjava/lang/Object;)V
-HSPLandroidx/compose/ui/graphics/Matrix;->translate-impl([FFFF)V
-HSPLandroidx/compose/ui/graphics/Matrix;->unbox-impl()[F
-HSPLandroidx/compose/ui/graphics/MatrixKt;->isIdentity-58bKbWc([F)Z
-HSPLandroidx/compose/ui/graphics/Outline$Rectangle;-><init>(Landroidx/compose/ui/geometry/Rect;)V
-HSPLandroidx/compose/ui/graphics/Outline$Rectangle;->getRect()Landroidx/compose/ui/geometry/Rect;
-HSPLandroidx/compose/ui/graphics/Outline$Rounded;-><init>(Landroidx/compose/ui/geometry/RoundRect;)V
-HSPLandroidx/compose/ui/graphics/Outline$Rounded;->getRoundRect()Landroidx/compose/ui/geometry/RoundRect;
-HSPLandroidx/compose/ui/graphics/Outline$Rounded;->getRoundRectPath$ui_graphics_release()Landroidx/compose/ui/graphics/Path;
-HSPLandroidx/compose/ui/graphics/Outline;-><init>()V
-HSPLandroidx/compose/ui/graphics/Outline;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/OutlineKt;->access$hasSameCornerRadius(Landroidx/compose/ui/geometry/RoundRect;)Z
-HSPLandroidx/compose/ui/graphics/OutlineKt;->drawOutline-wDX37Ww$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/Outline;JFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;IILjava/lang/Object;)V
-HSPLandroidx/compose/ui/graphics/OutlineKt;->drawOutline-wDX37Ww(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/Outline;JFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V
-HSPLandroidx/compose/ui/graphics/OutlineKt;->hasSameCornerRadius(Landroidx/compose/ui/geometry/RoundRect;)Z
-HSPLandroidx/compose/ui/graphics/OutlineKt;->size(Landroidx/compose/ui/geometry/Rect;)J
-HSPLandroidx/compose/ui/graphics/OutlineKt;->size(Landroidx/compose/ui/geometry/RoundRect;)J
-HSPLandroidx/compose/ui/graphics/OutlineKt;->topLeft(Landroidx/compose/ui/geometry/Rect;)J
-HSPLandroidx/compose/ui/graphics/OutlineKt;->topLeft(Landroidx/compose/ui/geometry/RoundRect;)J
-HSPLandroidx/compose/ui/graphics/PaintingStyle$Companion;-><init>()V
-HSPLandroidx/compose/ui/graphics/PaintingStyle$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/PaintingStyle$Companion;->getFill-TiuSbCo()I
-HSPLandroidx/compose/ui/graphics/PaintingStyle$Companion;->getStroke-TiuSbCo()I
-HSPLandroidx/compose/ui/graphics/PaintingStyle;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/PaintingStyle;->access$getFill$cp()I
-HSPLandroidx/compose/ui/graphics/PaintingStyle;->access$getStroke$cp()I
-HSPLandroidx/compose/ui/graphics/PaintingStyle;->constructor-impl(I)I
-HSPLandroidx/compose/ui/graphics/PaintingStyle;->equals-impl0(II)Z
-HSPLandroidx/compose/ui/graphics/Path$Companion;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/Path$Companion;-><init>()V
-HSPLandroidx/compose/ui/graphics/Path;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/Path;->addPath-Uv8p0NA$default(Landroidx/compose/ui/graphics/Path;Landroidx/compose/ui/graphics/Path;JILjava/lang/Object;)V
-HSPLandroidx/compose/ui/graphics/PathFillType$Companion;-><init>()V
-HSPLandroidx/compose/ui/graphics/PathFillType$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/PathFillType$Companion;->getEvenOdd-Rg-k1Os()I
-HSPLandroidx/compose/ui/graphics/PathFillType$Companion;->getNonZero-Rg-k1Os()I
-HSPLandroidx/compose/ui/graphics/PathFillType;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/PathFillType;-><init>(I)V
-HSPLandroidx/compose/ui/graphics/PathFillType;->access$getEvenOdd$cp()I
-HSPLandroidx/compose/ui/graphics/PathFillType;->access$getNonZero$cp()I
-HSPLandroidx/compose/ui/graphics/PathFillType;->box-impl(I)Landroidx/compose/ui/graphics/PathFillType;
-HSPLandroidx/compose/ui/graphics/PathFillType;->constructor-impl(I)I
-HSPLandroidx/compose/ui/graphics/PathFillType;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/graphics/PathFillType;->equals-impl(ILjava/lang/Object;)Z
-HSPLandroidx/compose/ui/graphics/PathFillType;->equals-impl0(II)Z
-HSPLandroidx/compose/ui/graphics/PathFillType;->unbox-impl()I
-HSPLandroidx/compose/ui/graphics/RectangleShapeKt$RectangleShape$1;-><init>()V
-HSPLandroidx/compose/ui/graphics/RectangleShapeKt;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/RectangleShapeKt;->getRectangleShape()Landroidx/compose/ui/graphics/Shape;
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;-><init>()V
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getAlpha()F
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getAmbientShadowColor-0d7_KjU()J
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getCameraDistance()F
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getClip()Z
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getCompositingStrategy--NrFUSI()I
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getDensity()F
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getRenderEffect()Landroidx/compose/ui/graphics/RenderEffect;
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getRotationX()F
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getRotationY()F
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getRotationZ()F
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getScaleX()F
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getScaleY()F
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getShadowElevation()F
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getShape()Landroidx/compose/ui/graphics/Shape;
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getSpotShadowColor-0d7_KjU()J
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getTransformOrigin-SzJe1aQ()J
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getTranslationX()F
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getTranslationY()F
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->reset()V
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setAlpha(F)V
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setAmbientShadowColor-8_81llA(J)V
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setCameraDistance(F)V
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setClip(Z)V
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setCompositingStrategy-aDBOjCE(I)V
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setGraphicsDensity$ui_release(Landroidx/compose/ui/unit/Density;)V
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setRenderEffect(Landroidx/compose/ui/graphics/RenderEffect;)V
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setRotationX(F)V
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setRotationY(F)V
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setRotationZ(F)V
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setScaleX(F)V
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setScaleY(F)V
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setShadowElevation(F)V
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setShape(Landroidx/compose/ui/graphics/Shape;)V
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setSize-uvyYCjk(J)V
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setSpotShadowColor-8_81llA(J)V
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setTransformOrigin-__ExYCQ(J)V
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setTranslationX(F)V
-HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setTranslationY(F)V
-HSPLandroidx/compose/ui/graphics/Shadow$Companion;-><init>()V
-HSPLandroidx/compose/ui/graphics/Shadow$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/Shadow$Companion;->getNone()Landroidx/compose/ui/graphics/Shadow;
-HSPLandroidx/compose/ui/graphics/Shadow;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/Shadow;-><init>(JJF)V
-HSPLandroidx/compose/ui/graphics/Shadow;-><init>(JJFILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/Shadow;-><init>(JJFLkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/Shadow;->access$getNone$cp()Landroidx/compose/ui/graphics/Shadow;
-HSPLandroidx/compose/ui/graphics/Shadow;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$layerBlock$1;-><init>(Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;)V
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$layerBlock$1;->invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)V
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$layerBlock$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$measure$1;-><init>(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;)V
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;-><init>(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZLandroidx/compose/ui/graphics/RenderEffect;JJI)V
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;-><init>(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZLandroidx/compose/ui/graphics/RenderEffect;JJILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->access$getLayerBlock$p(Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;)Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getAlpha()F
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getAmbientShadowColor-0d7_KjU()J
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getCameraDistance()F
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getClip()Z
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getCompositingStrategy--NrFUSI()I
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getRenderEffect()Landroidx/compose/ui/graphics/RenderEffect;
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getRotationX()F
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getRotationY()F
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getRotationZ()F
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getScaleX()F
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getScaleY()F
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getShadowElevation()F
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getShape()Landroidx/compose/ui/graphics/Shape;
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getSpotShadowColor-0d7_KjU()J
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getTransformOrigin-SzJe1aQ()J
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getTranslationX()F
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getTranslationY()F
-HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/ui/graphics/SolidColor;-><init>(J)V
-HSPLandroidx/compose/ui/graphics/SolidColor;-><init>(JLkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/SolidColor;->applyTo-Pq9zytI(JLandroidx/compose/ui/graphics/Paint;F)V
-HSPLandroidx/compose/ui/graphics/SolidColor;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/graphics/StrokeCap$Companion;-><init>()V
-HSPLandroidx/compose/ui/graphics/StrokeCap$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/StrokeCap$Companion;->getButt-KaPHkGw()I
-HSPLandroidx/compose/ui/graphics/StrokeCap;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/StrokeCap;-><init>(I)V
-HSPLandroidx/compose/ui/graphics/StrokeCap;->access$getButt$cp()I
-HSPLandroidx/compose/ui/graphics/StrokeCap;->box-impl(I)Landroidx/compose/ui/graphics/StrokeCap;
-HSPLandroidx/compose/ui/graphics/StrokeCap;->constructor-impl(I)I
-HSPLandroidx/compose/ui/graphics/StrokeCap;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/graphics/StrokeCap;->equals-impl(ILjava/lang/Object;)Z
-HSPLandroidx/compose/ui/graphics/StrokeCap;->unbox-impl()I
-HSPLandroidx/compose/ui/graphics/StrokeJoin$Companion;-><init>()V
-HSPLandroidx/compose/ui/graphics/StrokeJoin$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/StrokeJoin$Companion;->getBevel-LxFBmk8()I
-HSPLandroidx/compose/ui/graphics/StrokeJoin$Companion;->getMiter-LxFBmk8()I
-HSPLandroidx/compose/ui/graphics/StrokeJoin;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/StrokeJoin;-><init>(I)V
-HSPLandroidx/compose/ui/graphics/StrokeJoin;->access$getBevel$cp()I
-HSPLandroidx/compose/ui/graphics/StrokeJoin;->access$getMiter$cp()I
-HSPLandroidx/compose/ui/graphics/StrokeJoin;->box-impl(I)Landroidx/compose/ui/graphics/StrokeJoin;
-HSPLandroidx/compose/ui/graphics/StrokeJoin;->constructor-impl(I)I
-HSPLandroidx/compose/ui/graphics/StrokeJoin;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/graphics/StrokeJoin;->equals-impl(ILjava/lang/Object;)Z
-HSPLandroidx/compose/ui/graphics/StrokeJoin;->unbox-impl()I
-HSPLandroidx/compose/ui/graphics/TransformOrigin$Companion;-><init>()V
-HSPLandroidx/compose/ui/graphics/TransformOrigin$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/TransformOrigin$Companion;->getCenter-SzJe1aQ()J
-HSPLandroidx/compose/ui/graphics/TransformOrigin;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/TransformOrigin;->access$getCenter$cp()J
-HSPLandroidx/compose/ui/graphics/TransformOrigin;->constructor-impl(J)J
-HSPLandroidx/compose/ui/graphics/TransformOrigin;->equals-impl0(JJ)Z
-HSPLandroidx/compose/ui/graphics/TransformOrigin;->getPivotFractionX-impl(J)F
-HSPLandroidx/compose/ui/graphics/TransformOrigin;->getPivotFractionY-impl(J)F
-HSPLandroidx/compose/ui/graphics/TransformOriginKt;->TransformOrigin(FF)J
-HSPLandroidx/compose/ui/graphics/WrapperVerificationHelperMethods;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/WrapperVerificationHelperMethods;-><init>()V
-HSPLandroidx/compose/ui/graphics/WrapperVerificationHelperMethods;->setBlendMode-GB0RdKg(Landroid/graphics/Paint;I)V
-HSPLandroidx/compose/ui/graphics/colorspace/Adaptation$Companion$Bradford$1;-><init>([F)V
-HSPLandroidx/compose/ui/graphics/colorspace/Adaptation$Companion$Ciecat02$1;-><init>([F)V
-HSPLandroidx/compose/ui/graphics/colorspace/Adaptation$Companion$VonKries$1;-><init>([F)V
-HSPLandroidx/compose/ui/graphics/colorspace/Adaptation$Companion;-><init>()V
-HSPLandroidx/compose/ui/graphics/colorspace/Adaptation$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/colorspace/Adaptation$Companion;->getBradford()Landroidx/compose/ui/graphics/colorspace/Adaptation;
-HSPLandroidx/compose/ui/graphics/colorspace/Adaptation;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/colorspace/Adaptation;-><init>([F)V
-HSPLandroidx/compose/ui/graphics/colorspace/Adaptation;-><init>([FLkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/colorspace/Adaptation;->access$getBradford$cp()Landroidx/compose/ui/graphics/colorspace/Adaptation;
-HSPLandroidx/compose/ui/graphics/colorspace/Adaptation;->getTransform$ui_graphics_release()[F
-HSPLandroidx/compose/ui/graphics/colorspace/ColorModel$Companion;-><init>()V
-HSPLandroidx/compose/ui/graphics/colorspace/ColorModel$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/colorspace/ColorModel$Companion;->getLab-xdoWZVw()J
-HSPLandroidx/compose/ui/graphics/colorspace/ColorModel$Companion;->getRgb-xdoWZVw()J
-HSPLandroidx/compose/ui/graphics/colorspace/ColorModel$Companion;->getXyz-xdoWZVw()J
-HSPLandroidx/compose/ui/graphics/colorspace/ColorModel;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/colorspace/ColorModel;->access$getLab$cp()J
-HSPLandroidx/compose/ui/graphics/colorspace/ColorModel;->access$getRgb$cp()J
-HSPLandroidx/compose/ui/graphics/colorspace/ColorModel;->access$getXyz$cp()J
-HSPLandroidx/compose/ui/graphics/colorspace/ColorModel;->constructor-impl(J)J
-HSPLandroidx/compose/ui/graphics/colorspace/ColorModel;->equals-impl0(JJ)Z
-HSPLandroidx/compose/ui/graphics/colorspace/ColorModel;->getComponentCount-impl(J)I
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace$Companion;-><init>()V
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;-><init>(Ljava/lang/String;JI)V
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;-><init>(Ljava/lang/String;JILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->getComponentCount()I
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->getId$ui_graphics_release()I
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->getModel-xdoWZVw()J
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->getName()Ljava/lang/String;
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->isSrgb()Z
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->adapt$default(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/Adaptation;ILjava/lang/Object;)Landroidx/compose/ui/graphics/colorspace/ColorSpace;
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->adapt(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/Adaptation;)Landroidx/compose/ui/graphics/colorspace/ColorSpace;
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->chromaticAdaptation([F[F[F)[F
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->compare(Landroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/WhitePoint;)Z
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->compare([F[F)Z
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->connect-YBCOT_4$default(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;IILjava/lang/Object;)Landroidx/compose/ui/graphics/colorspace/Connector;
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->connect-YBCOT_4(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;I)Landroidx/compose/ui/graphics/colorspace/Connector;
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->inverse3x3([F)[F
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->mul3x3([F[F)[F
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->mul3x3Diag([F[F)[F
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->mul3x3Float3([F[F)[F
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->mul3x3Float3_0([FFFF)F
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->mul3x3Float3_1([FFFF)F
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->mul3x3Float3_2([FFFF)F
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->rcpResponse(DDDDDD)D
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->response(DDDDDD)D
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces$$ExternalSyntheticLambda0;-><init>()V
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces$$ExternalSyntheticLambda1;-><init>()V
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;-><init>()V
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getCieXyz()Landroidx/compose/ui/graphics/colorspace/ColorSpace;
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getColorSpacesArray$ui_graphics_release()[Landroidx/compose/ui/graphics/colorspace/ColorSpace;
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getNtsc1953Primaries$ui_graphics_release()[F
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getOklab()Landroidx/compose/ui/graphics/colorspace/ColorSpace;
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getSrgb()Landroidx/compose/ui/graphics/colorspace/Rgb;
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getSrgbPrimaries$ui_graphics_release()[F
-HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getUnspecified$ui_graphics_release()Landroidx/compose/ui/graphics/colorspace/Rgb;
-HSPLandroidx/compose/ui/graphics/colorspace/Connector$Companion$identity$1;-><init>(Landroidx/compose/ui/graphics/colorspace/ColorSpace;I)V
-HSPLandroidx/compose/ui/graphics/colorspace/Connector$Companion;-><init>()V
-HSPLandroidx/compose/ui/graphics/colorspace/Connector$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/colorspace/Connector$Companion;->access$computeTransform-YBCOT_4(Landroidx/compose/ui/graphics/colorspace/Connector$Companion;Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;I)[F
-HSPLandroidx/compose/ui/graphics/colorspace/Connector$Companion;->computeTransform-YBCOT_4(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;I)[F
-HSPLandroidx/compose/ui/graphics/colorspace/Connector$Companion;->getOklabToSrgbPerceptual$ui_graphics_release()Landroidx/compose/ui/graphics/colorspace/Connector;
-HSPLandroidx/compose/ui/graphics/colorspace/Connector$Companion;->getSrgbToOklabPerceptual$ui_graphics_release()Landroidx/compose/ui/graphics/colorspace/Connector;
-HSPLandroidx/compose/ui/graphics/colorspace/Connector$Companion;->identity$ui_graphics_release(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroidx/compose/ui/graphics/colorspace/Connector;
-HSPLandroidx/compose/ui/graphics/colorspace/Connector;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/colorspace/Connector;-><init>(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;I)V
-HSPLandroidx/compose/ui/graphics/colorspace/Connector;-><init>(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/colorspace/Connector;-><init>(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;I[F)V
-HSPLandroidx/compose/ui/graphics/colorspace/Connector;-><init>(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;I[FLkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/colorspace/Connector;->access$getOklabToSrgbPerceptual$cp()Landroidx/compose/ui/graphics/colorspace/Connector;
-HSPLandroidx/compose/ui/graphics/colorspace/Connector;->access$getSrgbToOklabPerceptual$cp()Landroidx/compose/ui/graphics/colorspace/Connector;
-HSPLandroidx/compose/ui/graphics/colorspace/Connector;->transformToColor-wmQWz5c$ui_graphics_release(FFFF)J
-HSPLandroidx/compose/ui/graphics/colorspace/Illuminant;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/colorspace/Illuminant;-><init>()V
-HSPLandroidx/compose/ui/graphics/colorspace/Illuminant;->getC()Landroidx/compose/ui/graphics/colorspace/WhitePoint;
-HSPLandroidx/compose/ui/graphics/colorspace/Illuminant;->getD50()Landroidx/compose/ui/graphics/colorspace/WhitePoint;
-HSPLandroidx/compose/ui/graphics/colorspace/Illuminant;->getD60()Landroidx/compose/ui/graphics/colorspace/WhitePoint;
-HSPLandroidx/compose/ui/graphics/colorspace/Illuminant;->getD65()Landroidx/compose/ui/graphics/colorspace/WhitePoint;
-HSPLandroidx/compose/ui/graphics/colorspace/Lab$Companion;-><init>()V
-HSPLandroidx/compose/ui/graphics/colorspace/Lab$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/colorspace/Lab;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/colorspace/Lab;-><init>(Ljava/lang/String;I)V
-HSPLandroidx/compose/ui/graphics/colorspace/Oklab$Companion;-><init>()V
-HSPLandroidx/compose/ui/graphics/colorspace/Oklab$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/colorspace/Oklab;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/colorspace/Oklab;-><init>(Ljava/lang/String;I)V
-HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->getMaxValue(I)F
-HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->getMinValue(I)F
-HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->toXy$ui_graphics_release(FFF)J
-HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->toZ$ui_graphics_release(FFF)F
-HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->xyzaToColor-JlNiLsg$ui_graphics_release(FFFFLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J
-HSPLandroidx/compose/ui/graphics/colorspace/RenderIntent$Companion;-><init>()V
-HSPLandroidx/compose/ui/graphics/colorspace/RenderIntent$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/colorspace/RenderIntent$Companion;->getAbsolute-uksYyKA()I
-HSPLandroidx/compose/ui/graphics/colorspace/RenderIntent$Companion;->getPerceptual-uksYyKA()I
-HSPLandroidx/compose/ui/graphics/colorspace/RenderIntent$Companion;->getRelative-uksYyKA()I
-HSPLandroidx/compose/ui/graphics/colorspace/RenderIntent;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/colorspace/RenderIntent;->access$getAbsolute$cp()I
-HSPLandroidx/compose/ui/graphics/colorspace/RenderIntent;->access$getPerceptual$cp()I
-HSPLandroidx/compose/ui/graphics/colorspace/RenderIntent;->access$getRelative$cp()I
-HSPLandroidx/compose/ui/graphics/colorspace/RenderIntent;->constructor-impl(I)I
-HSPLandroidx/compose/ui/graphics/colorspace/RenderIntent;->equals-impl0(II)Z
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda0;-><init>(Landroidx/compose/ui/graphics/colorspace/Rgb;)V
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda0;->invoke(D)D
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda1;-><init>(Landroidx/compose/ui/graphics/colorspace/Rgb;)V
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda1;->invoke(D)D
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda2;-><init>()V
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda2;->invoke(D)D
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda3;-><init>(Landroidx/compose/ui/graphics/colorspace/TransferParameters;)V
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda3;->invoke(D)D
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda5;-><init>(Landroidx/compose/ui/graphics/colorspace/TransferParameters;)V
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda5;->invoke(D)D
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda7;-><init>(D)V
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda8;-><init>(D)V
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;-><init>()V
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->access$computeXYZMatrix(Landroidx/compose/ui/graphics/colorspace/Rgb$Companion;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;)[F
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->access$isSrgb(Landroidx/compose/ui/graphics/colorspace/Rgb$Companion;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/DoubleFunction;Landroidx/compose/ui/graphics/colorspace/DoubleFunction;FFI)Z
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->access$isWideGamut(Landroidx/compose/ui/graphics/colorspace/Rgb$Companion;[FFF)Z
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->access$xyPrimaries(Landroidx/compose/ui/graphics/colorspace/Rgb$Companion;[F)[F
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->area([F)F
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->compare(DLandroidx/compose/ui/graphics/colorspace/DoubleFunction;Landroidx/compose/ui/graphics/colorspace/DoubleFunction;)Z
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->computeXYZMatrix([FLandroidx/compose/ui/graphics/colorspace/WhitePoint;)[F
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->contains([F[F)Z
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->cross(FFFF)F
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->isSrgb([FLandroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/DoubleFunction;Landroidx/compose/ui/graphics/colorspace/DoubleFunction;FFI)Z
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->isWideGamut([FFF)Z
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->xyPrimaries([F)[F
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$eotf$1;-><init>(Landroidx/compose/ui/graphics/colorspace/Rgb;)V
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb$oetf$1;-><init>(Landroidx/compose/ui/graphics/colorspace/Rgb;)V
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->$r8$lambda$FANKyyW7TMwi4gnihl1LqxbkU6k(Landroidx/compose/ui/graphics/colorspace/Rgb;D)D
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->$r8$lambda$G8Pyx7Z9bMrnDjgEiQ7pXGTZEzg(Landroidx/compose/ui/graphics/colorspace/TransferParameters;D)D
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->$r8$lambda$OfmTeMXzL_nayJmS5mO6N4G4DlI(Landroidx/compose/ui/graphics/colorspace/Rgb;D)D
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->$r8$lambda$ahWovdYS5NpJ-IThda37cTda4qg(D)D
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->$r8$lambda$q_AtDSzDu9yw5JwgrVWJo3kmlB0(Landroidx/compose/ui/graphics/colorspace/TransferParameters;D)D
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb;-><init>(Landroidx/compose/ui/graphics/colorspace/Rgb;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;)V
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb;-><init>(Ljava/lang/String;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;DFFI)V
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb;-><init>(Ljava/lang/String;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/TransferParameters;I)V
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb;-><init>(Ljava/lang/String;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;[FLandroidx/compose/ui/graphics/colorspace/DoubleFunction;Landroidx/compose/ui/graphics/colorspace/DoubleFunction;FFLandroidx/compose/ui/graphics/colorspace/TransferParameters;I)V
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->DoubleIdentity$lambda$12(D)D
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->_init_$lambda$6(Landroidx/compose/ui/graphics/colorspace/TransferParameters;D)D
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->_init_$lambda$8(Landroidx/compose/ui/graphics/colorspace/TransferParameters;D)D
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->eotfFunc$lambda$1(Landroidx/compose/ui/graphics/colorspace/Rgb;D)D
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getEotfOrig$ui_graphics_release()Landroidx/compose/ui/graphics/colorspace/DoubleFunction;
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getMaxValue(I)F
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getMinValue(I)F
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getOetfOrig$ui_graphics_release()Landroidx/compose/ui/graphics/colorspace/DoubleFunction;
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getTransform$ui_graphics_release()[F
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getWhitePoint()Landroidx/compose/ui/graphics/colorspace/WhitePoint;
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->isSrgb()Z
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->oetfFunc$lambda$0(Landroidx/compose/ui/graphics/colorspace/Rgb;D)D
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->toXy$ui_graphics_release(FFF)J
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->toZ$ui_graphics_release(FFF)F
-HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->xyzaToColor-JlNiLsg$ui_graphics_release(FFFFLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J
-HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;-><init>(DDDDDDD)V
-HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;-><init>(DDDDDDDILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getA()D
-HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getB()D
-HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getC()D
-HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getD()D
-HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getE()D
-HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getF()D
-HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getGamma()D
-HSPLandroidx/compose/ui/graphics/colorspace/WhitePoint;-><init>(FF)V
-HSPLandroidx/compose/ui/graphics/colorspace/WhitePoint;->getX()F
-HSPLandroidx/compose/ui/graphics/colorspace/WhitePoint;->getY()F
-HSPLandroidx/compose/ui/graphics/colorspace/WhitePoint;->toXyz$ui_graphics_release()[F
-HSPLandroidx/compose/ui/graphics/colorspace/Xyz;-><init>(Ljava/lang/String;I)V
-HSPLandroidx/compose/ui/graphics/colorspace/Xyz;->clamp(F)F
-HSPLandroidx/compose/ui/graphics/colorspace/Xyz;->getMaxValue(I)F
-HSPLandroidx/compose/ui/graphics/colorspace/Xyz;->getMinValue(I)F
-HSPLandroidx/compose/ui/graphics/colorspace/Xyz;->xyzaToColor-JlNiLsg$ui_graphics_release(FFFFLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;-><init>(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/graphics/Canvas;J)V
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;-><init>(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/graphics/Canvas;JILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;-><init>(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/graphics/Canvas;JLkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->component1()Landroidx/compose/ui/unit/Density;
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->component2()Landroidx/compose/ui/unit/LayoutDirection;
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->component3()Landroidx/compose/ui/graphics/Canvas;
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->component4-NH-jbRc()J
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->getCanvas()Landroidx/compose/ui/graphics/Canvas;
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->getDensity()Landroidx/compose/ui/unit/Density;
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->getSize-NH-jbRc()J
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->setCanvas(Landroidx/compose/ui/graphics/Canvas;)V
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->setDensity(Landroidx/compose/ui/unit/Density;)V
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)V
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->setSize-uvyYCjk(J)V
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;-><init>(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;)V
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->getCanvas()Landroidx/compose/ui/graphics/Canvas;
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->getSize-NH-jbRc()J
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->getTransform()Landroidx/compose/ui/graphics/drawscope/DrawTransform;
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->setSize-uvyYCjk(J)V
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;-><init>()V
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configurePaint-2qPWKa0$default(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;JLandroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;IIILjava/lang/Object;)Landroidx/compose/ui/graphics/Paint;
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configurePaint-2qPWKa0(JLandroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;II)Landroidx/compose/ui/graphics/Paint;
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configurePaint-swdJneE$default(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;Landroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;IIILjava/lang/Object;)Landroidx/compose/ui/graphics/Paint;
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configurePaint-swdJneE(Landroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;II)Landroidx/compose/ui/graphics/Paint;
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawImage-AZ2fEMs(Landroidx/compose/ui/graphics/ImageBitmap;JJJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;II)V
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawPath-GBMwjPU(Landroidx/compose/ui/graphics/Path;Landroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawPath-LG529CI(Landroidx/compose/ui/graphics/Path;JFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawRect-n-J9OG0(JJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawRoundRect-u-Aw5IA(JJJJLandroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;I)V
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->getDensity()F
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->getDrawContext()Landroidx/compose/ui/graphics/drawscope/DrawContext;
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->getDrawParams()Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->modulate-5vOe2sY(JF)J
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->obtainFillPaint()Landroidx/compose/ui/graphics/Paint;
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->selectPaint(Landroidx/compose/ui/graphics/drawscope/DrawStyle;)Landroidx/compose/ui/graphics/Paint;
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;-><init>(Landroidx/compose/ui/graphics/drawscope/DrawContext;)V
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->getSize-NH-jbRc()J
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->inset(FFFF)V
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->transform-58bKbWc([F)V
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->translate(FF)V
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt;->access$asDrawTransform(Landroidx/compose/ui/graphics/drawscope/DrawContext;)Landroidx/compose/ui/graphics/drawscope/DrawTransform;
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt;->access$getDefaultDensity$p()Landroidx/compose/ui/unit/Density;
-HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt;->asDrawTransform(Landroidx/compose/ui/graphics/drawscope/DrawContext;)Landroidx/compose/ui/graphics/drawscope/DrawTransform;
-HSPLandroidx/compose/ui/graphics/drawscope/DrawScope$Companion;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/drawscope/DrawScope$Companion;-><init>()V
-HSPLandroidx/compose/ui/graphics/drawscope/DrawScope$Companion;->getDefaultBlendMode-0nO6VwU()I
-HSPLandroidx/compose/ui/graphics/drawscope/DrawScope$Companion;->getDefaultFilterQuality-f-v9h1I()I
-HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawImage-AZ2fEMs$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/ImageBitmap;JJJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;IIILjava/lang/Object;)V
-HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawPath-GBMwjPU$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/Path;Landroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;IILjava/lang/Object;)V
-HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawRect-n-J9OG0$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;JJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;IILjava/lang/Object;)V
-HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->getSize-NH-jbRc()J
-HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->offsetSize-PENXr5M(JJ)J
-HSPLandroidx/compose/ui/graphics/drawscope/DrawStyle;-><init>()V
-HSPLandroidx/compose/ui/graphics/drawscope/DrawStyle;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/drawscope/EmptyCanvas;-><init>()V
-HSPLandroidx/compose/ui/graphics/drawscope/Fill;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/drawscope/Fill;-><init>()V
-HSPLandroidx/compose/ui/graphics/painter/BitmapPainter;-><init>(Landroidx/compose/ui/graphics/ImageBitmap;JJ)V
-HSPLandroidx/compose/ui/graphics/painter/BitmapPainter;-><init>(Landroidx/compose/ui/graphics/ImageBitmap;JJLkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/painter/BitmapPainter;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/graphics/painter/BitmapPainter;->getIntrinsicSize-NH-jbRc()J
-HSPLandroidx/compose/ui/graphics/painter/BitmapPainter;->onDraw(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V
-HSPLandroidx/compose/ui/graphics/painter/BitmapPainter;->setFilterQuality-vDHp3xo$ui_graphics_release(I)V
-HSPLandroidx/compose/ui/graphics/painter/BitmapPainter;->validateSize-N5eqBDc(JJ)J
-HSPLandroidx/compose/ui/graphics/painter/BitmapPainterKt;->BitmapPainter-QZhYCtY$default(Landroidx/compose/ui/graphics/ImageBitmap;JJIILjava/lang/Object;)Landroidx/compose/ui/graphics/painter/BitmapPainter;
-HSPLandroidx/compose/ui/graphics/painter/BitmapPainterKt;->BitmapPainter-QZhYCtY(Landroidx/compose/ui/graphics/ImageBitmap;JJI)Landroidx/compose/ui/graphics/painter/BitmapPainter;
-HSPLandroidx/compose/ui/graphics/painter/Painter$drawLambda$1;-><init>(Landroidx/compose/ui/graphics/painter/Painter;)V
-HSPLandroidx/compose/ui/graphics/painter/Painter;-><init>()V
-HSPLandroidx/compose/ui/graphics/painter/Painter;->configureAlpha(F)V
-HSPLandroidx/compose/ui/graphics/painter/Painter;->configureColorFilter(Landroidx/compose/ui/graphics/ColorFilter;)V
-HSPLandroidx/compose/ui/graphics/painter/Painter;->configureLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)V
-HSPLandroidx/compose/ui/graphics/painter/Painter;->draw-x_KDEd0(Landroidx/compose/ui/graphics/drawscope/DrawScope;JFLandroidx/compose/ui/graphics/ColorFilter;)V
-HSPLandroidx/compose/ui/graphics/vector/DrawCache;-><init>()V
-HSPLandroidx/compose/ui/graphics/vector/DrawCache;->clear(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V
-HSPLandroidx/compose/ui/graphics/vector/DrawCache;->drawCachedImage-CJJAR-o(JLandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/graphics/vector/DrawCache;->drawInto(Landroidx/compose/ui/graphics/drawscope/DrawScope;FLandroidx/compose/ui/graphics/ColorFilter;)V
-HSPLandroidx/compose/ui/graphics/vector/GroupComponent;-><init>()V
-HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->draw(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V
-HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->getInvalidateListener$ui_release()Lkotlin/jvm/functions/Function0;
-HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->getNumChildren()I
-HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->getWillClipPath()Z
-HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->insertAt(ILandroidx/compose/ui/graphics/vector/VNode;)V
-HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->remove(II)V
-HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setInvalidateListener$ui_release(Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setName(Ljava/lang/String;)V
-HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setPivotX(F)V
-HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setPivotY(F)V
-HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setScaleX(F)V
-HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setScaleY(F)V
-HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->updateClipPath()V
-HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->updateMatrix()V
-HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;-><init>(Ljava/lang/String;FFFFFFFLjava/util/List;Ljava/util/List;)V
-HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;-><init>(Ljava/lang/String;FFFFFFFLjava/util/List;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getChildren()Ljava/util/List;
-HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getClipPathData()Ljava/util/List;
-HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getName()Ljava/lang/String;
-HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getPivotX()F
-HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getPivotY()F
-HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getRotate()F
-HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getScaleX()F
-HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getScaleY()F
-HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getTranslationX()F
-HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getTranslationY()F
-HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;-><init>(Ljava/lang/String;FFFFJIZ)V
-HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;-><init>(Ljava/lang/String;FFFFJIZILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;-><init>(Ljava/lang/String;FFFFJIZLkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->addPath-oIyEayM$default(Landroidx/compose/ui/graphics/vector/ImageVector$Builder;Ljava/util/List;ILjava/lang/String;Landroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Brush;FFIIFFFFILjava/lang/Object;)Landroidx/compose/ui/graphics/vector/ImageVector$Builder;
-HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->addPath-oIyEayM(Ljava/util/List;ILjava/lang/String;Landroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Brush;FFIIFFFF)Landroidx/compose/ui/graphics/vector/ImageVector$Builder;
-HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->asVectorGroup(Landroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;)Landroidx/compose/ui/graphics/vector/VectorGroup;
-HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->build()Landroidx/compose/ui/graphics/vector/ImageVector;
-HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->ensureNotConsumed()V
-HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->getCurrentGroup()Landroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;
-HSPLandroidx/compose/ui/graphics/vector/ImageVector$Companion;-><init>()V
-HSPLandroidx/compose/ui/graphics/vector/ImageVector$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/vector/ImageVector;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/vector/ImageVector;-><init>(Ljava/lang/String;FFFFLandroidx/compose/ui/graphics/vector/VectorGroup;JIZ)V
-HSPLandroidx/compose/ui/graphics/vector/ImageVector;-><init>(Ljava/lang/String;FFFFLandroidx/compose/ui/graphics/vector/VectorGroup;JIZLkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/vector/ImageVector;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getAutoMirror()Z
-HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getDefaultHeight-D9Ej5fM()F
-HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getDefaultWidth-D9Ej5fM()F
-HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getName()Ljava/lang/String;
-HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getRoot()Landroidx/compose/ui/graphics/vector/VectorGroup;
-HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getTintBlendMode-0nO6VwU()I
-HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getTintColor-0d7_KjU()J
-HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getViewportHeight()F
-HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getViewportWidth()F
-HSPLandroidx/compose/ui/graphics/vector/ImageVectorKt;->access$peek(Ljava/util/ArrayList;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/graphics/vector/ImageVectorKt;->access$push(Ljava/util/ArrayList;Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/graphics/vector/ImageVectorKt;->peek(Ljava/util/ArrayList;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/graphics/vector/ImageVectorKt;->push(Ljava/util/ArrayList;Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/graphics/vector/PathBuilder;-><init>()V
-HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->addNode(Landroidx/compose/ui/graphics/vector/PathNode;)Landroidx/compose/ui/graphics/vector/PathBuilder;
-HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->close()Landroidx/compose/ui/graphics/vector/PathBuilder;
-HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->getNodes()Ljava/util/List;
-HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->horizontalLineTo(F)Landroidx/compose/ui/graphics/vector/PathBuilder;
-HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->horizontalLineToRelative(F)Landroidx/compose/ui/graphics/vector/PathBuilder;
-HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->lineTo(FF)Landroidx/compose/ui/graphics/vector/PathBuilder;
-HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->lineToRelative(FF)Landroidx/compose/ui/graphics/vector/PathBuilder;
-HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->moveTo(FF)Landroidx/compose/ui/graphics/vector/PathBuilder;
-HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->verticalLineTo(F)Landroidx/compose/ui/graphics/vector/PathBuilder;
-HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->verticalLineToRelative(F)Landroidx/compose/ui/graphics/vector/PathBuilder;
-HSPLandroidx/compose/ui/graphics/vector/PathComponent$pathMeasure$2;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/vector/PathComponent$pathMeasure$2;-><init>()V
-HSPLandroidx/compose/ui/graphics/vector/PathComponent;-><init>()V
-HSPLandroidx/compose/ui/graphics/vector/PathComponent;->draw(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V
-HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setFill(Landroidx/compose/ui/graphics/Brush;)V
-HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setFillAlpha(F)V
-HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setName(Ljava/lang/String;)V
-HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setPathData(Ljava/util/List;)V
-HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setPathFillType-oQ8Xj4U(I)V
-HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setStroke(Landroidx/compose/ui/graphics/Brush;)V
-HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeAlpha(F)V
-HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeLineCap-BeK7IIE(I)V
-HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeLineJoin-Ww9F2mQ(I)V
-HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeLineMiter(F)V
-HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeLineWidth(F)V
-HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setTrimPathEnd(F)V
-HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setTrimPathOffset(F)V
-HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setTrimPathStart(F)V
-HSPLandroidx/compose/ui/graphics/vector/PathComponent;->updatePath()V
-HSPLandroidx/compose/ui/graphics/vector/PathComponent;->updateRenderPath()V
-HSPLandroidx/compose/ui/graphics/vector/PathNode$Close;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/vector/PathNode$Close;-><init>()V
-HSPLandroidx/compose/ui/graphics/vector/PathNode$HorizontalTo;-><init>(F)V
-HSPLandroidx/compose/ui/graphics/vector/PathNode$HorizontalTo;->getX()F
-HSPLandroidx/compose/ui/graphics/vector/PathNode$LineTo;-><init>(FF)V
-HSPLandroidx/compose/ui/graphics/vector/PathNode$LineTo;->getX()F
-HSPLandroidx/compose/ui/graphics/vector/PathNode$LineTo;->getY()F
-HSPLandroidx/compose/ui/graphics/vector/PathNode$MoveTo;-><init>(FF)V
-HSPLandroidx/compose/ui/graphics/vector/PathNode$MoveTo;->getX()F
-HSPLandroidx/compose/ui/graphics/vector/PathNode$MoveTo;->getY()F
-HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeHorizontalTo;-><init>(F)V
-HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeHorizontalTo;->getDx()F
-HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeLineTo;-><init>(FF)V
-HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeLineTo;->getDx()F
-HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeLineTo;->getDy()F
-HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeVerticalTo;-><init>(F)V
-HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeVerticalTo;->getDy()F
-HSPLandroidx/compose/ui/graphics/vector/PathNode$VerticalTo;-><init>(F)V
-HSPLandroidx/compose/ui/graphics/vector/PathNode$VerticalTo;->getY()F
-HSPLandroidx/compose/ui/graphics/vector/PathNode;-><init>(ZZ)V
-HSPLandroidx/compose/ui/graphics/vector/PathNode;-><init>(ZZILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/vector/PathNode;-><init>(ZZLkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/vector/PathParser$PathPoint;-><init>(FF)V
-HSPLandroidx/compose/ui/graphics/vector/PathParser$PathPoint;-><init>(FFILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/vector/PathParser$PathPoint;->getX()F
-HSPLandroidx/compose/ui/graphics/vector/PathParser$PathPoint;->getY()F
-HSPLandroidx/compose/ui/graphics/vector/PathParser$PathPoint;->reset()V
-HSPLandroidx/compose/ui/graphics/vector/PathParser$PathPoint;->setX(F)V
-HSPLandroidx/compose/ui/graphics/vector/PathParser$PathPoint;->setY(F)V
-HSPLandroidx/compose/ui/graphics/vector/PathParser;-><init>()V
-HSPLandroidx/compose/ui/graphics/vector/PathParser;->addPathNodes(Ljava/util/List;)Landroidx/compose/ui/graphics/vector/PathParser;
-HSPLandroidx/compose/ui/graphics/vector/PathParser;->clear()V
-HSPLandroidx/compose/ui/graphics/vector/PathParser;->close(Landroidx/compose/ui/graphics/Path;)V
-HSPLandroidx/compose/ui/graphics/vector/PathParser;->horizontalTo(Landroidx/compose/ui/graphics/vector/PathNode$HorizontalTo;Landroidx/compose/ui/graphics/Path;)V
-HSPLandroidx/compose/ui/graphics/vector/PathParser;->lineTo(Landroidx/compose/ui/graphics/vector/PathNode$LineTo;Landroidx/compose/ui/graphics/Path;)V
-HSPLandroidx/compose/ui/graphics/vector/PathParser;->moveTo(Landroidx/compose/ui/graphics/vector/PathNode$MoveTo;Landroidx/compose/ui/graphics/Path;)V
-HSPLandroidx/compose/ui/graphics/vector/PathParser;->relativeHorizontalTo(Landroidx/compose/ui/graphics/vector/PathNode$RelativeHorizontalTo;Landroidx/compose/ui/graphics/Path;)V
-HSPLandroidx/compose/ui/graphics/vector/PathParser;->relativeLineTo(Landroidx/compose/ui/graphics/vector/PathNode$RelativeLineTo;Landroidx/compose/ui/graphics/Path;)V
-HSPLandroidx/compose/ui/graphics/vector/PathParser;->relativeVerticalTo(Landroidx/compose/ui/graphics/vector/PathNode$RelativeVerticalTo;Landroidx/compose/ui/graphics/Path;)V
-HSPLandroidx/compose/ui/graphics/vector/PathParser;->toPath(Landroidx/compose/ui/graphics/Path;)Landroidx/compose/ui/graphics/Path;
-HSPLandroidx/compose/ui/graphics/vector/PathParser;->verticalTo(Landroidx/compose/ui/graphics/vector/PathNode$VerticalTo;Landroidx/compose/ui/graphics/Path;)V
-HSPLandroidx/compose/ui/graphics/vector/VNode;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/vector/VNode;-><init>()V
-HSPLandroidx/compose/ui/graphics/vector/VNode;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/vector/VNode;->getInvalidateListener$ui_release()Lkotlin/jvm/functions/Function0;
-HSPLandroidx/compose/ui/graphics/vector/VNode;->invalidate()V
-HSPLandroidx/compose/ui/graphics/vector/VNode;->setInvalidateListener$ui_release(Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/ui/graphics/vector/VectorApplier;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorApplier;-><init>(Landroidx/compose/ui/graphics/vector/VNode;)V
-HSPLandroidx/compose/ui/graphics/vector/VectorApplier;->asGroup(Landroidx/compose/ui/graphics/vector/VNode;)Landroidx/compose/ui/graphics/vector/GroupComponent;
-HSPLandroidx/compose/ui/graphics/vector/VectorApplier;->insertBottomUp(ILandroidx/compose/ui/graphics/vector/VNode;)V
-HSPLandroidx/compose/ui/graphics/vector/VectorApplier;->insertBottomUp(ILjava/lang/Object;)V
-HSPLandroidx/compose/ui/graphics/vector/VectorApplier;->insertTopDown(ILandroidx/compose/ui/graphics/vector/VNode;)V
-HSPLandroidx/compose/ui/graphics/vector/VectorApplier;->insertTopDown(ILjava/lang/Object;)V
-HSPLandroidx/compose/ui/graphics/vector/VectorApplier;->onClear()V
-HSPLandroidx/compose/ui/graphics/vector/VectorComponent$drawVectorBlock$1;-><init>(Landroidx/compose/ui/graphics/vector/VectorComponent;)V
-HSPLandroidx/compose/ui/graphics/vector/VectorComponent$drawVectorBlock$1;->invoke(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V
-HSPLandroidx/compose/ui/graphics/vector/VectorComponent$drawVectorBlock$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/graphics/vector/VectorComponent$invalidateCallback$1;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorComponent$invalidateCallback$1;-><init>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorComponent$root$1$1;-><init>(Landroidx/compose/ui/graphics/vector/VectorComponent;)V
-HSPLandroidx/compose/ui/graphics/vector/VectorComponent$root$1$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/graphics/vector/VectorComponent$root$1$1;->invoke()V
-HSPLandroidx/compose/ui/graphics/vector/VectorComponent;-><init>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->access$doInvalidate(Landroidx/compose/ui/graphics/vector/VectorComponent;)V
-HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->doInvalidate()V
-HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->draw(Landroidx/compose/ui/graphics/drawscope/DrawScope;FLandroidx/compose/ui/graphics/ColorFilter;)V
-HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->getRoot()Landroidx/compose/ui/graphics/vector/GroupComponent;
-HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->getViewportHeight()F
-HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->getViewportWidth()F
-HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->setIntrinsicColorFilter$ui_release(Landroidx/compose/ui/graphics/ColorFilter;)V
-HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->setInvalidateCallback$ui_release(Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->setName(Ljava/lang/String;)V
-HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->setViewportHeight(F)V
-HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->setViewportWidth(F)V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$1;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$1;-><init>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$1;->invoke()Landroidx/compose/ui/graphics/vector/PathComponent;
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$10;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$10;-><init>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$10;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$10;->invoke-CSYIeUk(Landroidx/compose/ui/graphics/vector/PathComponent;I)V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$11;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$11;-><init>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$11;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;F)V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$11;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$12;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$12;-><init>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$12;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;F)V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$12;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$13;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$13;-><init>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$13;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;F)V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$13;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$14;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$14;-><init>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$14;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;F)V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$14;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;-><init>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;Ljava/lang/String;)V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$2;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$2;-><init>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$2;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;Ljava/util/List;)V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$3;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$3;-><init>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$3;->invoke-pweu1eQ(Landroidx/compose/ui/graphics/vector/PathComponent;I)V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$4;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$4;-><init>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$4;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;Landroidx/compose/ui/graphics/Brush;)V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$5;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$5;-><init>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$5;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;F)V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$6;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$6;-><init>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$6;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;Landroidx/compose/ui/graphics/Brush;)V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$6;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$7;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$7;-><init>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$7;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;F)V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$7;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$8;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$8;-><init>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$8;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;F)V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$8;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$9;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$9;-><init>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$9;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$9;->invoke-kLtJ_vA(Landroidx/compose/ui/graphics/vector/PathComponent;I)V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path-9cdaXJ4$$inlined$ComposeNode$1;-><init>(Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path-9cdaXJ4$$inlined$ComposeNode$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt;->Path-9cdaXJ4(Ljava/util/List;ILjava/lang/String;Landroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Brush;FFIIFFFFLandroidx/compose/runtime/Composer;III)V
-HSPLandroidx/compose/ui/graphics/vector/VectorConfig;->getOrDefault(Landroidx/compose/ui/graphics/vector/VectorProperty;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/graphics/vector/VectorGroup$iterator$1;-><init>(Landroidx/compose/ui/graphics/vector/VectorGroup;)V
-HSPLandroidx/compose/ui/graphics/vector/VectorGroup$iterator$1;->hasNext()Z
-HSPLandroidx/compose/ui/graphics/vector/VectorGroup$iterator$1;->next()Landroidx/compose/ui/graphics/vector/VectorNode;
-HSPLandroidx/compose/ui/graphics/vector/VectorGroup$iterator$1;->next()Ljava/lang/Object;
-HSPLandroidx/compose/ui/graphics/vector/VectorGroup;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorGroup;-><init>(Ljava/lang/String;FFFFFFFLjava/util/List;Ljava/util/List;)V
-HSPLandroidx/compose/ui/graphics/vector/VectorGroup;->access$getChildren$p(Landroidx/compose/ui/graphics/vector/VectorGroup;)Ljava/util/List;
-HSPLandroidx/compose/ui/graphics/vector/VectorGroup;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/graphics/vector/VectorGroup;->iterator()Ljava/util/Iterator;
-HSPLandroidx/compose/ui/graphics/vector/VectorKt;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorKt;->getDefaultFillType()I
-HSPLandroidx/compose/ui/graphics/vector/VectorKt;->getDefaultStrokeLineCap()I
-HSPLandroidx/compose/ui/graphics/vector/VectorKt;->getDefaultStrokeLineJoin()I
-HSPLandroidx/compose/ui/graphics/vector/VectorKt;->getEmptyPath()Ljava/util/List;
-HSPLandroidx/compose/ui/graphics/vector/VectorNode;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorNode;-><init>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorNode;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/runtime/Composition;)V
-HSPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2$invoke$$inlined$onDispose$1;->dispose()V
-HSPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2;-><init>(Landroidx/compose/runtime/Composition;)V
-HSPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;
-HSPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/graphics/vector/VectorPainter$composeVector$1;-><init>(Lkotlin/jvm/functions/Function4;Landroidx/compose/ui/graphics/vector/VectorPainter;)V
-HSPLandroidx/compose/ui/graphics/vector/VectorPainter$composeVector$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/ui/graphics/vector/VectorPainter$composeVector$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/graphics/vector/VectorPainter$vector$1$1;-><init>(Landroidx/compose/ui/graphics/vector/VectorPainter;)V
-HSPLandroidx/compose/ui/graphics/vector/VectorPainter$vector$1$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/graphics/vector/VectorPainter$vector$1$1;->invoke()V
-HSPLandroidx/compose/ui/graphics/vector/VectorPainter;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorPainter;-><init>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->RenderVector$ui_release(Ljava/lang/String;FFLkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->access$getVector$p(Landroidx/compose/ui/graphics/vector/VectorPainter;)Landroidx/compose/ui/graphics/vector/VectorComponent;
-HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->access$setDirty(Landroidx/compose/ui/graphics/vector/VectorPainter;Z)V
-HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->applyColorFilter(Landroidx/compose/ui/graphics/ColorFilter;)Z
-HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->composeVector(Landroidx/compose/runtime/CompositionContext;Lkotlin/jvm/functions/Function4;)Landroidx/compose/runtime/Composition;
-HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->getAutoMirror$ui_release()Z
-HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->getIntrinsicSize-NH-jbRc()J
-HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->getSize-NH-jbRc$ui_release()J
-HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->isDirty()Z
-HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->onDraw(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V
-HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->setAutoMirror$ui_release(Z)V
-HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->setDirty(Z)V
-HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->setIntrinsicColorFilter$ui_release(Landroidx/compose/ui/graphics/ColorFilter;)V
-HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->setSize-uvyYCjk$ui_release(J)V
-HSPLandroidx/compose/ui/graphics/vector/VectorPainterKt$RenderVectorGroup$config$1;-><init>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorPainterKt$rememberVectorPainter$3;-><init>(Landroidx/compose/ui/graphics/vector/ImageVector;)V
-HSPLandroidx/compose/ui/graphics/vector/VectorPainterKt$rememberVectorPainter$3;->invoke(FFLandroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/ui/graphics/vector/VectorPainterKt$rememberVectorPainter$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/graphics/vector/VectorPainterKt;->RenderVectorGroup(Landroidx/compose/ui/graphics/vector/VectorGroup;Ljava/util/Map;Landroidx/compose/runtime/Composer;II)V
-HSPLandroidx/compose/ui/graphics/vector/VectorPainterKt;->rememberVectorPainter(Landroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/graphics/vector/VectorPainter;
-HSPLandroidx/compose/ui/graphics/vector/VectorPainterKt;->rememberVectorPainter-vIP8VLU(FFFFLjava/lang/String;JIZLkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;II)Landroidx/compose/ui/graphics/vector/VectorPainter;
-HSPLandroidx/compose/ui/graphics/vector/VectorPath;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorPath;-><init>(Ljava/lang/String;Ljava/util/List;ILandroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Brush;FFIIFFFF)V
-HSPLandroidx/compose/ui/graphics/vector/VectorPath;-><init>(Ljava/lang/String;Ljava/util/List;ILandroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Brush;FFIIFFFFLkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getFill()Landroidx/compose/ui/graphics/Brush;
-HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getFillAlpha()F
-HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getName()Ljava/lang/String;
-HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getPathData()Ljava/util/List;
-HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getPathFillType-Rg-k1Os()I
-HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getStroke()Landroidx/compose/ui/graphics/Brush;
-HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeAlpha()F
-HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeLineCap-KaPHkGw()I
-HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeLineJoin-LxFBmk8()I
-HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeLineMiter()F
-HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeLineWidth()F
-HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getTrimPathEnd()F
-HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getTrimPathOffset()F
-HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getTrimPathStart()F
-HSPLandroidx/compose/ui/graphics/vector/VectorProperty$Fill;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorProperty$Fill;-><init>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorProperty$FillAlpha;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorProperty$FillAlpha;-><init>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorProperty$PathData;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorProperty$PathData;-><init>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorProperty$Stroke;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorProperty$Stroke;-><init>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorProperty$StrokeAlpha;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorProperty$StrokeAlpha;-><init>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorProperty$StrokeLineWidth;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorProperty$StrokeLineWidth;-><init>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathEnd;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathEnd;-><init>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathOffset;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathOffset;-><init>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathStart;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathStart;-><init>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorProperty;-><clinit>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorProperty;-><init>()V
-HSPLandroidx/compose/ui/graphics/vector/VectorProperty;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/hapticfeedback/PlatformHapticFeedback;-><init>(Landroid/view/View;)V
-HSPLandroidx/compose/ui/input/InputMode$Companion;-><init>()V
-HSPLandroidx/compose/ui/input/InputMode$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/input/InputMode$Companion;->getTouch-aOaMEAU()I
-HSPLandroidx/compose/ui/input/InputMode;-><clinit>()V
-HSPLandroidx/compose/ui/input/InputMode;-><init>(I)V
-HSPLandroidx/compose/ui/input/InputMode;->access$getTouch$cp()I
-HSPLandroidx/compose/ui/input/InputMode;->box-impl(I)Landroidx/compose/ui/input/InputMode;
-HSPLandroidx/compose/ui/input/InputMode;->constructor-impl(I)I
-HSPLandroidx/compose/ui/input/InputMode;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/input/InputMode;->equals-impl(ILjava/lang/Object;)Z
-HSPLandroidx/compose/ui/input/InputMode;->equals-impl0(II)Z
-HSPLandroidx/compose/ui/input/InputMode;->unbox-impl()I
-HSPLandroidx/compose/ui/input/InputModeManagerImpl;-><init>(ILkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/input/InputModeManagerImpl;-><init>(ILkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/input/InputModeManagerImpl;->getInputMode-aOaMEAU()I
-HSPLandroidx/compose/ui/input/InputModeManagerImpl;->setInputMode-iuPiT84(I)V
-HSPLandroidx/compose/ui/input/key/KeyInputInputModifierNodeImpl;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/input/key/KeyInputInputModifierNodeImpl;->setOnEvent(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/input/key/KeyInputModifierKt$onKeyEvent$$inlined$modifierElementOf$2;-><init>(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/input/key/KeyInputModifierKt$onKeyEvent$$inlined$modifierElementOf$2;->create()Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/input/key/KeyInputModifierKt$onKeyEvent$$inlined$modifierElementOf$2;->update(Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/input/key/KeyInputModifierKt;->onKeyEvent(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher$calculateNestedScrollScope$1;-><init>(Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)V
-HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;-><clinit>()V
-HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;-><init>()V
-HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;->setCalculateNestedScrollScope$ui_release(Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;->setOriginNestedScrollScope$ui_release(Lkotlinx/coroutines/CoroutineScope;)V
-HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;->setParent$ui_release(Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;)V
-HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierKt$nestedScroll$2;-><init>(Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;)V
-HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierKt$nestedScroll$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierKt$nestedScroll$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierKt;->nestedScroll$default(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;ILjava/lang/Object;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierKt;->nestedScroll(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal$1;-><init>(Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;)V
-HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;-><init>(Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;)V
-HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
-HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;->getParent()Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;
-HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;->getValue()Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;
-HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;->getValue()Ljava/lang/Object;
-HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V
-HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;->setParent(Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;)V
-HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocalKt$ModifierLocalNestedScroll$1;-><clinit>()V
-HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocalKt$ModifierLocalNestedScroll$1;-><init>()V
-HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocalKt$ModifierLocalNestedScroll$1;->invoke()Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;
-HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocalKt$ModifierLocalNestedScroll$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocalKt;-><clinit>()V
-HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocalKt;->getModifierLocalNestedScroll()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
-HSPLandroidx/compose/ui/input/pointer/AwaitPointerEventScope;->awaitPointerEvent$default(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Landroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/input/pointer/ConsumedData;-><clinit>()V
-HSPLandroidx/compose/ui/input/pointer/ConsumedData;-><init>(ZZ)V
-HSPLandroidx/compose/ui/input/pointer/ConsumedData;->getDownChange()Z
-HSPLandroidx/compose/ui/input/pointer/ConsumedData;->getPositionChange()Z
-HSPLandroidx/compose/ui/input/pointer/ConsumedData;->setDownChange(Z)V
-HSPLandroidx/compose/ui/input/pointer/ConsumedData;->setPositionChange(Z)V
-HSPLandroidx/compose/ui/input/pointer/HitPathTracker;-><init>(Landroidx/compose/ui/layout/LayoutCoordinates;)V
-HSPLandroidx/compose/ui/input/pointer/HitPathTracker;->addHitPath-KNwqfcY(JLjava/util/List;)V
-HSPLandroidx/compose/ui/input/pointer/HitPathTracker;->dispatchChanges(Landroidx/compose/ui/input/pointer/InternalPointerEvent;Z)Z
-HSPLandroidx/compose/ui/input/pointer/HitPathTracker;->removeDetachedPointerInputFilters()V
-HSPLandroidx/compose/ui/input/pointer/InternalPointerEvent;-><init>(Ljava/util/Map;Landroidx/compose/ui/input/pointer/PointerInputEvent;)V
-HSPLandroidx/compose/ui/input/pointer/InternalPointerEvent;->getChanges()Ljava/util/Map;
-HSPLandroidx/compose/ui/input/pointer/InternalPointerEvent;->getMotionEvent()Landroid/view/MotionEvent;
-HSPLandroidx/compose/ui/input/pointer/InternalPointerEvent;->getSuppressMovementConsumption()Z
-HSPLandroidx/compose/ui/input/pointer/InternalPointerEvent;->issuesEnterExitEvent-0FcD4WY(J)Z
-HSPLandroidx/compose/ui/input/pointer/MotionEventAdapter;-><init>()V
-HSPLandroidx/compose/ui/input/pointer/MotionEventAdapter;->addFreshIds(Landroid/view/MotionEvent;)V
-HSPLandroidx/compose/ui/input/pointer/MotionEventAdapter;->clearOnDeviceChange(Landroid/view/MotionEvent;)V
-HSPLandroidx/compose/ui/input/pointer/MotionEventAdapter;->convertToPointerInputEvent$ui_release(Landroid/view/MotionEvent;Landroidx/compose/ui/input/pointer/PositionCalculator;)Landroidx/compose/ui/input/pointer/PointerInputEvent;
-HSPLandroidx/compose/ui/input/pointer/MotionEventAdapter;->createPointerInputEventData(Landroidx/compose/ui/input/pointer/PositionCalculator;Landroid/view/MotionEvent;IZ)Landroidx/compose/ui/input/pointer/PointerInputEventData;
-HSPLandroidx/compose/ui/input/pointer/MotionEventAdapter;->getComposePointerId-_I2yYro(I)J
-HSPLandroidx/compose/ui/input/pointer/MotionEventAdapter;->removeStaleIds(Landroid/view/MotionEvent;)V
-HSPLandroidx/compose/ui/input/pointer/Node;-><init>(Landroidx/compose/ui/node/PointerInputModifierNode;)V
-HSPLandroidx/compose/ui/input/pointer/Node;->buildCache(Ljava/util/Map;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/input/pointer/InternalPointerEvent;Z)Z
-HSPLandroidx/compose/ui/input/pointer/Node;->cleanUpHits(Landroidx/compose/ui/input/pointer/InternalPointerEvent;)V
-HSPLandroidx/compose/ui/input/pointer/Node;->clearCache()V
-HSPLandroidx/compose/ui/input/pointer/Node;->dispatchFinalEventPass(Landroidx/compose/ui/input/pointer/InternalPointerEvent;)Z
-HSPLandroidx/compose/ui/input/pointer/Node;->dispatchMainEventPass(Ljava/util/Map;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/input/pointer/InternalPointerEvent;Z)Z
-HSPLandroidx/compose/ui/input/pointer/Node;->getPointerIds()Landroidx/compose/runtime/collection/MutableVector;
-HSPLandroidx/compose/ui/input/pointer/Node;->getPointerInputNode()Landroidx/compose/ui/node/PointerInputModifierNode;
-HSPLandroidx/compose/ui/input/pointer/NodeParent;-><init>()V
-HSPLandroidx/compose/ui/input/pointer/NodeParent;->buildCache(Ljava/util/Map;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/input/pointer/InternalPointerEvent;Z)Z
-HSPLandroidx/compose/ui/input/pointer/NodeParent;->cleanUpHits(Landroidx/compose/ui/input/pointer/InternalPointerEvent;)V
-HSPLandroidx/compose/ui/input/pointer/NodeParent;->dispatchFinalEventPass(Landroidx/compose/ui/input/pointer/InternalPointerEvent;)Z
-HSPLandroidx/compose/ui/input/pointer/NodeParent;->dispatchMainEventPass(Ljava/util/Map;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/input/pointer/InternalPointerEvent;Z)Z
-HSPLandroidx/compose/ui/input/pointer/NodeParent;->getChildren()Landroidx/compose/runtime/collection/MutableVector;
-HSPLandroidx/compose/ui/input/pointer/NodeParent;->removeDetachedPointerInputFilters()V
-HSPLandroidx/compose/ui/input/pointer/PointerButtons;->constructor-impl(I)I
-HSPLandroidx/compose/ui/input/pointer/PointerEvent;-><clinit>()V
-HSPLandroidx/compose/ui/input/pointer/PointerEvent;-><init>(Ljava/util/List;)V
-HSPLandroidx/compose/ui/input/pointer/PointerEvent;-><init>(Ljava/util/List;Landroidx/compose/ui/input/pointer/InternalPointerEvent;)V
-HSPLandroidx/compose/ui/input/pointer/PointerEvent;->calculatePointerEventType-7fucELk()I
-HSPLandroidx/compose/ui/input/pointer/PointerEvent;->getChanges()Ljava/util/List;
-HSPLandroidx/compose/ui/input/pointer/PointerEvent;->getMotionEvent$ui_release()Landroid/view/MotionEvent;
-HSPLandroidx/compose/ui/input/pointer/PointerEvent;->getType-7fucELk()I
-HSPLandroidx/compose/ui/input/pointer/PointerEventKt;->changedToDown(Landroidx/compose/ui/input/pointer/PointerInputChange;)Z
-HSPLandroidx/compose/ui/input/pointer/PointerEventKt;->changedToDownIgnoreConsumed(Landroidx/compose/ui/input/pointer/PointerInputChange;)Z
-HSPLandroidx/compose/ui/input/pointer/PointerEventKt;->changedToUp(Landroidx/compose/ui/input/pointer/PointerInputChange;)Z
-HSPLandroidx/compose/ui/input/pointer/PointerEventKt;->changedToUpIgnoreConsumed(Landroidx/compose/ui/input/pointer/PointerInputChange;)Z
-HSPLandroidx/compose/ui/input/pointer/PointerEventKt;->positionChangeInternal(Landroidx/compose/ui/input/pointer/PointerInputChange;Z)J
-HSPLandroidx/compose/ui/input/pointer/PointerEventKt;->positionChangedIgnoreConsumed(Landroidx/compose/ui/input/pointer/PointerInputChange;)Z
-HSPLandroidx/compose/ui/input/pointer/PointerEventPass;->$values()[Landroidx/compose/ui/input/pointer/PointerEventPass;
-HSPLandroidx/compose/ui/input/pointer/PointerEventPass;-><clinit>()V
-HSPLandroidx/compose/ui/input/pointer/PointerEventPass;-><init>(Ljava/lang/String;I)V
-HSPLandroidx/compose/ui/input/pointer/PointerEventPass;->values()[Landroidx/compose/ui/input/pointer/PointerEventPass;
-HSPLandroidx/compose/ui/input/pointer/PointerEventType$Companion;-><init>()V
-HSPLandroidx/compose/ui/input/pointer/PointerEventType$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/input/pointer/PointerEventType$Companion;->getEnter-7fucELk()I
-HSPLandroidx/compose/ui/input/pointer/PointerEventType$Companion;->getExit-7fucELk()I
-HSPLandroidx/compose/ui/input/pointer/PointerEventType$Companion;->getMove-7fucELk()I
-HSPLandroidx/compose/ui/input/pointer/PointerEventType$Companion;->getPress-7fucELk()I
-HSPLandroidx/compose/ui/input/pointer/PointerEventType$Companion;->getRelease-7fucELk()I
-HSPLandroidx/compose/ui/input/pointer/PointerEventType;-><clinit>()V
-HSPLandroidx/compose/ui/input/pointer/PointerEventType;->access$getEnter$cp()I
-HSPLandroidx/compose/ui/input/pointer/PointerEventType;->access$getExit$cp()I
-HSPLandroidx/compose/ui/input/pointer/PointerEventType;->access$getMove$cp()I
-HSPLandroidx/compose/ui/input/pointer/PointerEventType;->access$getPress$cp()I
-HSPLandroidx/compose/ui/input/pointer/PointerEventType;->access$getRelease$cp()I
-HSPLandroidx/compose/ui/input/pointer/PointerEventType;->constructor-impl(I)I
-HSPLandroidx/compose/ui/input/pointer/PointerEventType;->equals-impl0(II)Z
-HSPLandroidx/compose/ui/input/pointer/PointerEvent_androidKt;->EmptyPointerKeyboardModifiers()I
-HSPLandroidx/compose/ui/input/pointer/PointerId;-><init>(J)V
-HSPLandroidx/compose/ui/input/pointer/PointerId;->box-impl(J)Landroidx/compose/ui/input/pointer/PointerId;
-HSPLandroidx/compose/ui/input/pointer/PointerId;->constructor-impl(J)J
-HSPLandroidx/compose/ui/input/pointer/PointerId;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/input/pointer/PointerId;->equals-impl(JLjava/lang/Object;)Z
-HSPLandroidx/compose/ui/input/pointer/PointerId;->equals-impl0(JJ)Z
-HSPLandroidx/compose/ui/input/pointer/PointerId;->hashCode()I
-HSPLandroidx/compose/ui/input/pointer/PointerId;->hashCode-impl(J)I
-HSPLandroidx/compose/ui/input/pointer/PointerId;->unbox-impl()J
-HSPLandroidx/compose/ui/input/pointer/PointerInputChange;-><clinit>()V
-HSPLandroidx/compose/ui/input/pointer/PointerInputChange;-><init>(JJJZFJJZZIJ)V
-HSPLandroidx/compose/ui/input/pointer/PointerInputChange;-><init>(JJJZFJJZZIJLkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/input/pointer/PointerInputChange;-><init>(JJJZFJJZZILjava/util/List;J)V
-HSPLandroidx/compose/ui/input/pointer/PointerInputChange;-><init>(JJJZFJJZZILjava/util/List;JLkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/input/pointer/PointerInputChange;-><init>(JJJZJJZZIJ)V
-HSPLandroidx/compose/ui/input/pointer/PointerInputChange;-><init>(JJJZJJZZIJLkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->consume()V
-HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->copy-OHpmEuE$default(Landroidx/compose/ui/input/pointer/PointerInputChange;JJJZJJZILjava/util/List;JILjava/lang/Object;)Landroidx/compose/ui/input/pointer/PointerInputChange;
-HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->copy-OHpmEuE(JJJZJJZILjava/util/List;J)Landroidx/compose/ui/input/pointer/PointerInputChange;
-HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getHistorical()Ljava/util/List;
-HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getId-J3iCeTQ()J
-HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getPosition-F1C5BW0()J
-HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getPressed()Z
-HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getPressure()F
-HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getPreviousPosition-F1C5BW0()J
-HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getPreviousPressed()Z
-HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getType-T8wyACA()I
-HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getUptimeMillis()J
-HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->isConsumed()Z
-HSPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData;-><init>(JJZI)V
-HSPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData;-><init>(JJZILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData;->getDown()Z
-HSPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData;->getPositionOnScreen-F1C5BW0()J
-HSPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData;->getUptime()J
-HSPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer;-><init>()V
-HSPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer;->produce(Landroidx/compose/ui/input/pointer/PointerInputEvent;Landroidx/compose/ui/input/pointer/PositionCalculator;)Landroidx/compose/ui/input/pointer/InternalPointerEvent;
-HSPLandroidx/compose/ui/input/pointer/PointerInputEvent;-><init>(JLjava/util/List;Landroid/view/MotionEvent;)V
-HSPLandroidx/compose/ui/input/pointer/PointerInputEvent;->getMotionEvent()Landroid/view/MotionEvent;
-HSPLandroidx/compose/ui/input/pointer/PointerInputEvent;->getPointers()Ljava/util/List;
-HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;-><init>(JJJJZFIZLjava/util/List;J)V
-HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;-><init>(JJJJZFIZLjava/util/List;JLkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getDown()Z
-HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getHistorical()Ljava/util/List;
-HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getId-J3iCeTQ()J
-HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getIssuesEnterExit()Z
-HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getPosition-F1C5BW0()J
-HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getPositionOnScreen-F1C5BW0()J
-HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getPressure()F
-HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getScrollDelta-F1C5BW0()J
-HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getType-T8wyACA()I
-HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getUptime()J
-HSPLandroidx/compose/ui/input/pointer/PointerInputEventProcessor;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/input/pointer/PointerInputEventProcessor;->process-BIzXfog(Landroidx/compose/ui/input/pointer/PointerInputEvent;Landroidx/compose/ui/input/pointer/PositionCalculator;Z)I
-HSPLandroidx/compose/ui/input/pointer/PointerInputEventProcessorKt;->ProcessResult(ZZ)I
-HSPLandroidx/compose/ui/input/pointer/PointerInputFilter;-><clinit>()V
-HSPLandroidx/compose/ui/input/pointer/PointerInputFilter;-><init>()V
-HSPLandroidx/compose/ui/input/pointer/PointerInputFilter;->getShareWithSiblings()Z
-HSPLandroidx/compose/ui/input/pointer/PointerInputFilter;->getSize-YbymL2g()J
-HSPLandroidx/compose/ui/input/pointer/PointerInputFilter;->setLayoutCoordinates$ui_release(Landroidx/compose/ui/layout/LayoutCoordinates;)V
-HSPLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;-><init>(I)V
-HSPLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;->box-impl(I)Landroidx/compose/ui/input/pointer/PointerKeyboardModifiers;
-HSPLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;->constructor-impl(I)I
-HSPLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;->equals-impl(ILjava/lang/Object;)Z
-HSPLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;->unbox-impl()I
-HSPLandroidx/compose/ui/input/pointer/PointerType$Companion;-><init>()V
-HSPLandroidx/compose/ui/input/pointer/PointerType$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/input/pointer/PointerType$Companion;->getMouse-T8wyACA()I
-HSPLandroidx/compose/ui/input/pointer/PointerType$Companion;->getTouch-T8wyACA()I
-HSPLandroidx/compose/ui/input/pointer/PointerType;-><clinit>()V
-HSPLandroidx/compose/ui/input/pointer/PointerType;->access$getMouse$cp()I
-HSPLandroidx/compose/ui/input/pointer/PointerType;->access$getTouch$cp()I
-HSPLandroidx/compose/ui/input/pointer/PointerType;->constructor-impl(I)I
-HSPLandroidx/compose/ui/input/pointer/PointerType;->equals-impl0(II)Z
-HSPLandroidx/compose/ui/input/pointer/ProcessResult;->constructor-impl(I)I
-HSPLandroidx/compose/ui/input/pointer/ProcessResult;->getAnyMovementConsumed-impl(I)Z
-HSPLandroidx/compose/ui/input/pointer/ProcessResult;->getDispatchedToAPointerInputModifier-impl(I)Z
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;-><init>(Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;->access$setAwaitPass$p(Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;Landroidx/compose/ui/input/pointer/PointerEventPass;)V
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;->access$setPointerAwaiter$p(Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;Lkotlinx/coroutines/CancellableContinuation;)V
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;->awaitPointerEvent(Landroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;->cancel(Ljava/lang/Throwable;)V
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;->getContext()Lkotlin/coroutines/CoroutineContext;
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;->getCurrentEvent()Landroidx/compose/ui/input/pointer/PointerEvent;
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;->getViewConfiguration()Landroidx/compose/ui/platform/ViewConfiguration;
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;->offerPointerEvent(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;)V
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;->resumeWith(Ljava/lang/Object;)V
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$WhenMappings;-><clinit>()V
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$awaitPointerEventScope$2$2;-><init>(Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;)V
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$awaitPointerEventScope$2$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$awaitPointerEventScope$2$2;->invoke(Ljava/lang/Throwable;)V
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;-><init>(Landroidx/compose/ui/platform/ViewConfiguration;Landroidx/compose/ui/unit/Density;)V
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;->access$getCurrentEvent$p(Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;)Landroidx/compose/ui/input/pointer/PointerEvent;
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;->access$getPointerHandlers$p(Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;)Landroidx/compose/runtime/collection/MutableVector;
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;->awaitPointerEventScope(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;->dispatchPointerEvent(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;)V
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;->getPointerInputFilter()Landroidx/compose/ui/input/pointer/PointerInputFilter;
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;->getViewConfiguration()Landroidx/compose/ui/platform/ViewConfiguration;
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;->onPointerEvent-H0pRuoY(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;J)V
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;->setCoroutineScope(Lkotlinx/coroutines/CoroutineScope;)V
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$2$2$1;-><init>(Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$2$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$2$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$2;-><init>(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$4$2$1;-><init>(Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$4$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$4$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$4;-><init>(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$4;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$6$2$1;-><init>(Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$6$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$6$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$6;-><init>([Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$6;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$6;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;-><clinit>()V
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;->access$getEmptyPointerEvent$p()Landroidx/compose/ui/input/pointer/PointerEvent;
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;->pointerInput(Landroidx/compose/ui/Modifier;Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;->pointerInput(Landroidx/compose/ui/Modifier;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;->pointerInput(Landroidx/compose/ui/Modifier;[Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/input/pointer/util/DataPointAtTime;-><init>(JF)V
-HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D$Strategy;->$values()[Landroidx/compose/ui/input/pointer/util/VelocityTracker1D$Strategy;
-HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D$Strategy;-><clinit>()V
-HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D$Strategy;-><init>(Ljava/lang/String;I)V
-HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D$Strategy;->values()[Landroidx/compose/ui/input/pointer/util/VelocityTracker1D$Strategy;
-HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D$WhenMappings;-><clinit>()V
-HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D;-><clinit>()V
-HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D;-><init>(ZLandroidx/compose/ui/input/pointer/util/VelocityTracker1D$Strategy;)V
-HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D;-><init>(ZLandroidx/compose/ui/input/pointer/util/VelocityTracker1D$Strategy;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D;->addDataPoint(JF)V
-HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D;->resetTracking()V
-HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker;-><clinit>()V
-HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker;-><init>()V
-HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker;->addPosition-Uv8p0NA(JJ)V
-HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker;->getCurrentPointerPositionAccumulator-F1C5BW0$ui_release()J
-HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker;->resetTracking()V
-HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker;->setCurrentPointerPositionAccumulator-k-4lQ0M$ui_release(J)V
-HSPLandroidx/compose/ui/input/pointer/util/VelocityTrackerKt;->access$set([Landroidx/compose/ui/input/pointer/util/DataPointAtTime;IJF)V
-HSPLandroidx/compose/ui/input/pointer/util/VelocityTrackerKt;->addPointerInputChange(Landroidx/compose/ui/input/pointer/util/VelocityTracker;Landroidx/compose/ui/input/pointer/PointerInputChange;)V
-HSPLandroidx/compose/ui/input/pointer/util/VelocityTrackerKt;->set([Landroidx/compose/ui/input/pointer/util/DataPointAtTime;IJF)V
-HSPLandroidx/compose/ui/input/rotary/RotaryInputModifierKt$onRotaryScrollEvent$$inlined$modifierElementOf$2;-><init>(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/input/rotary/RotaryInputModifierKt$onRotaryScrollEvent$$inlined$modifierElementOf$2;->create()Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/input/rotary/RotaryInputModifierKt;->onRotaryScrollEvent(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/input/rotary/RotaryInputModifierNodeImpl;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/layout/AlignmentLine$Companion;-><init>()V
-HSPLandroidx/compose/ui/layout/AlignmentLine$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/layout/AlignmentLine;-><clinit>()V
-HSPLandroidx/compose/ui/layout/AlignmentLine;-><init>(Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/ui/layout/AlignmentLine;-><init>(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/layout/AlignmentLineKt$FirstBaseline$1;-><clinit>()V
-HSPLandroidx/compose/ui/layout/AlignmentLineKt$FirstBaseline$1;-><init>()V
-HSPLandroidx/compose/ui/layout/AlignmentLineKt$LastBaseline$1;-><clinit>()V
-HSPLandroidx/compose/ui/layout/AlignmentLineKt$LastBaseline$1;-><init>()V
-HSPLandroidx/compose/ui/layout/AlignmentLineKt;-><clinit>()V
-HSPLandroidx/compose/ui/layout/AlignmentLineKt;->getFirstBaseline()Landroidx/compose/ui/layout/HorizontalAlignmentLine;
-HSPLandroidx/compose/ui/layout/AlignmentLineKt;->getLastBaseline()Landroidx/compose/ui/layout/HorizontalAlignmentLine;
-HSPLandroidx/compose/ui/layout/BeyondBoundsLayoutKt$ModifierLocalBeyondBoundsLayout$1;-><clinit>()V
-HSPLandroidx/compose/ui/layout/BeyondBoundsLayoutKt$ModifierLocalBeyondBoundsLayout$1;-><init>()V
-HSPLandroidx/compose/ui/layout/BeyondBoundsLayoutKt;-><clinit>()V
-HSPLandroidx/compose/ui/layout/BeyondBoundsLayoutKt;->getModifierLocalBeyondBoundsLayout()Landroidx/compose/ui/modifier/ProvidableModifierLocal;
-HSPLandroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt$lambda-1$1;-><clinit>()V
-HSPLandroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt$lambda-1$1;-><init>()V
-HSPLandroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt;-><clinit>()V
-HSPLandroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt;-><init>()V
-HSPLandroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt;->getLambda-1$ui_release()Lkotlin/jvm/functions/Function2;
-HSPLandroidx/compose/ui/layout/ContentScale$Companion$Crop$1;-><init>()V
-HSPLandroidx/compose/ui/layout/ContentScale$Companion$FillBounds$1;-><init>()V
-HSPLandroidx/compose/ui/layout/ContentScale$Companion$FillHeight$1;-><init>()V
-HSPLandroidx/compose/ui/layout/ContentScale$Companion$FillWidth$1;-><init>()V
-HSPLandroidx/compose/ui/layout/ContentScale$Companion$Fit$1;-><init>()V
-HSPLandroidx/compose/ui/layout/ContentScale$Companion$Fit$1;->computeScaleFactor-H7hwNQA(JJ)J
-HSPLandroidx/compose/ui/layout/ContentScale$Companion$Inside$1;-><init>()V
-HSPLandroidx/compose/ui/layout/ContentScale$Companion;-><clinit>()V
-HSPLandroidx/compose/ui/layout/ContentScale$Companion;-><init>()V
-HSPLandroidx/compose/ui/layout/ContentScale$Companion;->getFit()Landroidx/compose/ui/layout/ContentScale;
-HSPLandroidx/compose/ui/layout/ContentScale;-><clinit>()V
-HSPLandroidx/compose/ui/layout/ContentScaleKt;->access$computeFillMinDimension-iLBOSCw(JJ)F
-HSPLandroidx/compose/ui/layout/ContentScaleKt;->computeFillHeight-iLBOSCw(JJ)F
-HSPLandroidx/compose/ui/layout/ContentScaleKt;->computeFillMinDimension-iLBOSCw(JJ)F
-HSPLandroidx/compose/ui/layout/ContentScaleKt;->computeFillWidth-iLBOSCw(JJ)F
-HSPLandroidx/compose/ui/layout/FixedScale;-><clinit>()V
-HSPLandroidx/compose/ui/layout/FixedScale;-><init>(F)V
-HSPLandroidx/compose/ui/layout/HorizontalAlignmentLine;-><clinit>()V
-HSPLandroidx/compose/ui/layout/HorizontalAlignmentLine;-><init>(Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/ui/layout/LayoutId;-><init>(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/layout/LayoutId;->getLayoutId()Ljava/lang/Object;
-HSPLandroidx/compose/ui/layout/LayoutId;->modifyParentData(Landroidx/compose/ui/unit/Density;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/layout/LayoutIdKt;->getLayoutId(Landroidx/compose/ui/layout/Measurable;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/layout/LayoutIdKt;->layoutId(Landroidx/compose/ui/Modifier;Ljava/lang/Object;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/layout/LayoutKt$materializerOf$1;-><init>(Landroidx/compose/ui/Modifier;)V
-HSPLandroidx/compose/ui/layout/LayoutKt$materializerOf$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/layout/LayoutKt$materializerOf$1;->invoke-Deg8D_g(Landroidx/compose/runtime/Composer;Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/ui/layout/LayoutKt;->materializerOf(Landroidx/compose/ui/Modifier;)Lkotlin/jvm/functions/Function3;
-HSPLandroidx/compose/ui/layout/LayoutModifierImpl;-><init>(Lkotlin/jvm/functions/Function3;)V
-HSPLandroidx/compose/ui/layout/LayoutModifierImpl;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/ui/layout/LayoutModifierKt$layout$$inlined$modifierElementOf$2;-><init>(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;)V
-HSPLandroidx/compose/ui/layout/LayoutModifierKt$layout$$inlined$modifierElementOf$2;->create()Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/layout/LayoutModifierKt;->layout(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;-><init>(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composition;)V
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;-><init>(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composition;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->getActive()Z
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->getComposition()Landroidx/compose/runtime/Composition;
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->getContent()Lkotlin/jvm/functions/Function2;
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->getForceRecompose()Z
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->setComposition(Landroidx/compose/runtime/Composition;)V
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->setContent(Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->setForceRecompose(Z)V
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;-><init>(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)V
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->getDensity()F
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->setDensity(F)V
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->setFontScale(F)V
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)V
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->subcompose(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/util/List;
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure$1;-><init>(Landroidx/compose/ui/layout/MeasureResult;Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;I)V
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure$1;->getAlignmentLines()Ljava/util/Map;
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure$1;->getHeight()I
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure$1;->getWidth()I
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure$1;->placeChildren()V
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1;-><init>(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;Lkotlin/jvm/functions/Function2;Ljava/lang/String;)V
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$subcompose$3$1$1;-><init>(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$subcompose$3$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$subcompose$3$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;-><init>(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy;)V
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->access$getCurrentIndex$p(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)I
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->access$getScope$p(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->access$setCurrentIndex$p(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;I)V
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->createMeasurePolicy(Lkotlin/jvm/functions/Function2;)Landroidx/compose/ui/layout/MeasurePolicy;
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->createNodeAt(I)Landroidx/compose/ui/node/LayoutNode;
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->disposeCurrentNodes()V
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->disposeOrReuseStartingFromIndex(I)V
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->forceRecomposeChildren()V
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->makeSureStateIsConsistent()V
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->setCompositionContext(Landroidx/compose/runtime/CompositionContext;)V
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->setSlotReusePolicy(Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy;)V
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->subcompose(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;)V
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->subcompose(Landroidx/compose/ui/node/LayoutNode;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->subcompose(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/util/List;
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->subcomposeInto(Landroidx/compose/runtime/Composition;Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/runtime/CompositionContext;Lkotlin/jvm/functions/Function2;)Landroidx/compose/runtime/Composition;
-HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->takeNodeFromReusables(Ljava/lang/Object;)Landroidx/compose/ui/node/LayoutNode;
-HSPLandroidx/compose/ui/layout/MeasureScope$layout$1;-><init>(IILjava/util/Map;Landroidx/compose/ui/layout/MeasureScope;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/layout/MeasureScope$layout$1;->getAlignmentLines()Ljava/util/Map;
-HSPLandroidx/compose/ui/layout/MeasureScope$layout$1;->getHeight()I
-HSPLandroidx/compose/ui/layout/MeasureScope$layout$1;->getWidth()I
-HSPLandroidx/compose/ui/layout/MeasureScope$layout$1;->placeChildren()V
-HSPLandroidx/compose/ui/layout/MeasureScope;->layout$default(Landroidx/compose/ui/layout/MeasureScope;IILjava/util/Map;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/ui/layout/MeasureScope;->layout(IILjava/util/Map;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/ui/layout/NoOpSubcomposeSlotReusePolicy;-><clinit>()V
-HSPLandroidx/compose/ui/layout/NoOpSubcomposeSlotReusePolicy;-><init>()V
-HSPLandroidx/compose/ui/layout/OnGloballyPositionedModifierImpl;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/layout/OnGloballyPositionedModifierImpl;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/layout/OnGloballyPositionedModifierImpl;->onGloballyPositioned(Landroidx/compose/ui/layout/LayoutCoordinates;)V
-HSPLandroidx/compose/ui/layout/OnGloballyPositionedModifierKt;->onGloballyPositioned(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/layout/OnRemeasuredModifierKt;->onSizeChanged(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/layout/OnSizeChangedModifier;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/layout/OnSizeChangedModifier;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/layout/OnSizeChangedModifier;->onRemeasured-ozmzZPI(J)V
-HSPLandroidx/compose/ui/layout/PinnableContainerKt$LocalPinnableContainer$1;-><clinit>()V
-HSPLandroidx/compose/ui/layout/PinnableContainerKt$LocalPinnableContainer$1;-><init>()V
-HSPLandroidx/compose/ui/layout/PinnableContainerKt$LocalPinnableContainer$1;->invoke()Landroidx/compose/ui/layout/PinnableContainer;
-HSPLandroidx/compose/ui/layout/PinnableContainerKt$LocalPinnableContainer$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/layout/PinnableContainerKt;-><clinit>()V
-HSPLandroidx/compose/ui/layout/PinnableContainerKt;->getLocalPinnableContainer()Landroidx/compose/runtime/ProvidableCompositionLocal;
-HSPLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;-><init>()V
-HSPLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;->access$configureForPlacingForAlignment(Landroidx/compose/ui/layout/Placeable$PlacementScope$Companion;Landroidx/compose/ui/node/LookaheadCapablePlaceable;)Z
-HSPLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;->access$getParentLayoutDirection(Landroidx/compose/ui/layout/Placeable$PlacementScope$Companion;)Landroidx/compose/ui/unit/LayoutDirection;
-HSPLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;->access$getParentWidth(Landroidx/compose/ui/layout/Placeable$PlacementScope$Companion;)I
-HSPLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;->configureForPlacingForAlignment(Landroidx/compose/ui/node/LookaheadCapablePlaceable;)Z
-HSPLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;->getParentLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;
-HSPLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;->getParentWidth()I
-HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;-><clinit>()V
-HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;-><init>()V
-HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$getLayoutDelegate$cp()Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;
-HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$getParentLayoutDirection$cp()Landroidx/compose/ui/unit/LayoutDirection;
-HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$getParentLayoutDirection(Landroidx/compose/ui/layout/Placeable$PlacementScope;)Landroidx/compose/ui/unit/LayoutDirection;
-HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$getParentWidth$cp()I
-HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$get_coordinates$cp()Landroidx/compose/ui/layout/LayoutCoordinates;
-HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$setLayoutDelegate$cp(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)V
-HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$setParentLayoutDirection$cp(Landroidx/compose/ui/unit/LayoutDirection;)V
-HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$setParentWidth$cp(I)V
-HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$set_coordinates$cp(Landroidx/compose/ui/layout/LayoutCoordinates;)V
-HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->place$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;IIFILjava/lang/Object;)V
-HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->place(Landroidx/compose/ui/layout/Placeable;IIF)V
-HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->place-70tqf50$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;JFILjava/lang/Object;)V
-HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->place-70tqf50(Landroidx/compose/ui/layout/Placeable;JF)V
-HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeRelative$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;IIFILjava/lang/Object;)V
-HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeRelative(Landroidx/compose/ui/layout/Placeable;IIF)V
-HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeRelativeWithLayer$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;IIFLkotlin/jvm/functions/Function1;ILjava/lang/Object;)V
-HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeRelativeWithLayer(Landroidx/compose/ui/layout/Placeable;IIFLkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;IIFLkotlin/jvm/functions/Function1;ILjava/lang/Object;)V
-HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer(Landroidx/compose/ui/layout/Placeable;IIFLkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer-aW-9-wM$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;JFLkotlin/jvm/functions/Function1;ILjava/lang/Object;)V
-HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer-aW-9-wM(Landroidx/compose/ui/layout/Placeable;JFLkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/layout/Placeable;-><clinit>()V
-HSPLandroidx/compose/ui/layout/Placeable;-><init>()V
-HSPLandroidx/compose/ui/layout/Placeable;->access$getApparentToRealOffset-nOcc-ac(Landroidx/compose/ui/layout/Placeable;)J
-HSPLandroidx/compose/ui/layout/Placeable;->access$placeAt-f8xVGno(Landroidx/compose/ui/layout/Placeable;JFLkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/layout/Placeable;->getApparentToRealOffset-nOcc-ac()J
-HSPLandroidx/compose/ui/layout/Placeable;->getHeight()I
-HSPLandroidx/compose/ui/layout/Placeable;->getMeasuredHeight()I
-HSPLandroidx/compose/ui/layout/Placeable;->getMeasuredSize-YbymL2g()J
-HSPLandroidx/compose/ui/layout/Placeable;->getMeasuredWidth()I
-HSPLandroidx/compose/ui/layout/Placeable;->getMeasurementConstraints-msEJaDk()J
-HSPLandroidx/compose/ui/layout/Placeable;->getWidth()I
-HSPLandroidx/compose/ui/layout/Placeable;->recalculateWidthAndHeight()V
-HSPLandroidx/compose/ui/layout/Placeable;->setMeasuredSize-ozmzZPI(J)V
-HSPLandroidx/compose/ui/layout/Placeable;->setMeasurementConstraints-BRTryo0(J)V
-HSPLandroidx/compose/ui/layout/PlaceableKt$DefaultLayerBlock$1;-><clinit>()V
-HSPLandroidx/compose/ui/layout/PlaceableKt$DefaultLayerBlock$1;-><init>()V
-HSPLandroidx/compose/ui/layout/PlaceableKt$DefaultLayerBlock$1;->invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)V
-HSPLandroidx/compose/ui/layout/PlaceableKt$DefaultLayerBlock$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/layout/PlaceableKt;-><clinit>()V
-HSPLandroidx/compose/ui/layout/PlaceableKt;->access$getDefaultConstraints$p()J
-HSPLandroidx/compose/ui/layout/PlaceableKt;->access$getDefaultLayerBlock$p()Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/ui/layout/RootMeasurePolicy$measure$2;-><init>(Landroidx/compose/ui/layout/Placeable;)V
-HSPLandroidx/compose/ui/layout/RootMeasurePolicy$measure$2;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
-HSPLandroidx/compose/ui/layout/RootMeasurePolicy$measure$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/layout/RootMeasurePolicy;-><clinit>()V
-HSPLandroidx/compose/ui/layout/RootMeasurePolicy;-><init>()V
-HSPLandroidx/compose/ui/layout/RootMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/ui/layout/ScaleFactor$Companion;-><init>()V
-HSPLandroidx/compose/ui/layout/ScaleFactor$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/layout/ScaleFactor;-><clinit>()V
-HSPLandroidx/compose/ui/layout/ScaleFactor;->constructor-impl(J)J
-HSPLandroidx/compose/ui/layout/ScaleFactor;->getScaleX-impl(J)F
-HSPLandroidx/compose/ui/layout/ScaleFactor;->getScaleY-impl(J)F
-HSPLandroidx/compose/ui/layout/ScaleFactorKt;->ScaleFactor(FF)J
-HSPLandroidx/compose/ui/layout/ScaleFactorKt;->times-UQTWf7w(JJ)J
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$$inlined$ComposeNode$1;-><init>(Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$$inlined$ComposeNode$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$4;-><init>(Landroidx/compose/ui/layout/SubcomposeLayoutState;)V
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$4;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$4;->invoke()V
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/runtime/State;)V
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1$invoke$$inlined$onDispose$1;->dispose()V
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1;-><init>(Landroidx/compose/runtime/State;)V
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$6;-><init>(Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;II)V
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt;->SubcomposeLayout(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt;->SubcomposeLayout(Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setCompositionContext$1;-><init>(Landroidx/compose/ui/layout/SubcomposeLayoutState;)V
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setCompositionContext$1;->invoke(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/runtime/CompositionContext;)V
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setCompositionContext$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setMeasurePolicy$1;-><init>(Landroidx/compose/ui/layout/SubcomposeLayoutState;)V
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setMeasurePolicy$1;->invoke(Landroidx/compose/ui/node/LayoutNode;Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setMeasurePolicy$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setRoot$1;-><init>(Landroidx/compose/ui/layout/SubcomposeLayoutState;)V
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setRoot$1;->invoke(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/layout/SubcomposeLayoutState;)V
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setRoot$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;-><clinit>()V
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;-><init>()V
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;-><init>(Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy;)V
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->access$getSlotReusePolicy$p(Landroidx/compose/ui/layout/SubcomposeLayoutState;)Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy;
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->access$getState(Landroidx/compose/ui/layout/SubcomposeLayoutState;)Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->access$set_state$p(Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)V
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->disposeCurrentNodes$ui_release()V
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->forceRecomposeChildren$ui_release()V
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->getSetCompositionContext$ui_release()Lkotlin/jvm/functions/Function2;
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->getSetMeasurePolicy$ui_release()Lkotlin/jvm/functions/Function2;
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->getSetRoot$ui_release()Lkotlin/jvm/functions/Function2;
-HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->getState()Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;
-HSPLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;-><clinit>()V
-HSPLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;-><init>(Ljava/util/Set;)V
-HSPLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;-><init>(Ljava/util/Set;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/modifier/BackwardsCompatLocalMap;-><init>(Landroidx/compose/ui/modifier/ModifierLocalProvider;)V
-HSPLandroidx/compose/ui/modifier/BackwardsCompatLocalMap;->contains$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;)Z
-HSPLandroidx/compose/ui/modifier/BackwardsCompatLocalMap;->get$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/modifier/EmptyMap;-><clinit>()V
-HSPLandroidx/compose/ui/modifier/EmptyMap;-><init>()V
-HSPLandroidx/compose/ui/modifier/EmptyMap;->contains$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;)Z
-HSPLandroidx/compose/ui/modifier/ModifierLocal;-><clinit>()V
-HSPLandroidx/compose/ui/modifier/ModifierLocal;-><init>(Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/ui/modifier/ModifierLocal;-><init>(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/modifier/ModifierLocal;->getDefaultFactory$ui_release()Lkotlin/jvm/functions/Function0;
-HSPLandroidx/compose/ui/modifier/ModifierLocalKt;->modifierLocalOf(Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/modifier/ProvidableModifierLocal;
-HSPLandroidx/compose/ui/modifier/ModifierLocalManager$invalidate$1;-><init>(Landroidx/compose/ui/modifier/ModifierLocalManager;)V
-HSPLandroidx/compose/ui/modifier/ModifierLocalManager$invalidate$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/modifier/ModifierLocalManager$invalidate$1;->invoke()V
-HSPLandroidx/compose/ui/modifier/ModifierLocalManager;-><init>(Landroidx/compose/ui/node/Owner;)V
-HSPLandroidx/compose/ui/modifier/ModifierLocalManager;->invalidate()V
-HSPLandroidx/compose/ui/modifier/ModifierLocalManager;->removedProvider(Landroidx/compose/ui/node/BackwardsCompatNode;Landroidx/compose/ui/modifier/ModifierLocal;)V
-HSPLandroidx/compose/ui/modifier/ModifierLocalManager;->triggerUpdates()V
-HSPLandroidx/compose/ui/modifier/ModifierLocalMap;-><clinit>()V
-HSPLandroidx/compose/ui/modifier/ModifierLocalMap;-><init>()V
-HSPLandroidx/compose/ui/modifier/ModifierLocalMap;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/modifier/ModifierLocalNode;->getProvidedValues()Landroidx/compose/ui/modifier/ModifierLocalMap;
-HSPLandroidx/compose/ui/modifier/ModifierLocalNodeKt;->modifierLocalMapOf()Landroidx/compose/ui/modifier/ModifierLocalMap;
-HSPLandroidx/compose/ui/modifier/ProvidableModifierLocal;-><clinit>()V
-HSPLandroidx/compose/ui/modifier/ProvidableModifierLocal;-><init>(Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/ui/node/AlignmentLines$recalculate$1;-><init>(Landroidx/compose/ui/node/AlignmentLines;)V
-HSPLandroidx/compose/ui/node/AlignmentLines$recalculate$1;->invoke(Landroidx/compose/ui/node/AlignmentLinesOwner;)V
-HSPLandroidx/compose/ui/node/AlignmentLines$recalculate$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/AlignmentLines;-><init>(Landroidx/compose/ui/node/AlignmentLinesOwner;)V
-HSPLandroidx/compose/ui/node/AlignmentLines;-><init>(Landroidx/compose/ui/node/AlignmentLinesOwner;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/node/AlignmentLines;->access$addAlignmentLine(Landroidx/compose/ui/node/AlignmentLines;Landroidx/compose/ui/layout/AlignmentLine;ILandroidx/compose/ui/node/NodeCoordinator;)V
-HSPLandroidx/compose/ui/node/AlignmentLines;->access$getAlignmentLineMap$p(Landroidx/compose/ui/node/AlignmentLines;)Ljava/util/Map;
-HSPLandroidx/compose/ui/node/AlignmentLines;->addAlignmentLine(Landroidx/compose/ui/layout/AlignmentLine;ILandroidx/compose/ui/node/NodeCoordinator;)V
-HSPLandroidx/compose/ui/node/AlignmentLines;->getAlignmentLinesOwner()Landroidx/compose/ui/node/AlignmentLinesOwner;
-HSPLandroidx/compose/ui/node/AlignmentLines;->getDirty$ui_release()Z
-HSPLandroidx/compose/ui/node/AlignmentLines;->getLastCalculation()Ljava/util/Map;
-HSPLandroidx/compose/ui/node/AlignmentLines;->getQueried$ui_release()Z
-HSPLandroidx/compose/ui/node/AlignmentLines;->getRequired$ui_release()Z
-HSPLandroidx/compose/ui/node/AlignmentLines;->getUsedDuringParentLayout$ui_release()Z
-HSPLandroidx/compose/ui/node/AlignmentLines;->onAlignmentsChanged()V
-HSPLandroidx/compose/ui/node/AlignmentLines;->recalculate()V
-HSPLandroidx/compose/ui/node/AlignmentLines;->recalculateQueryOwner()V
-HSPLandroidx/compose/ui/node/AlignmentLines;->reset$ui_release()V
-HSPLandroidx/compose/ui/node/AlignmentLines;->setPreviousUsedDuringParentLayout$ui_release(Z)V
-HSPLandroidx/compose/ui/node/AlignmentLines;->setUsedByModifierLayout$ui_release(Z)V
-HSPLandroidx/compose/ui/node/AlignmentLines;->setUsedByModifierMeasurement$ui_release(Z)V
-HSPLandroidx/compose/ui/node/AlignmentLines;->setUsedDuringParentMeasurement$ui_release(Z)V
-HSPLandroidx/compose/ui/node/BackwardsCompatNode$updateModifierLocalConsumer$1;-><init>(Landroidx/compose/ui/node/BackwardsCompatNode;)V
-HSPLandroidx/compose/ui/node/BackwardsCompatNode$updateModifierLocalConsumer$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/BackwardsCompatNode$updateModifierLocalConsumer$1;->invoke()V
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;-><init>(Landroidx/compose/ui/Modifier$Element;)V
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->getCurrent(Landroidx/compose/ui/modifier/ModifierLocal;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->getElement()Landroidx/compose/ui/Modifier$Element;
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->getProvidedValues()Landroidx/compose/ui/modifier/ModifierLocalMap;
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->getSemanticsConfiguration()Landroidx/compose/ui/semantics/SemanticsConfiguration;
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->initializeModifier(Z)V
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->isValidOwnerScope()Z
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->modifyParentData(Landroidx/compose/ui/unit/Density;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onAttach()V
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onDetach()V
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onGloballyPositioned(Landroidx/compose/ui/layout/LayoutCoordinates;)V
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onMeasureResultChanged()V
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onPlaced(Landroidx/compose/ui/layout/LayoutCoordinates;)V
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onPointerEvent-H0pRuoY(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;J)V
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onRemeasured-ozmzZPI(J)V
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->setElement(Landroidx/compose/ui/Modifier$Element;)V
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->sharePointerInputWithSiblings()Z
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->unInitializeModifier()V
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->updateModifierLocalConsumer()V
-HSPLandroidx/compose/ui/node/BackwardsCompatNode;->updateModifierLocalProvider(Landroidx/compose/ui/modifier/ModifierLocalProvider;)V
-HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$DetachedModifierLocalReadScope$1;-><init>()V
-HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$DetachedModifierLocalReadScope$1;->getCurrent(Landroidx/compose/ui/modifier/ModifierLocal;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$onDrawCacheReadsChanged$1;-><clinit>()V
-HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$onDrawCacheReadsChanged$1;-><init>()V
-HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$updateModifierLocalConsumer$1;-><clinit>()V
-HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$updateModifierLocalConsumer$1;-><init>()V
-HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$updateModifierLocalConsumer$1;->invoke(Landroidx/compose/ui/node/BackwardsCompatNode;)V
-HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$updateModifierLocalConsumer$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt;-><clinit>()V
-HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt;->access$getDetachedModifierLocalReadScope$p()Landroidx/compose/ui/node/BackwardsCompatNodeKt$DetachedModifierLocalReadScope$1;
-HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt;->access$getUpdateModifierLocalConsumer$p()Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/ui/node/CanFocusChecker;-><clinit>()V
-HSPLandroidx/compose/ui/node/CanFocusChecker;-><init>()V
-HSPLandroidx/compose/ui/node/CanFocusChecker;->isCanFocusSet()Z
-HSPLandroidx/compose/ui/node/CanFocusChecker;->reset()V
-HSPLandroidx/compose/ui/node/CanFocusChecker;->setCanFocus(Z)V
-HSPLandroidx/compose/ui/node/CenteredArray;->constructor-impl([I)[I
-HSPLandroidx/compose/ui/node/CenteredArray;->get-impl([II)I
-HSPLandroidx/compose/ui/node/CenteredArray;->getMid-impl([I)I
-HSPLandroidx/compose/ui/node/CenteredArray;->set-impl([III)V
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetDensity$1;-><clinit>()V
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetDensity$1;-><init>()V
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetDensity$1;->invoke(Landroidx/compose/ui/node/ComposeUiNode;Landroidx/compose/ui/unit/Density;)V
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetDensity$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetLayoutDirection$1;-><clinit>()V
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetLayoutDirection$1;-><init>()V
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetLayoutDirection$1;->invoke(Landroidx/compose/ui/node/ComposeUiNode;Landroidx/compose/ui/unit/LayoutDirection;)V
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetLayoutDirection$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetMeasurePolicy$1;-><clinit>()V
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetMeasurePolicy$1;-><init>()V
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetMeasurePolicy$1;->invoke(Landroidx/compose/ui/node/ComposeUiNode;Landroidx/compose/ui/layout/MeasurePolicy;)V
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetMeasurePolicy$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetModifier$1;-><clinit>()V
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetModifier$1;-><init>()V
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetModifier$1;->invoke(Landroidx/compose/ui/node/ComposeUiNode;Landroidx/compose/ui/Modifier;)V
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetModifier$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetViewConfiguration$1;-><clinit>()V
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetViewConfiguration$1;-><init>()V
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetViewConfiguration$1;->invoke(Landroidx/compose/ui/node/ComposeUiNode;Landroidx/compose/ui/platform/ViewConfiguration;)V
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetViewConfiguration$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$VirtualConstructor$1;-><clinit>()V
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$VirtualConstructor$1;-><init>()V
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;-><clinit>()V
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;-><init>()V
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;->getConstructor()Lkotlin/jvm/functions/Function0;
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;->getSetDensity()Lkotlin/jvm/functions/Function2;
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;->getSetLayoutDirection()Lkotlin/jvm/functions/Function2;
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;->getSetMeasurePolicy()Lkotlin/jvm/functions/Function2;
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;->getSetModifier()Lkotlin/jvm/functions/Function2;
-HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;->getSetViewConfiguration()Lkotlin/jvm/functions/Function2;
-HSPLandroidx/compose/ui/node/ComposeUiNode;-><clinit>()V
-HSPLandroidx/compose/ui/node/DelegatableNodeKt;->has-64DMado(Landroidx/compose/ui/node/DelegatableNode;I)Z
-HSPLandroidx/compose/ui/node/DelegatableNodeKt;->localChild(Landroidx/compose/ui/node/DelegatableNode;I)Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/node/DelegatableNodeKt;->requireCoordinator-64DMado(Landroidx/compose/ui/node/DelegatableNode;I)Landroidx/compose/ui/node/NodeCoordinator;
-HSPLandroidx/compose/ui/node/DelegatableNodeKt;->requireLayoutNode(Landroidx/compose/ui/node/DelegatableNode;)Landroidx/compose/ui/node/LayoutNode;
-HSPLandroidx/compose/ui/node/DelegatableNodeKt;->requireOwner(Landroidx/compose/ui/node/DelegatableNode;)Landroidx/compose/ui/node/Owner;
-HSPLandroidx/compose/ui/node/DepthSortedSet$DepthComparator$1;-><init>()V
-HSPLandroidx/compose/ui/node/DepthSortedSet$DepthComparator$1;->compare(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/node/LayoutNode;)I
-HSPLandroidx/compose/ui/node/DepthSortedSet$DepthComparator$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
-HSPLandroidx/compose/ui/node/DepthSortedSet$mapOfOriginalDepth$2;-><clinit>()V
-HSPLandroidx/compose/ui/node/DepthSortedSet$mapOfOriginalDepth$2;-><init>()V
-HSPLandroidx/compose/ui/node/DepthSortedSet;-><init>(Z)V
-HSPLandroidx/compose/ui/node/DepthSortedSet;->add(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/node/DepthSortedSet;->isEmpty()Z
-HSPLandroidx/compose/ui/node/DepthSortedSet;->pop()Landroidx/compose/ui/node/LayoutNode;
-HSPLandroidx/compose/ui/node/DepthSortedSet;->remove(Landroidx/compose/ui/node/LayoutNode;)Z
-HSPLandroidx/compose/ui/node/DistanceAndInLayer;->compareTo-S_HNhKs(JJ)I
-HSPLandroidx/compose/ui/node/DistanceAndInLayer;->constructor-impl(J)J
-HSPLandroidx/compose/ui/node/DistanceAndInLayer;->getDistance-impl(J)F
-HSPLandroidx/compose/ui/node/DistanceAndInLayer;->isInLayer-impl(J)Z
-HSPLandroidx/compose/ui/node/DrawModifierNode;->onMeasureResultChanged()V
-HSPLandroidx/compose/ui/node/DrawModifierNodeKt;->invalidateDraw(Landroidx/compose/ui/node/DrawModifierNode;)V
-HSPLandroidx/compose/ui/node/HitTestResult;-><init>()V
-HSPLandroidx/compose/ui/node/HitTestResult;->access$getHitDepth$p(Landroidx/compose/ui/node/HitTestResult;)I
-HSPLandroidx/compose/ui/node/HitTestResult;->access$setHitDepth$p(Landroidx/compose/ui/node/HitTestResult;I)V
-HSPLandroidx/compose/ui/node/HitTestResult;->clear()V
-HSPLandroidx/compose/ui/node/HitTestResult;->ensureContainerSize()V
-HSPLandroidx/compose/ui/node/HitTestResult;->findBestHitDistance-ptXAw2c()J
-HSPLandroidx/compose/ui/node/HitTestResult;->get(I)Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/HitTestResult;->getSize()I
-HSPLandroidx/compose/ui/node/HitTestResult;->hasHit()Z
-HSPLandroidx/compose/ui/node/HitTestResult;->hit(Ljava/lang/Object;ZLkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/ui/node/HitTestResult;->hitInMinimumTouchTarget(Ljava/lang/Object;FZLkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/ui/node/HitTestResult;->isEmpty()Z
-HSPLandroidx/compose/ui/node/HitTestResult;->resizeToHitDepth()V
-HSPLandroidx/compose/ui/node/HitTestResult;->size()I
-HSPLandroidx/compose/ui/node/HitTestResultKt;->DistanceAndInLayer(FZ)J
-HSPLandroidx/compose/ui/node/HitTestResultKt;->access$DistanceAndInLayer(FZ)J
-HSPLandroidx/compose/ui/node/InnerNodeCoordinator$Companion;-><init>()V
-HSPLandroidx/compose/ui/node/InnerNodeCoordinator$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/node/InnerNodeCoordinator$tail$1;-><init>()V
-HSPLandroidx/compose/ui/node/InnerNodeCoordinator;-><clinit>()V
-HSPLandroidx/compose/ui/node/InnerNodeCoordinator;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->calculateAlignmentLine(Landroidx/compose/ui/layout/AlignmentLine;)I
-HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->getTail()Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->hitTestChild-YqVAtuI(Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V
-HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->measure-BRTryo0(J)Landroidx/compose/ui/layout/Placeable;
-HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->performDraw(Landroidx/compose/ui/graphics/Canvas;)V
-HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/node/IntStack;-><init>(I)V
-HSPLandroidx/compose/ui/node/IntStack;->compareDiagonal(II)Z
-HSPLandroidx/compose/ui/node/IntStack;->isNotEmpty()Z
-HSPLandroidx/compose/ui/node/IntStack;->partition(III)I
-HSPLandroidx/compose/ui/node/IntStack;->pop()I
-HSPLandroidx/compose/ui/node/IntStack;->pushDiagonal(III)V
-HSPLandroidx/compose/ui/node/IntStack;->pushRange(IIII)V
-HSPLandroidx/compose/ui/node/IntStack;->quickSort(III)V
-HSPLandroidx/compose/ui/node/IntStack;->sortDiagonals()V
-HSPLandroidx/compose/ui/node/IntStack;->swapDiagonal(II)V
-HSPLandroidx/compose/ui/node/IntrinsicsPolicy$Companion;-><init>()V
-HSPLandroidx/compose/ui/node/IntrinsicsPolicy$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/node/IntrinsicsPolicy;-><clinit>()V
-HSPLandroidx/compose/ui/node/IntrinsicsPolicy;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/node/IntrinsicsPolicy;->setMeasurePolicyState(Landroidx/compose/ui/layout/MeasurePolicy;)V
-HSPLandroidx/compose/ui/node/IntrinsicsPolicy;->updateFrom(Landroidx/compose/ui/layout/MeasurePolicy;)V
-HSPLandroidx/compose/ui/node/LayerPositionalProperties;-><init>()V
-HSPLandroidx/compose/ui/node/LayerPositionalProperties;->copyFrom(Landroidx/compose/ui/graphics/GraphicsLayerScope;)V
-HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator$Companion;-><init>()V
-HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;-><clinit>()V
-HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;-><init>(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/node/LayoutModifierNode;)V
-HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->calculateAlignmentLine(Landroidx/compose/ui/layout/AlignmentLine;)I
-HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->getLayoutModifierNode()Landroidx/compose/ui/node/LayoutModifierNode;
-HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->getTail()Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->getWrappedNonNull()Landroidx/compose/ui/node/NodeCoordinator;
-HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->measure-BRTryo0(J)Landroidx/compose/ui/layout/Placeable;
-HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->onLayoutModifierNodeChanged()V
-HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->performDraw(Landroidx/compose/ui/graphics/Canvas;)V
-HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->setLayoutModifierNode$ui_release(Landroidx/compose/ui/node/LayoutModifierNode;)V
-HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinatorKt;->access$calculateAlignmentAndPlaceChildAsNeeded(Landroidx/compose/ui/node/LookaheadCapablePlaceable;Landroidx/compose/ui/layout/AlignmentLine;)I
-HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinatorKt;->calculateAlignmentAndPlaceChildAsNeeded(Landroidx/compose/ui/node/LookaheadCapablePlaceable;Landroidx/compose/ui/layout/AlignmentLine;)I
-HSPLandroidx/compose/ui/node/LayoutModifierNodeKt;->invalidateLayer(Landroidx/compose/ui/node/LayoutModifierNode;)V
-HSPLandroidx/compose/ui/node/LayoutModifierNodeKt;->invalidateMeasurements(Landroidx/compose/ui/node/LayoutModifierNode;)V
-HSPLandroidx/compose/ui/node/LayoutNode$$ExternalSyntheticLambda0;-><init>()V
-HSPLandroidx/compose/ui/node/LayoutNode$$ExternalSyntheticLambda0;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
-HSPLandroidx/compose/ui/node/LayoutNode$Companion$Constructor$1;-><clinit>()V
-HSPLandroidx/compose/ui/node/LayoutNode$Companion$Constructor$1;-><init>()V
-HSPLandroidx/compose/ui/node/LayoutNode$Companion$Constructor$1;->invoke()Landroidx/compose/ui/node/LayoutNode;
-HSPLandroidx/compose/ui/node/LayoutNode$Companion$Constructor$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/LayoutNode$Companion$DummyViewConfiguration$1;-><init>()V
-HSPLandroidx/compose/ui/node/LayoutNode$Companion$ErrorMeasurePolicy$1;-><init>()V
-HSPLandroidx/compose/ui/node/LayoutNode$Companion;-><init>()V
-HSPLandroidx/compose/ui/node/LayoutNode$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/node/LayoutNode$Companion;->getConstructor$ui_release()Lkotlin/jvm/functions/Function0;
-HSPLandroidx/compose/ui/node/LayoutNode$LayoutState;->$values()[Landroidx/compose/ui/node/LayoutNode$LayoutState;
-HSPLandroidx/compose/ui/node/LayoutNode$LayoutState;-><clinit>()V
-HSPLandroidx/compose/ui/node/LayoutNode$LayoutState;-><init>(Ljava/lang/String;I)V
-HSPLandroidx/compose/ui/node/LayoutNode$LayoutState;->values()[Landroidx/compose/ui/node/LayoutNode$LayoutState;
-HSPLandroidx/compose/ui/node/LayoutNode$NoIntrinsicsMeasurePolicy;-><init>(Ljava/lang/String;)V
-HSPLandroidx/compose/ui/node/LayoutNode$UsageByParent;->$values()[Landroidx/compose/ui/node/LayoutNode$UsageByParent;
-HSPLandroidx/compose/ui/node/LayoutNode$UsageByParent;-><clinit>()V
-HSPLandroidx/compose/ui/node/LayoutNode$UsageByParent;-><init>(Ljava/lang/String;I)V
-HSPLandroidx/compose/ui/node/LayoutNode$UsageByParent;->values()[Landroidx/compose/ui/node/LayoutNode$UsageByParent;
-HSPLandroidx/compose/ui/node/LayoutNode$WhenMappings;-><clinit>()V
-HSPLandroidx/compose/ui/node/LayoutNode$_foldedChildren$1;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/node/LayoutNode$_foldedChildren$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/LayoutNode$_foldedChildren$1;->invoke()V
-HSPLandroidx/compose/ui/node/LayoutNode;->$r8$lambda$5YfhreyhdVOEmOIPT3j1kScR2gs(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/node/LayoutNode;)I
-HSPLandroidx/compose/ui/node/LayoutNode;-><clinit>()V
-HSPLandroidx/compose/ui/node/LayoutNode;-><init>(ZI)V
-HSPLandroidx/compose/ui/node/LayoutNode;-><init>(ZIILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/node/LayoutNode;->ZComparator$lambda$41(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/node/LayoutNode;)I
-HSPLandroidx/compose/ui/node/LayoutNode;->access$getConstructor$cp()Lkotlin/jvm/functions/Function0;
-HSPLandroidx/compose/ui/node/LayoutNode;->access$setIgnoreRemeasureRequests$p(Landroidx/compose/ui/node/LayoutNode;Z)V
-HSPLandroidx/compose/ui/node/LayoutNode;->attach$ui_release(Landroidx/compose/ui/node/Owner;)V
-HSPLandroidx/compose/ui/node/LayoutNode;->checkChildrenPlaceOrderForUpdates$ui_release()V
-HSPLandroidx/compose/ui/node/LayoutNode;->clearPlaceOrder$ui_release()V
-HSPLandroidx/compose/ui/node/LayoutNode;->clearSubtreeIntrinsicsUsage$ui_release()V
-HSPLandroidx/compose/ui/node/LayoutNode;->clearSubtreePlacementIntrinsicsUsage()V
-HSPLandroidx/compose/ui/node/LayoutNode;->detach$ui_release()V
-HSPLandroidx/compose/ui/node/LayoutNode;->dispatchOnPositionedCallbacks$ui_release()V
-HSPLandroidx/compose/ui/node/LayoutNode;->draw$ui_release(Landroidx/compose/ui/graphics/Canvas;)V
-HSPLandroidx/compose/ui/node/LayoutNode;->getCanMultiMeasure$ui_release()Z
-HSPLandroidx/compose/ui/node/LayoutNode;->getChildMeasurables$ui_release()Ljava/util/List;
-HSPLandroidx/compose/ui/node/LayoutNode;->getChildren$ui_release()Ljava/util/List;
-HSPLandroidx/compose/ui/node/LayoutNode;->getCoordinates()Landroidx/compose/ui/layout/LayoutCoordinates;
-HSPLandroidx/compose/ui/node/LayoutNode;->getDensity()Landroidx/compose/ui/unit/Density;
-HSPLandroidx/compose/ui/node/LayoutNode;->getDepth$ui_release()I
-HSPLandroidx/compose/ui/node/LayoutNode;->getFoldedChildren$ui_release()Ljava/util/List;
-HSPLandroidx/compose/ui/node/LayoutNode;->getHasFixedInnerContentConstraints$ui_release()Z
-HSPLandroidx/compose/ui/node/LayoutNode;->getHeight()I
-HSPLandroidx/compose/ui/node/LayoutNode;->getInnerCoordinator$ui_release()Landroidx/compose/ui/node/NodeCoordinator;
-HSPLandroidx/compose/ui/node/LayoutNode;->getInnerLayerCoordinator()Landroidx/compose/ui/node/NodeCoordinator;
-HSPLandroidx/compose/ui/node/LayoutNode;->getIntrinsicsUsageByParent$ui_release()Landroidx/compose/ui/node/LayoutNode$UsageByParent;
-HSPLandroidx/compose/ui/node/LayoutNode;->getLayoutDelegate$ui_release()Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;
-HSPLandroidx/compose/ui/node/LayoutNode;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;
-HSPLandroidx/compose/ui/node/LayoutNode;->getLayoutPending$ui_release()Z
-HSPLandroidx/compose/ui/node/LayoutNode;->getLayoutState$ui_release()Landroidx/compose/ui/node/LayoutNode$LayoutState;
-HSPLandroidx/compose/ui/node/LayoutNode;->getLookaheadLayoutPending$ui_release()Z
-HSPLandroidx/compose/ui/node/LayoutNode;->getLookaheadMeasurePending$ui_release()Z
-HSPLandroidx/compose/ui/node/LayoutNode;->getMDrawScope$ui_release()Landroidx/compose/ui/node/LayoutNodeDrawScope;
-HSPLandroidx/compose/ui/node/LayoutNode;->getMLookaheadScope$ui_release()Landroidx/compose/ui/layout/LookaheadScope;
-HSPLandroidx/compose/ui/node/LayoutNode;->getMeasurePassDelegate()Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;
-HSPLandroidx/compose/ui/node/LayoutNode;->getMeasurePending$ui_release()Z
-HSPLandroidx/compose/ui/node/LayoutNode;->getMeasurePolicy()Landroidx/compose/ui/layout/MeasurePolicy;
-HSPLandroidx/compose/ui/node/LayoutNode;->getMeasuredByParent$ui_release()Landroidx/compose/ui/node/LayoutNode$UsageByParent;
-HSPLandroidx/compose/ui/node/LayoutNode;->getNeedsOnPositionedDispatch$ui_release()Z
-HSPLandroidx/compose/ui/node/LayoutNode;->getNodes$ui_release()Landroidx/compose/ui/node/NodeChain;
-HSPLandroidx/compose/ui/node/LayoutNode;->getOuterCoordinator$ui_release()Landroidx/compose/ui/node/NodeCoordinator;
-HSPLandroidx/compose/ui/node/LayoutNode;->getOwner$ui_release()Landroidx/compose/ui/node/Owner;
-HSPLandroidx/compose/ui/node/LayoutNode;->getParent$ui_release()Landroidx/compose/ui/node/LayoutNode;
-HSPLandroidx/compose/ui/node/LayoutNode;->getSemanticsId()I
-HSPLandroidx/compose/ui/node/LayoutNode;->getSubcompositionsState$ui_release()Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;
-HSPLandroidx/compose/ui/node/LayoutNode;->getViewConfiguration()Landroidx/compose/ui/platform/ViewConfiguration;
-HSPLandroidx/compose/ui/node/LayoutNode;->getWidth()I
-HSPLandroidx/compose/ui/node/LayoutNode;->getZSortedChildren()Landroidx/compose/runtime/collection/MutableVector;
-HSPLandroidx/compose/ui/node/LayoutNode;->get_children$ui_release()Landroidx/compose/runtime/collection/MutableVector;
-HSPLandroidx/compose/ui/node/LayoutNode;->hitTest-M_7yMNQ$ui_release$default(Landroidx/compose/ui/node/LayoutNode;JLandroidx/compose/ui/node/HitTestResult;ZZILjava/lang/Object;)V
-HSPLandroidx/compose/ui/node/LayoutNode;->hitTest-M_7yMNQ$ui_release(JLandroidx/compose/ui/node/HitTestResult;ZZ)V
-HSPLandroidx/compose/ui/node/LayoutNode;->insertAt$ui_release(ILandroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/node/LayoutNode;->invalidateFocusOnAttach()V
-HSPLandroidx/compose/ui/node/LayoutNode;->invalidateFocusOnDetach()V
-HSPLandroidx/compose/ui/node/LayoutNode;->invalidateLayer$ui_release()V
-HSPLandroidx/compose/ui/node/LayoutNode;->invalidateLayers$ui_release()V
-HSPLandroidx/compose/ui/node/LayoutNode;->invalidateMeasurements$ui_release()V
-HSPLandroidx/compose/ui/node/LayoutNode;->invalidateUnfoldedVirtualChildren()V
-HSPLandroidx/compose/ui/node/LayoutNode;->isAttached()Z
-HSPLandroidx/compose/ui/node/LayoutNode;->isPlaced()Z
-HSPLandroidx/compose/ui/node/LayoutNode;->isValidOwnerScope()Z
-HSPLandroidx/compose/ui/node/LayoutNode;->markLayoutPending$ui_release()V
-HSPLandroidx/compose/ui/node/LayoutNode;->markMeasurePending$ui_release()V
-HSPLandroidx/compose/ui/node/LayoutNode;->markNodeAndSubtreeAsPlaced()V
-HSPLandroidx/compose/ui/node/LayoutNode;->onChildRemoved(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/node/LayoutNode;->onDensityOrLayoutDirectionChanged()V
-HSPLandroidx/compose/ui/node/LayoutNode;->onNodePlaced$ui_release()V
-HSPLandroidx/compose/ui/node/LayoutNode;->onZSortedChildrenInvalidated$ui_release()V
-HSPLandroidx/compose/ui/node/LayoutNode;->place$ui_release(II)V
-HSPLandroidx/compose/ui/node/LayoutNode;->recreateUnfoldedChildrenIfDirty()V
-HSPLandroidx/compose/ui/node/LayoutNode;->remeasure-_Sx5XlM$ui_release$default(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/unit/Constraints;ILjava/lang/Object;)Z
-HSPLandroidx/compose/ui/node/LayoutNode;->remeasure-_Sx5XlM$ui_release(Landroidx/compose/ui/unit/Constraints;)Z
-HSPLandroidx/compose/ui/node/LayoutNode;->removeAll$ui_release()V
-HSPLandroidx/compose/ui/node/LayoutNode;->removeAt$ui_release(II)V
-HSPLandroidx/compose/ui/node/LayoutNode;->replace$ui_release()V
-HSPLandroidx/compose/ui/node/LayoutNode;->requestRelayout$ui_release$default(Landroidx/compose/ui/node/LayoutNode;ZILjava/lang/Object;)V
-HSPLandroidx/compose/ui/node/LayoutNode;->requestRelayout$ui_release(Z)V
-HSPLandroidx/compose/ui/node/LayoutNode;->requestRemeasure$ui_release$default(Landroidx/compose/ui/node/LayoutNode;ZILjava/lang/Object;)V
-HSPLandroidx/compose/ui/node/LayoutNode;->requestRemeasure$ui_release(Z)V
-HSPLandroidx/compose/ui/node/LayoutNode;->rescheduleRemeasureOrRelayout$ui_release(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/node/LayoutNode;->resetSubtreeIntrinsicsUsage$ui_release()V
-HSPLandroidx/compose/ui/node/LayoutNode;->setCanMultiMeasure$ui_release(Z)V
-HSPLandroidx/compose/ui/node/LayoutNode;->setDensity(Landroidx/compose/ui/unit/Density;)V
-HSPLandroidx/compose/ui/node/LayoutNode;->setInnerLayerCoordinatorIsDirty$ui_release(Z)V
-HSPLandroidx/compose/ui/node/LayoutNode;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)V
-HSPLandroidx/compose/ui/node/LayoutNode;->setMLookaheadScope(Landroidx/compose/ui/layout/LookaheadScope;)V
-HSPLandroidx/compose/ui/node/LayoutNode;->setMeasurePolicy(Landroidx/compose/ui/layout/MeasurePolicy;)V
-HSPLandroidx/compose/ui/node/LayoutNode;->setMeasuredByParent$ui_release(Landroidx/compose/ui/node/LayoutNode$UsageByParent;)V
-HSPLandroidx/compose/ui/node/LayoutNode;->setModifier(Landroidx/compose/ui/Modifier;)V
-HSPLandroidx/compose/ui/node/LayoutNode;->setNeedsOnPositionedDispatch$ui_release(Z)V
-HSPLandroidx/compose/ui/node/LayoutNode;->setSubcompositionsState$ui_release(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)V
-HSPLandroidx/compose/ui/node/LayoutNode;->setViewConfiguration(Landroidx/compose/ui/platform/ViewConfiguration;)V
-HSPLandroidx/compose/ui/node/LayoutNode;->updateChildrenIfDirty$ui_release()V
-HSPLandroidx/compose/ui/node/LayoutNodeAlignmentLines;-><init>(Landroidx/compose/ui/node/AlignmentLinesOwner;)V
-HSPLandroidx/compose/ui/node/LayoutNodeAlignmentLines;->calculatePositionInParent-R5De75A(Landroidx/compose/ui/node/NodeCoordinator;J)J
-HSPLandroidx/compose/ui/node/LayoutNodeAlignmentLines;->getAlignmentLinesMap(Landroidx/compose/ui/node/NodeCoordinator;)Ljava/util/Map;
-HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;-><init>(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;)V
-HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;-><init>(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->draw-x_KDEd0$ui_release(Landroidx/compose/ui/graphics/Canvas;JLandroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/node/DrawModifierNode;)V
-HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawContent()V
-HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawImage-AZ2fEMs(Landroidx/compose/ui/graphics/ImageBitmap;JJJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;II)V
-HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawPath-LG529CI(Landroidx/compose/ui/graphics/Path;JFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V
-HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawRect-n-J9OG0(JJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V
-HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawRoundRect-u-Aw5IA(JJJJLandroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;I)V
-HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getDrawContext()Landroidx/compose/ui/graphics/drawscope/DrawContext;
-HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;
-HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getSize-NH-jbRc()J
-HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->performDraw(Landroidx/compose/ui/node/DrawModifierNode;Landroidx/compose/ui/graphics/Canvas;)V
-HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->roundToPx-0680j_4(F)I
-HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->toPx-0680j_4(F)F
-HSPLandroidx/compose/ui/node/LayoutNodeDrawScopeKt;->access$nextDrawNode(Landroidx/compose/ui/node/DelegatableNode;)Landroidx/compose/ui/node/DrawModifierNode;
-HSPLandroidx/compose/ui/node/LayoutNodeDrawScopeKt;->nextDrawNode(Landroidx/compose/ui/node/DelegatableNode;)Landroidx/compose/ui/node/DrawModifierNode;
-HSPLandroidx/compose/ui/node/LayoutNodeKt;->requireOwner(Landroidx/compose/ui/node/LayoutNode;)Landroidx/compose/ui/node/Owner;
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$WhenMappings;-><clinit>()V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$childMeasurables$1;-><clinit>()V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$childMeasurables$1;-><init>()V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$childMeasurables$1;->invoke(Landroidx/compose/ui/node/LayoutNode;)Landroidx/compose/ui/layout/Measurable;
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$childMeasurables$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1$1;-><clinit>()V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1$1;-><init>()V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1$1;->invoke(Landroidx/compose/ui/node/AlignmentLinesOwner;)V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1$2;-><clinit>()V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1$2;-><init>()V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1$2;->invoke(Landroidx/compose/ui/node/AlignmentLinesOwner;)V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1;-><init>(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1;->invoke()V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$placeOuterCoordinator$1;-><init>(Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;JF)V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$placeOuterCoordinator$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$placeOuterCoordinator$1;->invoke()V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$remeasure$1;-><clinit>()V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$remeasure$1;-><init>()V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$remeasure$1;->invoke(Landroidx/compose/ui/node/AlignmentLinesOwner;)V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$remeasure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;-><init>(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->calculateAlignmentLines()Ljava/util/Map;
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->forEachChildAlignmentLinesOwner(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->get(Landroidx/compose/ui/layout/AlignmentLine;)I
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getAlignmentLines()Landroidx/compose/ui/node/AlignmentLines;
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getChildMeasurables$ui_release()Ljava/util/List;
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getInnerCoordinator()Landroidx/compose/ui/node/NodeCoordinator;
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getLastConstraints-DWUhwKw()Landroidx/compose/ui/unit/Constraints;
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getMeasuredWidth()I
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getParentAlignmentLinesOwner()Landroidx/compose/ui/node/AlignmentLinesOwner;
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getParentData()Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->invalidateIntrinsicsParent(Z)V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->isPlaced()Z
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->layoutChildren()V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->measure-BRTryo0(J)Landroidx/compose/ui/layout/Placeable;
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->notifyChildrenUsingCoordinatesWhilePlacing()V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->onBeforeLayoutChildren()V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->placeOuterCoordinator-f8xVGno(JFLkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->remeasure-BRTryo0(J)Z
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->replace()V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->requestMeasure()V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->setChildMeasurablesDirty$ui_release(Z)V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->trackMeasurementByParent(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->updateParentData()Z
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2;-><init>(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;J)V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2;->invoke()V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$getLayoutNode$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)Landroidx/compose/ui/node/LayoutNode;
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$getLayoutPendingForAlignment$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)Z
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$isOutMostLookaheadRoot(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;Landroidx/compose/ui/node/LayoutNode;)Z
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$performMeasure-BRTryo0(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;J)V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$setLayoutPending$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;Z)V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$setLayoutPendingForAlignment$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;Z)V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$setLayoutState$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;Landroidx/compose/ui/node/LayoutNode$LayoutState;)V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getAlignmentLinesOwner$ui_release()Landroidx/compose/ui/node/AlignmentLinesOwner;
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getChildrenAccessingCoordinatesDuringPlacement()I
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getCoordinatesAccessedDuringPlacement()Z
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getHeight$ui_release()I
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getLastConstraints-DWUhwKw()Landroidx/compose/ui/unit/Constraints;
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getLayoutPending$ui_release()Z
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getLayoutState$ui_release()Landroidx/compose/ui/node/LayoutNode$LayoutState;
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getLookaheadLayoutPending$ui_release()Z
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getLookaheadMeasurePending$ui_release()Z
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getMeasurePassDelegate$ui_release()Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getMeasurePending$ui_release()Z
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getOuterCoordinator()Landroidx/compose/ui/node/NodeCoordinator;
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getWidth$ui_release()I
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->isOutMostLookaheadRoot(Landroidx/compose/ui/node/LayoutNode;)Z
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->markChildrenDirty()V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->markLayoutPending$ui_release()V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->markMeasurePending$ui_release()V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->performMeasure-BRTryo0(J)V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->resetAlignmentLines()V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->setCoordinatesAccessedDuringPlacement(Z)V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->updateParentData()V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegateKt;->access$updateChildMeasurables(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/runtime/collection/MutableVector;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegateKt;->updateChildMeasurables(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/runtime/collection/MutableVector;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;-><init>()V
-HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->get(Landroidx/compose/ui/layout/AlignmentLine;)I
-HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->invalidateAlignmentLinesFromPositionChange(Landroidx/compose/ui/node/NodeCoordinator;)V
-HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->isPlacingForAlignment$ui_release()Z
-HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->isShallowPlacing$ui_release()Z
-HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->setPlacingForAlignment$ui_release(Z)V
-HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->setShallowPlacing$ui_release(Z)V
-HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate$WhenMappings;-><clinit>()V
-HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->access$getRoot$p(Landroidx/compose/ui/node/MeasureAndLayoutDelegate;)Landroidx/compose/ui/node/LayoutNode;
-HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->access$remeasureAndRelayoutIfNeeded(Landroidx/compose/ui/node/MeasureAndLayoutDelegate;Landroidx/compose/ui/node/LayoutNode;)Z
-HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->callOnLayoutCompletedListeners()V
-HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->dispatchOnPositionedCallbacks$default(Landroidx/compose/ui/node/MeasureAndLayoutDelegate;ZILjava/lang/Object;)V
-HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->dispatchOnPositionedCallbacks(Z)V
-HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->doRemeasure-sdFAvZA(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/unit/Constraints;)Z
-HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->forceMeasureTheSubtree(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->getCanAffectParent(Landroidx/compose/ui/node/LayoutNode;)Z
-HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->getMeasureAffectsParent(Landroidx/compose/ui/node/LayoutNode;)Z
-HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->measureAndLayout(Lkotlin/jvm/functions/Function0;)Z
-HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->measureOnly()V
-HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->onNodeDetached(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->recurseRemeasure(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->remeasureAndRelayoutIfNeeded(Landroidx/compose/ui/node/LayoutNode;)Z
-HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->remeasureOnly(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->requestRelayout(Landroidx/compose/ui/node/LayoutNode;Z)Z
-HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->requestRemeasure$default(Landroidx/compose/ui/node/MeasureAndLayoutDelegate;Landroidx/compose/ui/node/LayoutNode;ZILjava/lang/Object;)Z
-HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->requestRemeasure(Landroidx/compose/ui/node/LayoutNode;Z)Z
-HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->updateRootConstraints-BRTryo0(J)V
-HSPLandroidx/compose/ui/node/ModifierNodeElement;-><clinit>()V
-HSPLandroidx/compose/ui/node/ModifierNodeElement;-><init>(Ljava/lang/Object;ZLkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/node/ModifierNodeElement;-><init>(Ljava/lang/Object;ZLkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/node/ModifierNodeElement;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/node/ModifierNodeElement;->getAutoInvalidate$ui_release()Z
-HSPLandroidx/compose/ui/node/MutableVectorWithMutationTracking;-><init>(Landroidx/compose/runtime/collection/MutableVector;Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/ui/node/MutableVectorWithMutationTracking;->add(ILjava/lang/Object;)V
-HSPLandroidx/compose/ui/node/MutableVectorWithMutationTracking;->asList()Ljava/util/List;
-HSPLandroidx/compose/ui/node/MutableVectorWithMutationTracking;->clear()V
-HSPLandroidx/compose/ui/node/MutableVectorWithMutationTracking;->get(I)Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/MutableVectorWithMutationTracking;->getSize()I
-HSPLandroidx/compose/ui/node/MutableVectorWithMutationTracking;->getVector()Landroidx/compose/runtime/collection/MutableVector;
-HSPLandroidx/compose/ui/node/MutableVectorWithMutationTracking;->removeAt(I)Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/MyersDiffKt;->access$swap([III)V
-HSPLandroidx/compose/ui/node/MyersDiffKt;->applyDiff(IILandroidx/compose/ui/node/IntStack;Landroidx/compose/ui/node/DiffCallback;)V
-HSPLandroidx/compose/ui/node/MyersDiffKt;->backward-4l5_RBY(IIIILandroidx/compose/ui/node/DiffCallback;[I[II[I)Z
-HSPLandroidx/compose/ui/node/MyersDiffKt;->calculateDiff(IILandroidx/compose/ui/node/DiffCallback;)Landroidx/compose/ui/node/IntStack;
-HSPLandroidx/compose/ui/node/MyersDiffKt;->executeDiff(IILandroidx/compose/ui/node/DiffCallback;)V
-HSPLandroidx/compose/ui/node/MyersDiffKt;->fillSnake(IIIIZ[I)V
-HSPLandroidx/compose/ui/node/MyersDiffKt;->forward-4l5_RBY(IIIILandroidx/compose/ui/node/DiffCallback;[I[II[I)Z
-HSPLandroidx/compose/ui/node/MyersDiffKt;->midPoint-q5eDKzI(IIIILandroidx/compose/ui/node/DiffCallback;[I[I[I)Z
-HSPLandroidx/compose/ui/node/MyersDiffKt;->swap([III)V
-HSPLandroidx/compose/ui/node/NodeChain$Differ;-><init>(Landroidx/compose/ui/node/NodeChain;Landroidx/compose/ui/Modifier$Node;ILandroidx/compose/runtime/collection/MutableVector;Landroidx/compose/runtime/collection/MutableVector;)V
-HSPLandroidx/compose/ui/node/NodeChain$Differ;->areItemsTheSame(II)Z
-HSPLandroidx/compose/ui/node/NodeChain$Differ;->insert(II)V
-HSPLandroidx/compose/ui/node/NodeChain$Differ;->same(II)V
-HSPLandroidx/compose/ui/node/NodeChain;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/node/NodeChain;->access$createAndInsertNodeAsParent(Landroidx/compose/ui/node/NodeChain;Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/node/NodeChain;->access$getAggregateChildKindSet(Landroidx/compose/ui/node/NodeChain;)I
-HSPLandroidx/compose/ui/node/NodeChain;->access$getLogger$p(Landroidx/compose/ui/node/NodeChain;)Landroidx/compose/ui/node/NodeChain$Logger;
-HSPLandroidx/compose/ui/node/NodeChain;->access$updateNodeAndReplaceIfNeeded(Landroidx/compose/ui/node/NodeChain;Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/node/NodeChain;->attach(Z)V
-HSPLandroidx/compose/ui/node/NodeChain;->createAndInsertNodeAsParent(Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/node/NodeChain;->detach$ui_release()V
-HSPLandroidx/compose/ui/node/NodeChain;->getAggregateChildKindSet()I
-HSPLandroidx/compose/ui/node/NodeChain;->getDiffer(Landroidx/compose/ui/Modifier$Node;Landroidx/compose/runtime/collection/MutableVector;Landroidx/compose/runtime/collection/MutableVector;)Landroidx/compose/ui/node/NodeChain$Differ;
-HSPLandroidx/compose/ui/node/NodeChain;->getHead$ui_release()Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/node/NodeChain;->getInnerCoordinator$ui_release()Landroidx/compose/ui/node/InnerNodeCoordinator;
-HSPLandroidx/compose/ui/node/NodeChain;->getOuterCoordinator$ui_release()Landroidx/compose/ui/node/NodeCoordinator;
-HSPLandroidx/compose/ui/node/NodeChain;->getTail$ui_release()Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/node/NodeChain;->has$ui_release(I)Z
-HSPLandroidx/compose/ui/node/NodeChain;->has-H91voCI$ui_release(I)Z
-HSPLandroidx/compose/ui/node/NodeChain;->insertParent(Landroidx/compose/ui/Modifier$Node;Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/node/NodeChain;->padChain()V
-HSPLandroidx/compose/ui/node/NodeChain;->structuralUpdate(Landroidx/compose/runtime/collection/MutableVector;ILandroidx/compose/runtime/collection/MutableVector;ILandroidx/compose/ui/Modifier$Node;)V
-HSPLandroidx/compose/ui/node/NodeChain;->syncCoordinators()V
-HSPLandroidx/compose/ui/node/NodeChain;->trimChain()V
-HSPLandroidx/compose/ui/node/NodeChain;->updateFrom$ui_release(Landroidx/compose/ui/Modifier;)V
-HSPLandroidx/compose/ui/node/NodeChain;->updateNodeAndReplaceIfNeeded(Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/node/NodeChainKt$SentinelHead$1;-><init>()V
-HSPLandroidx/compose/ui/node/NodeChainKt;-><clinit>()V
-HSPLandroidx/compose/ui/node/NodeChainKt;->access$fillVector(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/collection/MutableVector;)Landroidx/compose/runtime/collection/MutableVector;
-HSPLandroidx/compose/ui/node/NodeChainKt;->access$getSentinelHead$p()Landroidx/compose/ui/node/NodeChainKt$SentinelHead$1;
-HSPLandroidx/compose/ui/node/NodeChainKt;->access$updateUnsafe(Landroidx/compose/ui/node/ModifierNodeElement;Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/node/NodeChainKt;->fillVector(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/collection/MutableVector;)Landroidx/compose/runtime/collection/MutableVector;
-HSPLandroidx/compose/ui/node/NodeChainKt;->reuseActionForModifiers(Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Element;)I
-HSPLandroidx/compose/ui/node/NodeChainKt;->updateUnsafe(Landroidx/compose/ui/node/ModifierNodeElement;Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$PointerInputSource$1;-><init>()V
-HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$PointerInputSource$1;->childHitTest-YqVAtuI(Landroidx/compose/ui/node/LayoutNode;JLandroidx/compose/ui/node/HitTestResult;ZZ)V
-HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$PointerInputSource$1;->entityType-OLwlOKw()I
-HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$PointerInputSource$1;->shouldHitTestChildren(Landroidx/compose/ui/node/LayoutNode;)Z
-HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$SemanticsSource$1;-><init>()V
-HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayer$1;-><clinit>()V
-HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayer$1;-><init>()V
-HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayer$1;->invoke(Landroidx/compose/ui/node/NodeCoordinator;)V
-HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayer$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayerParams$1;-><clinit>()V
-HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayerParams$1;-><init>()V
-HSPLandroidx/compose/ui/node/NodeCoordinator$Companion;-><init>()V
-HSPLandroidx/compose/ui/node/NodeCoordinator$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/node/NodeCoordinator$Companion;->getPointerInputSource()Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;
-HSPLandroidx/compose/ui/node/NodeCoordinator$hit$1;-><init>(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/node/DelegatableNode;Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V
-HSPLandroidx/compose/ui/node/NodeCoordinator$hit$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/NodeCoordinator$hit$1;->invoke()V
-HSPLandroidx/compose/ui/node/NodeCoordinator$invalidateParentLayer$1;-><init>(Landroidx/compose/ui/node/NodeCoordinator;)V
-HSPLandroidx/compose/ui/node/NodeCoordinator$invalidateParentLayer$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/NodeCoordinator$invalidateParentLayer$1;->invoke()V
-HSPLandroidx/compose/ui/node/NodeCoordinator$invoke$1;-><init>(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/graphics/Canvas;)V
-HSPLandroidx/compose/ui/node/NodeCoordinator$invoke$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/NodeCoordinator$invoke$1;->invoke()V
-HSPLandroidx/compose/ui/node/NodeCoordinator$updateLayerParameters$1;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/node/NodeCoordinator$updateLayerParameters$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/NodeCoordinator$updateLayerParameters$1;->invoke()V
-HSPLandroidx/compose/ui/node/NodeCoordinator;-><clinit>()V
-HSPLandroidx/compose/ui/node/NodeCoordinator;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/node/NodeCoordinator;->access$drawContainedDrawModifiers(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/graphics/Canvas;)V
-HSPLandroidx/compose/ui/node/NodeCoordinator;->access$getGraphicsLayerScope$cp()Landroidx/compose/ui/graphics/ReusableGraphicsLayerScope;
-HSPLandroidx/compose/ui/node/NodeCoordinator;->access$getMeasuredSize-YbymL2g(Landroidx/compose/ui/node/NodeCoordinator;)J
-HSPLandroidx/compose/ui/node/NodeCoordinator;->access$getPointerInputSource$cp()Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;
-HSPLandroidx/compose/ui/node/NodeCoordinator;->access$headNode(Landroidx/compose/ui/node/NodeCoordinator;Z)Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/node/NodeCoordinator;->access$hit-1hIXUjU(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/node/DelegatableNode;Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V
-HSPLandroidx/compose/ui/node/NodeCoordinator;->access$setMeasurementConstraints-BRTryo0(Landroidx/compose/ui/node/NodeCoordinator;J)V
-HSPLandroidx/compose/ui/node/NodeCoordinator;->ancestorToLocal-R5De75A(Landroidx/compose/ui/node/NodeCoordinator;J)J
-HSPLandroidx/compose/ui/node/NodeCoordinator;->attach()V
-HSPLandroidx/compose/ui/node/NodeCoordinator;->calculateMinimumTouchTargetPadding-E7KxVPU(J)J
-HSPLandroidx/compose/ui/node/NodeCoordinator;->detach()V
-HSPLandroidx/compose/ui/node/NodeCoordinator;->distanceInMinimumTouchTarget-tz77jQw(JJ)F
-HSPLandroidx/compose/ui/node/NodeCoordinator;->draw(Landroidx/compose/ui/graphics/Canvas;)V
-HSPLandroidx/compose/ui/node/NodeCoordinator;->drawContainedDrawModifiers(Landroidx/compose/ui/graphics/Canvas;)V
-HSPLandroidx/compose/ui/node/NodeCoordinator;->findCommonAncestor$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)Landroidx/compose/ui/node/NodeCoordinator;
-HSPLandroidx/compose/ui/node/NodeCoordinator;->fromParentPosition-MK-Hz9U(J)J
-HSPLandroidx/compose/ui/node/NodeCoordinator;->getAlignmentLinesOwner()Landroidx/compose/ui/node/AlignmentLinesOwner;
-HSPLandroidx/compose/ui/node/NodeCoordinator;->getChild()Landroidx/compose/ui/node/LookaheadCapablePlaceable;
-HSPLandroidx/compose/ui/node/NodeCoordinator;->getCoordinates()Landroidx/compose/ui/layout/LayoutCoordinates;
-HSPLandroidx/compose/ui/node/NodeCoordinator;->getDensity()F
-HSPLandroidx/compose/ui/node/NodeCoordinator;->getFontScale()F
-HSPLandroidx/compose/ui/node/NodeCoordinator;->getHasMeasureResult()Z
-HSPLandroidx/compose/ui/node/NodeCoordinator;->getLastLayerDrawingWasSkipped$ui_release()Z
-HSPLandroidx/compose/ui/node/NodeCoordinator;->getLastMeasurementConstraints-msEJaDk$ui_release()J
-HSPLandroidx/compose/ui/node/NodeCoordinator;->getLayer()Landroidx/compose/ui/node/OwnedLayer;
-HSPLandroidx/compose/ui/node/NodeCoordinator;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;
-HSPLandroidx/compose/ui/node/NodeCoordinator;->getLayoutNode()Landroidx/compose/ui/node/LayoutNode;
-HSPLandroidx/compose/ui/node/NodeCoordinator;->getLookaheadDelegate$ui_release()Landroidx/compose/ui/node/LookaheadDelegate;
-HSPLandroidx/compose/ui/node/NodeCoordinator;->getMeasureResult$ui_release()Landroidx/compose/ui/layout/MeasureResult;
-HSPLandroidx/compose/ui/node/NodeCoordinator;->getMinimumTouchTargetSize-NH-jbRc()J
-HSPLandroidx/compose/ui/node/NodeCoordinator;->getParent()Landroidx/compose/ui/node/LookaheadCapablePlaceable;
-HSPLandroidx/compose/ui/node/NodeCoordinator;->getParentData()Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/NodeCoordinator;->getPosition-nOcc-ac()J
-HSPLandroidx/compose/ui/node/NodeCoordinator;->getSize-YbymL2g()J
-HSPLandroidx/compose/ui/node/NodeCoordinator;->getSnapshotObserver()Landroidx/compose/ui/node/OwnerSnapshotObserver;
-HSPLandroidx/compose/ui/node/NodeCoordinator;->getWrapped$ui_release()Landroidx/compose/ui/node/NodeCoordinator;
-HSPLandroidx/compose/ui/node/NodeCoordinator;->getWrappedBy$ui_release()Landroidx/compose/ui/node/NodeCoordinator;
-HSPLandroidx/compose/ui/node/NodeCoordinator;->getZIndex()F
-HSPLandroidx/compose/ui/node/NodeCoordinator;->hasNode-H91voCI(I)Z
-HSPLandroidx/compose/ui/node/NodeCoordinator;->headNode(Z)Landroidx/compose/ui/Modifier$Node;
-HSPLandroidx/compose/ui/node/NodeCoordinator;->headUnchecked-H91voCI(I)Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/NodeCoordinator;->hit-1hIXUjU(Landroidx/compose/ui/node/DelegatableNode;Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V
-HSPLandroidx/compose/ui/node/NodeCoordinator;->hitTest-YqVAtuI(Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V
-HSPLandroidx/compose/ui/node/NodeCoordinator;->hitTestChild-YqVAtuI(Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V
-HSPLandroidx/compose/ui/node/NodeCoordinator;->invalidateLayer()V
-HSPLandroidx/compose/ui/node/NodeCoordinator;->invoke(Landroidx/compose/ui/graphics/Canvas;)V
-HSPLandroidx/compose/ui/node/NodeCoordinator;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/NodeCoordinator;->isAttached()Z
-HSPLandroidx/compose/ui/node/NodeCoordinator;->isPointerInBounds-k-4lQ0M(J)Z
-HSPLandroidx/compose/ui/node/NodeCoordinator;->isValidOwnerScope()Z
-HSPLandroidx/compose/ui/node/NodeCoordinator;->localPositionOf-R5De75A(Landroidx/compose/ui/layout/LayoutCoordinates;J)J
-HSPLandroidx/compose/ui/node/NodeCoordinator;->offsetFromEdge-MK-Hz9U(J)J
-HSPLandroidx/compose/ui/node/NodeCoordinator;->onLayerBlockUpdated$default(Landroidx/compose/ui/node/NodeCoordinator;Lkotlin/jvm/functions/Function1;ZILjava/lang/Object;)V
-HSPLandroidx/compose/ui/node/NodeCoordinator;->onLayerBlockUpdated(Lkotlin/jvm/functions/Function1;Z)V
-HSPLandroidx/compose/ui/node/NodeCoordinator;->onLayoutModifierNodeChanged()V
-HSPLandroidx/compose/ui/node/NodeCoordinator;->onMeasureResultChanged(II)V
-HSPLandroidx/compose/ui/node/NodeCoordinator;->onMeasured()V
-HSPLandroidx/compose/ui/node/NodeCoordinator;->onPlaced()V
-HSPLandroidx/compose/ui/node/NodeCoordinator;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/node/NodeCoordinator;->replace$ui_release()V
-HSPLandroidx/compose/ui/node/NodeCoordinator;->setMeasureResult$ui_release(Landroidx/compose/ui/layout/MeasureResult;)V
-HSPLandroidx/compose/ui/node/NodeCoordinator;->setPosition--gyyYBs(J)V
-HSPLandroidx/compose/ui/node/NodeCoordinator;->setWrapped$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)V
-HSPLandroidx/compose/ui/node/NodeCoordinator;->setWrappedBy$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)V
-HSPLandroidx/compose/ui/node/NodeCoordinator;->shouldSharePointerInputWithSiblings()Z
-HSPLandroidx/compose/ui/node/NodeCoordinator;->toCoordinator(Landroidx/compose/ui/layout/LayoutCoordinates;)Landroidx/compose/ui/node/NodeCoordinator;
-HSPLandroidx/compose/ui/node/NodeCoordinator;->toParentPosition-MK-Hz9U(J)J
-HSPLandroidx/compose/ui/node/NodeCoordinator;->updateLayerParameters()V
-HSPLandroidx/compose/ui/node/NodeCoordinator;->updateLookaheadScope$ui_release(Landroidx/compose/ui/layout/LookaheadScope;)V
-HSPLandroidx/compose/ui/node/NodeCoordinator;->withinLayerBounds-k-4lQ0M(J)Z
-HSPLandroidx/compose/ui/node/NodeCoordinatorKt;->access$nextUncheckedUntil-hw7D004(Landroidx/compose/ui/node/DelegatableNode;II)Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/NodeCoordinatorKt;->nextUncheckedUntil-hw7D004(Landroidx/compose/ui/node/DelegatableNode;II)Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/NodeKind;->constructor-impl(I)I
-HSPLandroidx/compose/ui/node/NodeKindKt;->autoInvalidateInsertedNode(Landroidx/compose/ui/Modifier$Node;)V
-HSPLandroidx/compose/ui/node/NodeKindKt;->autoInvalidateNode(Landroidx/compose/ui/Modifier$Node;I)V
-HSPLandroidx/compose/ui/node/NodeKindKt;->autoInvalidateUpdatedNode(Landroidx/compose/ui/Modifier$Node;)V
-HSPLandroidx/compose/ui/node/NodeKindKt;->calculateNodeKindSetFrom(Landroidx/compose/ui/Modifier$Element;)I
-HSPLandroidx/compose/ui/node/NodeKindKt;->calculateNodeKindSetFrom(Landroidx/compose/ui/Modifier$Node;)I
-HSPLandroidx/compose/ui/node/NodeKindKt;->getIncludeSelfInTraversal-H91voCI(I)Z
-HSPLandroidx/compose/ui/node/NodeKindKt;->specifiesCanFocusProperty(Landroidx/compose/ui/focus/FocusPropertiesModifierNode;)Z
-HSPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;-><clinit>()V
-HSPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;-><init>()V
-HSPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;->compare(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/node/LayoutNode;)I
-HSPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;->compare(Ljava/lang/Object;Ljava/lang/Object;)I
-HSPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion;-><init>()V
-HSPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/node/OnPositionedDispatcher;-><clinit>()V
-HSPLandroidx/compose/ui/node/OnPositionedDispatcher;-><init>()V
-HSPLandroidx/compose/ui/node/OnPositionedDispatcher;->dispatch()V
-HSPLandroidx/compose/ui/node/OnPositionedDispatcher;->dispatchHierarchy(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/node/OnPositionedDispatcher;->onNodePositioned(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/node/Owner$Companion;-><clinit>()V
-HSPLandroidx/compose/ui/node/Owner$Companion;-><init>()V
-HSPLandroidx/compose/ui/node/Owner$Companion;->getEnableExtraAssertions()Z
-HSPLandroidx/compose/ui/node/Owner;-><clinit>()V
-HSPLandroidx/compose/ui/node/Owner;->measureAndLayout$default(Landroidx/compose/ui/node/Owner;ZILjava/lang/Object;)V
-HSPLandroidx/compose/ui/node/Owner;->onRequestMeasure$default(Landroidx/compose/ui/node/Owner;Landroidx/compose/ui/node/LayoutNode;ZZILjava/lang/Object;)V
-HSPLandroidx/compose/ui/node/Owner;->onRequestRelayout$default(Landroidx/compose/ui/node/Owner;Landroidx/compose/ui/node/LayoutNode;ZZILjava/lang/Object;)V
-HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$clearInvalidObservations$1;-><clinit>()V
-HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$clearInvalidObservations$1;-><init>()V
-HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$clearInvalidObservations$1;->invoke(Ljava/lang/Object;)Ljava/lang/Boolean;
-HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$clearInvalidObservations$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayout$1;-><clinit>()V
-HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayout$1;-><init>()V
-HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayoutModifier$1;-><clinit>()V
-HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayoutModifier$1;-><init>()V
-HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayoutModifier$1;->invoke(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayoutModifier$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayoutModifierInLookahead$1;-><clinit>()V
-HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayoutModifierInLookahead$1;-><init>()V
-HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLookaheadLayout$1;-><clinit>()V
-HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLookaheadLayout$1;-><init>()V
-HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLookaheadMeasure$1;-><clinit>()V
-HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLookaheadMeasure$1;-><init>()V
-HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingMeasure$1;-><clinit>()V
-HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingMeasure$1;-><init>()V
-HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingMeasure$1;->invoke(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingMeasure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->clearInvalidObservations$ui_release()V
-HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeLayoutModifierSnapshotReads$ui_release(Landroidx/compose/ui/node/LayoutNode;ZLkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeLayoutSnapshotReads$ui_release(Landroidx/compose/ui/node/LayoutNode;ZLkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeMeasureSnapshotReads$ui_release(Landroidx/compose/ui/node/LayoutNode;ZLkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeReads$ui_release(Landroidx/compose/ui/node/OwnerScope;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->startObserving$ui_release()V
-HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->stopObserving$ui_release()V
-HSPLandroidx/compose/ui/node/PointerInputModifierNodeKt;->getLayoutCoordinates(Landroidx/compose/ui/node/PointerInputModifierNode;)Landroidx/compose/ui/layout/LayoutCoordinates;
-HSPLandroidx/compose/ui/node/PointerInputModifierNodeKt;->isAttached(Landroidx/compose/ui/node/PointerInputModifierNode;)Z
-HSPLandroidx/compose/ui/node/SemanticsModifierNodeKt;->collapsedSemanticsConfiguration(Landroidx/compose/ui/node/SemanticsModifierNode;)Landroidx/compose/ui/semantics/SemanticsConfiguration;
-HSPLandroidx/compose/ui/node/SemanticsModifierNodeKt;->invalidateSemantics(Landroidx/compose/ui/node/SemanticsModifierNode;)V
-HSPLandroidx/compose/ui/node/Snake;->addDiagonalToStack-impl([ILandroidx/compose/ui/node/IntStack;)V
-HSPLandroidx/compose/ui/node/Snake;->constructor-impl([I)[I
-HSPLandroidx/compose/ui/node/Snake;->getDiagonalSize-impl([I)I
-HSPLandroidx/compose/ui/node/Snake;->getEndX-impl([I)I
-HSPLandroidx/compose/ui/node/Snake;->getEndY-impl([I)I
-HSPLandroidx/compose/ui/node/Snake;->getHasAdditionOrRemoval-impl([I)Z
-HSPLandroidx/compose/ui/node/Snake;->getReverse-impl([I)Z
-HSPLandroidx/compose/ui/node/Snake;->getStartX-impl([I)I
-HSPLandroidx/compose/ui/node/Snake;->getStartY-impl([I)I
-HSPLandroidx/compose/ui/node/Snake;->isAddition-impl([I)Z
-HSPLandroidx/compose/ui/node/TreeSet;-><init>(Ljava/util/Comparator;)V
-HSPLandroidx/compose/ui/node/UiApplier;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/node/UiApplier;->insertBottomUp(ILandroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/node/UiApplier;->insertBottomUp(ILjava/lang/Object;)V
-HSPLandroidx/compose/ui/node/UiApplier;->insertTopDown(ILandroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/node/UiApplier;->insertTopDown(ILjava/lang/Object;)V
-HSPLandroidx/compose/ui/node/UiApplier;->onClear()V
-HSPLandroidx/compose/ui/node/UiApplier;->onEndChanges()V
-HSPLandroidx/compose/ui/node/UiApplier;->remove(II)V
-HSPLandroidx/compose/ui/platform/AbstractComposeView$ensureCompositionCreated$1;-><init>(Landroidx/compose/ui/platform/AbstractComposeView;)V
-HSPLandroidx/compose/ui/platform/AbstractComposeView$ensureCompositionCreated$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/ui/platform/AbstractComposeView$ensureCompositionCreated$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/AbstractComposeView;-><clinit>()V
-HSPLandroidx/compose/ui/platform/AbstractComposeView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
-HSPLandroidx/compose/ui/platform/AbstractComposeView;->addView(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)V
-HSPLandroidx/compose/ui/platform/AbstractComposeView;->addView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V
-HSPLandroidx/compose/ui/platform/AbstractComposeView;->cacheIfAlive(Landroidx/compose/runtime/CompositionContext;)Landroidx/compose/runtime/CompositionContext;
-HSPLandroidx/compose/ui/platform/AbstractComposeView;->checkAddView()V
-HSPLandroidx/compose/ui/platform/AbstractComposeView;->disposeComposition()V
-HSPLandroidx/compose/ui/platform/AbstractComposeView;->ensureCompositionCreated()V
-HSPLandroidx/compose/ui/platform/AbstractComposeView;->internalOnLayout$ui_release(ZIIII)V
-HSPLandroidx/compose/ui/platform/AbstractComposeView;->internalOnMeasure$ui_release(II)V
-HSPLandroidx/compose/ui/platform/AbstractComposeView;->isAlive(Landroidx/compose/runtime/CompositionContext;)Z
-HSPLandroidx/compose/ui/platform/AbstractComposeView;->onAttachedToWindow()V
-HSPLandroidx/compose/ui/platform/AbstractComposeView;->onLayout(ZIIII)V
-HSPLandroidx/compose/ui/platform/AbstractComposeView;->onMeasure(II)V
-HSPLandroidx/compose/ui/platform/AbstractComposeView;->onRtlPropertiesChanged(I)V
-HSPLandroidx/compose/ui/platform/AbstractComposeView;->resolveParentCompositionContext()Landroidx/compose/runtime/CompositionContext;
-HSPLandroidx/compose/ui/platform/AbstractComposeView;->setParentCompositionContext(Landroidx/compose/runtime/CompositionContext;)V
-HSPLandroidx/compose/ui/platform/AbstractComposeView;->setParentContext(Landroidx/compose/runtime/CompositionContext;)V
-HSPLandroidx/compose/ui/platform/AbstractComposeView;->setPreviousAttachedWindowToken(Landroid/os/IBinder;)V
-HSPLandroidx/compose/ui/platform/AbstractComposeView;->shouldDelayChildPressedState()Z
-HSPLandroidx/compose/ui/platform/AndroidAccessibilityManager$Companion;-><init>()V
-HSPLandroidx/compose/ui/platform/AndroidAccessibilityManager$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/platform/AndroidAccessibilityManager;-><clinit>()V
-HSPLandroidx/compose/ui/platform/AndroidAccessibilityManager;-><init>(Landroid/content/Context;)V
-HSPLandroidx/compose/ui/platform/AndroidClipboardManager;-><init>(Landroid/content/ClipboardManager;)V
-HSPLandroidx/compose/ui/platform/AndroidClipboardManager;-><init>(Landroid/content/Context;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda0;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda0;->onGlobalLayout()V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda2;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda2;->onTouchModeChanged(Z)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda3;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$Companion;-><init>()V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$Companion;->access$getIsShowingLayoutBounds(Landroidx/compose/ui/platform/AndroidComposeView$Companion;)Z
-HSPLandroidx/compose/ui/platform/AndroidComposeView$Companion;->getIsShowingLayoutBounds()Z
-HSPLandroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;-><clinit>()V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;-><init>(Landroidx/lifecycle/LifecycleOwner;Landroidx/savedstate/SavedStateRegistryOwner;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;->getLifecycleOwner()Landroidx/lifecycle/LifecycleOwner;
-HSPLandroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;->getSavedStateRegistryOwner()Landroidx/savedstate/SavedStateRegistryOwner;
-HSPLandroidx/compose/ui/platform/AndroidComposeView$_inputModeManager$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$configurationChangeObserver$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$configurationChangeObserver$1;-><init>()V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;->invoke(Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$keyInputModifier$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$pointerIconService$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$resendMotionEventOnLayout$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$resendMotionEventOnLayout$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/AndroidComposeView$resendMotionEventOnLayout$1;->invoke()V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$resendMotionEventRunnable$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$rotaryInputModifier$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$rotaryInputModifier$1;-><init>()V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$semanticsModifier$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$semanticsModifier$1;-><init>()V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$semanticsModifier$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$semanticsModifier$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/AndroidComposeView$snapshotObserver$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView$snapshotObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/AndroidComposeView$snapshotObserver$1;->invoke(Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->$r8$lambda$6rnsioIDxAVR319ScBkOteeoeiE(Landroidx/compose/ui/platform/AndroidComposeView;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->$r8$lambda$TvhWqMihl4JwF42Odovn0ewO6fk(Landroidx/compose/ui/platform/AndroidComposeView;Z)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;-><clinit>()V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;-><init>(Landroid/content/Context;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->access$getGetBooleanMethod$cp()Ljava/lang/reflect/Method;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->access$getPreviousMotionEvent$p(Landroidx/compose/ui/platform/AndroidComposeView;)Landroid/view/MotionEvent;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->access$getSystemPropertiesClass$cp()Ljava/lang/Class;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->access$setGetBooleanMethod$cp(Ljava/lang/reflect/Method;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->access$setSystemPropertiesClass$cp(Ljava/lang/Class;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->autofillSupported()Z
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->boundsUpdatesEventLoop(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->childSizeCanAffectParentSize(Landroidx/compose/ui/node/LayoutNode;)Z
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->convertMeasureSpec(I)Lkotlin/Pair;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->createLayer(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/node/OwnedLayer;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->dispatchDraw(Landroid/graphics/Canvas;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->dispatchTouchEvent(Landroid/view/MotionEvent;)Z
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->forceMeasureTheSubtree(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getAccessibilityManager()Landroidx/compose/ui/platform/AccessibilityManager;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getAccessibilityManager()Landroidx/compose/ui/platform/AndroidAccessibilityManager;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getAutofill()Landroidx/compose/ui/autofill/Autofill;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getAutofillTree()Landroidx/compose/ui/autofill/AutofillTree;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getClipboardManager()Landroidx/compose/ui/platform/AndroidClipboardManager;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getClipboardManager()Landroidx/compose/ui/platform/ClipboardManager;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getDensity()Landroidx/compose/ui/unit/Density;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getFocusOwner()Landroidx/compose/ui/focus/FocusOwner;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getFontFamilyResolver()Landroidx/compose/ui/text/font/FontFamily$Resolver;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getFontLoader()Landroidx/compose/ui/text/font/Font$ResourceLoader;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getFontWeightAdjustmentCompat(Landroid/content/res/Configuration;)I
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getHapticFeedBack()Landroidx/compose/ui/hapticfeedback/HapticFeedback;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getInputModeManager()Landroidx/compose/ui/input/InputModeManager;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getModifierLocalManager()Landroidx/compose/ui/modifier/ModifierLocalManager;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getPointerIconService()Landroidx/compose/ui/input/pointer/PointerIconService;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getRoot()Landroidx/compose/ui/node/LayoutNode;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getSemanticsOwner()Landroidx/compose/ui/semantics/SemanticsOwner;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getSharedDrawScope()Landroidx/compose/ui/node/LayoutNodeDrawScope;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getShowLayoutBounds()Z
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getSnapshotObserver()Landroidx/compose/ui/node/OwnerSnapshotObserver;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getTextInputService()Landroidx/compose/ui/text/input/TextInputService;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getTextToolbar()Landroidx/compose/ui/platform/TextToolbar;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getView()Landroid/view/View;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getViewConfiguration()Landroidx/compose/ui/platform/ViewConfiguration;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getViewTreeOwners()Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->getWindowInfo()Landroidx/compose/ui/platform/WindowInfo;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->globalLayoutListener$lambda$1(Landroidx/compose/ui/platform/AndroidComposeView;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->handleMotionEvent-8iAsVTc(Landroid/view/MotionEvent;)I
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->hasChangedDevices(Landroid/view/MotionEvent;Landroid/view/MotionEvent;)Z
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->invalidateLayers(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->invalidateLayoutNodeMeasurement(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->isBadMotionEvent(Landroid/view/MotionEvent;)Z
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->isInBounds(Landroid/view/MotionEvent;)Z
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->isPositionChanged(Landroid/view/MotionEvent;)Z
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->keyboardVisibilityEventLoop(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->measureAndLayout(Z)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->notifyLayerIsDirty$ui_release(Landroidx/compose/ui/node/OwnedLayer;Z)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->onAttach(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->onAttachedToWindow()V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->onCheckIsTextEditor()Z
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->onDetach(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->onDetachedFromWindow()V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->onDraw(Landroid/graphics/Canvas;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->onEndApplyChanges()V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->onLayout(ZIIII)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->onLayoutChange(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->onMeasure(II)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->onRequestMeasure(Landroidx/compose/ui/node/LayoutNode;ZZ)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->onRequestRelayout(Landroidx/compose/ui/node/LayoutNode;ZZ)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->onResume(Landroidx/lifecycle/LifecycleOwner;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->onRtlPropertiesChanged(I)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->onSemanticsChange()V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->onWindowFocusChanged(Z)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->recalculateWindowPosition()V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->recalculateWindowPosition(Landroid/view/MotionEvent;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->recalculateWindowViewTransforms()V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->recycle$ui_release(Landroidx/compose/ui/node/OwnedLayer;)Z
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->registerOnEndApplyChangesListener(Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->requestClearInvalidObservations()V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->scheduleMeasureAndLayout$default(Landroidx/compose/ui/platform/AndroidComposeView;Landroidx/compose/ui/node/LayoutNode;ILjava/lang/Object;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->scheduleMeasureAndLayout(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->screenToLocal-MK-Hz9U(J)J
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->sendMotionEvent-8iAsVTc(Landroid/view/MotionEvent;)I
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->setConfigurationChangeObserver(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->setOnViewTreeOwnersAvailable(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->setShowLayoutBounds(Z)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->setViewTreeOwners(Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->touchModeChangeListener$lambda$3(Landroidx/compose/ui/platform/AndroidComposeView;Z)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView;->updatePositionCacheAndDispatch()V
-HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda0;-><init>(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda1;-><init>(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda2;-><init>(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;->onViewAttachedToWindow(Landroid/view/View;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;->onViewDetachedFromWindow(Landroid/view/View;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Companion;-><init>()V
-HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider;-><init>(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$SemanticsNodeCopy;-><init>(Landroidx/compose/ui/semantics/SemanticsNode;Ljava/util/Map;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$boundsUpdatesEventLoop$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$boundsUpdatesEventLoop$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sendScrollEventIfNeededLambda$1;-><init>(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;-><clinit>()V
-HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->access$getHandler$p(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)Landroid/os/Handler;
-HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->access$getSemanticsChangeChecker$p(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)Ljava/lang/Runnable;
-HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->boundsUpdatesEventLoop(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getAccessibilityManager$ui_release()Landroid/view/accessibility/AccessibilityManager;
-HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getEnabledStateListener$ui_release()Landroid/view/accessibility/AccessibilityManager$AccessibilityStateChangeListener;
-HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getTouchExplorationStateListener$ui_release()Landroid/view/accessibility/AccessibilityManager$TouchExplorationStateChangeListener;
-HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->isEnabled$ui_release()Z
-HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->onLayoutChange$ui_release(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->onSemanticsChange$ui_release()V
-HSPLandroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;-><clinit>()V
-HSPLandroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;-><init>()V
-HSPLandroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;->disallowForceDark(Landroid/view/View;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsN;-><clinit>()V
-HSPLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsN;-><init>()V
-HSPLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsN;->setPointerIcon(Landroid/view/View;Landroidx/compose/ui/input/pointer/PointerIcon;)V
-HSPLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;-><clinit>()V
-HSPLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;-><init>()V
-HSPLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;->focusable(Landroid/view/View;IZ)V
-HSPLandroidx/compose/ui/platform/AndroidComposeView_androidKt$textInputServiceFactory$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/AndroidComposeView_androidKt$textInputServiceFactory$1;-><init>()V
-HSPLandroidx/compose/ui/platform/AndroidComposeView_androidKt$textInputServiceFactory$1;->invoke(Landroidx/compose/ui/text/input/PlatformTextInputService;)Landroidx/compose/ui/text/input/TextInputService;
-HSPLandroidx/compose/ui/platform/AndroidComposeView_androidKt$textInputServiceFactory$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/AndroidComposeView_androidKt;-><clinit>()V
-HSPLandroidx/compose/ui/platform/AndroidComposeView_androidKt;->access$layoutDirectionFromInt(I)Landroidx/compose/ui/unit/LayoutDirection;
-HSPLandroidx/compose/ui/platform/AndroidComposeView_androidKt;->getLocaleLayoutDirection(Landroid/content/res/Configuration;)Landroidx/compose/ui/unit/LayoutDirection;
-HSPLandroidx/compose/ui/platform/AndroidComposeView_androidKt;->getTextInputServiceFactory()Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/ui/platform/AndroidComposeView_androidKt;->layoutDirectionFromInt(I)Landroidx/compose/ui/unit/LayoutDirection;
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalConfiguration$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalConfiguration$1;-><init>()V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalContext$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalContext$1;-><init>()V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalImageVectorCache$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalImageVectorCache$1;-><init>()V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalLifecycleOwner$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalLifecycleOwner$1;-><init>()V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalSavedStateRegistryOwner$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalSavedStateRegistryOwner$1;-><init>()V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalView$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalView$1;-><init>()V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$1$1;-><init>(Landroidx/compose/runtime/MutableState;)V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2$invoke$$inlined$onDispose$1;-><init>(Landroidx/compose/ui/platform/DisposableSaveableStateRegistry;)V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2$invoke$$inlined$onDispose$1;->dispose()V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2;-><init>(Landroidx/compose/ui/platform/DisposableSaveableStateRegistry;)V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$3;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;Landroidx/compose/ui/platform/AndroidUriHandler;Lkotlin/jvm/functions/Function2;I)V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$3;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$4;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;Lkotlin/jvm/functions/Function2;I)V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$4;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1$invoke$$inlined$onDispose$1;-><init>(Landroid/content/Context;Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1;)V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1$invoke$$inlined$onDispose$1;->dispose()V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1;-><init>(Landroid/content/Context;Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1;)V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1;-><init>(Landroid/content/res/Configuration;Landroidx/compose/ui/res/ImageVectorCache;)V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;-><clinit>()V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->ProvideAndroidCompositionLocals$lambda$1(Landroidx/compose/runtime/MutableState;)Landroid/content/res/Configuration;
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->ProvideAndroidCompositionLocals(Landroidx/compose/ui/platform/AndroidComposeView;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->getLocalConfiguration()Landroidx/compose/runtime/ProvidableCompositionLocal;
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->getLocalContext()Landroidx/compose/runtime/ProvidableCompositionLocal;
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->getLocalView()Landroidx/compose/runtime/ProvidableCompositionLocal;
-HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->obtainImageVectorCache(Landroid/content/Context;Landroid/content/res/Configuration;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/res/ImageVectorCache;
-HSPLandroidx/compose/ui/platform/AndroidFontResourceLoader;-><init>(Landroid/content/Context;)V
-HSPLandroidx/compose/ui/platform/AndroidTextToolbar$textActionModeCallback$1;-><init>(Landroidx/compose/ui/platform/AndroidTextToolbar;)V
-HSPLandroidx/compose/ui/platform/AndroidTextToolbar;-><init>(Landroid/view/View;)V
-HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$Companion$Main$2;-><clinit>()V
-HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$Companion$Main$2;-><init>()V
-HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$Companion$Main$2;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$Companion$Main$2;->invoke()Lkotlin/coroutines/CoroutineContext;
-HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$Companion$currentThread$1;-><init>()V
-HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$Companion;-><init>()V
-HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$Companion;->getCurrentThread()Lkotlin/coroutines/CoroutineContext;
-HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$Companion;->getMain()Lkotlin/coroutines/CoroutineContext;
-HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$dispatchCallback$1;-><init>(Landroidx/compose/ui/platform/AndroidUiDispatcher;)V
-HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$dispatchCallback$1;->doFrame(J)V
-HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$dispatchCallback$1;->run()V
-HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;-><clinit>()V
-HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;-><init>(Landroid/view/Choreographer;Landroid/os/Handler;)V
-HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;-><init>(Landroid/view/Choreographer;Landroid/os/Handler;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$getHandler$p(Landroidx/compose/ui/platform/AndroidUiDispatcher;)Landroid/os/Handler;
-HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$getLock$p(Landroidx/compose/ui/platform/AndroidUiDispatcher;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$getMain$delegate$cp()Lkotlin/Lazy;
-HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$getToRunOnFrame$p(Landroidx/compose/ui/platform/AndroidUiDispatcher;)Ljava/util/List;
-HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$performFrameDispatch(Landroidx/compose/ui/platform/AndroidUiDispatcher;J)V
-HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$performTrampolineDispatch(Landroidx/compose/ui/platform/AndroidUiDispatcher;)V
-HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$setScheduledFrameDispatch$p(Landroidx/compose/ui/platform/AndroidUiDispatcher;Z)V
-HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V
-HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->getChoreographer()Landroid/view/Choreographer;
-HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->getFrameClock()Landroidx/compose/runtime/MonotonicFrameClock;
-HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->nextTask()Ljava/lang/Runnable;
-HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->performFrameDispatch(J)V
-HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->performTrampolineDispatch()V
-HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->postFrameCallback$ui_release(Landroid/view/Choreographer$FrameCallback;)V
-HSPLandroidx/compose/ui/platform/AndroidUiDispatcher_androidKt;->access$isMainThread()Z
-HSPLandroidx/compose/ui/platform/AndroidUiDispatcher_androidKt;->isMainThread()Z
-HSPLandroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$1;-><init>(Landroidx/compose/ui/platform/AndroidUiDispatcher;Landroid/view/Choreographer$FrameCallback;)V
-HSPLandroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$callback$1;-><init>(Lkotlinx/coroutines/CancellableContinuation;Landroidx/compose/ui/platform/AndroidUiFrameClock;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$callback$1;->doFrame(J)V
-HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;-><clinit>()V
-HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;-><init>(Landroid/view/Choreographer;)V
-HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
-HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->getChoreographer()Landroid/view/Choreographer;
-HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
-HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/AndroidUriHandler;-><clinit>()V
-HSPLandroidx/compose/ui/platform/AndroidUriHandler;-><init>(Landroid/content/Context;)V
-HSPLandroidx/compose/ui/platform/AndroidViewConfiguration;-><clinit>()V
-HSPLandroidx/compose/ui/platform/AndroidViewConfiguration;-><init>(Landroid/view/ViewConfiguration;)V
-HSPLandroidx/compose/ui/platform/AndroidViewConfiguration;->getTouchSlop()F
-HSPLandroidx/compose/ui/platform/CalculateMatrixToWindowApi29;-><init>()V
-HSPLandroidx/compose/ui/platform/CalculateMatrixToWindowApi29;->calculateMatrixToWindow-EL8BTi8(Landroid/view/View;[F)V
-HSPLandroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt$lambda-1$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt$lambda-1$1;-><init>()V
-HSPLandroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt;-><clinit>()V
-HSPLandroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt;-><init>()V
-HSPLandroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt;->getLambda-1$ui_release()Lkotlin/jvm/functions/Function2;
-HSPLandroidx/compose/ui/platform/ComposeView$Content$1;-><init>(Landroidx/compose/ui/platform/ComposeView;I)V
-HSPLandroidx/compose/ui/platform/ComposeView;-><clinit>()V
-HSPLandroidx/compose/ui/platform/ComposeView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
-HSPLandroidx/compose/ui/platform/ComposeView;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;IILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/platform/ComposeView;->Content(Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/ui/platform/ComposeView;->getShouldCreateCompositionOnAttachedToWindow()Z
-HSPLandroidx/compose/ui/platform/ComposeView;->setContent(Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalAccessibilityManager$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalAccessibilityManager$1;-><init>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalAutofill$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalAutofill$1;-><init>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalAutofillTree$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalAutofillTree$1;-><init>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalClipboardManager$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalClipboardManager$1;-><init>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalDensity$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalDensity$1;-><init>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalFocusManager$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalFocusManager$1;-><init>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalFontFamilyResolver$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalFontFamilyResolver$1;-><init>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalFontLoader$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalFontLoader$1;-><init>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalHapticFeedback$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalHapticFeedback$1;-><init>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalInputModeManager$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalInputModeManager$1;-><init>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalLayoutDirection$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalLayoutDirection$1;-><init>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalPointerIconService$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalPointerIconService$1;-><init>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalTextInputService$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalTextInputService$1;-><init>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalTextToolbar$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalTextToolbar$1;-><init>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalUriHandler$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalUriHandler$1;-><init>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalViewConfiguration$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalViewConfiguration$1;-><init>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalWindowInfo$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalWindowInfo$1;-><init>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt$ProvideCommonCompositionLocals$1;-><init>(Landroidx/compose/ui/node/Owner;Landroidx/compose/ui/platform/UriHandler;Lkotlin/jvm/functions/Function2;I)V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt;-><clinit>()V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->ProvideCommonCompositionLocals(Landroidx/compose/ui/node/Owner;Landroidx/compose/ui/platform/UriHandler;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalAccessibilityManager()Landroidx/compose/runtime/ProvidableCompositionLocal;
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalDensity()Landroidx/compose/runtime/ProvidableCompositionLocal;
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalFontFamilyResolver()Landroidx/compose/runtime/ProvidableCompositionLocal;
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalInputModeManager()Landroidx/compose/runtime/ProvidableCompositionLocal;
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalLayoutDirection()Landroidx/compose/runtime/ProvidableCompositionLocal;
-HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalViewConfiguration()Landroidx/compose/runtime/ProvidableCompositionLocal;
-HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry;Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->canBeSaved(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->consumeRestored(Ljava/lang/String;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->dispose()V
-HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->registerProvider(Ljava/lang/String;Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/saveable/SaveableStateRegistry$Entry;
-HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1;-><init>(ZLandroidx/savedstate/SavedStateRegistry;Ljava/lang/String;)V
-HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1;->invoke()V
-HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$registered$1;-><init>(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V
-HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$saveableStateRegistry$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$saveableStateRegistry$1;-><init>()V
-HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$saveableStateRegistry$1;->invoke(Ljava/lang/Object;)Ljava/lang/Boolean;
-HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$saveableStateRegistry$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt;-><clinit>()V
-HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt;->DisposableSaveableStateRegistry(Landroid/view/View;Landroidx/savedstate/SavedStateRegistryOwner;)Landroidx/compose/ui/platform/DisposableSaveableStateRegistry;
-HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt;->DisposableSaveableStateRegistry(Ljava/lang/String;Landroidx/savedstate/SavedStateRegistryOwner;)Landroidx/compose/ui/platform/DisposableSaveableStateRegistry;
-HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt;->access$canBeSavedToBundle(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt;->canBeSavedToBundle(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1;-><init>(Lkotlinx/coroutines/channels/Channel;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$2;-><init>(Lkotlinx/coroutines/channels/Channel;)V
-HSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$2;->invoke(Ljava/lang/Object;)V
-HSPLandroidx/compose/ui/platform/GlobalSnapshotManager;-><clinit>()V
-HSPLandroidx/compose/ui/platform/GlobalSnapshotManager;-><init>()V
-HSPLandroidx/compose/ui/platform/GlobalSnapshotManager;->ensureStarted()V
-HSPLandroidx/compose/ui/platform/InspectableModifier$End;-><init>(Landroidx/compose/ui/platform/InspectableModifier;)V
-HSPLandroidx/compose/ui/platform/InspectableModifier;-><clinit>()V
-HSPLandroidx/compose/ui/platform/InspectableModifier;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/platform/InspectableModifier;->getEnd()Landroidx/compose/ui/platform/InspectableModifier$End;
-HSPLandroidx/compose/ui/platform/InspectableValueKt$NoInspectorInfo$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/InspectableValueKt$NoInspectorInfo$1;-><init>()V
-HSPLandroidx/compose/ui/platform/InspectableValueKt;-><clinit>()V
-HSPLandroidx/compose/ui/platform/InspectableValueKt;->getNoInspectorInfo()Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/ui/platform/InspectableValueKt;->inspectableWrapper(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/platform/InspectableValueKt;->isDebugInspectorInfoEnabled()Z
-HSPLandroidx/compose/ui/platform/InspectorValueInfo;-><clinit>()V
-HSPLandroidx/compose/ui/platform/InspectorValueInfo;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/platform/InvertMatrixKt;->invertTo-JiSxe2E([F[F)Z
-HSPLandroidx/compose/ui/platform/LayerMatrixCache;-><init>(Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/ui/platform/LayerMatrixCache;->calculateInverseMatrix-bWbORWo(Ljava/lang/Object;)[F
-HSPLandroidx/compose/ui/platform/LayerMatrixCache;->calculateMatrix-GrdbGEg(Ljava/lang/Object;)[F
-HSPLandroidx/compose/ui/platform/LayerMatrixCache;->invalidate()V
-HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;-><init>()V
-HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
-HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->getScaleFactor()F
-HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
-HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->setScaleFactor(F)V
-HSPLandroidx/compose/ui/platform/OutlineResolver;-><init>(Landroidx/compose/ui/unit/Density;)V
-HSPLandroidx/compose/ui/platform/OutlineResolver;->getOutline()Landroid/graphics/Outline;
-HSPLandroidx/compose/ui/platform/OutlineResolver;->getOutlineClipSupported()Z
-HSPLandroidx/compose/ui/platform/OutlineResolver;->isInOutline-k-4lQ0M(J)Z
-HSPLandroidx/compose/ui/platform/OutlineResolver;->update(Landroidx/compose/ui/graphics/Shape;FZFLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Z
-HSPLandroidx/compose/ui/platform/OutlineResolver;->update-uvyYCjk(J)V
-HSPLandroidx/compose/ui/platform/OutlineResolver;->updateCache()V
-HSPLandroidx/compose/ui/platform/OutlineResolver;->updateCacheWithPath(Landroidx/compose/ui/graphics/Path;)V
-HSPLandroidx/compose/ui/platform/OutlineResolver;->updateCacheWithRect(Landroidx/compose/ui/geometry/Rect;)V
-HSPLandroidx/compose/ui/platform/OutlineResolver;->updateCacheWithRoundRect(Landroidx/compose/ui/geometry/RoundRect;)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->discardDisplayList()V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->drawInto(Landroid/graphics/Canvas;)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getAlpha()F
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getClipToBounds()Z
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getClipToOutline()Z
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getElevation()F
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getHasDisplayList()Z
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getHeight()I
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getLeft()I
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getMatrix(Landroid/graphics/Matrix;)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getTop()I
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getWidth()I
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->offsetLeftAndRight(I)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->offsetTopAndBottom(I)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->record(Landroidx/compose/ui/graphics/CanvasHolder;Landroidx/compose/ui/graphics/Path;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setAlpha(F)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setAmbientShadowColor(I)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setCameraDistance(F)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setClipToBounds(Z)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setClipToOutline(Z)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setCompositingStrategy-aDBOjCE(I)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setElevation(F)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setHasOverlappingRendering(Z)Z
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setOutline(Landroid/graphics/Outline;)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setPivotX(F)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setPivotY(F)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setPosition(IIII)Z
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setRenderEffect(Landroidx/compose/ui/graphics/RenderEffect;)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setRotationX(F)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setRotationY(F)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setRotationZ(F)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setScaleX(F)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setScaleY(F)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setSpotShadowColor(I)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setTranslationX(F)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setTranslationY(F)V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29VerificationHelper;-><clinit>()V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29VerificationHelper;-><init>()V
-HSPLandroidx/compose/ui/platform/RenderNodeApi29VerificationHelper;->setRenderEffect(Landroid/graphics/RenderNode;Landroidx/compose/ui/graphics/RenderEffect;)V
-HSPLandroidx/compose/ui/platform/RenderNodeLayer$Companion$getMatrix$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/RenderNodeLayer$Companion$getMatrix$1;-><init>()V
-HSPLandroidx/compose/ui/platform/RenderNodeLayer$Companion$getMatrix$1;->invoke(Landroidx/compose/ui/platform/DeviceRenderNode;Landroid/graphics/Matrix;)V
-HSPLandroidx/compose/ui/platform/RenderNodeLayer$Companion$getMatrix$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/RenderNodeLayer$Companion;-><init>()V
-HSPLandroidx/compose/ui/platform/RenderNodeLayer$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/platform/RenderNodeLayer;-><clinit>()V
-HSPLandroidx/compose/ui/platform/RenderNodeLayer;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/ui/platform/RenderNodeLayer;->destroy()V
-HSPLandroidx/compose/ui/platform/RenderNodeLayer;->drawLayer(Landroidx/compose/ui/graphics/Canvas;)V
-HSPLandroidx/compose/ui/platform/RenderNodeLayer;->invalidate()V
-HSPLandroidx/compose/ui/platform/RenderNodeLayer;->isInLayer-k-4lQ0M(J)Z
-HSPLandroidx/compose/ui/platform/RenderNodeLayer;->mapOffset-8S9VItk(JZ)J
-HSPLandroidx/compose/ui/platform/RenderNodeLayer;->move--gyyYBs(J)V
-HSPLandroidx/compose/ui/platform/RenderNodeLayer;->resize-ozmzZPI(J)V
-HSPLandroidx/compose/ui/platform/RenderNodeLayer;->reuseLayer(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/ui/platform/RenderNodeLayer;->setDirty(Z)V
-HSPLandroidx/compose/ui/platform/RenderNodeLayer;->triggerRepaint()V
-HSPLandroidx/compose/ui/platform/RenderNodeLayer;->updateDisplayList()V
-HSPLandroidx/compose/ui/platform/RenderNodeLayer;->updateLayerProperties-dDxr-wY(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZLandroidx/compose/ui/graphics/RenderEffect;JJILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)V
-HSPLandroidx/compose/ui/platform/ShapeContainingUtilKt;->cornersFit(Landroidx/compose/ui/geometry/RoundRect;)Z
-HSPLandroidx/compose/ui/platform/ShapeContainingUtilKt;->isInOutline(Landroidx/compose/ui/graphics/Outline;FFLandroidx/compose/ui/graphics/Path;Landroidx/compose/ui/graphics/Path;)Z
-HSPLandroidx/compose/ui/platform/ShapeContainingUtilKt;->isInRectangle(Landroidx/compose/ui/geometry/Rect;FF)Z
-HSPLandroidx/compose/ui/platform/ShapeContainingUtilKt;->isInRoundedRect(Landroidx/compose/ui/graphics/Outline$Rounded;FFLandroidx/compose/ui/graphics/Path;Landroidx/compose/ui/graphics/Path;)Z
-HSPLandroidx/compose/ui/platform/ShapeContainingUtilKt;->isWithinEllipse-VE1yxkc(FFJFF)Z
-HSPLandroidx/compose/ui/platform/TextToolbarStatus;->$values()[Landroidx/compose/ui/platform/TextToolbarStatus;
-HSPLandroidx/compose/ui/platform/TextToolbarStatus;-><clinit>()V
-HSPLandroidx/compose/ui/platform/TextToolbarStatus;-><init>(Ljava/lang/String;I)V
-HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$Companion;-><clinit>()V
-HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$Companion;-><init>()V
-HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$Companion;->getDefault()Landroidx/compose/ui/platform/ViewCompositionStrategy;
-HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$1;-><init>(Landroidx/compose/ui/platform/AbstractComposeView;Landroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$listener$1;Landroidx/customview/poolingcontainer/PoolingContainerListener;)V
-HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$listener$1;-><init>(Landroidx/compose/ui/platform/AbstractComposeView;)V
-HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$listener$1;->onViewAttachedToWindow(Landroid/view/View;)V
-HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$listener$1;->onViewDetachedFromWindow(Landroid/view/View;)V
-HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$poolingContainerListener$1;-><init>(Landroidx/compose/ui/platform/AbstractComposeView;)V
-HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool;-><clinit>()V
-HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool;-><init>()V
-HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool;->installFor(Landroidx/compose/ui/platform/AbstractComposeView;)Lkotlin/jvm/functions/Function0;
-HSPLandroidx/compose/ui/platform/ViewCompositionStrategy;-><clinit>()V
-HSPLandroidx/compose/ui/platform/ViewConfiguration;->getMinimumTouchTargetSize-MYxV2XQ()J
-HSPLandroidx/compose/ui/platform/ViewLayer$Companion$OutlineProvider$1;-><init>()V
-HSPLandroidx/compose/ui/platform/ViewLayer$Companion$getMatrix$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/ViewLayer$Companion$getMatrix$1;-><init>()V
-HSPLandroidx/compose/ui/platform/ViewLayer$Companion;-><init>()V
-HSPLandroidx/compose/ui/platform/ViewLayer$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/platform/ViewLayer$Companion;->getShouldUseDispatchDraw()Z
-HSPLandroidx/compose/ui/platform/ViewLayer;-><clinit>()V
-HSPLandroidx/compose/ui/platform/ViewLayer;->access$getShouldUseDispatchDraw$cp()Z
-HSPLandroidx/compose/ui/platform/ViewRootForTest$Companion;-><clinit>()V
-HSPLandroidx/compose/ui/platform/ViewRootForTest$Companion;-><init>()V
-HSPLandroidx/compose/ui/platform/ViewRootForTest$Companion;->getOnViewCreatedCallback()Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/ui/platform/ViewRootForTest;-><clinit>()V
-HSPLandroidx/compose/ui/platform/WeakCache;-><init>()V
-HSPLandroidx/compose/ui/platform/WeakCache;->clearWeakReferences()V
-HSPLandroidx/compose/ui/platform/WeakCache;->pop()Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/WeakCache;->push(Ljava/lang/Object;)V
-HSPLandroidx/compose/ui/platform/WindowInfoImpl$Companion;-><init>()V
-HSPLandroidx/compose/ui/platform/WindowInfoImpl$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/platform/WindowInfoImpl;-><clinit>()V
-HSPLandroidx/compose/ui/platform/WindowInfoImpl;-><init>()V
-HSPLandroidx/compose/ui/platform/WindowInfoImpl;->setKeyboardModifiers-5xRPYO0(I)V
-HSPLandroidx/compose/ui/platform/WindowInfoImpl;->setWindowFocused(Z)V
-HSPLandroidx/compose/ui/platform/WindowRecomposerFactory$Companion$LifecycleAware$1;-><clinit>()V
-HSPLandroidx/compose/ui/platform/WindowRecomposerFactory$Companion$LifecycleAware$1;-><init>()V
-HSPLandroidx/compose/ui/platform/WindowRecomposerFactory$Companion$LifecycleAware$1;->createRecomposer(Landroid/view/View;)Landroidx/compose/runtime/Recomposer;
-HSPLandroidx/compose/ui/platform/WindowRecomposerFactory$Companion;-><clinit>()V
-HSPLandroidx/compose/ui/platform/WindowRecomposerFactory$Companion;-><init>()V
-HSPLandroidx/compose/ui/platform/WindowRecomposerFactory$Companion;->getLifecycleAware()Landroidx/compose/ui/platform/WindowRecomposerFactory;
-HSPLandroidx/compose/ui/platform/WindowRecomposerFactory;-><clinit>()V
-HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$1;-><init>(Lkotlinx/coroutines/Job;)V
-HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$1;->onViewAttachedToWindow(Landroid/view/View;)V
-HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$1;->onViewDetachedFromWindow(Landroid/view/View;)V
-HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;-><init>(Landroidx/compose/runtime/Recomposer;Landroid/view/View;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy;-><clinit>()V
-HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy;-><init>()V
-HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy;->createAndInstallWindowRecomposer$ui_release(Landroid/view/View;)Landroidx/compose/runtime/Recomposer;
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;-><init>(Landroid/view/View;Landroidx/compose/runtime/Recomposer;)V
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;->onViewAttachedToWindow(Landroid/view/View;)V
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;->onViewDetachedFromWindow(Landroid/view/View;)V
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$WhenMappings;-><clinit>()V
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1$1;-><init>(Landroidx/compose/ui/platform/MotionDurationScaleImpl;)V
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1$1;->emit(FLkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1;-><init>(Lkotlinx/coroutines/flow/StateFlow;Landroidx/compose/ui/platform/MotionDurationScaleImpl;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;-><init>(Lkotlin/jvm/internal/Ref$ObjectRef;Landroidx/compose/runtime/Recomposer;Landroidx/lifecycle/LifecycleOwner;Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2;Landroid/view/View;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2;-><init>(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/runtime/PausableMonotonicFrameClock;Landroidx/compose/runtime/Recomposer;Lkotlin/jvm/internal/Ref$ObjectRef;Landroid/view/View;)V
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;-><init>(Landroid/content/ContentResolver;Landroid/net/Uri;Landroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$contentObserver$1;Lkotlinx/coroutines/channels/Channel;Landroid/content/Context;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$contentObserver$1;-><init>(Lkotlinx/coroutines/channels/Channel;Landroid/os/Handler;)V
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;-><clinit>()V
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->access$getAnimationScaleFlowFor(Landroid/content/Context;)Lkotlinx/coroutines/flow/StateFlow;
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->createLifecycleAwareWindowRecomposer$default(Landroid/view/View;Lkotlin/coroutines/CoroutineContext;Landroidx/lifecycle/Lifecycle;ILjava/lang/Object;)Landroidx/compose/runtime/Recomposer;
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->createLifecycleAwareWindowRecomposer(Landroid/view/View;Lkotlin/coroutines/CoroutineContext;Landroidx/lifecycle/Lifecycle;)Landroidx/compose/runtime/Recomposer;
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->findViewTreeCompositionContext(Landroid/view/View;)Landroidx/compose/runtime/CompositionContext;
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->getAnimationScaleFlowFor(Landroid/content/Context;)Lkotlinx/coroutines/flow/StateFlow;
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->getCompositionContext(Landroid/view/View;)Landroidx/compose/runtime/CompositionContext;
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->getContentChild(Landroid/view/View;)Landroid/view/View;
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->getWindowRecomposer(Landroid/view/View;)Landroidx/compose/runtime/Recomposer;
-HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->setCompositionContext(Landroid/view/View;Landroidx/compose/runtime/CompositionContext;)V
-HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$1;-><init>(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$2;-><init>(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$3;-><init>(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$3;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1;-><init>(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1;-><init>(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1;->invoke(Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;)V
-HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/platform/WrappedComposition;-><init>(Landroidx/compose/ui/platform/AndroidComposeView;Landroidx/compose/runtime/Composition;)V
-HSPLandroidx/compose/ui/platform/WrappedComposition;->access$getAddedToLifecycle$p(Landroidx/compose/ui/platform/WrappedComposition;)Landroidx/lifecycle/Lifecycle;
-HSPLandroidx/compose/ui/platform/WrappedComposition;->access$getDisposed$p(Landroidx/compose/ui/platform/WrappedComposition;)Z
-HSPLandroidx/compose/ui/platform/WrappedComposition;->access$setAddedToLifecycle$p(Landroidx/compose/ui/platform/WrappedComposition;Landroidx/lifecycle/Lifecycle;)V
-HSPLandroidx/compose/ui/platform/WrappedComposition;->access$setLastContent$p(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/ui/platform/WrappedComposition;->dispose()V
-HSPLandroidx/compose/ui/platform/WrappedComposition;->getOriginal()Landroidx/compose/runtime/Composition;
-HSPLandroidx/compose/ui/platform/WrappedComposition;->getOwner()Landroidx/compose/ui/platform/AndroidComposeView;
-HSPLandroidx/compose/ui/platform/WrappedComposition;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
-HSPLandroidx/compose/ui/platform/WrappedComposition;->setContent(Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods;-><clinit>()V
-HSPLandroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods;-><init>()V
-HSPLandroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods;->onDescendantInvalidated(Landroidx/compose/ui/platform/AndroidComposeView;)V
-HSPLandroidx/compose/ui/platform/WrapperVerificationHelperMethods;-><clinit>()V
-HSPLandroidx/compose/ui/platform/WrapperVerificationHelperMethods;-><init>()V
-HSPLandroidx/compose/ui/platform/WrapperVerificationHelperMethods;->attributeSourceResourceMap(Landroid/view/View;)Ljava/util/Map;
-HSPLandroidx/compose/ui/platform/Wrapper_androidKt;-><clinit>()V
-HSPLandroidx/compose/ui/platform/Wrapper_androidKt;->createSubcomposition(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/runtime/CompositionContext;)Landroidx/compose/runtime/Composition;
-HSPLandroidx/compose/ui/platform/Wrapper_androidKt;->doSetContent(Landroidx/compose/ui/platform/AndroidComposeView;Landroidx/compose/runtime/CompositionContext;Lkotlin/jvm/functions/Function2;)Landroidx/compose/runtime/Composition;
-HSPLandroidx/compose/ui/platform/Wrapper_androidKt;->inspectionWanted(Landroidx/compose/ui/platform/AndroidComposeView;)Z
-HSPLandroidx/compose/ui/platform/Wrapper_androidKt;->setContent(Landroidx/compose/ui/platform/AbstractComposeView;Landroidx/compose/runtime/CompositionContext;Lkotlin/jvm/functions/Function2;)Landroidx/compose/runtime/Composition;
-HSPLandroidx/compose/ui/platform/actionmodecallback/TextActionModeCallback;-><init>(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/geometry/Rect;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/ui/platform/actionmodecallback/TextActionModeCallback;-><init>(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/geometry/Rect;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/res/ImageVectorCache;-><init>()V
-HSPLandroidx/compose/ui/res/Resources_androidKt;->resources(Landroidx/compose/runtime/Composer;I)Landroid/content/res/Resources;
-HSPLandroidx/compose/ui/res/StringResources_androidKt;->stringResource(ILandroidx/compose/runtime/Composer;I)Ljava/lang/String;
-HSPLandroidx/compose/ui/semantics/AccessibilityAction;-><clinit>()V
-HSPLandroidx/compose/ui/semantics/AccessibilityAction;-><init>(Ljava/lang/String;Lkotlin/Function;)V
-HSPLandroidx/compose/ui/semantics/AccessibilityAction;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/semantics/CollectionInfo;-><clinit>()V
-HSPLandroidx/compose/ui/semantics/CollectionInfo;-><init>(II)V
-HSPLandroidx/compose/ui/semantics/Role$Companion;-><init>()V
-HSPLandroidx/compose/ui/semantics/Role$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/semantics/Role$Companion;->getButton-o7Vup1c()I
-HSPLandroidx/compose/ui/semantics/Role$Companion;->getImage-o7Vup1c()I
-HSPLandroidx/compose/ui/semantics/Role;-><clinit>()V
-HSPLandroidx/compose/ui/semantics/Role;-><init>(I)V
-HSPLandroidx/compose/ui/semantics/Role;->access$getButton$cp()I
-HSPLandroidx/compose/ui/semantics/Role;->access$getImage$cp()I
-HSPLandroidx/compose/ui/semantics/Role;->box-impl(I)Landroidx/compose/ui/semantics/Role;
-HSPLandroidx/compose/ui/semantics/Role;->constructor-impl(I)I
-HSPLandroidx/compose/ui/semantics/Role;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/semantics/Role;->equals-impl(ILjava/lang/Object;)Z
-HSPLandroidx/compose/ui/semantics/Role;->unbox-impl()I
-HSPLandroidx/compose/ui/semantics/ScrollAxisRange;-><clinit>()V
-HSPLandroidx/compose/ui/semantics/ScrollAxisRange;-><init>(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Z)V
-HSPLandroidx/compose/ui/semantics/SemanticsActions;-><clinit>()V
-HSPLandroidx/compose/ui/semantics/SemanticsActions;-><init>()V
-HSPLandroidx/compose/ui/semantics/SemanticsActions;->getCustomActions()Landroidx/compose/ui/semantics/SemanticsPropertyKey;
-HSPLandroidx/compose/ui/semantics/SemanticsActions;->getDismiss()Landroidx/compose/ui/semantics/SemanticsPropertyKey;
-HSPLandroidx/compose/ui/semantics/SemanticsActions;->getGetTextLayoutResult()Landroidx/compose/ui/semantics/SemanticsPropertyKey;
-HSPLandroidx/compose/ui/semantics/SemanticsActions;->getOnClick()Landroidx/compose/ui/semantics/SemanticsPropertyKey;
-HSPLandroidx/compose/ui/semantics/SemanticsActions;->getRequestFocus()Landroidx/compose/ui/semantics/SemanticsPropertyKey;
-HSPLandroidx/compose/ui/semantics/SemanticsActions;->getScrollBy()Landroidx/compose/ui/semantics/SemanticsPropertyKey;
-HSPLandroidx/compose/ui/semantics/SemanticsActions;->getScrollToIndex()Landroidx/compose/ui/semantics/SemanticsPropertyKey;
-HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;-><clinit>()V
-HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;-><init>()V
-HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->contains(Landroidx/compose/ui/semantics/SemanticsPropertyKey;)Z
-HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->getOrElseNullable(Landroidx/compose/ui/semantics/SemanticsPropertyKey;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->isClearingSemantics()Z
-HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->set(Landroidx/compose/ui/semantics/SemanticsPropertyKey;Ljava/lang/Object;)V
-HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->setClearingSemantics(Z)V
-HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->setMergingSemanticsOfDescendants(Z)V
-HSPLandroidx/compose/ui/semantics/SemanticsConfigurationKt$getOrNull$1;-><clinit>()V
-HSPLandroidx/compose/ui/semantics/SemanticsConfigurationKt$getOrNull$1;-><init>()V
-HSPLandroidx/compose/ui/semantics/SemanticsConfigurationKt$getOrNull$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/semantics/SemanticsConfigurationKt;->getOrNull(Landroidx/compose/ui/semantics/SemanticsConfiguration;Landroidx/compose/ui/semantics/SemanticsPropertyKey;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/semantics/SemanticsModifierCore$Companion;-><init>()V
-HSPLandroidx/compose/ui/semantics/SemanticsModifierCore$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/semantics/SemanticsModifierCore$Companion;->generateSemanticsId()I
-HSPLandroidx/compose/ui/semantics/SemanticsModifierCore;-><clinit>()V
-HSPLandroidx/compose/ui/semantics/SemanticsModifierCore;-><init>(ZZLkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/semantics/SemanticsModifierCore;-><init>(ZZLkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/semantics/SemanticsModifierCore;->access$getLastIdentifier$cp()Ljava/util/concurrent/atomic/AtomicInteger;
-HSPLandroidx/compose/ui/semantics/SemanticsModifierCore;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/semantics/SemanticsModifierCore;->getSemanticsConfiguration()Landroidx/compose/ui/semantics/SemanticsConfiguration;
-HSPLandroidx/compose/ui/semantics/SemanticsModifierKt;->semantics$default(Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/semantics/SemanticsModifierKt;->semantics(Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
-HSPLandroidx/compose/ui/semantics/SemanticsNode;-><clinit>()V
-HSPLandroidx/compose/ui/semantics/SemanticsNode;-><init>(Landroidx/compose/ui/node/SemanticsModifierNode;ZLandroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/semantics/SemanticsNode;-><init>(Landroidx/compose/ui/node/SemanticsModifierNode;ZLandroidx/compose/ui/node/LayoutNode;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/semantics/SemanticsNode;->emitFakeNodes(Ljava/util/List;)V
-HSPLandroidx/compose/ui/semantics/SemanticsNode;->getChildren(ZZZ)Ljava/util/List;
-HSPLandroidx/compose/ui/semantics/SemanticsNode;->getReplacedChildren$ui_release()Ljava/util/List;
-HSPLandroidx/compose/ui/semantics/SemanticsNode;->getUnmergedConfig$ui_release()Landroidx/compose/ui/semantics/SemanticsConfiguration;
-HSPLandroidx/compose/ui/semantics/SemanticsNode;->isMergingSemanticsOfDescendants()Z
-HSPLandroidx/compose/ui/semantics/SemanticsNode;->unmergedChildren$ui_release(ZZ)Ljava/util/List;
-HSPLandroidx/compose/ui/semantics/SemanticsNodeKt;->access$getRole(Landroidx/compose/ui/semantics/SemanticsNode;)Landroidx/compose/ui/semantics/Role;
-HSPLandroidx/compose/ui/semantics/SemanticsNodeKt;->findOneLayerOfSemanticsWrappers$default(Landroidx/compose/ui/node/LayoutNode;Ljava/util/List;ILjava/lang/Object;)Ljava/util/List;
-HSPLandroidx/compose/ui/semantics/SemanticsNodeKt;->findOneLayerOfSemanticsWrappers(Landroidx/compose/ui/node/LayoutNode;Ljava/util/List;)Ljava/util/List;
-HSPLandroidx/compose/ui/semantics/SemanticsNodeKt;->getOuterSemantics(Landroidx/compose/ui/node/LayoutNode;)Landroidx/compose/ui/node/SemanticsModifierNode;
-HSPLandroidx/compose/ui/semantics/SemanticsNodeKt;->getRole(Landroidx/compose/ui/semantics/SemanticsNode;)Landroidx/compose/ui/semantics/Role;
-HSPLandroidx/compose/ui/semantics/SemanticsOwner;-><clinit>()V
-HSPLandroidx/compose/ui/semantics/SemanticsOwner;-><init>(Landroidx/compose/ui/node/LayoutNode;)V
-HSPLandroidx/compose/ui/semantics/SemanticsOwner;->getUnmergedRootSemanticsNode()Landroidx/compose/ui/semantics/SemanticsNode;
-HSPLandroidx/compose/ui/semantics/SemanticsProperties$ContentDescription$1;-><clinit>()V
-HSPLandroidx/compose/ui/semantics/SemanticsProperties$ContentDescription$1;-><init>()V
-HSPLandroidx/compose/ui/semantics/SemanticsProperties$InvisibleToUser$1;-><clinit>()V
-HSPLandroidx/compose/ui/semantics/SemanticsProperties$InvisibleToUser$1;-><init>()V
-HSPLandroidx/compose/ui/semantics/SemanticsProperties$IsDialog$1;-><clinit>()V
-HSPLandroidx/compose/ui/semantics/SemanticsProperties$IsDialog$1;-><init>()V
-HSPLandroidx/compose/ui/semantics/SemanticsProperties$IsPopup$1;-><clinit>()V
-HSPLandroidx/compose/ui/semantics/SemanticsProperties$IsPopup$1;-><init>()V
-HSPLandroidx/compose/ui/semantics/SemanticsProperties$PaneTitle$1;-><clinit>()V
-HSPLandroidx/compose/ui/semantics/SemanticsProperties$PaneTitle$1;-><init>()V
-HSPLandroidx/compose/ui/semantics/SemanticsProperties$Role$1;-><clinit>()V
-HSPLandroidx/compose/ui/semantics/SemanticsProperties$Role$1;-><init>()V
-HSPLandroidx/compose/ui/semantics/SemanticsProperties$TestTag$1;-><clinit>()V
-HSPLandroidx/compose/ui/semantics/SemanticsProperties$TestTag$1;-><init>()V
-HSPLandroidx/compose/ui/semantics/SemanticsProperties$Text$1;-><clinit>()V
-HSPLandroidx/compose/ui/semantics/SemanticsProperties$Text$1;-><init>()V
-HSPLandroidx/compose/ui/semantics/SemanticsProperties;-><clinit>()V
-HSPLandroidx/compose/ui/semantics/SemanticsProperties;-><init>()V
-HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getCollectionInfo()Landroidx/compose/ui/semantics/SemanticsPropertyKey;
-HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getCollectionItemInfo()Landroidx/compose/ui/semantics/SemanticsPropertyKey;
-HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getContentDescription()Landroidx/compose/ui/semantics/SemanticsPropertyKey;
-HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getEditableText()Landroidx/compose/ui/semantics/SemanticsPropertyKey;
-HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getFocused()Landroidx/compose/ui/semantics/SemanticsPropertyKey;
-HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getHorizontalScrollAxisRange()Landroidx/compose/ui/semantics/SemanticsPropertyKey;
-HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getImeAction()Landroidx/compose/ui/semantics/SemanticsPropertyKey;
-HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getIndexForKey()Landroidx/compose/ui/semantics/SemanticsPropertyKey;
-HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getIsContainer()Landroidx/compose/ui/semantics/SemanticsPropertyKey;
-HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getLiveRegion()Landroidx/compose/ui/semantics/SemanticsPropertyKey;
-HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getPaneTitle()Landroidx/compose/ui/semantics/SemanticsPropertyKey;
-HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getProgressBarRangeInfo()Landroidx/compose/ui/semantics/SemanticsPropertyKey;
-HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getRole()Landroidx/compose/ui/semantics/SemanticsPropertyKey;
-HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getSelected()Landroidx/compose/ui/semantics/SemanticsPropertyKey;
-HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getStateDescription()Landroidx/compose/ui/semantics/SemanticsPropertyKey;
-HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getTestTag()Landroidx/compose/ui/semantics/SemanticsPropertyKey;
-HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getText()Landroidx/compose/ui/semantics/SemanticsPropertyKey;
-HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getTextSelectionRange()Landroidx/compose/ui/semantics/SemanticsPropertyKey;
-HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getToggleableState()Landroidx/compose/ui/semantics/SemanticsPropertyKey;
-HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getVerticalScrollAxisRange()Landroidx/compose/ui/semantics/SemanticsPropertyKey;
-HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt$ActionPropertyKey$1;-><clinit>()V
-HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt$ActionPropertyKey$1;-><init>()V
-HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;-><clinit>()V
-HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->dismiss$default(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function0;ILjava/lang/Object;)V
-HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->dismiss(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->getTextLayoutResult$default(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V
-HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->getTextLayoutResult(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->indexForKey(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->onClick$default(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function0;ILjava/lang/Object;)V
-HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->onClick(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->requestFocus$default(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function0;ILjava/lang/Object;)V
-HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->requestFocus(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V
-HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->scrollBy$default(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)V
-HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->scrollBy(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->scrollToIndex$default(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V
-HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->scrollToIndex(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setCollectionInfo(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Landroidx/compose/ui/semantics/CollectionInfo;)V
-HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setContainer(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Z)V
-HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setContentDescription(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;)V
-HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setFocused(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Z)V
-HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setRole-kuIjeqM(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;I)V
-HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setText(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Landroidx/compose/ui/text/AnnotatedString;)V
-HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setVerticalScrollAxisRange(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Landroidx/compose/ui/semantics/ScrollAxisRange;)V
-HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey$1;-><clinit>()V
-HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey$1;-><init>()V
-HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey;-><clinit>()V
-HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey;-><init>(Ljava/lang/String;Lkotlin/jvm/functions/Function2;)V
-HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey;-><init>(Ljava/lang/String;Lkotlin/jvm/functions/Function2;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey;->setValue(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Lkotlin/reflect/KProperty;Ljava/lang/Object;)V
-HSPLandroidx/compose/ui/text/AndroidParagraph$wordBoundary$2;-><init>(Landroidx/compose/ui/text/AndroidParagraph;)V
-HSPLandroidx/compose/ui/text/AndroidParagraph;-><init>(Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;IZJ)V
-HSPLandroidx/compose/ui/text/AndroidParagraph;-><init>(Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;IZJLkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/AndroidParagraph;->constructTextLayout(IILandroid/text/TextUtils$TruncateAt;IIIII)Landroidx/compose/ui/text/android/TextLayout;
-HSPLandroidx/compose/ui/text/AndroidParagraph;->getDidExceedMaxLines()Z
-HSPLandroidx/compose/ui/text/AndroidParagraph;->getFirstBaseline()F
-HSPLandroidx/compose/ui/text/AndroidParagraph;->getHeight()F
-HSPLandroidx/compose/ui/text/AndroidParagraph;->getLastBaseline()F
-HSPLandroidx/compose/ui/text/AndroidParagraph;->getLineBaseline$ui_text_release(I)F
-HSPLandroidx/compose/ui/text/AndroidParagraph;->getLineCount()I
-HSPLandroidx/compose/ui/text/AndroidParagraph;->getPlaceholderRects()Ljava/util/List;
-HSPLandroidx/compose/ui/text/AndroidParagraph;->getShaderBrushSpans(Landroidx/compose/ui/text/android/TextLayout;)[Landroidx/compose/ui/text/platform/style/ShaderBrushSpan;
-HSPLandroidx/compose/ui/text/AndroidParagraph;->getTextPaint$ui_text_release()Landroidx/compose/ui/text/platform/AndroidTextPaint;
-HSPLandroidx/compose/ui/text/AndroidParagraph;->getWidth()F
-HSPLandroidx/compose/ui/text/AndroidParagraph;->paint(Landroidx/compose/ui/graphics/Canvas;)V
-HSPLandroidx/compose/ui/text/AndroidParagraph;->paint-iJQMabo(Landroidx/compose/ui/graphics/Canvas;JLandroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/drawscope/DrawStyle;)V
-HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->access$shouldAttachIndentationFixSpan(Landroidx/compose/ui/text/TextStyle;Z)Z
-HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->access$toLayoutAlign-AMY3VfE(Landroidx/compose/ui/text/style/TextAlign;)I
-HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->access$toLayoutBreakStrategy-u6PBz3U(Landroidx/compose/ui/text/style/LineBreak$Strategy;)I
-HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->access$toLayoutHyphenationFrequency-0_XeFpE(Landroidx/compose/ui/text/style/Hyphens;)I
-HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->access$toLayoutLineBreakStyle-4a2g8L8(Landroidx/compose/ui/text/style/LineBreak$Strictness;)I
-HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->access$toLayoutLineBreakWordStyle-gvcdTPQ(Landroidx/compose/ui/text/style/LineBreak$WordBreak;)I
-HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->shouldAttachIndentationFixSpan(Landroidx/compose/ui/text/TextStyle;Z)Z
-HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->toLayoutAlign-AMY3VfE(Landroidx/compose/ui/text/style/TextAlign;)I
-HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->toLayoutBreakStrategy-u6PBz3U(Landroidx/compose/ui/text/style/LineBreak$Strategy;)I
-HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->toLayoutHyphenationFrequency-0_XeFpE(Landroidx/compose/ui/text/style/Hyphens;)I
-HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->toLayoutLineBreakStyle-4a2g8L8(Landroidx/compose/ui/text/style/LineBreak$Strictness;)I
-HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->toLayoutLineBreakWordStyle-gvcdTPQ(Landroidx/compose/ui/text/style/LineBreak$WordBreak;)I
-HSPLandroidx/compose/ui/text/AnnotatedString$Range;-><clinit>()V
-HSPLandroidx/compose/ui/text/AnnotatedString$Range;-><init>(Ljava/lang/Object;II)V
-HSPLandroidx/compose/ui/text/AnnotatedString$Range;-><init>(Ljava/lang/Object;IILjava/lang/String;)V
-HSPLandroidx/compose/ui/text/AnnotatedString$Range;->getEnd()I
-HSPLandroidx/compose/ui/text/AnnotatedString$Range;->getItem()Ljava/lang/Object;
-HSPLandroidx/compose/ui/text/AnnotatedString$Range;->getStart()I
-HSPLandroidx/compose/ui/text/AnnotatedString;-><clinit>()V
-HSPLandroidx/compose/ui/text/AnnotatedString;-><init>(Ljava/lang/String;Ljava/util/List;Ljava/util/List;)V
-HSPLandroidx/compose/ui/text/AnnotatedString;-><init>(Ljava/lang/String;Ljava/util/List;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/AnnotatedString;-><init>(Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/util/List;)V
-HSPLandroidx/compose/ui/text/AnnotatedString;-><init>(Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/AnnotatedString;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/text/AnnotatedString;->getParagraphStylesOrNull$ui_text_release()Ljava/util/List;
-HSPLandroidx/compose/ui/text/AnnotatedString;->getSpanStyles()Ljava/util/List;
-HSPLandroidx/compose/ui/text/AnnotatedString;->getSpanStylesOrNull$ui_text_release()Ljava/util/List;
-HSPLandroidx/compose/ui/text/AnnotatedString;->getText()Ljava/lang/String;
-HSPLandroidx/compose/ui/text/AnnotatedStringKt;-><clinit>()V
-HSPLandroidx/compose/ui/text/AnnotatedStringKt;->access$substringWithoutParagraphStyles(Landroidx/compose/ui/text/AnnotatedString;II)Landroidx/compose/ui/text/AnnotatedString;
-HSPLandroidx/compose/ui/text/AnnotatedStringKt;->getLocalSpanStyles(Landroidx/compose/ui/text/AnnotatedString;II)Ljava/util/List;
-HSPLandroidx/compose/ui/text/AnnotatedStringKt;->normalizedParagraphStyles(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/ParagraphStyle;)Ljava/util/List;
-HSPLandroidx/compose/ui/text/AnnotatedStringKt;->substringWithoutParagraphStyles(Landroidx/compose/ui/text/AnnotatedString;II)Landroidx/compose/ui/text/AnnotatedString;
-HSPLandroidx/compose/ui/text/EmojiSupportMatch$Companion;-><init>()V
-HSPLandroidx/compose/ui/text/EmojiSupportMatch$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/EmojiSupportMatch$Companion;->getNone-_3YsG6Y()I
-HSPLandroidx/compose/ui/text/EmojiSupportMatch;-><clinit>()V
-HSPLandroidx/compose/ui/text/EmojiSupportMatch;->access$getNone$cp()I
-HSPLandroidx/compose/ui/text/EmojiSupportMatch;->constructor-impl(I)I
-HSPLandroidx/compose/ui/text/MultiParagraph;-><clinit>()V
-HSPLandroidx/compose/ui/text/MultiParagraph;-><init>(Landroidx/compose/ui/text/MultiParagraphIntrinsics;JIZ)V
-HSPLandroidx/compose/ui/text/MultiParagraph;-><init>(Landroidx/compose/ui/text/MultiParagraphIntrinsics;JIZLkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/MultiParagraph;->getDidExceedMaxLines()Z
-HSPLandroidx/compose/ui/text/MultiParagraph;->getFirstBaseline()F
-HSPLandroidx/compose/ui/text/MultiParagraph;->getHeight()F
-HSPLandroidx/compose/ui/text/MultiParagraph;->getIntrinsics()Landroidx/compose/ui/text/MultiParagraphIntrinsics;
-HSPLandroidx/compose/ui/text/MultiParagraph;->getLastBaseline()F
-HSPLandroidx/compose/ui/text/MultiParagraph;->getPlaceholderRects()Ljava/util/List;
-HSPLandroidx/compose/ui/text/MultiParagraph;->getWidth()F
-HSPLandroidx/compose/ui/text/MultiParagraph;->paint-iJQMabo(Landroidx/compose/ui/graphics/Canvas;JLandroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/drawscope/DrawStyle;)V
-HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics$maxIntrinsicWidth$2;-><init>(Landroidx/compose/ui/text/MultiParagraphIntrinsics;)V
-HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics$maxIntrinsicWidth$2;->invoke()Ljava/lang/Float;
-HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics$maxIntrinsicWidth$2;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics$minIntrinsicWidth$2;-><init>(Landroidx/compose/ui/text/MultiParagraphIntrinsics;)V
-HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics;-><clinit>()V
-HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics;-><init>(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;)V
-HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics;->access$resolveTextDirection(Landroidx/compose/ui/text/MultiParagraphIntrinsics;Landroidx/compose/ui/text/ParagraphStyle;Landroidx/compose/ui/text/ParagraphStyle;)Landroidx/compose/ui/text/ParagraphStyle;
-HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics;->getHasStaleResolvedFonts()Z
-HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics;->getInfoList$ui_text_release()Ljava/util/List;
-HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics;->getMaxIntrinsicWidth()F
-HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics;->getPlaceholders()Ljava/util/List;
-HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics;->resolveTextDirection(Landroidx/compose/ui/text/ParagraphStyle;Landroidx/compose/ui/text/ParagraphStyle;)Landroidx/compose/ui/text/ParagraphStyle;
-HSPLandroidx/compose/ui/text/MultiParagraphIntrinsicsKt;->access$getLocalPlaceholders(Ljava/util/List;II)Ljava/util/List;
-HSPLandroidx/compose/ui/text/MultiParagraphIntrinsicsKt;->getLocalPlaceholders(Ljava/util/List;II)Ljava/util/List;
-HSPLandroidx/compose/ui/text/ParagraphInfo;-><init>(Landroidx/compose/ui/text/Paragraph;IIIIFF)V
-HSPLandroidx/compose/ui/text/ParagraphInfo;->getParagraph()Landroidx/compose/ui/text/Paragraph;
-HSPLandroidx/compose/ui/text/ParagraphInfo;->toGlobalYPosition(F)F
-HSPLandroidx/compose/ui/text/ParagraphIntrinsicInfo;-><init>(Landroidx/compose/ui/text/ParagraphIntrinsics;II)V
-HSPLandroidx/compose/ui/text/ParagraphIntrinsicInfo;->getEndIndex()I
-HSPLandroidx/compose/ui/text/ParagraphIntrinsicInfo;->getIntrinsics()Landroidx/compose/ui/text/ParagraphIntrinsics;
-HSPLandroidx/compose/ui/text/ParagraphIntrinsicInfo;->getStartIndex()I
-HSPLandroidx/compose/ui/text/ParagraphIntrinsicsKt;->ParagraphIntrinsics(Ljava/lang/String;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;Ljava/util/List;Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;)Landroidx/compose/ui/text/ParagraphIntrinsics;
-HSPLandroidx/compose/ui/text/ParagraphKt;->Paragraph-_EkL_-Y(Landroidx/compose/ui/text/ParagraphIntrinsics;JIZ)Landroidx/compose/ui/text/Paragraph;
-HSPLandroidx/compose/ui/text/ParagraphKt;->ceilToInt(F)I
-HSPLandroidx/compose/ui/text/ParagraphStyle;-><clinit>()V
-HSPLandroidx/compose/ui/text/ParagraphStyle;-><init>(Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformParagraphStyle;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;)V
-HSPLandroidx/compose/ui/text/ParagraphStyle;-><init>(Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformParagraphStyle;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;Landroidx/compose/ui/text/style/TextMotion;)V
-HSPLandroidx/compose/ui/text/ParagraphStyle;-><init>(Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformParagraphStyle;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;Landroidx/compose/ui/text/style/TextMotion;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/ParagraphStyle;-><init>(Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformParagraphStyle;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/ParagraphStyle;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/text/ParagraphStyle;->getHyphens-EaSxIns()Landroidx/compose/ui/text/style/Hyphens;
-HSPLandroidx/compose/ui/text/ParagraphStyle;->getLineBreak-LgCVezo()Landroidx/compose/ui/text/style/LineBreak;
-HSPLandroidx/compose/ui/text/ParagraphStyle;->getLineHeight-XSAIIZE()J
-HSPLandroidx/compose/ui/text/ParagraphStyle;->getLineHeightStyle()Landroidx/compose/ui/text/style/LineHeightStyle;
-HSPLandroidx/compose/ui/text/ParagraphStyle;->getPlatformStyle()Landroidx/compose/ui/text/PlatformParagraphStyle;
-HSPLandroidx/compose/ui/text/ParagraphStyle;->getTextAlign-buA522U()Landroidx/compose/ui/text/style/TextAlign;
-HSPLandroidx/compose/ui/text/ParagraphStyle;->getTextDirection-mmuk1to()Landroidx/compose/ui/text/style/TextDirection;
-HSPLandroidx/compose/ui/text/ParagraphStyle;->getTextIndent()Landroidx/compose/ui/text/style/TextIndent;
-HSPLandroidx/compose/ui/text/ParagraphStyle;->getTextMotion()Landroidx/compose/ui/text/style/TextMotion;
-HSPLandroidx/compose/ui/text/ParagraphStyle;->merge(Landroidx/compose/ui/text/ParagraphStyle;)Landroidx/compose/ui/text/ParagraphStyle;
-HSPLandroidx/compose/ui/text/ParagraphStyle;->mergePlatformStyle(Landroidx/compose/ui/text/PlatformParagraphStyle;)Landroidx/compose/ui/text/PlatformParagraphStyle;
-HSPLandroidx/compose/ui/text/ParagraphStyleKt;-><clinit>()V
-HSPLandroidx/compose/ui/text/ParagraphStyleKt;->resolveParagraphStyleDefaults(Landroidx/compose/ui/text/ParagraphStyle;Landroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/text/ParagraphStyle;
-HSPLandroidx/compose/ui/text/SpanStyle;-><clinit>()V
-HSPLandroidx/compose/ui/text/SpanStyle;-><init>(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;)V
-HSPLandroidx/compose/ui/text/SpanStyle;-><init>(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/SpanStyle;-><init>(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/PlatformSpanStyle;)V
-HSPLandroidx/compose/ui/text/SpanStyle;-><init>(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/PlatformSpanStyle;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/SpanStyle;-><init>(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/SpanStyle;-><init>(Landroidx/compose/ui/text/style/TextForegroundStyle;JLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/PlatformSpanStyle;Landroidx/compose/ui/graphics/drawscope/DrawStyle;)V
-HSPLandroidx/compose/ui/text/SpanStyle;-><init>(Landroidx/compose/ui/text/style/TextForegroundStyle;JLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/PlatformSpanStyle;Landroidx/compose/ui/graphics/drawscope/DrawStyle;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/SpanStyle;-><init>(Landroidx/compose/ui/text/style/TextForegroundStyle;JLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/PlatformSpanStyle;Landroidx/compose/ui/graphics/drawscope/DrawStyle;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/SpanStyle;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/text/SpanStyle;->getAlpha()F
-HSPLandroidx/compose/ui/text/SpanStyle;->getBackground-0d7_KjU()J
-HSPLandroidx/compose/ui/text/SpanStyle;->getBaselineShift-5SSeXJ0()Landroidx/compose/ui/text/style/BaselineShift;
-HSPLandroidx/compose/ui/text/SpanStyle;->getBrush()Landroidx/compose/ui/graphics/Brush;
-HSPLandroidx/compose/ui/text/SpanStyle;->getColor-0d7_KjU()J
-HSPLandroidx/compose/ui/text/SpanStyle;->getDrawStyle()Landroidx/compose/ui/graphics/drawscope/DrawStyle;
-HSPLandroidx/compose/ui/text/SpanStyle;->getFontFamily()Landroidx/compose/ui/text/font/FontFamily;
-HSPLandroidx/compose/ui/text/SpanStyle;->getFontFeatureSettings()Ljava/lang/String;
-HSPLandroidx/compose/ui/text/SpanStyle;->getFontSize-XSAIIZE()J
-HSPLandroidx/compose/ui/text/SpanStyle;->getFontStyle-4Lr2A7w()Landroidx/compose/ui/text/font/FontStyle;
-HSPLandroidx/compose/ui/text/SpanStyle;->getFontSynthesis-ZQGJjVo()Landroidx/compose/ui/text/font/FontSynthesis;
-HSPLandroidx/compose/ui/text/SpanStyle;->getFontWeight()Landroidx/compose/ui/text/font/FontWeight;
-HSPLandroidx/compose/ui/text/SpanStyle;->getLetterSpacing-XSAIIZE()J
-HSPLandroidx/compose/ui/text/SpanStyle;->getLocaleList()Landroidx/compose/ui/text/intl/LocaleList;
-HSPLandroidx/compose/ui/text/SpanStyle;->getPlatformStyle()Landroidx/compose/ui/text/PlatformSpanStyle;
-HSPLandroidx/compose/ui/text/SpanStyle;->getShadow()Landroidx/compose/ui/graphics/Shadow;
-HSPLandroidx/compose/ui/text/SpanStyle;->getTextDecoration()Landroidx/compose/ui/text/style/TextDecoration;
-HSPLandroidx/compose/ui/text/SpanStyle;->getTextForegroundStyle$ui_text_release()Landroidx/compose/ui/text/style/TextForegroundStyle;
-HSPLandroidx/compose/ui/text/SpanStyle;->getTextGeometricTransform()Landroidx/compose/ui/text/style/TextGeometricTransform;
-HSPLandroidx/compose/ui/text/SpanStyle;->hasSameLayoutAffectingAttributes$ui_text_release(Landroidx/compose/ui/text/SpanStyle;)Z
-HSPLandroidx/compose/ui/text/SpanStyle;->hasSameNonLayoutAttributes(Landroidx/compose/ui/text/SpanStyle;)Z
-HSPLandroidx/compose/ui/text/SpanStyle;->merge(Landroidx/compose/ui/text/SpanStyle;)Landroidx/compose/ui/text/SpanStyle;
-HSPLandroidx/compose/ui/text/SpanStyle;->mergePlatformStyle(Landroidx/compose/ui/text/PlatformSpanStyle;)Landroidx/compose/ui/text/PlatformSpanStyle;
-HSPLandroidx/compose/ui/text/SpanStyleKt$resolveSpanStyleDefaults$1;-><clinit>()V
-HSPLandroidx/compose/ui/text/SpanStyleKt$resolveSpanStyleDefaults$1;-><init>()V
-HSPLandroidx/compose/ui/text/SpanStyleKt;-><clinit>()V
-HSPLandroidx/compose/ui/text/SpanStyleKt;->resolveSpanStyleDefaults(Landroidx/compose/ui/text/SpanStyle;)Landroidx/compose/ui/text/SpanStyle;
-HSPLandroidx/compose/ui/text/TextLayoutInput;-><clinit>()V
-HSPLandroidx/compose/ui/text/TextLayoutInput;-><init>(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;IZILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/text/font/Font$ResourceLoader;Landroidx/compose/ui/text/font/FontFamily$Resolver;J)V
-HSPLandroidx/compose/ui/text/TextLayoutInput;-><init>(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;IZILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/text/font/FontFamily$Resolver;J)V
-HSPLandroidx/compose/ui/text/TextLayoutInput;-><init>(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;IZILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/text/font/FontFamily$Resolver;JLkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/TextLayoutInput;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/text/TextLayoutInput;->getStyle()Landroidx/compose/ui/text/TextStyle;
-HSPLandroidx/compose/ui/text/TextLayoutInput;->getText()Landroidx/compose/ui/text/AnnotatedString;
-HSPLandroidx/compose/ui/text/TextLayoutResult;-><clinit>()V
-HSPLandroidx/compose/ui/text/TextLayoutResult;-><init>(Landroidx/compose/ui/text/TextLayoutInput;Landroidx/compose/ui/text/MultiParagraph;J)V
-HSPLandroidx/compose/ui/text/TextLayoutResult;-><init>(Landroidx/compose/ui/text/TextLayoutInput;Landroidx/compose/ui/text/MultiParagraph;JLkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/TextLayoutResult;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/text/TextLayoutResult;->getDidOverflowHeight()Z
-HSPLandroidx/compose/ui/text/TextLayoutResult;->getDidOverflowWidth()Z
-HSPLandroidx/compose/ui/text/TextLayoutResult;->getFirstBaseline()F
-HSPLandroidx/compose/ui/text/TextLayoutResult;->getHasVisualOverflow()Z
-HSPLandroidx/compose/ui/text/TextLayoutResult;->getLastBaseline()F
-HSPLandroidx/compose/ui/text/TextLayoutResult;->getLayoutInput()Landroidx/compose/ui/text/TextLayoutInput;
-HSPLandroidx/compose/ui/text/TextLayoutResult;->getMultiParagraph()Landroidx/compose/ui/text/MultiParagraph;
-HSPLandroidx/compose/ui/text/TextLayoutResult;->getPlaceholderRects()Ljava/util/List;
-HSPLandroidx/compose/ui/text/TextLayoutResult;->getSize-YbymL2g()J
-HSPLandroidx/compose/ui/text/TextPainter;-><clinit>()V
-HSPLandroidx/compose/ui/text/TextPainter;-><init>()V
-HSPLandroidx/compose/ui/text/TextPainter;->paint(Landroidx/compose/ui/graphics/Canvas;Landroidx/compose/ui/text/TextLayoutResult;)V
-HSPLandroidx/compose/ui/text/TextRange$Companion;-><init>()V
-HSPLandroidx/compose/ui/text/TextRange$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/TextRange$Companion;->getZero-d9O1mEE()J
-HSPLandroidx/compose/ui/text/TextRange;-><clinit>()V
-HSPLandroidx/compose/ui/text/TextRange;->access$getZero$cp()J
-HSPLandroidx/compose/ui/text/TextRange;->constructor-impl(J)J
-HSPLandroidx/compose/ui/text/TextRange;->getEnd-impl(J)I
-HSPLandroidx/compose/ui/text/TextRange;->getStart-impl(J)I
-HSPLandroidx/compose/ui/text/TextRangeKt;->TextRange(I)J
-HSPLandroidx/compose/ui/text/TextRangeKt;->TextRange(II)J
-HSPLandroidx/compose/ui/text/TextRangeKt;->constrain-8ffj60Q(JII)J
-HSPLandroidx/compose/ui/text/TextRangeKt;->packWithCheck(II)J
-HSPLandroidx/compose/ui/text/TextStyle$Companion;-><init>()V
-HSPLandroidx/compose/ui/text/TextStyle$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/TextStyle$Companion;->getDefault()Landroidx/compose/ui/text/TextStyle;
-HSPLandroidx/compose/ui/text/TextStyle;-><clinit>()V
-HSPLandroidx/compose/ui/text/TextStyle;-><init>(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformTextStyle;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;)V
-HSPLandroidx/compose/ui/text/TextStyle;-><init>(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformTextStyle;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/TextStyle;-><init>(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformTextStyle;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/TextStyle;-><init>(Landroidx/compose/ui/text/SpanStyle;Landroidx/compose/ui/text/ParagraphStyle;)V
-HSPLandroidx/compose/ui/text/TextStyle;-><init>(Landroidx/compose/ui/text/SpanStyle;Landroidx/compose/ui/text/ParagraphStyle;Landroidx/compose/ui/text/PlatformTextStyle;)V
-HSPLandroidx/compose/ui/text/TextStyle;->access$getDefault$cp()Landroidx/compose/ui/text/TextStyle;
-HSPLandroidx/compose/ui/text/TextStyle;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/text/TextStyle;->getAlpha()F
-HSPLandroidx/compose/ui/text/TextStyle;->getBrush()Landroidx/compose/ui/graphics/Brush;
-HSPLandroidx/compose/ui/text/TextStyle;->getFontFamily()Landroidx/compose/ui/text/font/FontFamily;
-HSPLandroidx/compose/ui/text/TextStyle;->getFontStyle-4Lr2A7w()Landroidx/compose/ui/text/font/FontStyle;
-HSPLandroidx/compose/ui/text/TextStyle;->getFontSynthesis-ZQGJjVo()Landroidx/compose/ui/text/font/FontSynthesis;
-HSPLandroidx/compose/ui/text/TextStyle;->getFontWeight()Landroidx/compose/ui/text/font/FontWeight;
-HSPLandroidx/compose/ui/text/TextStyle;->getLetterSpacing-XSAIIZE()J
-HSPLandroidx/compose/ui/text/TextStyle;->getLineBreak-LgCVezo()Landroidx/compose/ui/text/style/LineBreak;
-HSPLandroidx/compose/ui/text/TextStyle;->getLineHeight-XSAIIZE()J
-HSPLandroidx/compose/ui/text/TextStyle;->getLineHeightStyle()Landroidx/compose/ui/text/style/LineHeightStyle;
-HSPLandroidx/compose/ui/text/TextStyle;->getLocaleList()Landroidx/compose/ui/text/intl/LocaleList;
-HSPLandroidx/compose/ui/text/TextStyle;->getParagraphStyle$ui_text_release()Landroidx/compose/ui/text/ParagraphStyle;
-HSPLandroidx/compose/ui/text/TextStyle;->getPlatformStyle()Landroidx/compose/ui/text/PlatformTextStyle;
-HSPLandroidx/compose/ui/text/TextStyle;->getSpanStyle$ui_text_release()Landroidx/compose/ui/text/SpanStyle;
-HSPLandroidx/compose/ui/text/TextStyle;->getTextAlign-buA522U()Landroidx/compose/ui/text/style/TextAlign;
-HSPLandroidx/compose/ui/text/TextStyle;->getTextDecoration()Landroidx/compose/ui/text/style/TextDecoration;
-HSPLandroidx/compose/ui/text/TextStyle;->getTextDirection-mmuk1to()Landroidx/compose/ui/text/style/TextDirection;
-HSPLandroidx/compose/ui/text/TextStyle;->getTextIndent()Landroidx/compose/ui/text/style/TextIndent;
-HSPLandroidx/compose/ui/text/TextStyle;->getTextMotion()Landroidx/compose/ui/text/style/TextMotion;
-HSPLandroidx/compose/ui/text/TextStyle;->merge(Landroidx/compose/ui/text/ParagraphStyle;)Landroidx/compose/ui/text/TextStyle;
-HSPLandroidx/compose/ui/text/TextStyle;->merge(Landroidx/compose/ui/text/TextStyle;)Landroidx/compose/ui/text/TextStyle;
-HSPLandroidx/compose/ui/text/TextStyle;->toParagraphStyle()Landroidx/compose/ui/text/ParagraphStyle;
-HSPLandroidx/compose/ui/text/TextStyle;->toSpanStyle()Landroidx/compose/ui/text/SpanStyle;
-HSPLandroidx/compose/ui/text/TextStyleKt$WhenMappings;-><clinit>()V
-HSPLandroidx/compose/ui/text/TextStyleKt;->access$createPlatformTextStyleInternal(Landroidx/compose/ui/text/PlatformSpanStyle;Landroidx/compose/ui/text/PlatformParagraphStyle;)Landroidx/compose/ui/text/PlatformTextStyle;
-HSPLandroidx/compose/ui/text/TextStyleKt;->createPlatformTextStyleInternal(Landroidx/compose/ui/text/PlatformSpanStyle;Landroidx/compose/ui/text/PlatformParagraphStyle;)Landroidx/compose/ui/text/PlatformTextStyle;
-HSPLandroidx/compose/ui/text/TextStyleKt;->resolveDefaults(Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/text/TextStyle;
-HSPLandroidx/compose/ui/text/TextStyleKt;->resolveTextDirection-Yj3eThk(Landroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/text/style/TextDirection;)I
-HSPLandroidx/compose/ui/text/android/BoringLayoutFactory33;-><clinit>()V
-HSPLandroidx/compose/ui/text/android/BoringLayoutFactory33;-><init>()V
-HSPLandroidx/compose/ui/text/android/BoringLayoutFactory33;->isBoring(Ljava/lang/CharSequence;Landroid/text/TextPaint;Landroid/text/TextDirectionHeuristic;)Landroid/text/BoringLayout$Metrics;
-HSPLandroidx/compose/ui/text/android/BoringLayoutFactory;-><clinit>()V
-HSPLandroidx/compose/ui/text/android/BoringLayoutFactory;-><init>()V
-HSPLandroidx/compose/ui/text/android/BoringLayoutFactory;->measure(Ljava/lang/CharSequence;Landroid/text/TextPaint;Landroid/text/TextDirectionHeuristic;)Landroid/text/BoringLayout$Metrics;
-HSPLandroidx/compose/ui/text/android/LayoutIntrinsics$boringMetrics$2;-><init>(ILjava/lang/CharSequence;Landroid/text/TextPaint;)V
-HSPLandroidx/compose/ui/text/android/LayoutIntrinsics$boringMetrics$2;->invoke()Landroid/text/BoringLayout$Metrics;
-HSPLandroidx/compose/ui/text/android/LayoutIntrinsics$boringMetrics$2;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/text/android/LayoutIntrinsics$maxIntrinsicWidth$2;-><init>(Landroidx/compose/ui/text/android/LayoutIntrinsics;Ljava/lang/CharSequence;Landroid/text/TextPaint;)V
-HSPLandroidx/compose/ui/text/android/LayoutIntrinsics$maxIntrinsicWidth$2;->invoke()Ljava/lang/Float;
-HSPLandroidx/compose/ui/text/android/LayoutIntrinsics$maxIntrinsicWidth$2;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/text/android/LayoutIntrinsics$minIntrinsicWidth$2;-><init>(Ljava/lang/CharSequence;Landroid/text/TextPaint;)V
-HSPLandroidx/compose/ui/text/android/LayoutIntrinsics;-><clinit>()V
-HSPLandroidx/compose/ui/text/android/LayoutIntrinsics;-><init>(Ljava/lang/CharSequence;Landroid/text/TextPaint;I)V
-HSPLandroidx/compose/ui/text/android/LayoutIntrinsics;->getBoringMetrics()Landroid/text/BoringLayout$Metrics;
-HSPLandroidx/compose/ui/text/android/LayoutIntrinsics;->getMaxIntrinsicWidth()F
-HSPLandroidx/compose/ui/text/android/LayoutIntrinsicsKt;->access$shouldIncreaseMaxIntrinsic(FLjava/lang/CharSequence;Landroid/text/TextPaint;)Z
-HSPLandroidx/compose/ui/text/android/LayoutIntrinsicsKt;->shouldIncreaseMaxIntrinsic(FLjava/lang/CharSequence;Landroid/text/TextPaint;)Z
-HSPLandroidx/compose/ui/text/android/SpannedExtensionsKt;->hasSpan(Landroid/text/Spanned;Ljava/lang/Class;)Z
-HSPLandroidx/compose/ui/text/android/StaticLayoutFactory23;-><init>()V
-HSPLandroidx/compose/ui/text/android/StaticLayoutFactory23;->create(Landroidx/compose/ui/text/android/StaticLayoutParams;)Landroid/text/StaticLayout;
-HSPLandroidx/compose/ui/text/android/StaticLayoutFactory26;-><clinit>()V
-HSPLandroidx/compose/ui/text/android/StaticLayoutFactory26;-><init>()V
-HSPLandroidx/compose/ui/text/android/StaticLayoutFactory26;->setJustificationMode(Landroid/text/StaticLayout$Builder;I)V
-HSPLandroidx/compose/ui/text/android/StaticLayoutFactory28;-><clinit>()V
-HSPLandroidx/compose/ui/text/android/StaticLayoutFactory28;-><init>()V
-HSPLandroidx/compose/ui/text/android/StaticLayoutFactory28;->setUseLineSpacingFromFallbacks(Landroid/text/StaticLayout$Builder;Z)V
-HSPLandroidx/compose/ui/text/android/StaticLayoutFactory33;-><clinit>()V
-HSPLandroidx/compose/ui/text/android/StaticLayoutFactory33;-><init>()V
-HSPLandroidx/compose/ui/text/android/StaticLayoutFactory33;->setLineBreakConfig(Landroid/text/StaticLayout$Builder;II)V
-HSPLandroidx/compose/ui/text/android/StaticLayoutFactory;-><clinit>()V
-HSPLandroidx/compose/ui/text/android/StaticLayoutFactory;-><init>()V
-HSPLandroidx/compose/ui/text/android/StaticLayoutFactory;->create(Ljava/lang/CharSequence;IILandroid/text/TextPaint;ILandroid/text/TextDirectionHeuristic;Landroid/text/Layout$Alignment;ILandroid/text/TextUtils$TruncateAt;IFFIZZIIII[I[I)Landroid/text/StaticLayout;
-HSPLandroidx/compose/ui/text/android/StaticLayoutParams;-><init>(Ljava/lang/CharSequence;IILandroid/text/TextPaint;ILandroid/text/TextDirectionHeuristic;Landroid/text/Layout$Alignment;ILandroid/text/TextUtils$TruncateAt;IFFIZZIIII[I[I)V
-HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getAlignment()Landroid/text/Layout$Alignment;
-HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getBreakStrategy()I
-HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getEllipsize()Landroid/text/TextUtils$TruncateAt;
-HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getEllipsizedWidth()I
-HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getEnd()I
-HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getHyphenationFrequency()I
-HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getIncludePadding()Z
-HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getJustificationMode()I
-HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getLeftIndents()[I
-HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getLineBreakStyle()I
-HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getLineBreakWordStyle()I
-HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getLineSpacingExtra()F
-HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getLineSpacingMultiplier()F
-HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getMaxLines()I
-HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getPaint()Landroid/text/TextPaint;
-HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getRightIndents()[I
-HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getStart()I
-HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getText()Ljava/lang/CharSequence;
-HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getTextDir()Landroid/text/TextDirectionHeuristic;
-HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getUseFallbackLineSpacing()Z
-HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getWidth()I
-HSPLandroidx/compose/ui/text/android/TextAlignmentAdapter;-><clinit>()V
-HSPLandroidx/compose/ui/text/android/TextAlignmentAdapter;-><init>()V
-HSPLandroidx/compose/ui/text/android/TextAlignmentAdapter;->get(I)Landroid/text/Layout$Alignment;
-HSPLandroidx/compose/ui/text/android/TextAndroidCanvas;-><init>()V
-HSPLandroidx/compose/ui/text/android/TextAndroidCanvas;->drawTextRun(Ljava/lang/CharSequence;IIIIFFZLandroid/graphics/Paint;)V
-HSPLandroidx/compose/ui/text/android/TextAndroidCanvas;->getClipBounds(Landroid/graphics/Rect;)Z
-HSPLandroidx/compose/ui/text/android/TextAndroidCanvas;->setCanvas(Landroid/graphics/Canvas;)V
-HSPLandroidx/compose/ui/text/android/TextLayout$Companion;-><init>()V
-HSPLandroidx/compose/ui/text/android/TextLayout$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/android/TextLayout$layoutHelper$2;-><init>(Landroidx/compose/ui/text/android/TextLayout;)V
-HSPLandroidx/compose/ui/text/android/TextLayout;-><clinit>()V
-HSPLandroidx/compose/ui/text/android/TextLayout;-><init>(Ljava/lang/CharSequence;FLandroid/text/TextPaint;ILandroid/text/TextUtils$TruncateAt;IFFZZIIIIII[I[ILandroidx/compose/ui/text/android/LayoutIntrinsics;)V
-HSPLandroidx/compose/ui/text/android/TextLayout;-><init>(Ljava/lang/CharSequence;FLandroid/text/TextPaint;ILandroid/text/TextUtils$TruncateAt;IFFZZIIIIII[I[ILandroidx/compose/ui/text/android/LayoutIntrinsics;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/android/TextLayout;->getDidExceedMaxLines()Z
-HSPLandroidx/compose/ui/text/android/TextLayout;->getHeight()I
-HSPLandroidx/compose/ui/text/android/TextLayout;->getIncludePadding()Z
-HSPLandroidx/compose/ui/text/android/TextLayout;->getLayout()Landroid/text/Layout;
-HSPLandroidx/compose/ui/text/android/TextLayout;->getLineBaseline(I)F
-HSPLandroidx/compose/ui/text/android/TextLayout;->getLineCount()I
-HSPLandroidx/compose/ui/text/android/TextLayout;->getText()Ljava/lang/CharSequence;
-HSPLandroidx/compose/ui/text/android/TextLayout;->paint(Landroid/graphics/Canvas;)V
-HSPLandroidx/compose/ui/text/android/TextLayoutKt;-><clinit>()V
-HSPLandroidx/compose/ui/text/android/TextLayoutKt;->access$getLastLineMetrics(Landroidx/compose/ui/text/android/TextLayout;Landroid/text/TextPaint;Landroid/text/TextDirectionHeuristic;[Landroidx/compose/ui/text/android/style/LineHeightStyleSpan;)Lkotlin/Pair;
-HSPLandroidx/compose/ui/text/android/TextLayoutKt;->access$getLineHeightPaddings(Landroidx/compose/ui/text/android/TextLayout;[Landroidx/compose/ui/text/android/style/LineHeightStyleSpan;)Lkotlin/Pair;
-HSPLandroidx/compose/ui/text/android/TextLayoutKt;->access$getLineHeightSpans(Landroidx/compose/ui/text/android/TextLayout;)[Landroidx/compose/ui/text/android/style/LineHeightStyleSpan;
-HSPLandroidx/compose/ui/text/android/TextLayoutKt;->access$getVerticalPaddings(Landroidx/compose/ui/text/android/TextLayout;)Lkotlin/Pair;
-HSPLandroidx/compose/ui/text/android/TextLayoutKt;->getLastLineMetrics(Landroidx/compose/ui/text/android/TextLayout;Landroid/text/TextPaint;Landroid/text/TextDirectionHeuristic;[Landroidx/compose/ui/text/android/style/LineHeightStyleSpan;)Lkotlin/Pair;
-HSPLandroidx/compose/ui/text/android/TextLayoutKt;->getLineHeightPaddings(Landroidx/compose/ui/text/android/TextLayout;[Landroidx/compose/ui/text/android/style/LineHeightStyleSpan;)Lkotlin/Pair;
-HSPLandroidx/compose/ui/text/android/TextLayoutKt;->getLineHeightSpans(Landroidx/compose/ui/text/android/TextLayout;)[Landroidx/compose/ui/text/android/style/LineHeightStyleSpan;
-HSPLandroidx/compose/ui/text/android/TextLayoutKt;->getTextDirectionHeuristic(I)Landroid/text/TextDirectionHeuristic;
-HSPLandroidx/compose/ui/text/android/TextLayoutKt;->getVerticalPaddings(Landroidx/compose/ui/text/android/TextLayout;)Lkotlin/Pair;
-HSPLandroidx/compose/ui/text/android/TextLayoutKt;->isLineEllipsized(Landroid/text/Layout;I)Z
-HSPLandroidx/compose/ui/text/android/style/IndentationFixSpanKt;->getEllipsizedLeftPadding$default(Landroid/text/Layout;ILandroid/graphics/Paint;ILjava/lang/Object;)F
-HSPLandroidx/compose/ui/text/android/style/IndentationFixSpanKt;->getEllipsizedLeftPadding(Landroid/text/Layout;ILandroid/graphics/Paint;)F
-HSPLandroidx/compose/ui/text/android/style/IndentationFixSpanKt;->getEllipsizedRightPadding$default(Landroid/text/Layout;ILandroid/graphics/Paint;ILjava/lang/Object;)F
-HSPLandroidx/compose/ui/text/android/style/IndentationFixSpanKt;->getEllipsizedRightPadding(Landroid/text/Layout;ILandroid/graphics/Paint;)F
-HSPLandroidx/compose/ui/text/android/style/LineHeightSpan;-><clinit>()V
-HSPLandroidx/compose/ui/text/android/style/LineHeightSpan;-><init>(F)V
-HSPLandroidx/compose/ui/text/android/style/LineHeightSpan;->chooseHeight(Ljava/lang/CharSequence;IIIILandroid/graphics/Paint$FontMetricsInt;)V
-HSPLandroidx/compose/ui/text/android/style/LineHeightStyleSpanKt;->lineHeight(Landroid/graphics/Paint$FontMetricsInt;)I
-HSPLandroidx/compose/ui/text/caches/ContainerHelpersKt;-><clinit>()V
-HSPLandroidx/compose/ui/text/caches/LruCache;-><init>(I)V
-HSPLandroidx/compose/ui/text/caches/LruCache;->access$getMonitor$p(Landroidx/compose/ui/text/caches/LruCache;)Landroidx/compose/ui/text/platform/SynchronizedObject;
-HSPLandroidx/compose/ui/text/caches/LruCache;->create(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/text/caches/LruCache;->get(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/text/caches/LruCache;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/text/caches/LruCache;->safeSizeOf(Ljava/lang/Object;Ljava/lang/Object;)I
-HSPLandroidx/compose/ui/text/caches/LruCache;->size()I
-HSPLandroidx/compose/ui/text/caches/LruCache;->sizeOf(Ljava/lang/Object;Ljava/lang/Object;)I
-HSPLandroidx/compose/ui/text/caches/LruCache;->trimToSize(I)V
-HSPLandroidx/compose/ui/text/caches/SimpleArrayMap;-><init>(I)V
-HSPLandroidx/compose/ui/text/caches/SimpleArrayMap;-><init>(IILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/caches/SimpleArrayMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/text/caches/SimpleArrayMap;->indexOf(Ljava/lang/Object;I)I
-HSPLandroidx/compose/ui/text/caches/SimpleArrayMap;->indexOfKey(Ljava/lang/Object;)I
-HSPLandroidx/compose/ui/text/font/AndroidFont;-><clinit>()V
-HSPLandroidx/compose/ui/text/font/AndroidFont;-><init>(ILandroidx/compose/ui/text/font/AndroidFont$TypefaceLoader;Landroidx/compose/ui/text/font/FontVariation$Settings;)V
-HSPLandroidx/compose/ui/text/font/AndroidFont;-><init>(ILandroidx/compose/ui/text/font/AndroidFont$TypefaceLoader;Landroidx/compose/ui/text/font/FontVariation$Settings;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/font/AndroidFont;->getLoadingStrategy-PKNRLFQ()I
-HSPLandroidx/compose/ui/text/font/AndroidFont;->getTypefaceLoader()Landroidx/compose/ui/text/font/AndroidFont$TypefaceLoader;
-HSPLandroidx/compose/ui/text/font/AndroidFont;->getVariationSettings()Landroidx/compose/ui/text/font/FontVariation$Settings;
-HSPLandroidx/compose/ui/text/font/AndroidFontLoader;-><init>(Landroid/content/Context;)V
-HSPLandroidx/compose/ui/text/font/AndroidFontLoader;->getCacheKey()Ljava/lang/Object;
-HSPLandroidx/compose/ui/text/font/AndroidFontLoader;->loadBlocking(Landroidx/compose/ui/text/font/Font;)Landroid/graphics/Typeface;
-HSPLandroidx/compose/ui/text/font/AndroidFontLoader;->loadBlocking(Landroidx/compose/ui/text/font/Font;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/text/font/AndroidFontResolveInterceptor;-><init>(I)V
-HSPLandroidx/compose/ui/text/font/AndroidFontResolveInterceptor;->interceptFontWeight(Landroidx/compose/ui/text/font/FontWeight;)Landroidx/compose/ui/text/font/FontWeight;
-HSPLandroidx/compose/ui/text/font/AndroidFontResolveInterceptor_androidKt;->AndroidFontResolveInterceptor(Landroid/content/Context;)Landroidx/compose/ui/text/font/AndroidFontResolveInterceptor;
-HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache$AsyncTypefaceResult;-><init>(Ljava/lang/Object;)V
-HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache$AsyncTypefaceResult;->box-impl(Ljava/lang/Object;)Landroidx/compose/ui/text/font/AsyncTypefaceCache$AsyncTypefaceResult;
-HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache$AsyncTypefaceResult;->constructor-impl(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache$Key;-><init>(Landroidx/compose/ui/text/font/Font;Ljava/lang/Object;)V
-HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache$Key;->hashCode()I
-HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache;-><init>()V
-HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache;->access$getCacheLock$p(Landroidx/compose/ui/text/font/AsyncTypefaceCache;)Landroidx/compose/ui/text/platform/SynchronizedObject;
-HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache;->access$getPermanentCache$p(Landroidx/compose/ui/text/font/AsyncTypefaceCache;)Landroidx/compose/ui/text/caches/SimpleArrayMap;
-HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache;->access$getResultCache$p(Landroidx/compose/ui/text/font/AsyncTypefaceCache;)Landroidx/compose/ui/text/caches/LruCache;
-HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache;->put$default(Landroidx/compose/ui/text/font/AsyncTypefaceCache;Landroidx/compose/ui/text/font/Font;Landroidx/compose/ui/text/font/PlatformFontLoader;Ljava/lang/Object;ZILjava/lang/Object;)V
-HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache;->put(Landroidx/compose/ui/text/font/Font;Landroidx/compose/ui/text/font/PlatformFontLoader;Ljava/lang/Object;Z)V
-HSPLandroidx/compose/ui/text/font/DefaultFontFamily;-><init>()V
-HSPLandroidx/compose/ui/text/font/DeviceFontFamilyName;->constructor-impl(Ljava/lang/String;)Ljava/lang/String;
-HSPLandroidx/compose/ui/text/font/DeviceFontFamilyName;->hashCode-impl(Ljava/lang/String;)I
-HSPLandroidx/compose/ui/text/font/DeviceFontFamilyNameFont;-><init>(Ljava/lang/String;Landroidx/compose/ui/text/font/FontWeight;ILandroidx/compose/ui/text/font/FontVariation$Settings;)V
-HSPLandroidx/compose/ui/text/font/DeviceFontFamilyNameFont;-><init>(Ljava/lang/String;Landroidx/compose/ui/text/font/FontWeight;ILandroidx/compose/ui/text/font/FontVariation$Settings;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/font/DeviceFontFamilyNameFont;->getStyle-_-LCdwA()I
-HSPLandroidx/compose/ui/text/font/DeviceFontFamilyNameFont;->getWeight()Landroidx/compose/ui/text/font/FontWeight;
-HSPLandroidx/compose/ui/text/font/DeviceFontFamilyNameFont;->hashCode()I
-HSPLandroidx/compose/ui/text/font/DeviceFontFamilyNameFont;->loadCached(Landroid/content/Context;)Landroid/graphics/Typeface;
-HSPLandroidx/compose/ui/text/font/DeviceFontFamilyNameFontKt;->Font-vxs03AY$default(Ljava/lang/String;Landroidx/compose/ui/text/font/FontWeight;ILandroidx/compose/ui/text/font/FontVariation$Settings;ILjava/lang/Object;)Landroidx/compose/ui/text/font/Font;
-HSPLandroidx/compose/ui/text/font/DeviceFontFamilyNameFontKt;->Font-vxs03AY(Ljava/lang/String;Landroidx/compose/ui/text/font/FontWeight;ILandroidx/compose/ui/text/font/FontVariation$Settings;)Landroidx/compose/ui/text/font/Font;
-HSPLandroidx/compose/ui/text/font/FileBasedFontFamily;-><clinit>()V
-HSPLandroidx/compose/ui/text/font/FileBasedFontFamily;-><init>()V
-HSPLandroidx/compose/ui/text/font/FileBasedFontFamily;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/font/FontFamily$Companion;-><init>()V
-HSPLandroidx/compose/ui/text/font/FontFamily$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/font/FontFamily$Companion;->getCursive()Landroidx/compose/ui/text/font/GenericFontFamily;
-HSPLandroidx/compose/ui/text/font/FontFamily$Companion;->getMonospace()Landroidx/compose/ui/text/font/GenericFontFamily;
-HSPLandroidx/compose/ui/text/font/FontFamily$Companion;->getSansSerif()Landroidx/compose/ui/text/font/GenericFontFamily;
-HSPLandroidx/compose/ui/text/font/FontFamily$Companion;->getSerif()Landroidx/compose/ui/text/font/GenericFontFamily;
-HSPLandroidx/compose/ui/text/font/FontFamily;-><clinit>()V
-HSPLandroidx/compose/ui/text/font/FontFamily;-><init>(Z)V
-HSPLandroidx/compose/ui/text/font/FontFamily;-><init>(ZLkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/font/FontFamily;->access$getCursive$cp()Landroidx/compose/ui/text/font/GenericFontFamily;
-HSPLandroidx/compose/ui/text/font/FontFamily;->access$getMonospace$cp()Landroidx/compose/ui/text/font/GenericFontFamily;
-HSPLandroidx/compose/ui/text/font/FontFamily;->access$getSansSerif$cp()Landroidx/compose/ui/text/font/GenericFontFamily;
-HSPLandroidx/compose/ui/text/font/FontFamily;->access$getSerif$cp()Landroidx/compose/ui/text/font/GenericFontFamily;
-HSPLandroidx/compose/ui/text/font/FontFamilyKt;->FontFamily([Landroidx/compose/ui/text/font/Font;)Landroidx/compose/ui/text/font/FontFamily;
-HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl$createDefaultTypeface$1;-><init>(Landroidx/compose/ui/text/font/FontFamilyResolverImpl;)V
-HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl$resolve$result$1;-><init>(Landroidx/compose/ui/text/font/FontFamilyResolverImpl;Landroidx/compose/ui/text/font/TypefaceRequest;)V
-HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl$resolve$result$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl$resolve$result$1;->invoke(Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/text/font/TypefaceResult;
-HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;-><init>(Landroidx/compose/ui/text/font/PlatformFontLoader;Landroidx/compose/ui/text/font/PlatformResolveInterceptor;Landroidx/compose/ui/text/font/TypefaceRequestCache;Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;Landroidx/compose/ui/text/font/PlatformFontFamilyTypefaceAdapter;)V
-HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;-><init>(Landroidx/compose/ui/text/font/PlatformFontLoader;Landroidx/compose/ui/text/font/PlatformResolveInterceptor;Landroidx/compose/ui/text/font/TypefaceRequestCache;Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;Landroidx/compose/ui/text/font/PlatformFontFamilyTypefaceAdapter;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->access$getCreateDefaultTypeface$p(Landroidx/compose/ui/text/font/FontFamilyResolverImpl;)Lkotlin/jvm/functions/Function1;
-HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->access$getFontListFontFamilyTypefaceAdapter$p(Landroidx/compose/ui/text/font/FontFamilyResolverImpl;)Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;
-HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->getPlatformFontLoader$ui_text_release()Landroidx/compose/ui/text/font/PlatformFontLoader;
-HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->resolve(Landroidx/compose/ui/text/font/TypefaceRequest;)Landroidx/compose/runtime/State;
-HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->resolve-DPcqOEQ(Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;II)Landroidx/compose/runtime/State;
-HSPLandroidx/compose/ui/text/font/FontFamilyResolverKt;-><clinit>()V
-HSPLandroidx/compose/ui/text/font/FontFamilyResolverKt;->getGlobalAsyncTypefaceCache()Landroidx/compose/ui/text/font/AsyncTypefaceCache;
-HSPLandroidx/compose/ui/text/font/FontFamilyResolverKt;->getGlobalTypefaceRequestCache()Landroidx/compose/ui/text/font/TypefaceRequestCache;
-HSPLandroidx/compose/ui/text/font/FontFamilyResolver_androidKt;->createFontFamilyResolver(Landroid/content/Context;)Landroidx/compose/ui/text/font/FontFamily$Resolver;
-HSPLandroidx/compose/ui/text/font/FontListFontFamily;-><clinit>()V
-HSPLandroidx/compose/ui/text/font/FontListFontFamily;-><init>(Ljava/util/List;)V
-HSPLandroidx/compose/ui/text/font/FontListFontFamily;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/text/font/FontListFontFamily;->getFonts()Ljava/util/List;
-HSPLandroidx/compose/ui/text/font/FontListFontFamily;->hashCode()I
-HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter$Companion;-><init>()V
-HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter$special$$inlined$CoroutineExceptionHandler$1;-><init>(Lkotlinx/coroutines/CoroutineExceptionHandler$Key;)V
-HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;-><clinit>()V
-HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;-><init>(Landroidx/compose/ui/text/font/AsyncTypefaceCache;Lkotlin/coroutines/CoroutineContext;)V
-HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;-><init>(Landroidx/compose/ui/text/font/AsyncTypefaceCache;Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;->resolve(Landroidx/compose/ui/text/font/TypefaceRequest;Landroidx/compose/ui/text/font/PlatformFontLoader;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/text/font/TypefaceResult;
-HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapterKt;->access$firstImmediatelyAvailable(Ljava/util/List;Landroidx/compose/ui/text/font/TypefaceRequest;Landroidx/compose/ui/text/font/AsyncTypefaceCache;Landroidx/compose/ui/text/font/PlatformFontLoader;Lkotlin/jvm/functions/Function1;)Lkotlin/Pair;
-HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapterKt;->firstImmediatelyAvailable(Ljava/util/List;Landroidx/compose/ui/text/font/TypefaceRequest;Landroidx/compose/ui/text/font/AsyncTypefaceCache;Landroidx/compose/ui/text/font/PlatformFontLoader;Lkotlin/jvm/functions/Function1;)Lkotlin/Pair;
-HSPLandroidx/compose/ui/text/font/FontLoadingStrategy$Companion;-><init>()V
-HSPLandroidx/compose/ui/text/font/FontLoadingStrategy$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/font/FontLoadingStrategy$Companion;->getBlocking-PKNRLFQ()I
-HSPLandroidx/compose/ui/text/font/FontLoadingStrategy$Companion;->getOptionalLocal-PKNRLFQ()I
-HSPLandroidx/compose/ui/text/font/FontLoadingStrategy;-><clinit>()V
-HSPLandroidx/compose/ui/text/font/FontLoadingStrategy;->access$getBlocking$cp()I
-HSPLandroidx/compose/ui/text/font/FontLoadingStrategy;->access$getOptionalLocal$cp()I
-HSPLandroidx/compose/ui/text/font/FontLoadingStrategy;->constructor-impl(I)I
-HSPLandroidx/compose/ui/text/font/FontLoadingStrategy;->equals-impl0(II)Z
-HSPLandroidx/compose/ui/text/font/FontMatcher;-><init>()V
-HSPLandroidx/compose/ui/text/font/FontMatcher;->matchFont-RetOiIg(Ljava/util/List;Landroidx/compose/ui/text/font/FontWeight;I)Ljava/util/List;
-HSPLandroidx/compose/ui/text/font/FontStyle$Companion;-><init>()V
-HSPLandroidx/compose/ui/text/font/FontStyle$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/font/FontStyle$Companion;->getItalic-_-LCdwA()I
-HSPLandroidx/compose/ui/text/font/FontStyle$Companion;->getNormal-_-LCdwA()I
-HSPLandroidx/compose/ui/text/font/FontStyle;-><clinit>()V
-HSPLandroidx/compose/ui/text/font/FontStyle;-><init>(I)V
-HSPLandroidx/compose/ui/text/font/FontStyle;->access$getItalic$cp()I
-HSPLandroidx/compose/ui/text/font/FontStyle;->access$getNormal$cp()I
-HSPLandroidx/compose/ui/text/font/FontStyle;->box-impl(I)Landroidx/compose/ui/text/font/FontStyle;
-HSPLandroidx/compose/ui/text/font/FontStyle;->constructor-impl(I)I
-HSPLandroidx/compose/ui/text/font/FontStyle;->equals-impl0(II)Z
-HSPLandroidx/compose/ui/text/font/FontStyle;->hashCode-impl(I)I
-HSPLandroidx/compose/ui/text/font/FontStyle;->unbox-impl()I
-HSPLandroidx/compose/ui/text/font/FontSynthesis$Companion;-><init>()V
-HSPLandroidx/compose/ui/text/font/FontSynthesis$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/font/FontSynthesis$Companion;->getAll-GVVA2EU()I
-HSPLandroidx/compose/ui/text/font/FontSynthesis;-><clinit>()V
-HSPLandroidx/compose/ui/text/font/FontSynthesis;-><init>(I)V
-HSPLandroidx/compose/ui/text/font/FontSynthesis;->access$getAll$cp()I
-HSPLandroidx/compose/ui/text/font/FontSynthesis;->box-impl(I)Landroidx/compose/ui/text/font/FontSynthesis;
-HSPLandroidx/compose/ui/text/font/FontSynthesis;->constructor-impl(I)I
-HSPLandroidx/compose/ui/text/font/FontSynthesis;->equals-impl0(II)Z
-HSPLandroidx/compose/ui/text/font/FontSynthesis;->hashCode-impl(I)I
-HSPLandroidx/compose/ui/text/font/FontSynthesis;->isStyleOn-impl$ui_text_release(I)Z
-HSPLandroidx/compose/ui/text/font/FontSynthesis;->isWeightOn-impl$ui_text_release(I)Z
-HSPLandroidx/compose/ui/text/font/FontSynthesis;->unbox-impl()I
-HSPLandroidx/compose/ui/text/font/FontSynthesis_androidKt;->synthesizeTypeface-FxwP2eA(ILjava/lang/Object;Landroidx/compose/ui/text/font/Font;Landroidx/compose/ui/text/font/FontWeight;I)Ljava/lang/Object;
-HSPLandroidx/compose/ui/text/font/FontVariation$Settings;-><clinit>()V
-HSPLandroidx/compose/ui/text/font/FontVariation$Settings;-><init>([Landroidx/compose/ui/text/font/FontVariation$Setting;)V
-HSPLandroidx/compose/ui/text/font/FontVariation$Settings;->getSettings()Ljava/util/List;
-HSPLandroidx/compose/ui/text/font/FontVariation$Settings;->hashCode()I
-HSPLandroidx/compose/ui/text/font/FontWeight$Companion;-><init>()V
-HSPLandroidx/compose/ui/text/font/FontWeight$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/font/FontWeight$Companion;->getMedium()Landroidx/compose/ui/text/font/FontWeight;
-HSPLandroidx/compose/ui/text/font/FontWeight$Companion;->getNormal()Landroidx/compose/ui/text/font/FontWeight;
-HSPLandroidx/compose/ui/text/font/FontWeight;-><clinit>()V
-HSPLandroidx/compose/ui/text/font/FontWeight;-><init>(I)V
-HSPLandroidx/compose/ui/text/font/FontWeight;->access$getMedium$cp()Landroidx/compose/ui/text/font/FontWeight;
-HSPLandroidx/compose/ui/text/font/FontWeight;->access$getNormal$cp()Landroidx/compose/ui/text/font/FontWeight;
-HSPLandroidx/compose/ui/text/font/FontWeight;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/text/font/FontWeight;->getWeight()I
-HSPLandroidx/compose/ui/text/font/FontWeight;->hashCode()I
-HSPLandroidx/compose/ui/text/font/GenericFontFamily;-><clinit>()V
-HSPLandroidx/compose/ui/text/font/GenericFontFamily;-><init>(Ljava/lang/String;Ljava/lang/String;)V
-HSPLandroidx/compose/ui/text/font/GenericFontFamily;->getName()Ljava/lang/String;
-HSPLandroidx/compose/ui/text/font/NamedFontLoader;-><clinit>()V
-HSPLandroidx/compose/ui/text/font/NamedFontLoader;-><init>()V
-HSPLandroidx/compose/ui/text/font/NamedFontLoader;->loadBlocking(Landroid/content/Context;Landroidx/compose/ui/text/font/AndroidFont;)Landroid/graphics/Typeface;
-HSPLandroidx/compose/ui/text/font/PlatformFontFamilyTypefaceAdapter;-><init>()V
-HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion$Default$1;-><init>()V
-HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion;-><clinit>()V
-HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion;-><init>()V
-HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor;-><clinit>()V
-HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor;->interceptFontFamily(Landroidx/compose/ui/text/font/FontFamily;)Landroidx/compose/ui/text/font/FontFamily;
-HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor;->interceptFontStyle-T2F_aPo(I)I
-HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor;->interceptFontSynthesis-Mscr08Y(I)I
-HSPLandroidx/compose/ui/text/font/PlatformTypefacesApi28;-><init>()V
-HSPLandroidx/compose/ui/text/font/PlatformTypefacesApi28;->createAndroidTypefaceApi28-RetOiIg(Ljava/lang/String;Landroidx/compose/ui/text/font/FontWeight;I)Landroid/graphics/Typeface;
-HSPLandroidx/compose/ui/text/font/PlatformTypefacesApi28;->loadNamedFromTypefaceCacheOrNull-RetOiIg(Ljava/lang/String;Landroidx/compose/ui/text/font/FontWeight;I)Landroid/graphics/Typeface;
-HSPLandroidx/compose/ui/text/font/PlatformTypefacesApi28;->optionalOnDeviceFontFamilyByName-78DK7lM(Ljava/lang/String;Landroidx/compose/ui/text/font/FontWeight;ILandroidx/compose/ui/text/font/FontVariation$Settings;Landroid/content/Context;)Landroid/graphics/Typeface;
-HSPLandroidx/compose/ui/text/font/PlatformTypefacesKt;->PlatformTypefaces()Landroidx/compose/ui/text/font/PlatformTypefaces;
-HSPLandroidx/compose/ui/text/font/PlatformTypefacesKt;->setFontVariationSettings(Landroid/graphics/Typeface;Landroidx/compose/ui/text/font/FontVariation$Settings;Landroid/content/Context;)Landroid/graphics/Typeface;
-HSPLandroidx/compose/ui/text/font/SystemFontFamily;-><clinit>()V
-HSPLandroidx/compose/ui/text/font/SystemFontFamily;-><init>()V
-HSPLandroidx/compose/ui/text/font/SystemFontFamily;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/font/TypefaceCompatApi26;-><clinit>()V
-HSPLandroidx/compose/ui/text/font/TypefaceCompatApi26;-><init>()V
-HSPLandroidx/compose/ui/text/font/TypefaceCompatApi26;->setFontVariationSettings(Landroid/graphics/Typeface;Landroidx/compose/ui/text/font/FontVariation$Settings;Landroid/content/Context;)Landroid/graphics/Typeface;
-HSPLandroidx/compose/ui/text/font/TypefaceHelperMethodsApi28;-><clinit>()V
-HSPLandroidx/compose/ui/text/font/TypefaceHelperMethodsApi28;-><init>()V
-HSPLandroidx/compose/ui/text/font/TypefaceHelperMethodsApi28;->create(Landroid/graphics/Typeface;IZ)Landroid/graphics/Typeface;
-HSPLandroidx/compose/ui/text/font/TypefaceRequest;-><init>(Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;IILjava/lang/Object;)V
-HSPLandroidx/compose/ui/text/font/TypefaceRequest;-><init>(Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;IILjava/lang/Object;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/font/TypefaceRequest;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/text/font/TypefaceRequest;->getFontFamily()Landroidx/compose/ui/text/font/FontFamily;
-HSPLandroidx/compose/ui/text/font/TypefaceRequest;->getFontStyle-_-LCdwA()I
-HSPLandroidx/compose/ui/text/font/TypefaceRequest;->getFontSynthesis-GVVA2EU()I
-HSPLandroidx/compose/ui/text/font/TypefaceRequest;->getFontWeight()Landroidx/compose/ui/text/font/FontWeight;
-HSPLandroidx/compose/ui/text/font/TypefaceRequest;->hashCode()I
-HSPLandroidx/compose/ui/text/font/TypefaceRequestCache$runCached$currentTypefaceResult$1;-><init>(Landroidx/compose/ui/text/font/TypefaceRequestCache;Landroidx/compose/ui/text/font/TypefaceRequest;)V
-HSPLandroidx/compose/ui/text/font/TypefaceRequestCache;-><init>()V
-HSPLandroidx/compose/ui/text/font/TypefaceRequestCache;->runCached(Landroidx/compose/ui/text/font/TypefaceRequest;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/State;
-HSPLandroidx/compose/ui/text/font/TypefaceResult$Immutable;-><clinit>()V
-HSPLandroidx/compose/ui/text/font/TypefaceResult$Immutable;-><init>(Ljava/lang/Object;Z)V
-HSPLandroidx/compose/ui/text/font/TypefaceResult$Immutable;-><init>(Ljava/lang/Object;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/font/TypefaceResult$Immutable;->getCacheable()Z
-HSPLandroidx/compose/ui/text/font/TypefaceResult$Immutable;->getValue()Ljava/lang/Object;
-HSPLandroidx/compose/ui/text/input/ImeAction$Companion;-><init>()V
-HSPLandroidx/compose/ui/text/input/ImeAction$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/input/ImeAction$Companion;->getDefault-eUduSuo()I
-HSPLandroidx/compose/ui/text/input/ImeAction;-><clinit>()V
-HSPLandroidx/compose/ui/text/input/ImeAction;->access$getDefault$cp()I
-HSPLandroidx/compose/ui/text/input/ImeAction;->constructor-impl(I)I
-HSPLandroidx/compose/ui/text/input/ImeOptions$Companion;-><init>()V
-HSPLandroidx/compose/ui/text/input/ImeOptions$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/input/ImeOptions$Companion;->getDefault()Landroidx/compose/ui/text/input/ImeOptions;
-HSPLandroidx/compose/ui/text/input/ImeOptions;-><clinit>()V
-HSPLandroidx/compose/ui/text/input/ImeOptions;-><init>(ZIZII)V
-HSPLandroidx/compose/ui/text/input/ImeOptions;-><init>(ZIZIIILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/input/ImeOptions;-><init>(ZIZIILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/input/ImeOptions;->access$getDefault$cp()Landroidx/compose/ui/text/input/ImeOptions;
-HSPLandroidx/compose/ui/text/input/ImmHelper30;-><init>(Landroid/view/View;)V
-HSPLandroidx/compose/ui/text/input/InputMethodManagerImpl$imm$2;-><init>(Landroidx/compose/ui/text/input/InputMethodManagerImpl;)V
-HSPLandroidx/compose/ui/text/input/InputMethodManagerImpl;-><init>(Landroid/view/View;)V
-HSPLandroidx/compose/ui/text/input/KeyboardCapitalization$Companion;-><init>()V
-HSPLandroidx/compose/ui/text/input/KeyboardCapitalization$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/input/KeyboardCapitalization$Companion;->getNone-IUNYP9k()I
-HSPLandroidx/compose/ui/text/input/KeyboardCapitalization;-><clinit>()V
-HSPLandroidx/compose/ui/text/input/KeyboardCapitalization;->access$getNone$cp()I
-HSPLandroidx/compose/ui/text/input/KeyboardCapitalization;->constructor-impl(I)I
-HSPLandroidx/compose/ui/text/input/KeyboardType$Companion;-><init>()V
-HSPLandroidx/compose/ui/text/input/KeyboardType$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/input/KeyboardType$Companion;->getText-PjHm6EE()I
-HSPLandroidx/compose/ui/text/input/KeyboardType;-><clinit>()V
-HSPLandroidx/compose/ui/text/input/KeyboardType;->access$getText$cp()I
-HSPLandroidx/compose/ui/text/input/KeyboardType;->constructor-impl(I)I
-HSPLandroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$1;-><clinit>()V
-HSPLandroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$1;-><init>()V
-HSPLandroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$2;-><clinit>()V
-HSPLandroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$2;-><init>()V
-HSPLandroidx/compose/ui/text/input/TextFieldValue$Companion;-><init>()V
-HSPLandroidx/compose/ui/text/input/TextFieldValue$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/input/TextFieldValue;-><clinit>()V
-HSPLandroidx/compose/ui/text/input/TextFieldValue;-><init>(Landroidx/compose/ui/text/AnnotatedString;JLandroidx/compose/ui/text/TextRange;)V
-HSPLandroidx/compose/ui/text/input/TextFieldValue;-><init>(Landroidx/compose/ui/text/AnnotatedString;JLandroidx/compose/ui/text/TextRange;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/input/TextFieldValue;-><init>(Ljava/lang/String;JLandroidx/compose/ui/text/TextRange;)V
-HSPLandroidx/compose/ui/text/input/TextFieldValue;-><init>(Ljava/lang/String;JLandroidx/compose/ui/text/TextRange;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/input/TextFieldValue;-><init>(Ljava/lang/String;JLandroidx/compose/ui/text/TextRange;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/input/TextFieldValue;->getText()Ljava/lang/String;
-HSPLandroidx/compose/ui/text/input/TextInputService;-><clinit>()V
-HSPLandroidx/compose/ui/text/input/TextInputService;-><init>(Landroidx/compose/ui/text/input/PlatformTextInputService;)V
-HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$baseInputConnection$2;-><init>(Landroidx/compose/ui/text/input/TextInputServiceAndroid;)V
-HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$onEditCommand$1;-><clinit>()V
-HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$onEditCommand$1;-><init>()V
-HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$onImeActionPerformed$1;-><clinit>()V
-HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$onImeActionPerformed$1;-><init>()V
-HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$textInputCommandEventLoop$1;-><init>(Landroidx/compose/ui/text/input/TextInputServiceAndroid;Lkotlin/coroutines/Continuation;)V
-HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$textInputCommandEventLoop$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;-><init>(Landroid/view/View;)V
-HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;-><init>(Landroid/view/View;Landroidx/compose/ui/text/input/InputMethodManager;)V
-HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;->isEditorFocused()Z
-HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;->textInputCommandEventLoop(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/text/intl/AndroidLocale;-><init>(Ljava/util/Locale;)V
-HSPLandroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24;-><init>()V
-HSPLandroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24;->getCurrent()Landroidx/compose/ui/text/intl/LocaleList;
-HSPLandroidx/compose/ui/text/intl/AndroidPlatformLocale_androidKt;->createPlatformLocaleDelegate()Landroidx/compose/ui/text/intl/PlatformLocaleDelegate;
-HSPLandroidx/compose/ui/text/intl/Locale$Companion;-><init>()V
-HSPLandroidx/compose/ui/text/intl/Locale$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/intl/Locale;-><clinit>()V
-HSPLandroidx/compose/ui/text/intl/Locale;-><init>(Landroidx/compose/ui/text/intl/PlatformLocale;)V
-HSPLandroidx/compose/ui/text/intl/LocaleList$Companion;-><init>()V
-HSPLandroidx/compose/ui/text/intl/LocaleList$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/intl/LocaleList$Companion;->getCurrent()Landroidx/compose/ui/text/intl/LocaleList;
-HSPLandroidx/compose/ui/text/intl/LocaleList;-><clinit>()V
-HSPLandroidx/compose/ui/text/intl/LocaleList;-><init>(Ljava/util/List;)V
-HSPLandroidx/compose/ui/text/intl/LocaleList;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/text/intl/PlatformLocaleKt;-><clinit>()V
-HSPLandroidx/compose/ui/text/intl/PlatformLocaleKt;->getPlatformLocaleDelegate()Landroidx/compose/ui/text/intl/PlatformLocaleDelegate;
-HSPLandroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt$NoopSpan$1;-><init>()V
-HSPLandroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt;-><clinit>()V
-HSPLandroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt;->createCharSequence(Ljava/lang/String;FLandroidx/compose/ui/text/TextStyle;Ljava/util/List;Ljava/util/List;Landroidx/compose/ui/unit/Density;Lkotlin/jvm/functions/Function4;Z)Ljava/lang/CharSequence;
-HSPLandroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt;->isIncludeFontPaddingEnabled(Landroidx/compose/ui/text/TextStyle;)Z
-HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics$resolveTypeface$1;-><init>(Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;)V
-HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics$resolveTypeface$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics$resolveTypeface$1;->invoke-DPcqOEQ(Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;II)Landroid/graphics/Typeface;
-HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;-><init>(Ljava/lang/String;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;Ljava/util/List;Landroidx/compose/ui/text/font/FontFamily$Resolver;Landroidx/compose/ui/unit/Density;)V
-HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getCharSequence$ui_text_release()Ljava/lang/CharSequence;
-HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getFontFamilyResolver()Landroidx/compose/ui/text/font/FontFamily$Resolver;
-HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getHasStaleResolvedFonts()Z
-HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getLayoutIntrinsics$ui_text_release()Landroidx/compose/ui/text/android/LayoutIntrinsics;
-HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getMaxIntrinsicWidth()F
-HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getStyle()Landroidx/compose/ui/text/TextStyle;
-HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getTextDirectionHeuristic$ui_text_release()I
-HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getTextPaint$ui_text_release()Landroidx/compose/ui/text/platform/AndroidTextPaint;
-HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics_androidKt;->ActualParagraphIntrinsics(Ljava/lang/String;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;Ljava/util/List;Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;)Landroidx/compose/ui/text/ParagraphIntrinsics;
-HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics_androidKt;->access$getHasEmojiCompat(Landroidx/compose/ui/text/TextStyle;)Z
-HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics_androidKt;->getHasEmojiCompat(Landroidx/compose/ui/text/TextStyle;)Z
-HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics_androidKt;->resolveTextDirectionHeuristics-9GRLPo0(Landroidx/compose/ui/text/style/TextDirection;Landroidx/compose/ui/text/intl/LocaleList;)I
-HSPLandroidx/compose/ui/text/platform/AndroidParagraph_androidKt;->ActualParagraph--hBUhpc(Landroidx/compose/ui/text/ParagraphIntrinsics;IZJ)Landroidx/compose/ui/text/Paragraph;
-HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;-><init>(IF)V
-HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setBrush-12SF9DM(Landroidx/compose/ui/graphics/Brush;JF)V
-HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setColor-8_81llA(J)V
-HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setDrawStyle(Landroidx/compose/ui/graphics/drawscope/DrawStyle;)V
-HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setShadow(Landroidx/compose/ui/graphics/Shadow;)V
-HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setTextDecoration(Landroidx/compose/ui/text/style/TextDecoration;)V
-HSPLandroidx/compose/ui/text/platform/DefaultImpl$getFontLoadState$initCallback$1;-><init>(Landroidx/compose/runtime/MutableState;Landroidx/compose/ui/text/platform/DefaultImpl;)V
-HSPLandroidx/compose/ui/text/platform/DefaultImpl$getFontLoadState$initCallback$1;->onInitialized()V
-HSPLandroidx/compose/ui/text/platform/DefaultImpl;-><init>()V
-HSPLandroidx/compose/ui/text/platform/DefaultImpl;->access$setLoadState$p(Landroidx/compose/ui/text/platform/DefaultImpl;Landroidx/compose/runtime/State;)V
-HSPLandroidx/compose/ui/text/platform/DefaultImpl;->getFontLoadState()Landroidx/compose/runtime/State;
-HSPLandroidx/compose/ui/text/platform/DefaultImpl;->getFontLoaded()Landroidx/compose/runtime/State;
-HSPLandroidx/compose/ui/text/platform/EmojiCompatStatus;-><clinit>()V
-HSPLandroidx/compose/ui/text/platform/EmojiCompatStatus;-><init>()V
-HSPLandroidx/compose/ui/text/platform/EmojiCompatStatus;->getFontLoaded()Landroidx/compose/runtime/State;
-HSPLandroidx/compose/ui/text/platform/ImmutableBool;-><init>(Z)V
-HSPLandroidx/compose/ui/text/platform/ImmutableBool;->getValue()Ljava/lang/Boolean;
-HSPLandroidx/compose/ui/text/platform/ImmutableBool;->getValue()Ljava/lang/Object;
-HSPLandroidx/compose/ui/text/platform/Synchronization_jvmKt;->createSynchronizedObject()Landroidx/compose/ui/text/platform/SynchronizedObject;
-HSPLandroidx/compose/ui/text/platform/SynchronizedObject;-><init>()V
-HSPLandroidx/compose/ui/text/platform/extensions/PlaceholderExtensions_androidKt;->setPlaceholders(Landroid/text/Spannable;Ljava/util/List;Landroidx/compose/ui/unit/Density;)V
-HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt$setFontAttributes$1;-><init>(Landroid/text/Spannable;Lkotlin/jvm/functions/Function4;)V
-HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->flattenFontStylesAndApply(Landroidx/compose/ui/text/SpanStyle;Ljava/util/List;Lkotlin/jvm/functions/Function3;)V
-HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->hasFontAttributes(Landroidx/compose/ui/text/TextStyle;)Z
-HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->resolveLineHeightInPx-o2QH7mI(JFLandroidx/compose/ui/unit/Density;)F
-HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setFontAttributes(Landroid/text/Spannable;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;Lkotlin/jvm/functions/Function4;)V
-HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setLineHeight-r9BaKPg(Landroid/text/Spannable;JFLandroidx/compose/ui/unit/Density;)V
-HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setSpan(Landroid/text/Spannable;Ljava/lang/Object;II)V
-HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setSpanStyles(Landroid/text/Spannable;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;Landroidx/compose/ui/unit/Density;Lkotlin/jvm/functions/Function4;)V
-HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setTextIndent(Landroid/text/Spannable;Landroidx/compose/ui/text/style/TextIndent;FLandroidx/compose/ui/unit/Density;)V
-HSPLandroidx/compose/ui/text/platform/extensions/TextPaintExtensions_androidKt;->applySpanStyle(Landroidx/compose/ui/text/platform/AndroidTextPaint;Landroidx/compose/ui/text/SpanStyle;Lkotlin/jvm/functions/Function4;Landroidx/compose/ui/unit/Density;Z)Landroidx/compose/ui/text/SpanStyle;
-HSPLandroidx/compose/ui/text/platform/extensions/TextPaintExtensions_androidKt;->generateFallbackSpanStyle-62GTOB8(JZJLandroidx/compose/ui/text/style/BaselineShift;)Landroidx/compose/ui/text/SpanStyle;
-HSPLandroidx/compose/ui/text/platform/extensions/TextPaintExtensions_androidKt;->hasFontAttributes(Landroidx/compose/ui/text/SpanStyle;)Z
-HSPLandroidx/compose/ui/text/platform/extensions/TextPaintExtensions_androidKt;->setTextMotion(Landroidx/compose/ui/text/platform/AndroidTextPaint;Landroidx/compose/ui/text/style/TextMotion;)V
-HSPLandroidx/compose/ui/text/style/BaselineShift$Companion;-><init>()V
-HSPLandroidx/compose/ui/text/style/BaselineShift$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/style/BaselineShift$Companion;->getNone-y9eOQZs()F
-HSPLandroidx/compose/ui/text/style/BaselineShift;-><clinit>()V
-HSPLandroidx/compose/ui/text/style/BaselineShift;-><init>(F)V
-HSPLandroidx/compose/ui/text/style/BaselineShift;->access$getNone$cp()F
-HSPLandroidx/compose/ui/text/style/BaselineShift;->box-impl(F)Landroidx/compose/ui/text/style/BaselineShift;
-HSPLandroidx/compose/ui/text/style/BaselineShift;->constructor-impl(F)F
-HSPLandroidx/compose/ui/text/style/BaselineShift;->equals-impl0(FF)Z
-HSPLandroidx/compose/ui/text/style/BaselineShift;->unbox-impl()F
-HSPLandroidx/compose/ui/text/style/ColorStyle;-><init>(J)V
-HSPLandroidx/compose/ui/text/style/ColorStyle;-><init>(JLkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/style/ColorStyle;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/text/style/ColorStyle;->getAlpha()F
-HSPLandroidx/compose/ui/text/style/ColorStyle;->getBrush()Landroidx/compose/ui/graphics/Brush;
-HSPLandroidx/compose/ui/text/style/ColorStyle;->getColor-0d7_KjU()J
-HSPLandroidx/compose/ui/text/style/Hyphens$Companion;-><init>()V
-HSPLandroidx/compose/ui/text/style/Hyphens$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/style/Hyphens$Companion;->getAuto-vmbZdU8()I
-HSPLandroidx/compose/ui/text/style/Hyphens$Companion;->getNone-vmbZdU8()I
-HSPLandroidx/compose/ui/text/style/Hyphens;-><clinit>()V
-HSPLandroidx/compose/ui/text/style/Hyphens;-><init>(I)V
-HSPLandroidx/compose/ui/text/style/Hyphens;->access$getAuto$cp()I
-HSPLandroidx/compose/ui/text/style/Hyphens;->access$getNone$cp()I
-HSPLandroidx/compose/ui/text/style/Hyphens;->box-impl(I)Landroidx/compose/ui/text/style/Hyphens;
-HSPLandroidx/compose/ui/text/style/Hyphens;->constructor-impl(I)I
-HSPLandroidx/compose/ui/text/style/Hyphens;->equals-impl0(II)Z
-HSPLandroidx/compose/ui/text/style/Hyphens;->unbox-impl()I
-HSPLandroidx/compose/ui/text/style/LineBreak$Companion;-><init>()V
-HSPLandroidx/compose/ui/text/style/LineBreak$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/style/LineBreak$Companion;->getSimple-rAG3T2k()I
-HSPLandroidx/compose/ui/text/style/LineBreak$Strategy$Companion;-><init>()V
-HSPLandroidx/compose/ui/text/style/LineBreak$Strategy$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/style/LineBreak$Strategy$Companion;->getBalanced-fcGXIks()I
-HSPLandroidx/compose/ui/text/style/LineBreak$Strategy$Companion;->getHighQuality-fcGXIks()I
-HSPLandroidx/compose/ui/text/style/LineBreak$Strategy$Companion;->getSimple-fcGXIks()I
-HSPLandroidx/compose/ui/text/style/LineBreak$Strategy;-><clinit>()V
-HSPLandroidx/compose/ui/text/style/LineBreak$Strategy;-><init>(I)V
-HSPLandroidx/compose/ui/text/style/LineBreak$Strategy;->access$getBalanced$cp()I
-HSPLandroidx/compose/ui/text/style/LineBreak$Strategy;->access$getHighQuality$cp()I
-HSPLandroidx/compose/ui/text/style/LineBreak$Strategy;->access$getSimple$cp()I
-HSPLandroidx/compose/ui/text/style/LineBreak$Strategy;->box-impl(I)Landroidx/compose/ui/text/style/LineBreak$Strategy;
-HSPLandroidx/compose/ui/text/style/LineBreak$Strategy;->constructor-impl(I)I
-HSPLandroidx/compose/ui/text/style/LineBreak$Strategy;->equals-impl0(II)Z
-HSPLandroidx/compose/ui/text/style/LineBreak$Strategy;->unbox-impl()I
-HSPLandroidx/compose/ui/text/style/LineBreak$Strictness$Companion;-><init>()V
-HSPLandroidx/compose/ui/text/style/LineBreak$Strictness$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/style/LineBreak$Strictness$Companion;->getDefault-usljTpc()I
-HSPLandroidx/compose/ui/text/style/LineBreak$Strictness$Companion;->getLoose-usljTpc()I
-HSPLandroidx/compose/ui/text/style/LineBreak$Strictness$Companion;->getNormal-usljTpc()I
-HSPLandroidx/compose/ui/text/style/LineBreak$Strictness$Companion;->getStrict-usljTpc()I
-HSPLandroidx/compose/ui/text/style/LineBreak$Strictness;-><clinit>()V
-HSPLandroidx/compose/ui/text/style/LineBreak$Strictness;-><init>(I)V
-HSPLandroidx/compose/ui/text/style/LineBreak$Strictness;->access$getDefault$cp()I
-HSPLandroidx/compose/ui/text/style/LineBreak$Strictness;->access$getLoose$cp()I
-HSPLandroidx/compose/ui/text/style/LineBreak$Strictness;->access$getNormal$cp()I
-HSPLandroidx/compose/ui/text/style/LineBreak$Strictness;->access$getStrict$cp()I
-HSPLandroidx/compose/ui/text/style/LineBreak$Strictness;->box-impl(I)Landroidx/compose/ui/text/style/LineBreak$Strictness;
-HSPLandroidx/compose/ui/text/style/LineBreak$Strictness;->constructor-impl(I)I
-HSPLandroidx/compose/ui/text/style/LineBreak$Strictness;->equals-impl0(II)Z
-HSPLandroidx/compose/ui/text/style/LineBreak$Strictness;->unbox-impl()I
-HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak$Companion;-><init>()V
-HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak$Companion;->getDefault-jp8hJ3c()I
-HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak$Companion;->getPhrase-jp8hJ3c()I
-HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak;-><clinit>()V
-HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak;-><init>(I)V
-HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak;->access$getDefault$cp()I
-HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak;->access$getPhrase$cp()I
-HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak;->box-impl(I)Landroidx/compose/ui/text/style/LineBreak$WordBreak;
-HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak;->constructor-impl(I)I
-HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak;->equals-impl0(II)Z
-HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak;->unbox-impl()I
-HSPLandroidx/compose/ui/text/style/LineBreak;-><clinit>()V
-HSPLandroidx/compose/ui/text/style/LineBreak;-><init>(I)V
-HSPLandroidx/compose/ui/text/style/LineBreak;->access$getSimple$cp()I
-HSPLandroidx/compose/ui/text/style/LineBreak;->box-impl(I)Landroidx/compose/ui/text/style/LineBreak;
-HSPLandroidx/compose/ui/text/style/LineBreak;->constructor-impl(I)I
-HSPLandroidx/compose/ui/text/style/LineBreak;->constructor-impl(III)I
-HSPLandroidx/compose/ui/text/style/LineBreak;->getStrategy-fcGXIks(I)I
-HSPLandroidx/compose/ui/text/style/LineBreak;->getStrictness-usljTpc(I)I
-HSPLandroidx/compose/ui/text/style/LineBreak;->getWordBreak-jp8hJ3c(I)I
-HSPLandroidx/compose/ui/text/style/LineBreak;->unbox-impl()I
-HSPLandroidx/compose/ui/text/style/LineBreak_androidKt;->access$packBytes(III)I
-HSPLandroidx/compose/ui/text/style/LineBreak_androidKt;->access$unpackByte1(I)I
-HSPLandroidx/compose/ui/text/style/LineBreak_androidKt;->access$unpackByte2(I)I
-HSPLandroidx/compose/ui/text/style/LineBreak_androidKt;->access$unpackByte3(I)I
-HSPLandroidx/compose/ui/text/style/LineBreak_androidKt;->packBytes(III)I
-HSPLandroidx/compose/ui/text/style/LineBreak_androidKt;->unpackByte1(I)I
-HSPLandroidx/compose/ui/text/style/LineBreak_androidKt;->unpackByte2(I)I
-HSPLandroidx/compose/ui/text/style/LineBreak_androidKt;->unpackByte3(I)I
-HSPLandroidx/compose/ui/text/style/TextAlign$Companion;-><init>()V
-HSPLandroidx/compose/ui/text/style/TextAlign$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/style/TextAlign$Companion;->getCenter-e0LSkKk()I
-HSPLandroidx/compose/ui/text/style/TextAlign$Companion;->getJustify-e0LSkKk()I
-HSPLandroidx/compose/ui/text/style/TextAlign$Companion;->getLeft-e0LSkKk()I
-HSPLandroidx/compose/ui/text/style/TextAlign$Companion;->getRight-e0LSkKk()I
-HSPLandroidx/compose/ui/text/style/TextAlign$Companion;->getStart-e0LSkKk()I
-HSPLandroidx/compose/ui/text/style/TextAlign;-><clinit>()V
-HSPLandroidx/compose/ui/text/style/TextAlign;-><init>(I)V
-HSPLandroidx/compose/ui/text/style/TextAlign;->access$getCenter$cp()I
-HSPLandroidx/compose/ui/text/style/TextAlign;->access$getJustify$cp()I
-HSPLandroidx/compose/ui/text/style/TextAlign;->access$getLeft$cp()I
-HSPLandroidx/compose/ui/text/style/TextAlign;->access$getRight$cp()I
-HSPLandroidx/compose/ui/text/style/TextAlign;->access$getStart$cp()I
-HSPLandroidx/compose/ui/text/style/TextAlign;->box-impl(I)Landroidx/compose/ui/text/style/TextAlign;
-HSPLandroidx/compose/ui/text/style/TextAlign;->constructor-impl(I)I
-HSPLandroidx/compose/ui/text/style/TextAlign;->equals-impl0(II)Z
-HSPLandroidx/compose/ui/text/style/TextAlign;->unbox-impl()I
-HSPLandroidx/compose/ui/text/style/TextDecoration$Companion;-><init>()V
-HSPLandroidx/compose/ui/text/style/TextDecoration$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/style/TextDecoration$Companion;->getNone()Landroidx/compose/ui/text/style/TextDecoration;
-HSPLandroidx/compose/ui/text/style/TextDecoration$Companion;->getUnderline()Landroidx/compose/ui/text/style/TextDecoration;
-HSPLandroidx/compose/ui/text/style/TextDecoration;-><clinit>()V
-HSPLandroidx/compose/ui/text/style/TextDecoration;-><init>(I)V
-HSPLandroidx/compose/ui/text/style/TextDecoration;->access$getNone$cp()Landroidx/compose/ui/text/style/TextDecoration;
-HSPLandroidx/compose/ui/text/style/TextDecoration;->access$getUnderline$cp()Landroidx/compose/ui/text/style/TextDecoration;
-HSPLandroidx/compose/ui/text/style/TextDecoration;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/text/style/TextDirection$Companion;-><init>()V
-HSPLandroidx/compose/ui/text/style/TextDirection$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/style/TextDirection$Companion;->getContent-s_7X-co()I
-HSPLandroidx/compose/ui/text/style/TextDirection$Companion;->getContentOrLtr-s_7X-co()I
-HSPLandroidx/compose/ui/text/style/TextDirection$Companion;->getContentOrRtl-s_7X-co()I
-HSPLandroidx/compose/ui/text/style/TextDirection$Companion;->getLtr-s_7X-co()I
-HSPLandroidx/compose/ui/text/style/TextDirection;-><clinit>()V
-HSPLandroidx/compose/ui/text/style/TextDirection;-><init>(I)V
-HSPLandroidx/compose/ui/text/style/TextDirection;->access$getContent$cp()I
-HSPLandroidx/compose/ui/text/style/TextDirection;->access$getContentOrLtr$cp()I
-HSPLandroidx/compose/ui/text/style/TextDirection;->access$getContentOrRtl$cp()I
-HSPLandroidx/compose/ui/text/style/TextDirection;->access$getLtr$cp()I
-HSPLandroidx/compose/ui/text/style/TextDirection;->box-impl(I)Landroidx/compose/ui/text/style/TextDirection;
-HSPLandroidx/compose/ui/text/style/TextDirection;->constructor-impl(I)I
-HSPLandroidx/compose/ui/text/style/TextDirection;->equals-impl0(II)Z
-HSPLandroidx/compose/ui/text/style/TextDirection;->unbox-impl()I
-HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Companion;-><clinit>()V
-HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Companion;-><init>()V
-HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Companion;->from-8_81llA(J)Landroidx/compose/ui/text/style/TextForegroundStyle;
-HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;-><clinit>()V
-HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;-><init>()V
-HSPLandroidx/compose/ui/text/style/TextForegroundStyle$merge$2;-><init>(Landroidx/compose/ui/text/style/TextForegroundStyle;)V
-HSPLandroidx/compose/ui/text/style/TextForegroundStyle$merge$2;->invoke()Landroidx/compose/ui/text/style/TextForegroundStyle;
-HSPLandroidx/compose/ui/text/style/TextForegroundStyle$merge$2;->invoke()Ljava/lang/Object;
-HSPLandroidx/compose/ui/text/style/TextForegroundStyle;-><clinit>()V
-HSPLandroidx/compose/ui/text/style/TextForegroundStyle;->merge(Landroidx/compose/ui/text/style/TextForegroundStyle;)Landroidx/compose/ui/text/style/TextForegroundStyle;
-HSPLandroidx/compose/ui/text/style/TextForegroundStyle;->takeOrElse(Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/text/style/TextForegroundStyle;
-HSPLandroidx/compose/ui/text/style/TextGeometricTransform$Companion;-><init>()V
-HSPLandroidx/compose/ui/text/style/TextGeometricTransform$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/style/TextGeometricTransform$Companion;->getNone$ui_text_release()Landroidx/compose/ui/text/style/TextGeometricTransform;
-HSPLandroidx/compose/ui/text/style/TextGeometricTransform;-><clinit>()V
-HSPLandroidx/compose/ui/text/style/TextGeometricTransform;-><init>(FF)V
-HSPLandroidx/compose/ui/text/style/TextGeometricTransform;->access$getNone$cp()Landroidx/compose/ui/text/style/TextGeometricTransform;
-HSPLandroidx/compose/ui/text/style/TextGeometricTransform;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/text/style/TextIndent$Companion;-><init>()V
-HSPLandroidx/compose/ui/text/style/TextIndent$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/style/TextIndent$Companion;->getNone()Landroidx/compose/ui/text/style/TextIndent;
-HSPLandroidx/compose/ui/text/style/TextIndent;-><clinit>()V
-HSPLandroidx/compose/ui/text/style/TextIndent;-><init>(JJ)V
-HSPLandroidx/compose/ui/text/style/TextIndent;-><init>(JJILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/style/TextIndent;-><init>(JJLkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/style/TextIndent;->access$getNone$cp()Landroidx/compose/ui/text/style/TextIndent;
-HSPLandroidx/compose/ui/text/style/TextIndent;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/text/style/TextIndent;->getFirstLine-XSAIIZE()J
-HSPLandroidx/compose/ui/text/style/TextIndent;->getRestLine-XSAIIZE()J
-HSPLandroidx/compose/ui/text/style/TextMotion$Companion;-><init>()V
-HSPLandroidx/compose/ui/text/style/TextMotion$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/style/TextMotion$Companion;->getStatic()Landroidx/compose/ui/text/style/TextMotion;
-HSPLandroidx/compose/ui/text/style/TextMotion$Linearity$Companion;-><init>()V
-HSPLandroidx/compose/ui/text/style/TextMotion$Linearity$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/style/TextMotion$Linearity$Companion;->getFontHinting-4e0Vf04()I
-HSPLandroidx/compose/ui/text/style/TextMotion$Linearity$Companion;->getLinear-4e0Vf04()I
-HSPLandroidx/compose/ui/text/style/TextMotion$Linearity;-><clinit>()V
-HSPLandroidx/compose/ui/text/style/TextMotion$Linearity;->access$getFontHinting$cp()I
-HSPLandroidx/compose/ui/text/style/TextMotion$Linearity;->access$getLinear$cp()I
-HSPLandroidx/compose/ui/text/style/TextMotion$Linearity;->constructor-impl(I)I
-HSPLandroidx/compose/ui/text/style/TextMotion$Linearity;->equals-impl0(II)Z
-HSPLandroidx/compose/ui/text/style/TextMotion;-><clinit>()V
-HSPLandroidx/compose/ui/text/style/TextMotion;-><init>(IZ)V
-HSPLandroidx/compose/ui/text/style/TextMotion;-><init>(IZLkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/style/TextMotion;->access$getStatic$cp()Landroidx/compose/ui/text/style/TextMotion;
-HSPLandroidx/compose/ui/text/style/TextMotion;->getLinearity-4e0Vf04$ui_text_release()I
-HSPLandroidx/compose/ui/text/style/TextMotion;->getSubpixelTextPositioning$ui_text_release()Z
-HSPLandroidx/compose/ui/text/style/TextOverflow$Companion;-><init>()V
-HSPLandroidx/compose/ui/text/style/TextOverflow$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/text/style/TextOverflow$Companion;->getClip-gIe3tQ8()I
-HSPLandroidx/compose/ui/text/style/TextOverflow$Companion;->getEllipsis-gIe3tQ8()I
-HSPLandroidx/compose/ui/text/style/TextOverflow;-><clinit>()V
-HSPLandroidx/compose/ui/text/style/TextOverflow;->access$getClip$cp()I
-HSPLandroidx/compose/ui/text/style/TextOverflow;->access$getEllipsis$cp()I
-HSPLandroidx/compose/ui/text/style/TextOverflow;->constructor-impl(I)I
-HSPLandroidx/compose/ui/text/style/TextOverflow;->equals-impl0(II)Z
-HSPLandroidx/compose/ui/unit/AndroidDensity_androidKt;->Density(Landroid/content/Context;)Landroidx/compose/ui/unit/Density;
-HSPLandroidx/compose/ui/unit/Constraints$Companion;-><init>()V
-HSPLandroidx/compose/ui/unit/Constraints$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/unit/Constraints$Companion;->bitsNeedForSize(I)I
-HSPLandroidx/compose/ui/unit/Constraints$Companion;->createConstraints-Zbe2FdA$ui_unit_release(IIII)J
-HSPLandroidx/compose/ui/unit/Constraints;-><clinit>()V
-HSPLandroidx/compose/ui/unit/Constraints;-><init>(J)V
-HSPLandroidx/compose/ui/unit/Constraints;->access$getMinHeightOffsets$cp()[I
-HSPLandroidx/compose/ui/unit/Constraints;->box-impl(J)Landroidx/compose/ui/unit/Constraints;
-HSPLandroidx/compose/ui/unit/Constraints;->constructor-impl(J)J
-HSPLandroidx/compose/ui/unit/Constraints;->copy-Zbe2FdA$default(JIIIIILjava/lang/Object;)J
-HSPLandroidx/compose/ui/unit/Constraints;->copy-Zbe2FdA(JIIII)J
-HSPLandroidx/compose/ui/unit/Constraints;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/unit/Constraints;->equals-impl(JLjava/lang/Object;)Z
-HSPLandroidx/compose/ui/unit/Constraints;->equals-impl0(JJ)Z
-HSPLandroidx/compose/ui/unit/Constraints;->getFocusIndex-impl(J)I
-HSPLandroidx/compose/ui/unit/Constraints;->getHasBoundedHeight-impl(J)Z
-HSPLandroidx/compose/ui/unit/Constraints;->getHasBoundedWidth-impl(J)Z
-HSPLandroidx/compose/ui/unit/Constraints;->getHasFixedHeight-impl(J)Z
-HSPLandroidx/compose/ui/unit/Constraints;->getHasFixedWidth-impl(J)Z
-HSPLandroidx/compose/ui/unit/Constraints;->getMaxHeight-impl(J)I
-HSPLandroidx/compose/ui/unit/Constraints;->getMaxWidth-impl(J)I
-HSPLandroidx/compose/ui/unit/Constraints;->getMinHeight-impl(J)I
-HSPLandroidx/compose/ui/unit/Constraints;->getMinWidth-impl(J)I
-HSPLandroidx/compose/ui/unit/Constraints;->unbox-impl()J
-HSPLandroidx/compose/ui/unit/ConstraintsKt;->Constraints$default(IIIIILjava/lang/Object;)J
-HSPLandroidx/compose/ui/unit/ConstraintsKt;->Constraints(IIII)J
-HSPLandroidx/compose/ui/unit/ConstraintsKt;->addMaxWithMinimum(II)I
-HSPLandroidx/compose/ui/unit/ConstraintsKt;->constrain-4WqzIAM(JJ)J
-HSPLandroidx/compose/ui/unit/ConstraintsKt;->constrain-N9IONVI(JJ)J
-HSPLandroidx/compose/ui/unit/ConstraintsKt;->constrainHeight-K40F9xA(JI)I
-HSPLandroidx/compose/ui/unit/ConstraintsKt;->constrainWidth-K40F9xA(JI)I
-HSPLandroidx/compose/ui/unit/ConstraintsKt;->offset-NN6Ew-U(JII)J
-HSPLandroidx/compose/ui/unit/Density;->roundToPx-0680j_4(F)I
-HSPLandroidx/compose/ui/unit/Density;->toDp-u2uoSUM(I)F
-HSPLandroidx/compose/ui/unit/Density;->toPx--R2X_6o(J)F
-HSPLandroidx/compose/ui/unit/Density;->toPx-0680j_4(F)F
-HSPLandroidx/compose/ui/unit/Density;->toSize-XkaWNTQ(J)J
-HSPLandroidx/compose/ui/unit/DensityImpl;-><init>(FF)V
-HSPLandroidx/compose/ui/unit/DensityImpl;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/unit/DensityImpl;->getDensity()F
-HSPLandroidx/compose/ui/unit/DensityImpl;->getFontScale()F
-HSPLandroidx/compose/ui/unit/DensityKt;->Density$default(FFILjava/lang/Object;)Landroidx/compose/ui/unit/Density;
-HSPLandroidx/compose/ui/unit/DensityKt;->Density(FF)Landroidx/compose/ui/unit/Density;
-HSPLandroidx/compose/ui/unit/Dp$Companion;-><init>()V
-HSPLandroidx/compose/ui/unit/Dp$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/unit/Dp$Companion;->getUnspecified-D9Ej5fM()F
-HSPLandroidx/compose/ui/unit/Dp;-><clinit>()V
-HSPLandroidx/compose/ui/unit/Dp;-><init>(F)V
-HSPLandroidx/compose/ui/unit/Dp;->access$getUnspecified$cp()F
-HSPLandroidx/compose/ui/unit/Dp;->box-impl(F)Landroidx/compose/ui/unit/Dp;
-HSPLandroidx/compose/ui/unit/Dp;->compareTo(Ljava/lang/Object;)I
-HSPLandroidx/compose/ui/unit/Dp;->compareTo-0680j_4(F)I
-HSPLandroidx/compose/ui/unit/Dp;->compareTo-0680j_4(FF)I
-HSPLandroidx/compose/ui/unit/Dp;->constructor-impl(F)F
-HSPLandroidx/compose/ui/unit/Dp;->equals(Ljava/lang/Object;)Z
-HSPLandroidx/compose/ui/unit/Dp;->equals-impl(FLjava/lang/Object;)Z
-HSPLandroidx/compose/ui/unit/Dp;->equals-impl0(FF)Z
-HSPLandroidx/compose/ui/unit/Dp;->unbox-impl()F
-HSPLandroidx/compose/ui/unit/DpKt;->DpOffset-YgX7TsA(FF)J
-HSPLandroidx/compose/ui/unit/DpKt;->DpSize-YgX7TsA(FF)J
-HSPLandroidx/compose/ui/unit/DpOffset$Companion;-><init>()V
-HSPLandroidx/compose/ui/unit/DpOffset$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/unit/DpOffset;-><clinit>()V
-HSPLandroidx/compose/ui/unit/DpOffset;->constructor-impl(J)J
-HSPLandroidx/compose/ui/unit/DpSize$Companion;-><init>()V
-HSPLandroidx/compose/ui/unit/DpSize$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/unit/DpSize$Companion;->getUnspecified-MYxV2XQ()J
-HSPLandroidx/compose/ui/unit/DpSize;-><clinit>()V
-HSPLandroidx/compose/ui/unit/DpSize;->access$getUnspecified$cp()J
-HSPLandroidx/compose/ui/unit/DpSize;->constructor-impl(J)J
-HSPLandroidx/compose/ui/unit/DpSize;->equals-impl0(JJ)Z
-HSPLandroidx/compose/ui/unit/DpSize;->getHeight-D9Ej5fM(J)F
-HSPLandroidx/compose/ui/unit/DpSize;->getWidth-D9Ej5fM(J)F
-HSPLandroidx/compose/ui/unit/IntOffset$Companion;-><init>()V
-HSPLandroidx/compose/ui/unit/IntOffset$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/unit/IntOffset$Companion;->getZero-nOcc-ac()J
-HSPLandroidx/compose/ui/unit/IntOffset;-><clinit>()V
-HSPLandroidx/compose/ui/unit/IntOffset;-><init>(J)V
-HSPLandroidx/compose/ui/unit/IntOffset;->access$getZero$cp()J
-HSPLandroidx/compose/ui/unit/IntOffset;->box-impl(J)Landroidx/compose/ui/unit/IntOffset;
-HSPLandroidx/compose/ui/unit/IntOffset;->component1-impl(J)I
-HSPLandroidx/compose/ui/unit/IntOffset;->component2-impl(J)I
-HSPLandroidx/compose/ui/unit/IntOffset;->constructor-impl(J)J
-HSPLandroidx/compose/ui/unit/IntOffset;->equals-impl0(JJ)Z
-HSPLandroidx/compose/ui/unit/IntOffset;->getX-impl(J)I
-HSPLandroidx/compose/ui/unit/IntOffset;->getY-impl(J)I
-HSPLandroidx/compose/ui/unit/IntOffset;->unbox-impl()J
-HSPLandroidx/compose/ui/unit/IntOffsetKt;->IntOffset(II)J
-HSPLandroidx/compose/ui/unit/IntOffsetKt;->minus-Nv-tHpc(JJ)J
-HSPLandroidx/compose/ui/unit/IntOffsetKt;->plus-Nv-tHpc(JJ)J
-HSPLandroidx/compose/ui/unit/IntSize$Companion;-><init>()V
-HSPLandroidx/compose/ui/unit/IntSize$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/unit/IntSize$Companion;->getZero-YbymL2g()J
-HSPLandroidx/compose/ui/unit/IntSize;-><clinit>()V
-HSPLandroidx/compose/ui/unit/IntSize;-><init>(J)V
-HSPLandroidx/compose/ui/unit/IntSize;->access$getZero$cp()J
-HSPLandroidx/compose/ui/unit/IntSize;->box-impl(J)Landroidx/compose/ui/unit/IntSize;
-HSPLandroidx/compose/ui/unit/IntSize;->constructor-impl(J)J
-HSPLandroidx/compose/ui/unit/IntSize;->equals-impl0(JJ)Z
-HSPLandroidx/compose/ui/unit/IntSize;->getHeight-impl(J)I
-HSPLandroidx/compose/ui/unit/IntSize;->getWidth-impl(J)I
-HSPLandroidx/compose/ui/unit/IntSize;->unbox-impl()J
-HSPLandroidx/compose/ui/unit/IntSizeKt;->IntSize(II)J
-HSPLandroidx/compose/ui/unit/IntSizeKt;->getCenter-ozmzZPI(J)J
-HSPLandroidx/compose/ui/unit/IntSizeKt;->toSize-ozmzZPI(J)J
-HSPLandroidx/compose/ui/unit/LayoutDirection;->$values()[Landroidx/compose/ui/unit/LayoutDirection;
-HSPLandroidx/compose/ui/unit/LayoutDirection;-><clinit>()V
-HSPLandroidx/compose/ui/unit/LayoutDirection;-><init>(Ljava/lang/String;I)V
-HSPLandroidx/compose/ui/unit/LayoutDirection;->values()[Landroidx/compose/ui/unit/LayoutDirection;
-HSPLandroidx/compose/ui/unit/TextUnit$Companion;-><init>()V
-HSPLandroidx/compose/ui/unit/TextUnit$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/unit/TextUnit$Companion;->getUnspecified-XSAIIZE()J
-HSPLandroidx/compose/ui/unit/TextUnit;-><clinit>()V
-HSPLandroidx/compose/ui/unit/TextUnit;->access$getUnspecified$cp()J
-HSPLandroidx/compose/ui/unit/TextUnit;->constructor-impl(J)J
-HSPLandroidx/compose/ui/unit/TextUnit;->equals-impl0(JJ)Z
-HSPLandroidx/compose/ui/unit/TextUnit;->getRawType-impl(J)J
-HSPLandroidx/compose/ui/unit/TextUnit;->getType-UIouoOA(J)J
-HSPLandroidx/compose/ui/unit/TextUnit;->getValue-impl(J)F
-HSPLandroidx/compose/ui/unit/TextUnitKt;->getSp(D)J
-HSPLandroidx/compose/ui/unit/TextUnitKt;->getSp(I)J
-HSPLandroidx/compose/ui/unit/TextUnitKt;->isUnspecified--R2X_6o(J)Z
-HSPLandroidx/compose/ui/unit/TextUnitKt;->pack(JF)J
-HSPLandroidx/compose/ui/unit/TextUnitType$Companion;-><init>()V
-HSPLandroidx/compose/ui/unit/TextUnitType$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/compose/ui/unit/TextUnitType$Companion;->getEm-UIouoOA()J
-HSPLandroidx/compose/ui/unit/TextUnitType$Companion;->getSp-UIouoOA()J
-HSPLandroidx/compose/ui/unit/TextUnitType$Companion;->getUnspecified-UIouoOA()J
-HSPLandroidx/compose/ui/unit/TextUnitType;-><clinit>()V
-HSPLandroidx/compose/ui/unit/TextUnitType;-><init>(J)V
-HSPLandroidx/compose/ui/unit/TextUnitType;->access$getEm$cp()J
-HSPLandroidx/compose/ui/unit/TextUnitType;->access$getSp$cp()J
-HSPLandroidx/compose/ui/unit/TextUnitType;->access$getUnspecified$cp()J
-HSPLandroidx/compose/ui/unit/TextUnitType;->box-impl(J)Landroidx/compose/ui/unit/TextUnitType;
-HSPLandroidx/compose/ui/unit/TextUnitType;->constructor-impl(J)J
-HSPLandroidx/compose/ui/unit/TextUnitType;->equals-impl0(JJ)Z
-HSPLandroidx/compose/ui/unit/TextUnitType;->unbox-impl()J
-HSPLandroidx/compose/ui/util/MathHelpersKt;->lerp(FFF)F
-HSPLandroidx/core/app/ComponentActivity;-><init>()V
-HSPLandroidx/core/app/ComponentActivity;->onCreate(Landroid/os/Bundle;)V
-HSPLandroidx/core/app/CoreComponentFactory;-><init>()V
-HSPLandroidx/core/app/CoreComponentFactory;->checkCompatWrapper(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/core/app/CoreComponentFactory;->instantiateActivity(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Intent;)Landroid/app/Activity;
-HSPLandroidx/core/app/CoreComponentFactory;->instantiateApplication(Ljava/lang/ClassLoader;Ljava/lang/String;)Landroid/app/Application;
-HSPLandroidx/core/app/CoreComponentFactory;->instantiateProvider(Ljava/lang/ClassLoader;Ljava/lang/String;)Landroid/content/ContentProvider;
-HSPLandroidx/core/graphics/Insets;-><clinit>()V
-HSPLandroidx/core/graphics/Insets;-><init>(IIII)V
-HSPLandroidx/core/graphics/TypefaceCompat;-><clinit>()V
-HSPLandroidx/core/graphics/TypefaceCompat;->createFromFontInfo(Landroid/content/Context;Landroid/os/CancellationSignal;[Landroidx/core/provider/FontsContractCompat$FontInfo;I)Landroid/graphics/Typeface;
-HSPLandroidx/core/graphics/TypefaceCompatApi29Impl;-><init>()V
-HSPLandroidx/core/graphics/TypefaceCompatApi29Impl;->createFromFontInfo(Landroid/content/Context;Landroid/os/CancellationSignal;[Landroidx/core/provider/FontsContractCompat$FontInfo;I)Landroid/graphics/Typeface;
-HSPLandroidx/core/graphics/TypefaceCompatApi29Impl;->findBaseFont(Landroid/graphics/fonts/FontFamily;I)Landroid/graphics/fonts/Font;
-HSPLandroidx/core/graphics/TypefaceCompatApi29Impl;->getMatchScore(Landroid/graphics/fonts/FontStyle;Landroid/graphics/fonts/FontStyle;)I
-HSPLandroidx/core/graphics/TypefaceCompatBaseImpl;-><init>()V
-HSPLandroidx/core/graphics/TypefaceCompatUtil$Api19Impl;->openFileDescriptor(Landroid/content/ContentResolver;Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/os/ParcelFileDescriptor;
-HSPLandroidx/core/graphics/TypefaceCompatUtil;->mmap(Landroid/content/Context;Landroid/os/CancellationSignal;Landroid/net/Uri;)Ljava/nio/ByteBuffer;
-HSPLandroidx/core/graphics/drawable/DrawableKt;->toBitmap$default(Landroid/graphics/drawable/Drawable;IILandroid/graphics/Bitmap$Config;ILjava/lang/Object;)Landroid/graphics/Bitmap;
-HSPLandroidx/core/graphics/drawable/DrawableKt;->toBitmap(Landroid/graphics/drawable/Drawable;IILandroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap;
-HSPLandroidx/core/os/BuildCompat$Extensions30Impl;-><clinit>()V
-HSPLandroidx/core/os/BuildCompat;-><clinit>()V
-HSPLandroidx/core/os/BuildCompat;->isAtLeastT()Z
-HSPLandroidx/core/os/HandlerCompat$Api28Impl;->createAsync(Landroid/os/Looper;)Landroid/os/Handler;
-HSPLandroidx/core/os/HandlerCompat;->createAsync(Landroid/os/Looper;)Landroid/os/Handler;
-HSPLandroidx/core/os/TraceCompat$Api18Impl;->beginSection(Ljava/lang/String;)V
-HSPLandroidx/core/os/TraceCompat$Api18Impl;->endSection()V
-HSPLandroidx/core/os/TraceCompat;-><clinit>()V
-HSPLandroidx/core/os/TraceCompat;->beginSection(Ljava/lang/String;)V
-HSPLandroidx/core/os/TraceCompat;->endSection()V
-HSPLandroidx/core/provider/FontProvider$$ExternalSyntheticLambda0;-><init>()V
-HSPLandroidx/core/provider/FontProvider$Api16Impl;->query(Landroid/content/ContentResolver;Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)Landroid/database/Cursor;
-HSPLandroidx/core/provider/FontProvider;-><clinit>()V
-HSPLandroidx/core/provider/FontProvider;->convertToByteArrayList([Landroid/content/pm/Signature;)Ljava/util/List;
-HSPLandroidx/core/provider/FontProvider;->equalsByteArrayList(Ljava/util/List;Ljava/util/List;)Z
-HSPLandroidx/core/provider/FontProvider;->getCertificates(Landroidx/core/provider/FontRequest;Landroid/content/res/Resources;)Ljava/util/List;
-HSPLandroidx/core/provider/FontProvider;->getFontFamilyResult(Landroid/content/Context;Landroidx/core/provider/FontRequest;Landroid/os/CancellationSignal;)Landroidx/core/provider/FontsContractCompat$FontFamilyResult;
-HSPLandroidx/core/provider/FontProvider;->getProvider(Landroid/content/pm/PackageManager;Landroidx/core/provider/FontRequest;Landroid/content/res/Resources;)Landroid/content/pm/ProviderInfo;
-HSPLandroidx/core/provider/FontProvider;->query(Landroid/content/Context;Landroidx/core/provider/FontRequest;Ljava/lang/String;Landroid/os/CancellationSignal;)[Landroidx/core/provider/FontsContractCompat$FontInfo;
-HSPLandroidx/core/provider/FontRequest;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;)V
-HSPLandroidx/core/provider/FontRequest;->createIdentifier(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
-HSPLandroidx/core/provider/FontRequest;->getCertificates()Ljava/util/List;
-HSPLandroidx/core/provider/FontRequest;->getProviderAuthority()Ljava/lang/String;
-HSPLandroidx/core/provider/FontRequest;->getProviderPackage()Ljava/lang/String;
-HSPLandroidx/core/provider/FontRequest;->getQuery()Ljava/lang/String;
-HSPLandroidx/core/provider/FontsContractCompat$FontFamilyResult;-><init>(I[Landroidx/core/provider/FontsContractCompat$FontInfo;)V
-HSPLandroidx/core/provider/FontsContractCompat$FontFamilyResult;->create(I[Landroidx/core/provider/FontsContractCompat$FontInfo;)Landroidx/core/provider/FontsContractCompat$FontFamilyResult;
-HSPLandroidx/core/provider/FontsContractCompat$FontFamilyResult;->getFonts()[Landroidx/core/provider/FontsContractCompat$FontInfo;
-HSPLandroidx/core/provider/FontsContractCompat$FontFamilyResult;->getStatusCode()I
-HSPLandroidx/core/provider/FontsContractCompat$FontInfo;-><init>(Landroid/net/Uri;IIZI)V
-HSPLandroidx/core/provider/FontsContractCompat$FontInfo;->create(Landroid/net/Uri;IIZI)Landroidx/core/provider/FontsContractCompat$FontInfo;
-HSPLandroidx/core/provider/FontsContractCompat$FontInfo;->getResultCode()I
-HSPLandroidx/core/provider/FontsContractCompat$FontInfo;->getTtcIndex()I
-HSPLandroidx/core/provider/FontsContractCompat$FontInfo;->getUri()Landroid/net/Uri;
-HSPLandroidx/core/provider/FontsContractCompat$FontInfo;->getWeight()I
-HSPLandroidx/core/provider/FontsContractCompat$FontInfo;->isItalic()Z
-HSPLandroidx/core/provider/FontsContractCompat;->buildTypeface(Landroid/content/Context;Landroid/os/CancellationSignal;[Landroidx/core/provider/FontsContractCompat$FontInfo;)Landroid/graphics/Typeface;
-HSPLandroidx/core/provider/FontsContractCompat;->fetchFonts(Landroid/content/Context;Landroid/os/CancellationSignal;Landroidx/core/provider/FontRequest;)Landroidx/core/provider/FontsContractCompat$FontFamilyResult;
-HSPLandroidx/core/util/Preconditions;->checkArgument(ZLjava/lang/Object;)V
-HSPLandroidx/core/util/Preconditions;->checkArgumentNonnegative(ILjava/lang/String;)I
-HSPLandroidx/core/util/Preconditions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/core/util/Preconditions;->checkNotNull(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/core/util/Preconditions;->checkState(ZLjava/lang/String;)V
-HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;-><init>(Landroidx/core/view/AccessibilityDelegateCompat;)V
-HSPLandroidx/core/view/AccessibilityDelegateCompat;-><clinit>()V
-HSPLandroidx/core/view/AccessibilityDelegateCompat;-><init>()V
-HSPLandroidx/core/view/AccessibilityDelegateCompat;-><init>(Landroid/view/View$AccessibilityDelegate;)V
-HSPLandroidx/core/view/AccessibilityDelegateCompat;->getBridge()Landroid/view/View$AccessibilityDelegate;
-HSPLandroidx/core/view/MenuHostHelper;-><init>(Ljava/lang/Runnable;)V
-HSPLandroidx/core/view/ViewCompat$$ExternalSyntheticLambda0;-><init>()V
-HSPLandroidx/core/view/ViewCompat$AccessibilityPaneVisibilityManager;-><init>()V
-HSPLandroidx/core/view/ViewCompat$Api21Impl$1;-><init>(Landroid/view/View;Landroidx/core/view/OnApplyWindowInsetsListener;)V
-HSPLandroidx/core/view/ViewCompat$Api21Impl;->setOnApplyWindowInsetsListener(Landroid/view/View;Landroidx/core/view/OnApplyWindowInsetsListener;)V
-HSPLandroidx/core/view/ViewCompat;-><clinit>()V
-HSPLandroidx/core/view/ViewCompat;->setAccessibilityDelegate(Landroid/view/View;Landroidx/core/view/AccessibilityDelegateCompat;)V
-HSPLandroidx/core/view/ViewCompat;->setOnApplyWindowInsetsListener(Landroid/view/View;Landroidx/core/view/OnApplyWindowInsetsListener;)V
-HSPLandroidx/core/view/ViewCompat;->setWindowInsetsAnimationCallback(Landroid/view/View;Landroidx/core/view/WindowInsetsAnimationCompat$Callback;)V
-HSPLandroidx/core/view/ViewKt$ancestors$1;-><clinit>()V
-HSPLandroidx/core/view/ViewKt$ancestors$1;-><init>()V
-HSPLandroidx/core/view/ViewKt$ancestors$1;->invoke(Landroid/view/ViewParent;)Landroid/view/ViewParent;
-HSPLandroidx/core/view/ViewKt$ancestors$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/core/view/ViewKt;->getAncestors(Landroid/view/View;)Lkotlin/sequences/Sequence;
-HSPLandroidx/core/view/WindowCompat;->getInsetsController(Landroid/view/Window;Landroid/view/View;)Landroidx/core/view/WindowInsetsControllerCompat;
-HSPLandroidx/core/view/WindowInsetsAnimationCompat$Callback;-><init>(I)V
-HSPLandroidx/core/view/WindowInsetsAnimationCompat$Callback;->getDispatchMode()I
-HSPLandroidx/core/view/WindowInsetsAnimationCompat$Impl30$ProxyCallback;-><init>(Landroidx/core/view/WindowInsetsAnimationCompat$Callback;)V
-HSPLandroidx/core/view/WindowInsetsAnimationCompat$Impl30;->setCallback(Landroid/view/View;Landroidx/core/view/WindowInsetsAnimationCompat$Callback;)V
-HSPLandroidx/core/view/WindowInsetsAnimationCompat;->setCallback(Landroid/view/View;Landroidx/core/view/WindowInsetsAnimationCompat$Callback;)V
-HSPLandroidx/core/view/WindowInsetsCompat$Type;->captionBar()I
-HSPLandroidx/core/view/WindowInsetsCompat$Type;->displayCutout()I
-HSPLandroidx/core/view/WindowInsetsCompat$Type;->ime()I
-HSPLandroidx/core/view/WindowInsetsCompat$Type;->mandatorySystemGestures()I
-HSPLandroidx/core/view/WindowInsetsCompat$Type;->navigationBars()I
-HSPLandroidx/core/view/WindowInsetsCompat$Type;->statusBars()I
-HSPLandroidx/core/view/WindowInsetsCompat$Type;->systemBars()I
-HSPLandroidx/core/view/WindowInsetsCompat$Type;->systemGestures()I
-HSPLandroidx/core/view/WindowInsetsCompat$Type;->tappableElement()I
-HSPLandroidx/core/view/WindowInsetsControllerCompat$Impl30;-><init>(Landroid/view/Window;Landroidx/core/view/WindowInsetsControllerCompat;)V
-HSPLandroidx/core/view/WindowInsetsControllerCompat$Impl30;-><init>(Landroid/view/WindowInsetsController;Landroidx/core/view/WindowInsetsControllerCompat;)V
-HSPLandroidx/core/view/WindowInsetsControllerCompat$Impl30;->setAppearanceLightNavigationBars(Z)V
-HSPLandroidx/core/view/WindowInsetsControllerCompat$Impl30;->setAppearanceLightStatusBars(Z)V
-HSPLandroidx/core/view/WindowInsetsControllerCompat$Impl30;->unsetSystemUiFlag(I)V
-HSPLandroidx/core/view/WindowInsetsControllerCompat$Impl;-><init>()V
-HSPLandroidx/core/view/WindowInsetsControllerCompat;-><init>(Landroid/view/Window;Landroid/view/View;)V
-HSPLandroidx/core/view/WindowInsetsControllerCompat;->setAppearanceLightNavigationBars(Z)V
-HSPLandroidx/core/view/WindowInsetsControllerCompat;->setAppearanceLightStatusBars(Z)V
-HSPLandroidx/core/view/accessibility/AccessibilityNodeProviderCompat;-><init>(Ljava/lang/Object;)V
-HSPLandroidx/credentials/provider/Action$Companion;-><init>()V
-HSPLandroidx/credentials/provider/Action$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/credentials/provider/Action$Companion;->fromSlice(Landroid/app/slice/Slice;)Landroidx/credentials/provider/Action;
-HSPLandroidx/credentials/provider/Action;-><clinit>()V
-HSPLandroidx/credentials/provider/Action;-><init>(Ljava/lang/CharSequence;Landroid/app/PendingIntent;Ljava/lang/CharSequence;)V
-HSPLandroidx/credentials/provider/Action;->getPendingIntent()Landroid/app/PendingIntent;
-HSPLandroidx/credentials/provider/Action;->getSubtitle()Ljava/lang/CharSequence;
-HSPLandroidx/credentials/provider/Action;->getTitle()Ljava/lang/CharSequence;
-HSPLandroidx/credentials/provider/RemoteEntry$Companion;-><init>()V
-HSPLandroidx/credentials/provider/RemoteEntry$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/credentials/provider/RemoteEntry$Companion;->fromSlice(Landroid/app/slice/Slice;)Landroidx/credentials/provider/RemoteEntry;
-HSPLandroidx/credentials/provider/RemoteEntry;-><clinit>()V
-HSPLandroidx/credentials/provider/RemoteEntry;-><init>(Landroid/app/PendingIntent;)V
-HSPLandroidx/credentials/provider/RemoteEntry;->getPendingIntent()Landroid/app/PendingIntent;
-HSPLandroidx/customview/poolingcontainer/PoolingContainer;-><clinit>()V
-HSPLandroidx/customview/poolingcontainer/PoolingContainer;->addPoolingContainerListener(Landroid/view/View;Landroidx/customview/poolingcontainer/PoolingContainerListener;)V
-HSPLandroidx/customview/poolingcontainer/PoolingContainer;->getPoolingContainerListenerHolder(Landroid/view/View;)Landroidx/customview/poolingcontainer/PoolingContainerListenerHolder;
-HSPLandroidx/customview/poolingcontainer/PoolingContainer;->isPoolingContainer(Landroid/view/View;)Z
-HSPLandroidx/customview/poolingcontainer/PoolingContainer;->isWithinPoolingContainer(Landroid/view/View;)Z
-HSPLandroidx/customview/poolingcontainer/PoolingContainerListenerHolder;-><init>()V
-HSPLandroidx/customview/poolingcontainer/PoolingContainerListenerHolder;->addListener(Landroidx/customview/poolingcontainer/PoolingContainerListener;)V
-HSPLandroidx/emoji2/text/ConcurrencyHelpers$$ExternalSyntheticLambda0;-><init>(Ljava/lang/String;)V
-HSPLandroidx/emoji2/text/ConcurrencyHelpers$$ExternalSyntheticLambda0;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread;
-HSPLandroidx/emoji2/text/ConcurrencyHelpers$Handler28Impl;->createAsync(Landroid/os/Looper;)Landroid/os/Handler;
-HSPLandroidx/emoji2/text/ConcurrencyHelpers;->$r8$lambda$rm7NN8F9tEuy2Vr8i0fl8_hnx_A(Ljava/lang/String;Ljava/lang/Runnable;)Ljava/lang/Thread;
-HSPLandroidx/emoji2/text/ConcurrencyHelpers;->createBackgroundPriorityExecutor(Ljava/lang/String;)Ljava/util/concurrent/ThreadPoolExecutor;
-HSPLandroidx/emoji2/text/ConcurrencyHelpers;->lambda$createBackgroundPriorityExecutor$0(Ljava/lang/String;Ljava/lang/Runnable;)Ljava/lang/Thread;
-HSPLandroidx/emoji2/text/ConcurrencyHelpers;->mainHandlerAsync()Landroid/os/Handler;
-HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;-><init>(Landroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper;)V
-HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;->configOrNull(Landroid/content/Context;Landroidx/core/provider/FontRequest;)Landroidx/emoji2/text/EmojiCompat$Config;
-HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;->convertToByteArray([Landroid/content/pm/Signature;)Ljava/util/List;
-HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;->create(Landroid/content/Context;)Landroidx/emoji2/text/EmojiCompat$Config;
-HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;->generateFontRequestFrom(Landroid/content/pm/ProviderInfo;Landroid/content/pm/PackageManager;)Landroidx/core/provider/FontRequest;
-HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;->getHelperForApi()Landroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper;
-HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;->hasFlagSystem(Landroid/content/pm/ProviderInfo;)Z
-HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;->queryDefaultInstalledContentProvider(Landroid/content/pm/PackageManager;)Landroid/content/pm/ProviderInfo;
-HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;->queryForDefaultFontRequest(Landroid/content/Context;)Landroidx/core/provider/FontRequest;
-HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper;-><init>()V
-HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API19;-><init>()V
-HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API19;->getProviderInfo(Landroid/content/pm/ResolveInfo;)Landroid/content/pm/ProviderInfo;
-HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API19;->queryIntentContentProviders(Landroid/content/pm/PackageManager;Landroid/content/Intent;I)Ljava/util/List;
-HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API28;-><init>()V
-HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API28;->getSigningSignatures(Landroid/content/pm/PackageManager;Ljava/lang/String;)[Landroid/content/pm/Signature;
-HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig;->create(Landroid/content/Context;)Landroidx/emoji2/text/FontRequestEmojiCompatConfig;
-HSPLandroidx/emoji2/text/DefaultGlyphChecker;-><clinit>()V
-HSPLandroidx/emoji2/text/DefaultGlyphChecker;-><init>()V
-HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19$1;-><init>(Landroidx/emoji2/text/EmojiCompat$CompatInternal19;)V
-HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19$1;->onLoaded(Landroidx/emoji2/text/MetadataRepo;)V
-HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19;-><init>(Landroidx/emoji2/text/EmojiCompat;)V
-HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19;->loadMetadata()V
-HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19;->onMetadataLoadSuccess(Landroidx/emoji2/text/MetadataRepo;)V
-HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19;->process(Ljava/lang/CharSequence;IIIZ)Ljava/lang/CharSequence;
-HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal;-><init>(Landroidx/emoji2/text/EmojiCompat;)V
-HSPLandroidx/emoji2/text/EmojiCompat$Config;-><init>(Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoader;)V
-HSPLandroidx/emoji2/text/EmojiCompat$Config;->getMetadataRepoLoader()Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoader;
-HSPLandroidx/emoji2/text/EmojiCompat$Config;->setMetadataLoadStrategy(I)Landroidx/emoji2/text/EmojiCompat$Config;
-HSPLandroidx/emoji2/text/EmojiCompat$DefaultSpanFactory;-><init>()V
-HSPLandroidx/emoji2/text/EmojiCompat$InitCallback;-><init>()V
-HSPLandroidx/emoji2/text/EmojiCompat$ListenerDispatcher;-><init>(Ljava/util/Collection;I)V
-HSPLandroidx/emoji2/text/EmojiCompat$ListenerDispatcher;-><init>(Ljava/util/Collection;ILjava/lang/Throwable;)V
-HSPLandroidx/emoji2/text/EmojiCompat$ListenerDispatcher;->run()V
-HSPLandroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;-><init>()V
-HSPLandroidx/emoji2/text/EmojiCompat;-><clinit>()V
-HSPLandroidx/emoji2/text/EmojiCompat;-><init>(Landroidx/emoji2/text/EmojiCompat$Config;)V
-HSPLandroidx/emoji2/text/EmojiCompat;->access$000(Landroidx/emoji2/text/EmojiCompat;)Landroidx/emoji2/text/EmojiCompat$SpanFactory;
-HSPLandroidx/emoji2/text/EmojiCompat;->access$100(Landroidx/emoji2/text/EmojiCompat;)Landroidx/emoji2/text/EmojiCompat$GlyphChecker;
-HSPLandroidx/emoji2/text/EmojiCompat;->get()Landroidx/emoji2/text/EmojiCompat;
-HSPLandroidx/emoji2/text/EmojiCompat;->getLoadState()I
-HSPLandroidx/emoji2/text/EmojiCompat;->init(Landroidx/emoji2/text/EmojiCompat$Config;)Landroidx/emoji2/text/EmojiCompat;
-HSPLandroidx/emoji2/text/EmojiCompat;->isConfigured()Z
-HSPLandroidx/emoji2/text/EmojiCompat;->isInitialized()Z
-HSPLandroidx/emoji2/text/EmojiCompat;->load()V
-HSPLandroidx/emoji2/text/EmojiCompat;->loadMetadata()V
-HSPLandroidx/emoji2/text/EmojiCompat;->onMetadataLoadSuccess()V
-HSPLandroidx/emoji2/text/EmojiCompat;->process(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
-HSPLandroidx/emoji2/text/EmojiCompat;->process(Ljava/lang/CharSequence;II)Ljava/lang/CharSequence;
-HSPLandroidx/emoji2/text/EmojiCompat;->process(Ljava/lang/CharSequence;III)Ljava/lang/CharSequence;
-HSPLandroidx/emoji2/text/EmojiCompat;->process(Ljava/lang/CharSequence;IIII)Ljava/lang/CharSequence;
-HSPLandroidx/emoji2/text/EmojiCompat;->registerInitCallback(Landroidx/emoji2/text/EmojiCompat$InitCallback;)V
-HSPLandroidx/emoji2/text/EmojiCompatInitializer$1;-><init>(Landroidx/emoji2/text/EmojiCompatInitializer;Landroidx/lifecycle/Lifecycle;)V
-HSPLandroidx/emoji2/text/EmojiCompatInitializer$1;->onResume(Landroidx/lifecycle/LifecycleOwner;)V
-HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultConfig;-><init>(Landroid/content/Context;)V
-HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$$ExternalSyntheticLambda0;-><init>(Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader;Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;Ljava/util/concurrent/ThreadPoolExecutor;)V
-HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$$ExternalSyntheticLambda0;->run()V
-HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$1;-><init>(Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader;Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;Ljava/util/concurrent/ThreadPoolExecutor;)V
-HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$1;->onLoaded(Landroidx/emoji2/text/MetadataRepo;)V
-HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader;->$r8$lambda$2V1iWTiAwNxOBlVvz73bbuEdzIw(Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader;Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;Ljava/util/concurrent/ThreadPoolExecutor;)V
-HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader;-><init>(Landroid/content/Context;)V
-HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader;->doLoad(Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;Ljava/util/concurrent/ThreadPoolExecutor;)V
-HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader;->lambda$load$0(Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;Ljava/util/concurrent/ThreadPoolExecutor;)V
-HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader;->load(Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;)V
-HSPLandroidx/emoji2/text/EmojiCompatInitializer$LoadEmojiCompatRunnable;-><init>()V
-HSPLandroidx/emoji2/text/EmojiCompatInitializer$LoadEmojiCompatRunnable;->run()V
-HSPLandroidx/emoji2/text/EmojiCompatInitializer;-><init>()V
-HSPLandroidx/emoji2/text/EmojiCompatInitializer;->create(Landroid/content/Context;)Ljava/lang/Boolean;
-HSPLandroidx/emoji2/text/EmojiCompatInitializer;->create(Landroid/content/Context;)Ljava/lang/Object;
-HSPLandroidx/emoji2/text/EmojiCompatInitializer;->delayUntilFirstResume(Landroid/content/Context;)V
-HSPLandroidx/emoji2/text/EmojiCompatInitializer;->dependencies()Ljava/util/List;
-HSPLandroidx/emoji2/text/EmojiCompatInitializer;->loadEmojiCompatAfterDelay()V
-HSPLandroidx/emoji2/text/EmojiExclusions$EmojiExclusions_Api34;->getExclusions()Ljava/util/Set;
-HSPLandroidx/emoji2/text/EmojiExclusions$EmojiExclusions_Reflections;->getExclusions()Ljava/util/Set;
-HSPLandroidx/emoji2/text/EmojiExclusions;->getEmojiExclusions()Ljava/util/Set;
-HSPLandroidx/emoji2/text/EmojiProcessor$EmojiProcessAddSpanCallback;-><init>(Landroidx/emoji2/text/UnprecomputeTextOnModificationSpannable;Landroidx/emoji2/text/EmojiCompat$SpanFactory;)V
-HSPLandroidx/emoji2/text/EmojiProcessor$EmojiProcessAddSpanCallback;->getResult()Landroidx/emoji2/text/UnprecomputeTextOnModificationSpannable;
-HSPLandroidx/emoji2/text/EmojiProcessor$EmojiProcessAddSpanCallback;->getResult()Ljava/lang/Object;
-HSPLandroidx/emoji2/text/EmojiProcessor$ProcessorSm;-><init>(Landroidx/emoji2/text/MetadataRepo$Node;Z[I)V
-HSPLandroidx/emoji2/text/EmojiProcessor$ProcessorSm;->check(I)I
-HSPLandroidx/emoji2/text/EmojiProcessor$ProcessorSm;->isInFlushableState()Z
-HSPLandroidx/emoji2/text/EmojiProcessor$ProcessorSm;->reset()I
-HSPLandroidx/emoji2/text/EmojiProcessor;-><init>(Landroidx/emoji2/text/MetadataRepo;Landroidx/emoji2/text/EmojiCompat$SpanFactory;Landroidx/emoji2/text/EmojiCompat$GlyphChecker;Z[ILjava/util/Set;)V
-HSPLandroidx/emoji2/text/EmojiProcessor;->initExclusions(Ljava/util/Set;)V
-HSPLandroidx/emoji2/text/EmojiProcessor;->process(Ljava/lang/CharSequence;IIIZ)Ljava/lang/CharSequence;
-HSPLandroidx/emoji2/text/EmojiProcessor;->process(Ljava/lang/CharSequence;IIIZLandroidx/emoji2/text/EmojiProcessor$EmojiProcessCallback;)Ljava/lang/Object;
-HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontProviderHelper;-><init>()V
-HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontProviderHelper;->buildTypeface(Landroid/content/Context;Landroidx/core/provider/FontsContractCompat$FontInfo;)Landroid/graphics/Typeface;
-HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontProviderHelper;->fetchFonts(Landroid/content/Context;Landroidx/core/provider/FontRequest;)Landroidx/core/provider/FontsContractCompat$FontFamilyResult;
-HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$$ExternalSyntheticLambda0;-><init>(Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;)V
-HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$$ExternalSyntheticLambda0;->run()V
-HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;-><init>(Landroid/content/Context;Landroidx/core/provider/FontRequest;Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontProviderHelper;)V
-HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->cleanUp()V
-HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->createMetadata()V
-HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->load(Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;)V
-HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->loadInternal()V
-HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->retrieveFontInfo()Landroidx/core/provider/FontsContractCompat$FontInfo;
-HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->setExecutor(Ljava/util/concurrent/Executor;)V
-HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig;-><clinit>()V
-HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig;-><init>(Landroid/content/Context;Landroidx/core/provider/FontRequest;)V
-HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig;->setLoadingExecutor(Ljava/util/concurrent/Executor;)Landroidx/emoji2/text/FontRequestEmojiCompatConfig;
-HSPLandroidx/emoji2/text/MetadataListReader$ByteBufferReader;-><init>(Ljava/nio/ByteBuffer;)V
-HSPLandroidx/emoji2/text/MetadataListReader$ByteBufferReader;->getPosition()J
-HSPLandroidx/emoji2/text/MetadataListReader$ByteBufferReader;->readTag()I
-HSPLandroidx/emoji2/text/MetadataListReader$ByteBufferReader;->readUnsignedInt()J
-HSPLandroidx/emoji2/text/MetadataListReader$ByteBufferReader;->readUnsignedShort()I
-HSPLandroidx/emoji2/text/MetadataListReader$ByteBufferReader;->skip(I)V
-HSPLandroidx/emoji2/text/MetadataListReader$OffsetInfo;-><init>(JJ)V
-HSPLandroidx/emoji2/text/MetadataListReader$OffsetInfo;->getStartOffset()J
-HSPLandroidx/emoji2/text/MetadataListReader;->findOffsetInfo(Landroidx/emoji2/text/MetadataListReader$OpenTypeReader;)Landroidx/emoji2/text/MetadataListReader$OffsetInfo;
-HSPLandroidx/emoji2/text/MetadataListReader;->read(Ljava/nio/ByteBuffer;)Landroidx/emoji2/text/flatbuffer/MetadataList;
-HSPLandroidx/emoji2/text/MetadataListReader;->toUnsignedInt(I)J
-HSPLandroidx/emoji2/text/MetadataListReader;->toUnsignedShort(S)I
-HSPLandroidx/emoji2/text/MetadataRepo$Node;-><init>()V
-HSPLandroidx/emoji2/text/MetadataRepo$Node;-><init>(I)V
-HSPLandroidx/emoji2/text/MetadataRepo$Node;->get(I)Landroidx/emoji2/text/MetadataRepo$Node;
-HSPLandroidx/emoji2/text/MetadataRepo$Node;->put(Landroidx/emoji2/text/TypefaceEmojiRasterizer;II)V
-HSPLandroidx/emoji2/text/MetadataRepo;-><init>(Landroid/graphics/Typeface;Landroidx/emoji2/text/flatbuffer/MetadataList;)V
-HSPLandroidx/emoji2/text/MetadataRepo;->create(Landroid/graphics/Typeface;Ljava/nio/ByteBuffer;)Landroidx/emoji2/text/MetadataRepo;
-HSPLandroidx/emoji2/text/MetadataRepo;->getMetadataList()Landroidx/emoji2/text/flatbuffer/MetadataList;
-HSPLandroidx/emoji2/text/MetadataRepo;->getRootNode()Landroidx/emoji2/text/MetadataRepo$Node;
-HSPLandroidx/emoji2/text/MetadataRepo;->put(Landroidx/emoji2/text/TypefaceEmojiRasterizer;)V
-HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;-><clinit>()V
-HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;-><init>(Landroidx/emoji2/text/MetadataRepo;I)V
-HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;->getCodepointAt(I)I+]Landroidx/emoji2/text/flatbuffer/MetadataItem;Landroidx/emoji2/text/flatbuffer/MetadataItem;
-HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;->getCodepointsLength()I+]Landroidx/emoji2/text/flatbuffer/MetadataItem;Landroidx/emoji2/text/flatbuffer/MetadataItem;
-HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;->getId()I
-HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;->getMetadataItem()Landroidx/emoji2/text/flatbuffer/MetadataItem;+]Landroidx/emoji2/text/flatbuffer/MetadataList;Landroidx/emoji2/text/flatbuffer/MetadataList;]Landroidx/emoji2/text/MetadataRepo;Landroidx/emoji2/text/MetadataRepo;
-HSPLandroidx/emoji2/text/flatbuffer/MetadataItem;-><init>()V
-HSPLandroidx/emoji2/text/flatbuffer/MetadataItem;->__assign(ILjava/nio/ByteBuffer;)Landroidx/emoji2/text/flatbuffer/MetadataItem;
-HSPLandroidx/emoji2/text/flatbuffer/MetadataItem;->__init(ILjava/nio/ByteBuffer;)V
-HSPLandroidx/emoji2/text/flatbuffer/MetadataItem;->codepoints(I)I+]Landroidx/emoji2/text/flatbuffer/Table;Landroidx/emoji2/text/flatbuffer/MetadataItem;
-HSPLandroidx/emoji2/text/flatbuffer/MetadataItem;->codepointsLength()I+]Landroidx/emoji2/text/flatbuffer/Table;Landroidx/emoji2/text/flatbuffer/MetadataItem;
-HSPLandroidx/emoji2/text/flatbuffer/MetadataItem;->id()I
-HSPLandroidx/emoji2/text/flatbuffer/MetadataList;-><init>()V
-HSPLandroidx/emoji2/text/flatbuffer/MetadataList;->__assign(ILjava/nio/ByteBuffer;)Landroidx/emoji2/text/flatbuffer/MetadataList;
-HSPLandroidx/emoji2/text/flatbuffer/MetadataList;->__init(ILjava/nio/ByteBuffer;)V
-HSPLandroidx/emoji2/text/flatbuffer/MetadataList;->getRootAsMetadataList(Ljava/nio/ByteBuffer;)Landroidx/emoji2/text/flatbuffer/MetadataList;
-HSPLandroidx/emoji2/text/flatbuffer/MetadataList;->getRootAsMetadataList(Ljava/nio/ByteBuffer;Landroidx/emoji2/text/flatbuffer/MetadataList;)Landroidx/emoji2/text/flatbuffer/MetadataList;
-HSPLandroidx/emoji2/text/flatbuffer/MetadataList;->list(Landroidx/emoji2/text/flatbuffer/MetadataItem;I)Landroidx/emoji2/text/flatbuffer/MetadataItem;+]Landroidx/emoji2/text/flatbuffer/MetadataItem;Landroidx/emoji2/text/flatbuffer/MetadataItem;]Landroidx/emoji2/text/flatbuffer/Table;Landroidx/emoji2/text/flatbuffer/MetadataList;
-HSPLandroidx/emoji2/text/flatbuffer/MetadataList;->listLength()I
-HSPLandroidx/emoji2/text/flatbuffer/Table;-><init>()V
-HSPLandroidx/emoji2/text/flatbuffer/Table;->__indirect(I)I
-HSPLandroidx/emoji2/text/flatbuffer/Table;->__offset(I)I
-HSPLandroidx/emoji2/text/flatbuffer/Table;->__reset(ILjava/nio/ByteBuffer;)V
-HSPLandroidx/emoji2/text/flatbuffer/Table;->__vector(I)I
-HSPLandroidx/emoji2/text/flatbuffer/Table;->__vector_len(I)I
-HSPLandroidx/emoji2/text/flatbuffer/Utf8;-><init>()V
-HSPLandroidx/emoji2/text/flatbuffer/Utf8;->getDefault()Landroidx/emoji2/text/flatbuffer/Utf8;
-HSPLandroidx/emoji2/text/flatbuffer/Utf8Safe;-><init>()V
-HSPLandroidx/lifecycle/DefaultLifecycleObserver;->onCreate(Landroidx/lifecycle/LifecycleOwner;)V
-HSPLandroidx/lifecycle/DefaultLifecycleObserver;->onDestroy(Landroidx/lifecycle/LifecycleOwner;)V
-HSPLandroidx/lifecycle/DefaultLifecycleObserver;->onPause(Landroidx/lifecycle/LifecycleOwner;)V
-HSPLandroidx/lifecycle/DefaultLifecycleObserver;->onStart(Landroidx/lifecycle/LifecycleOwner;)V
-HSPLandroidx/lifecycle/DefaultLifecycleObserver;->onStop(Landroidx/lifecycle/LifecycleOwner;)V
-HSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;-><init>()V
-HSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V
-HSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityDestroyed(Landroid/app/Activity;)V
-HSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityPaused(Landroid/app/Activity;)V
-HSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityResumed(Landroid/app/Activity;)V
-HSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityStarted(Landroid/app/Activity;)V
-HSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityStopped(Landroid/app/Activity;)V
-HSPLandroidx/lifecycle/FullLifecycleObserverAdapter$1;-><clinit>()V
-HSPLandroidx/lifecycle/FullLifecycleObserverAdapter;-><init>(Landroidx/lifecycle/FullLifecycleObserver;Landroidx/lifecycle/LifecycleEventObserver;)V
-HSPLandroidx/lifecycle/FullLifecycleObserverAdapter;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
-HSPLandroidx/lifecycle/Lifecycle$1;-><clinit>()V
-HSPLandroidx/lifecycle/Lifecycle$Event;->$values()[Landroidx/lifecycle/Lifecycle$Event;
-HSPLandroidx/lifecycle/Lifecycle$Event;-><clinit>()V
-HSPLandroidx/lifecycle/Lifecycle$Event;-><init>(Ljava/lang/String;I)V
-HSPLandroidx/lifecycle/Lifecycle$Event;->downFrom(Landroidx/lifecycle/Lifecycle$State;)Landroidx/lifecycle/Lifecycle$Event;
-HSPLandroidx/lifecycle/Lifecycle$Event;->getTargetState()Landroidx/lifecycle/Lifecycle$State;
-HSPLandroidx/lifecycle/Lifecycle$Event;->upFrom(Landroidx/lifecycle/Lifecycle$State;)Landroidx/lifecycle/Lifecycle$Event;
-HSPLandroidx/lifecycle/Lifecycle$Event;->values()[Landroidx/lifecycle/Lifecycle$Event;
-HSPLandroidx/lifecycle/Lifecycle$State;->$values()[Landroidx/lifecycle/Lifecycle$State;
-HSPLandroidx/lifecycle/Lifecycle$State;-><clinit>()V
-HSPLandroidx/lifecycle/Lifecycle$State;-><init>(Ljava/lang/String;I)V
-HSPLandroidx/lifecycle/Lifecycle$State;->isAtLeast(Landroidx/lifecycle/Lifecycle$State;)Z
-HSPLandroidx/lifecycle/Lifecycle$State;->values()[Landroidx/lifecycle/Lifecycle$State;
-HSPLandroidx/lifecycle/Lifecycle;-><init>()V
-HSPLandroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;-><init>()V
-HSPLandroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V
-HSPLandroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;->onActivityStopped(Landroid/app/Activity;)V
-HSPLandroidx/lifecycle/LifecycleDispatcher;-><clinit>()V
-HSPLandroidx/lifecycle/LifecycleDispatcher;->init(Landroid/content/Context;)V
-HSPLandroidx/lifecycle/LifecycleRegistry$ObserverWithState;-><init>(Landroidx/lifecycle/LifecycleObserver;Landroidx/lifecycle/Lifecycle$State;)V
-HSPLandroidx/lifecycle/LifecycleRegistry$ObserverWithState;->dispatchEvent(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
-HSPLandroidx/lifecycle/LifecycleRegistry;-><init>(Landroidx/lifecycle/LifecycleOwner;)V
-HSPLandroidx/lifecycle/LifecycleRegistry;-><init>(Landroidx/lifecycle/LifecycleOwner;Z)V
-HSPLandroidx/lifecycle/LifecycleRegistry;->addObserver(Landroidx/lifecycle/LifecycleObserver;)V
-HSPLandroidx/lifecycle/LifecycleRegistry;->backwardPass(Landroidx/lifecycle/LifecycleOwner;)V
-HSPLandroidx/lifecycle/LifecycleRegistry;->calculateTargetState(Landroidx/lifecycle/LifecycleObserver;)Landroidx/lifecycle/Lifecycle$State;
-HSPLandroidx/lifecycle/LifecycleRegistry;->enforceMainThreadIfNeeded(Ljava/lang/String;)V
-HSPLandroidx/lifecycle/LifecycleRegistry;->forwardPass(Landroidx/lifecycle/LifecycleOwner;)V
-HSPLandroidx/lifecycle/LifecycleRegistry;->getCurrentState()Landroidx/lifecycle/Lifecycle$State;
-HSPLandroidx/lifecycle/LifecycleRegistry;->handleLifecycleEvent(Landroidx/lifecycle/Lifecycle$Event;)V
-HSPLandroidx/lifecycle/LifecycleRegistry;->isSynced()Z
-HSPLandroidx/lifecycle/LifecycleRegistry;->min(Landroidx/lifecycle/Lifecycle$State;Landroidx/lifecycle/Lifecycle$State;)Landroidx/lifecycle/Lifecycle$State;
-HSPLandroidx/lifecycle/LifecycleRegistry;->moveToState(Landroidx/lifecycle/Lifecycle$State;)V
-HSPLandroidx/lifecycle/LifecycleRegistry;->popParentState()V
-HSPLandroidx/lifecycle/LifecycleRegistry;->pushParentState(Landroidx/lifecycle/Lifecycle$State;)V
-HSPLandroidx/lifecycle/LifecycleRegistry;->removeObserver(Landroidx/lifecycle/LifecycleObserver;)V
-HSPLandroidx/lifecycle/LifecycleRegistry;->sync()V
-HSPLandroidx/lifecycle/Lifecycling;-><clinit>()V
-HSPLandroidx/lifecycle/Lifecycling;->lifecycleEventObserver(Ljava/lang/Object;)Landroidx/lifecycle/LifecycleEventObserver;
-HSPLandroidx/lifecycle/ProcessLifecycleInitializer;-><init>()V
-HSPLandroidx/lifecycle/ProcessLifecycleInitializer;->create(Landroid/content/Context;)Landroidx/lifecycle/LifecycleOwner;
-HSPLandroidx/lifecycle/ProcessLifecycleInitializer;->create(Landroid/content/Context;)Ljava/lang/Object;
-HSPLandroidx/lifecycle/ProcessLifecycleInitializer;->dependencies()Ljava/util/List;
-HSPLandroidx/lifecycle/ProcessLifecycleOwner$1;-><init>(Landroidx/lifecycle/ProcessLifecycleOwner;)V
-HSPLandroidx/lifecycle/ProcessLifecycleOwner$1;->run()V
-HSPLandroidx/lifecycle/ProcessLifecycleOwner$2;-><init>(Landroidx/lifecycle/ProcessLifecycleOwner;)V
-HSPLandroidx/lifecycle/ProcessLifecycleOwner$3$1;-><init>(Landroidx/lifecycle/ProcessLifecycleOwner$3;)V
-HSPLandroidx/lifecycle/ProcessLifecycleOwner$3$1;->onActivityPostResumed(Landroid/app/Activity;)V
-HSPLandroidx/lifecycle/ProcessLifecycleOwner$3$1;->onActivityPostStarted(Landroid/app/Activity;)V
-HSPLandroidx/lifecycle/ProcessLifecycleOwner$3;-><init>(Landroidx/lifecycle/ProcessLifecycleOwner;)V
-HSPLandroidx/lifecycle/ProcessLifecycleOwner$3;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V
-HSPLandroidx/lifecycle/ProcessLifecycleOwner$3;->onActivityPaused(Landroid/app/Activity;)V
-HSPLandroidx/lifecycle/ProcessLifecycleOwner$3;->onActivityPreCreated(Landroid/app/Activity;Landroid/os/Bundle;)V
-HSPLandroidx/lifecycle/ProcessLifecycleOwner$3;->onActivityStopped(Landroid/app/Activity;)V
-HSPLandroidx/lifecycle/ProcessLifecycleOwner$Api29Impl;->registerActivityLifecycleCallbacks(Landroid/app/Activity;Landroid/app/Application$ActivityLifecycleCallbacks;)V
-HSPLandroidx/lifecycle/ProcessLifecycleOwner;-><clinit>()V
-HSPLandroidx/lifecycle/ProcessLifecycleOwner;-><init>()V
-HSPLandroidx/lifecycle/ProcessLifecycleOwner;->activityPaused()V
-HSPLandroidx/lifecycle/ProcessLifecycleOwner;->activityResumed()V
-HSPLandroidx/lifecycle/ProcessLifecycleOwner;->activityStarted()V
-HSPLandroidx/lifecycle/ProcessLifecycleOwner;->activityStopped()V
-HSPLandroidx/lifecycle/ProcessLifecycleOwner;->attach(Landroid/content/Context;)V
-HSPLandroidx/lifecycle/ProcessLifecycleOwner;->dispatchPauseIfNeeded()V
-HSPLandroidx/lifecycle/ProcessLifecycleOwner;->dispatchStopIfNeeded()V
-HSPLandroidx/lifecycle/ProcessLifecycleOwner;->get()Landroidx/lifecycle/LifecycleOwner;
-HSPLandroidx/lifecycle/ProcessLifecycleOwner;->getLifecycle()Landroidx/lifecycle/Lifecycle;
-HSPLandroidx/lifecycle/ProcessLifecycleOwner;->init(Landroid/content/Context;)V
-HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;-><init>()V
-HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V
-HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityDestroyed(Landroid/app/Activity;)V
-HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPaused(Landroid/app/Activity;)V
-HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPostCreated(Landroid/app/Activity;Landroid/os/Bundle;)V
-HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPostResumed(Landroid/app/Activity;)V
-HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPostStarted(Landroid/app/Activity;)V
-HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPreDestroyed(Landroid/app/Activity;)V
-HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPrePaused(Landroid/app/Activity;)V
-HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPreStopped(Landroid/app/Activity;)V
-HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityResumed(Landroid/app/Activity;)V
-HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityStarted(Landroid/app/Activity;)V
-HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityStopped(Landroid/app/Activity;)V
-HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->registerIn(Landroid/app/Activity;)V
-HSPLandroidx/lifecycle/ReportFragment;-><init>()V
-HSPLandroidx/lifecycle/ReportFragment;->dispatch(Landroid/app/Activity;Landroidx/lifecycle/Lifecycle$Event;)V
-HSPLandroidx/lifecycle/ReportFragment;->dispatch(Landroidx/lifecycle/Lifecycle$Event;)V
-HSPLandroidx/lifecycle/ReportFragment;->dispatchCreate(Landroidx/lifecycle/ReportFragment$ActivityInitializationListener;)V
-HSPLandroidx/lifecycle/ReportFragment;->dispatchResume(Landroidx/lifecycle/ReportFragment$ActivityInitializationListener;)V
-HSPLandroidx/lifecycle/ReportFragment;->dispatchStart(Landroidx/lifecycle/ReportFragment$ActivityInitializationListener;)V
-HSPLandroidx/lifecycle/ReportFragment;->injectIfNeededIn(Landroid/app/Activity;)V
-HSPLandroidx/lifecycle/ReportFragment;->onActivityCreated(Landroid/os/Bundle;)V
-HSPLandroidx/lifecycle/ReportFragment;->onDestroy()V
-HSPLandroidx/lifecycle/ReportFragment;->onPause()V
-HSPLandroidx/lifecycle/ReportFragment;->onResume()V
-HSPLandroidx/lifecycle/ReportFragment;->onStart()V
-HSPLandroidx/lifecycle/ReportFragment;->onStop()V
-HSPLandroidx/lifecycle/SavedStateHandleAttacher;-><init>(Landroidx/lifecycle/SavedStateHandlesProvider;)V
-HSPLandroidx/lifecycle/SavedStateHandleAttacher;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
-HSPLandroidx/lifecycle/SavedStateHandleSupport$DEFAULT_ARGS_KEY$1;-><init>()V
-HSPLandroidx/lifecycle/SavedStateHandleSupport$SAVED_STATE_REGISTRY_OWNER_KEY$1;-><init>()V
-HSPLandroidx/lifecycle/SavedStateHandleSupport$VIEW_MODEL_STORE_OWNER_KEY$1;-><init>()V
-HSPLandroidx/lifecycle/SavedStateHandleSupport$savedStateHandlesVM$1$1;-><clinit>()V
-HSPLandroidx/lifecycle/SavedStateHandleSupport$savedStateHandlesVM$1$1;-><init>()V
-HSPLandroidx/lifecycle/SavedStateHandleSupport$savedStateHandlesVM$1$1;->invoke(Landroidx/lifecycle/viewmodel/CreationExtras;)Landroidx/lifecycle/SavedStateHandlesVM;
-HSPLandroidx/lifecycle/SavedStateHandleSupport$savedStateHandlesVM$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/lifecycle/SavedStateHandleSupport;-><clinit>()V
-HSPLandroidx/lifecycle/SavedStateHandleSupport;->enableSavedStateHandles(Landroidx/savedstate/SavedStateRegistryOwner;)V
-HSPLandroidx/lifecycle/SavedStateHandleSupport;->getSavedStateHandlesVM(Landroidx/lifecycle/ViewModelStoreOwner;)Landroidx/lifecycle/SavedStateHandlesVM;
-HSPLandroidx/lifecycle/SavedStateHandlesProvider$viewModel$2;-><init>(Landroidx/lifecycle/ViewModelStoreOwner;)V
-HSPLandroidx/lifecycle/SavedStateHandlesProvider$viewModel$2;->invoke()Landroidx/lifecycle/SavedStateHandlesVM;
-HSPLandroidx/lifecycle/SavedStateHandlesProvider$viewModel$2;->invoke()Ljava/lang/Object;
-HSPLandroidx/lifecycle/SavedStateHandlesProvider;-><init>(Landroidx/savedstate/SavedStateRegistry;Landroidx/lifecycle/ViewModelStoreOwner;)V
-HSPLandroidx/lifecycle/SavedStateHandlesProvider;->getViewModel()Landroidx/lifecycle/SavedStateHandlesVM;
-HSPLandroidx/lifecycle/SavedStateHandlesProvider;->performRestore()V
-HSPLandroidx/lifecycle/SavedStateHandlesVM;-><init>()V
-HSPLandroidx/lifecycle/ViewModel;-><init>()V
-HSPLandroidx/lifecycle/ViewModel;->clear()V
-HSPLandroidx/lifecycle/ViewModel;->onCleared()V
-HSPLandroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory$Companion$ApplicationKeyImpl;-><clinit>()V
-HSPLandroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory$Companion$ApplicationKeyImpl;-><init>()V
-HSPLandroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory$Companion;-><init>()V
-HSPLandroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory;-><clinit>()V
-HSPLandroidx/lifecycle/ViewModelProvider$Factory$Companion;-><clinit>()V
-HSPLandroidx/lifecycle/ViewModelProvider$Factory$Companion;-><init>()V
-HSPLandroidx/lifecycle/ViewModelProvider$Factory;-><clinit>()V
-HSPLandroidx/lifecycle/ViewModelProvider$NewInstanceFactory$Companion$ViewModelKeyImpl;-><clinit>()V
-HSPLandroidx/lifecycle/ViewModelProvider$NewInstanceFactory$Companion$ViewModelKeyImpl;-><init>()V
-HSPLandroidx/lifecycle/ViewModelProvider$NewInstanceFactory$Companion;-><init>()V
-HSPLandroidx/lifecycle/ViewModelProvider$NewInstanceFactory$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/lifecycle/ViewModelProvider$NewInstanceFactory;-><clinit>()V
-HSPLandroidx/lifecycle/ViewModelProvider;-><init>(Landroidx/lifecycle/ViewModelStore;Landroidx/lifecycle/ViewModelProvider$Factory;Landroidx/lifecycle/viewmodel/CreationExtras;)V
-HSPLandroidx/lifecycle/ViewModelProvider;-><init>(Landroidx/lifecycle/ViewModelStoreOwner;Landroidx/lifecycle/ViewModelProvider$Factory;)V
-HSPLandroidx/lifecycle/ViewModelProvider;->get(Ljava/lang/Class;)Landroidx/lifecycle/ViewModel;
-HSPLandroidx/lifecycle/ViewModelProvider;->get(Ljava/lang/String;Ljava/lang/Class;)Landroidx/lifecycle/ViewModel;
-HSPLandroidx/lifecycle/ViewModelProviderGetKt;->defaultCreationExtras(Landroidx/lifecycle/ViewModelStoreOwner;)Landroidx/lifecycle/viewmodel/CreationExtras;
-HSPLandroidx/lifecycle/ViewModelStore;-><init>()V
-HSPLandroidx/lifecycle/ViewModelStore;->clear()V
-HSPLandroidx/lifecycle/ViewModelStore;->get(Ljava/lang/String;)Landroidx/lifecycle/ViewModel;
-HSPLandroidx/lifecycle/ViewModelStore;->put(Ljava/lang/String;Landroidx/lifecycle/ViewModel;)V
-HSPLandroidx/lifecycle/ViewTreeLifecycleOwner;->get(Landroid/view/View;)Landroidx/lifecycle/LifecycleOwner;
-HSPLandroidx/lifecycle/ViewTreeLifecycleOwner;->set(Landroid/view/View;Landroidx/lifecycle/LifecycleOwner;)V
-HSPLandroidx/lifecycle/ViewTreeViewModelStoreOwner;->get(Landroid/view/View;)Landroidx/lifecycle/ViewModelStoreOwner;
-HSPLandroidx/lifecycle/ViewTreeViewModelStoreOwner;->set(Landroid/view/View;Landroidx/lifecycle/ViewModelStoreOwner;)V
-HSPLandroidx/lifecycle/viewmodel/CreationExtras$Empty;-><clinit>()V
-HSPLandroidx/lifecycle/viewmodel/CreationExtras$Empty;-><init>()V
-HSPLandroidx/lifecycle/viewmodel/CreationExtras;-><init>()V
-HSPLandroidx/lifecycle/viewmodel/CreationExtras;->getMap$lifecycle_viewmodel_release()Ljava/util/Map;
-HSPLandroidx/lifecycle/viewmodel/InitializerViewModelFactory;-><init>([Landroidx/lifecycle/viewmodel/ViewModelInitializer;)V
-HSPLandroidx/lifecycle/viewmodel/InitializerViewModelFactory;->create(Ljava/lang/Class;Landroidx/lifecycle/viewmodel/CreationExtras;)Landroidx/lifecycle/ViewModel;
-HSPLandroidx/lifecycle/viewmodel/InitializerViewModelFactoryBuilder;-><init>()V
-HSPLandroidx/lifecycle/viewmodel/InitializerViewModelFactoryBuilder;->addInitializer(Lkotlin/reflect/KClass;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/lifecycle/viewmodel/InitializerViewModelFactoryBuilder;->build()Landroidx/lifecycle/ViewModelProvider$Factory;
-HSPLandroidx/lifecycle/viewmodel/MutableCreationExtras;-><init>()V
-HSPLandroidx/lifecycle/viewmodel/MutableCreationExtras;-><init>(Landroidx/lifecycle/viewmodel/CreationExtras;)V
-HSPLandroidx/lifecycle/viewmodel/MutableCreationExtras;-><init>(Landroidx/lifecycle/viewmodel/CreationExtras;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/lifecycle/viewmodel/MutableCreationExtras;->set(Landroidx/lifecycle/viewmodel/CreationExtras$Key;Ljava/lang/Object;)V
-HSPLandroidx/lifecycle/viewmodel/ViewModelInitializer;-><init>(Ljava/lang/Class;Lkotlin/jvm/functions/Function1;)V
-HSPLandroidx/lifecycle/viewmodel/ViewModelInitializer;->getClazz$lifecycle_viewmodel_release()Ljava/lang/Class;
-HSPLandroidx/lifecycle/viewmodel/ViewModelInitializer;->getInitializer$lifecycle_viewmodel_release()Lkotlin/jvm/functions/Function1;
-HSPLandroidx/lifecycle/viewmodel/compose/LocalViewModelStoreOwner$LocalViewModelStoreOwner$1;-><clinit>()V
-HSPLandroidx/lifecycle/viewmodel/compose/LocalViewModelStoreOwner$LocalViewModelStoreOwner$1;-><init>()V
-HSPLandroidx/lifecycle/viewmodel/compose/LocalViewModelStoreOwner$LocalViewModelStoreOwner$1;->invoke()Landroidx/lifecycle/ViewModelStoreOwner;
-HSPLandroidx/lifecycle/viewmodel/compose/LocalViewModelStoreOwner$LocalViewModelStoreOwner$1;->invoke()Ljava/lang/Object;
-HSPLandroidx/lifecycle/viewmodel/compose/LocalViewModelStoreOwner;-><clinit>()V
-HSPLandroidx/lifecycle/viewmodel/compose/LocalViewModelStoreOwner;-><init>()V
-HSPLandroidx/lifecycle/viewmodel/compose/LocalViewModelStoreOwner;->getCurrent(Landroidx/compose/runtime/Composer;I)Landroidx/lifecycle/ViewModelStoreOwner;
-HSPLandroidx/lifecycle/viewmodel/compose/ViewModelKt;->get(Landroidx/lifecycle/ViewModelStoreOwner;Ljava/lang/Class;Ljava/lang/String;Landroidx/lifecycle/ViewModelProvider$Factory;Landroidx/lifecycle/viewmodel/CreationExtras;)Landroidx/lifecycle/ViewModel;
-HSPLandroidx/lifecycle/viewmodel/compose/ViewModelKt;->viewModel(Ljava/lang/Class;Landroidx/lifecycle/ViewModelStoreOwner;Ljava/lang/String;Landroidx/lifecycle/ViewModelProvider$Factory;Landroidx/lifecycle/viewmodel/CreationExtras;Landroidx/compose/runtime/Composer;II)Landroidx/lifecycle/ViewModel;
-HSPLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda0;-><init>(Landroidx/profileinstaller/ProfileInstallerInitializer;Landroid/content/Context;)V
-HSPLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda0;->run()V
-HSPLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda1;-><init>(Landroid/content/Context;)V
-HSPLandroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl$$ExternalSyntheticLambda0;-><init>(Ljava/lang/Runnable;)V
-HSPLandroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl$$ExternalSyntheticLambda0;->doFrame(J)V
-HSPLandroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl;->$r8$lambda$DSwPKNQiVu4DdgIKQZrSpqkWM-A(Ljava/lang/Runnable;J)V
-HSPLandroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl;->lambda$postFrameCallback$0(Ljava/lang/Runnable;J)V
-HSPLandroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl;->postFrameCallback(Ljava/lang/Runnable;)V
-HSPLandroidx/profileinstaller/ProfileInstallerInitializer$Handler28Impl;->createAsync(Landroid/os/Looper;)Landroid/os/Handler;
-HSPLandroidx/profileinstaller/ProfileInstallerInitializer$Result;-><init>()V
-HSPLandroidx/profileinstaller/ProfileInstallerInitializer;->$r8$lambda$QGpANLTF0YGY0pXfe2eje4OKwkc(Landroidx/profileinstaller/ProfileInstallerInitializer;Landroid/content/Context;)V
-HSPLandroidx/profileinstaller/ProfileInstallerInitializer;-><init>()V
-HSPLandroidx/profileinstaller/ProfileInstallerInitializer;->create(Landroid/content/Context;)Landroidx/profileinstaller/ProfileInstallerInitializer$Result;
-HSPLandroidx/profileinstaller/ProfileInstallerInitializer;->create(Landroid/content/Context;)Ljava/lang/Object;
-HSPLandroidx/profileinstaller/ProfileInstallerInitializer;->delayAfterFirstFrame(Landroid/content/Context;)V
-HSPLandroidx/profileinstaller/ProfileInstallerInitializer;->dependencies()Ljava/util/List;
-HSPLandroidx/profileinstaller/ProfileInstallerInitializer;->installAfterDelay(Landroid/content/Context;)V
-HSPLandroidx/profileinstaller/ProfileInstallerInitializer;->lambda$delayAfterFirstFrame$0(Landroid/content/Context;)V
-HSPLandroidx/savedstate/Recreator$Companion;-><init>()V
-HSPLandroidx/savedstate/Recreator$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/savedstate/Recreator;-><clinit>()V
-HSPLandroidx/savedstate/Recreator;-><init>(Landroidx/savedstate/SavedStateRegistryOwner;)V
-HSPLandroidx/savedstate/Recreator;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
-HSPLandroidx/savedstate/SavedStateRegistry$$ExternalSyntheticLambda0;-><init>(Landroidx/savedstate/SavedStateRegistry;)V
-HSPLandroidx/savedstate/SavedStateRegistry$$ExternalSyntheticLambda0;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
-HSPLandroidx/savedstate/SavedStateRegistry$Companion;-><init>()V
-HSPLandroidx/savedstate/SavedStateRegistry$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/savedstate/SavedStateRegistry;->$r8$lambda$AUDDdpkzZrJMhBj0r-_9pI-j6hA(Landroidx/savedstate/SavedStateRegistry;Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
-HSPLandroidx/savedstate/SavedStateRegistry;-><clinit>()V
-HSPLandroidx/savedstate/SavedStateRegistry;-><init>()V
-HSPLandroidx/savedstate/SavedStateRegistry;->consumeRestoredStateForKey(Ljava/lang/String;)Landroid/os/Bundle;
-HSPLandroidx/savedstate/SavedStateRegistry;->getSavedStateProvider(Ljava/lang/String;)Landroidx/savedstate/SavedStateRegistry$SavedStateProvider;
-HSPLandroidx/savedstate/SavedStateRegistry;->performAttach$lambda$4(Landroidx/savedstate/SavedStateRegistry;Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
-HSPLandroidx/savedstate/SavedStateRegistry;->performAttach$savedstate_release(Landroidx/lifecycle/Lifecycle;)V
-HSPLandroidx/savedstate/SavedStateRegistry;->performRestore$savedstate_release(Landroid/os/Bundle;)V
-HSPLandroidx/savedstate/SavedStateRegistry;->registerSavedStateProvider(Ljava/lang/String;Landroidx/savedstate/SavedStateRegistry$SavedStateProvider;)V
-HSPLandroidx/savedstate/SavedStateRegistry;->unregisterSavedStateProvider(Ljava/lang/String;)V
-HSPLandroidx/savedstate/SavedStateRegistryController$Companion;-><init>()V
-HSPLandroidx/savedstate/SavedStateRegistryController$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/savedstate/SavedStateRegistryController$Companion;->create(Landroidx/savedstate/SavedStateRegistryOwner;)Landroidx/savedstate/SavedStateRegistryController;
-HSPLandroidx/savedstate/SavedStateRegistryController;-><clinit>()V
-HSPLandroidx/savedstate/SavedStateRegistryController;-><init>(Landroidx/savedstate/SavedStateRegistryOwner;)V
-HSPLandroidx/savedstate/SavedStateRegistryController;-><init>(Landroidx/savedstate/SavedStateRegistryOwner;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLandroidx/savedstate/SavedStateRegistryController;->create(Landroidx/savedstate/SavedStateRegistryOwner;)Landroidx/savedstate/SavedStateRegistryController;
-HSPLandroidx/savedstate/SavedStateRegistryController;->getSavedStateRegistry()Landroidx/savedstate/SavedStateRegistry;
-HSPLandroidx/savedstate/SavedStateRegistryController;->performAttach()V
-HSPLandroidx/savedstate/SavedStateRegistryController;->performRestore(Landroid/os/Bundle;)V
-HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$1;-><clinit>()V
-HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$1;-><init>()V
-HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$1;->invoke(Landroid/view/View;)Landroid/view/View;
-HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$2;-><clinit>()V
-HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$2;-><init>()V
-HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$2;->invoke(Landroid/view/View;)Landroidx/savedstate/SavedStateRegistryOwner;
-HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner;->get(Landroid/view/View;)Landroidx/savedstate/SavedStateRegistryOwner;
-HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner;->set(Landroid/view/View;Landroidx/savedstate/SavedStateRegistryOwner;)V
-HSPLandroidx/startup/AppInitializer;-><clinit>()V
-HSPLandroidx/startup/AppInitializer;-><init>(Landroid/content/Context;)V
-HSPLandroidx/startup/AppInitializer;->discoverAndInitialize(Landroid/os/Bundle;)V
-HSPLandroidx/startup/AppInitializer;->discoverAndInitialize(Ljava/lang/Class;)V
-HSPLandroidx/startup/AppInitializer;->doInitialize(Ljava/lang/Class;)Ljava/lang/Object;
-HSPLandroidx/startup/AppInitializer;->doInitialize(Ljava/lang/Class;Ljava/util/Set;)Ljava/lang/Object;
-HSPLandroidx/startup/AppInitializer;->getInstance(Landroid/content/Context;)Landroidx/startup/AppInitializer;
-HSPLandroidx/startup/AppInitializer;->initializeComponent(Ljava/lang/Class;)Ljava/lang/Object;
-HSPLandroidx/startup/AppInitializer;->isEagerlyInitialized(Ljava/lang/Class;)Z
-HSPLandroidx/startup/InitializationProvider;-><init>()V
-HSPLandroidx/startup/InitializationProvider;->onCreate()Z
-HSPLandroidx/tracing/Trace;->beginSection(Ljava/lang/String;)V
-HSPLandroidx/tracing/Trace;->endSection()V
-HSPLandroidx/tracing/Trace;->isEnabled()Z
-HSPLandroidx/tracing/TraceApi18Impl;->beginSection(Ljava/lang/String;)V
-HSPLandroidx/tracing/TraceApi18Impl;->endSection()V
-HSPLandroidx/tracing/TraceApi29Impl;->isEnabled()Z
-HSPLcom/android/compose/AndroidSystemUiController;-><init>(Landroid/view/View;Landroid/view/Window;)V
-HSPLcom/android/compose/AndroidSystemUiController;->setNavigationBarColor-Iv8Zu3U(JZZLkotlin/jvm/functions/Function1;)V
-HSPLcom/android/compose/AndroidSystemUiController;->setNavigationBarContrastEnforced(Z)V
-HSPLcom/android/compose/AndroidSystemUiController;->setNavigationBarDarkContentEnabled(Z)V
-HSPLcom/android/compose/AndroidSystemUiController;->setStatusBarColor-ek8zF_U(JZLkotlin/jvm/functions/Function1;)V
-HSPLcom/android/compose/AndroidSystemUiController;->setStatusBarDarkContentEnabled(Z)V
-HSPLcom/android/compose/SystemUiController;->setNavigationBarColor-Iv8Zu3U$default(Lcom/android/compose/SystemUiController;JZZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)V
-HSPLcom/android/compose/SystemUiController;->setStatusBarColor-ek8zF_U$default(Lcom/android/compose/SystemUiController;JZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)V
-HSPLcom/android/compose/SystemUiController;->setSystemBarsColor-Iv8Zu3U$default(Lcom/android/compose/SystemUiController;JZZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)V
-HSPLcom/android/compose/SystemUiController;->setSystemBarsColor-Iv8Zu3U(JZZLkotlin/jvm/functions/Function1;)V
-HSPLcom/android/compose/SystemUiControllerKt$BlackScrimmed$1;-><clinit>()V
-HSPLcom/android/compose/SystemUiControllerKt$BlackScrimmed$1;-><init>()V
-HSPLcom/android/compose/SystemUiControllerKt;-><clinit>()V
-HSPLcom/android/compose/SystemUiControllerKt;->access$getBlackScrimmed$p()Lkotlin/jvm/functions/Function1;
-HSPLcom/android/compose/SystemUiControllerKt;->findWindow(Landroid/content/Context;)Landroid/view/Window;
-HSPLcom/android/compose/SystemUiControllerKt;->findWindow(Landroidx/compose/runtime/Composer;I)Landroid/view/Window;
-HSPLcom/android/compose/SystemUiControllerKt;->rememberSystemUiController(Landroid/view/Window;Landroidx/compose/runtime/Composer;II)Lcom/android/compose/SystemUiController;
-HSPLcom/android/credentialmanager/CredentialManagerRepo$Companion;-><init>()V
-HSPLcom/android/credentialmanager/CredentialManagerRepo$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLcom/android/credentialmanager/CredentialManagerRepo$Companion;->getCancelUiRequest(Landroid/content/Intent;)Landroid/credentials/ui/CancelUiRequest;
-HSPLcom/android/credentialmanager/CredentialManagerRepo$Companion;->sendCancellationCode(ILandroid/os/IBinder;Landroid/os/ResultReceiver;)V
-HSPLcom/android/credentialmanager/CredentialManagerRepo;-><clinit>()V
-HSPLcom/android/credentialmanager/CredentialManagerRepo;-><init>(Landroid/content/Context;Landroid/content/Intent;Lcom/android/credentialmanager/UserConfigRepo;Z)V
-HSPLcom/android/credentialmanager/CredentialManagerRepo;->getCredentialInitialUiState(Ljava/lang/String;)Lcom/android/credentialmanager/getflow/GetCredentialUiState;
-HSPLcom/android/credentialmanager/CredentialManagerRepo;->getRequestInfo()Landroid/credentials/ui/RequestInfo;
-HSPLcom/android/credentialmanager/CredentialManagerRepo;->initState()Lcom/android/credentialmanager/UiState;
-HSPLcom/android/credentialmanager/CredentialManagerRepo;->onCancel(I)V
-HSPLcom/android/credentialmanager/CredentialManagerRepo;->onUserCancel()V
-HSPLcom/android/credentialmanager/CredentialSelectorActivity$Companion;-><init>()V
-HSPLcom/android/credentialmanager/CredentialSelectorActivity$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLcom/android/credentialmanager/CredentialSelectorActivity$CredentialManagerBottomSheet$1;-><init>(Lcom/android/credentialmanager/CredentialSelectorActivity;Lcom/android/credentialmanager/CredentialSelectorViewModel;Lkotlin/coroutines/Continuation;)V
-HSPLcom/android/credentialmanager/CredentialSelectorActivity$CredentialManagerBottomSheet$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLcom/android/credentialmanager/CredentialSelectorActivity$CredentialManagerBottomSheet$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/CredentialSelectorActivity$CredentialManagerBottomSheet$3;-><init>(Lcom/android/credentialmanager/CredentialSelectorActivity;Lcom/android/credentialmanager/CredentialManagerRepo;Lcom/android/credentialmanager/UserConfigRepo;I)V
-HSPLcom/android/credentialmanager/CredentialSelectorActivity$CredentialManagerBottomSheet$3;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/CredentialSelectorActivity$CredentialManagerBottomSheet$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/CredentialSelectorActivity$CredentialManagerBottomSheet$launcher$1;-><init>(Lcom/android/credentialmanager/CredentialSelectorViewModel;)V
-HSPLcom/android/credentialmanager/CredentialSelectorActivity$CredentialManagerBottomSheet$viewModel$1;-><init>(Lcom/android/credentialmanager/CredentialManagerRepo;Lcom/android/credentialmanager/UserConfigRepo;)V
-HSPLcom/android/credentialmanager/CredentialSelectorActivity$CredentialManagerBottomSheet$viewModel$1;->invoke(Landroidx/lifecycle/viewmodel/CreationExtras;)Lcom/android/credentialmanager/CredentialSelectorViewModel;
-HSPLcom/android/credentialmanager/CredentialSelectorActivity$CredentialManagerBottomSheet$viewModel$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/CredentialSelectorActivity$onCreate$1$1;-><init>(Lcom/android/credentialmanager/CredentialSelectorActivity;Lcom/android/credentialmanager/CredentialManagerRepo;Lcom/android/credentialmanager/UserConfigRepo;)V
-HSPLcom/android/credentialmanager/CredentialSelectorActivity$onCreate$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/CredentialSelectorActivity$onCreate$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/CredentialSelectorActivity$onCreate$1;-><init>(Lcom/android/credentialmanager/CredentialSelectorActivity;Lcom/android/credentialmanager/CredentialManagerRepo;Lcom/android/credentialmanager/UserConfigRepo;)V
-HSPLcom/android/credentialmanager/CredentialSelectorActivity$onCreate$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/CredentialSelectorActivity$onCreate$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/CredentialSelectorActivity$onCreate$backPressedCallback$1;-><init>(Lcom/android/credentialmanager/CredentialManagerRepo;Lcom/android/credentialmanager/CredentialSelectorActivity;)V
-HSPLcom/android/credentialmanager/CredentialSelectorActivity;-><clinit>()V
-HSPLcom/android/credentialmanager/CredentialSelectorActivity;-><init>()V
-HSPLcom/android/credentialmanager/CredentialSelectorActivity;->CredentialManagerBottomSheet(Lcom/android/credentialmanager/CredentialManagerRepo;Lcom/android/credentialmanager/UserConfigRepo;Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/CredentialSelectorActivity;->access$CredentialManagerBottomSheet(Lcom/android/credentialmanager/CredentialSelectorActivity;Lcom/android/credentialmanager/CredentialManagerRepo;Lcom/android/credentialmanager/UserConfigRepo;Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/CredentialSelectorActivity;->access$handleDialogState(Lcom/android/credentialmanager/CredentialSelectorActivity;Lcom/android/credentialmanager/common/DialogState;)V
-HSPLcom/android/credentialmanager/CredentialSelectorActivity;->handleDialogState(Lcom/android/credentialmanager/common/DialogState;)V
-HSPLcom/android/credentialmanager/CredentialSelectorActivity;->maybeCancelUIUponRequest$default(Lcom/android/credentialmanager/CredentialSelectorActivity;Landroid/content/Intent;Lcom/android/credentialmanager/CredentialSelectorViewModel;ILjava/lang/Object;)Lkotlin/Triple;
-HSPLcom/android/credentialmanager/CredentialSelectorActivity;->maybeCancelUIUponRequest(Landroid/content/Intent;Lcom/android/credentialmanager/CredentialSelectorViewModel;)Lkotlin/Triple;
-HSPLcom/android/credentialmanager/CredentialSelectorActivity;->onCreate(Landroid/os/Bundle;)V
-HSPLcom/android/credentialmanager/CredentialSelectorViewModel;-><clinit>()V
-HSPLcom/android/credentialmanager/CredentialSelectorViewModel;-><init>(Lcom/android/credentialmanager/CredentialManagerRepo;Lcom/android/credentialmanager/UserConfigRepo;)V
-HSPLcom/android/credentialmanager/CredentialSelectorViewModel;->getFlowOnBackToHybridSnackBarScreen()V
-HSPLcom/android/credentialmanager/CredentialSelectorViewModel;->getFlowOnMoreOptionOnSnackBarSelected(Z)V
-HSPLcom/android/credentialmanager/CredentialSelectorViewModel;->getUiMetrics()Lcom/android/credentialmanager/logging/UIMetrics;
-HSPLcom/android/credentialmanager/CredentialSelectorViewModel;->getUiState()Lcom/android/credentialmanager/UiState;
-HSPLcom/android/credentialmanager/CredentialSelectorViewModel;->logUiEvent(Lcom/android/internal/logging/UiEventLogger$UiEventEnum;Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/CredentialSelectorViewModel;->onInitialRenderComplete()V
-HSPLcom/android/credentialmanager/CredentialSelectorViewModel;->onUserCancel()V
-HSPLcom/android/credentialmanager/CredentialSelectorViewModel;->setUiState(Lcom/android/credentialmanager/UiState;)V
-HSPLcom/android/credentialmanager/DataConverterKt;->access$getServiceLabelAndIcon(Landroid/content/pm/PackageManager;Ljava/lang/String;)Lkotlin/Pair;
-HSPLcom/android/credentialmanager/DataConverterKt;->getAppLabel(Landroid/content/pm/PackageManager;Ljava/lang/String;)Ljava/lang/String;
-HSPLcom/android/credentialmanager/DataConverterKt;->getServiceLabelAndIcon(Landroid/content/pm/PackageManager;Ljava/lang/String;)Lkotlin/Pair;
-HSPLcom/android/credentialmanager/GetFlowUtils$Companion;-><init>()V
-HSPLcom/android/credentialmanager/GetFlowUtils$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLcom/android/credentialmanager/GetFlowUtils$Companion;->getActionEntryList(Ljava/lang/String;Ljava/util/List;Landroid/graphics/drawable/Drawable;)Ljava/util/List;
-HSPLcom/android/credentialmanager/GetFlowUtils$Companion;->getAuthenticationEntryList(Ljava/lang/String;Ljava/lang/String;Landroid/graphics/drawable/Drawable;Ljava/util/List;)Ljava/util/List;
-HSPLcom/android/credentialmanager/GetFlowUtils$Companion;->getCredentialOptionInfoList(Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Landroid/content/Context;)Ljava/util/List;
-HSPLcom/android/credentialmanager/GetFlowUtils$Companion;->getRemoteEntry(Ljava/lang/String;Landroid/credentials/ui/Entry;)Lcom/android/credentialmanager/getflow/RemoteEntryInfo;
-HSPLcom/android/credentialmanager/GetFlowUtils$Companion;->toProviderList(Ljava/util/List;Landroid/content/Context;)Ljava/util/List;
-HSPLcom/android/credentialmanager/GetFlowUtils$Companion;->toRequestDisplayInfo(Landroid/credentials/ui/RequestInfo;Landroid/content/Context;Ljava/lang/String;)Lcom/android/credentialmanager/getflow/RequestDisplayInfo;
-HSPLcom/android/credentialmanager/GetFlowUtils;-><clinit>()V
-HSPLcom/android/credentialmanager/UiState;-><clinit>()V
-HSPLcom/android/credentialmanager/UiState;-><init>(Lcom/android/credentialmanager/createflow/CreateCredentialUiState;Lcom/android/credentialmanager/getflow/GetCredentialUiState;Lcom/android/credentialmanager/common/BaseEntry;Lcom/android/credentialmanager/common/ProviderActivityState;Lcom/android/credentialmanager/common/DialogState;ZLcom/android/credentialmanager/CancelUiRequestState;Z)V
-HSPLcom/android/credentialmanager/UiState;-><init>(Lcom/android/credentialmanager/createflow/CreateCredentialUiState;Lcom/android/credentialmanager/getflow/GetCredentialUiState;Lcom/android/credentialmanager/common/BaseEntry;Lcom/android/credentialmanager/common/ProviderActivityState;Lcom/android/credentialmanager/common/DialogState;ZLcom/android/credentialmanager/CancelUiRequestState;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLcom/android/credentialmanager/UiState;->copy$default(Lcom/android/credentialmanager/UiState;Lcom/android/credentialmanager/createflow/CreateCredentialUiState;Lcom/android/credentialmanager/getflow/GetCredentialUiState;Lcom/android/credentialmanager/common/BaseEntry;Lcom/android/credentialmanager/common/ProviderActivityState;Lcom/android/credentialmanager/common/DialogState;ZLcom/android/credentialmanager/CancelUiRequestState;ZILjava/lang/Object;)Lcom/android/credentialmanager/UiState;
-HSPLcom/android/credentialmanager/UiState;->copy(Lcom/android/credentialmanager/createflow/CreateCredentialUiState;Lcom/android/credentialmanager/getflow/GetCredentialUiState;Lcom/android/credentialmanager/common/BaseEntry;Lcom/android/credentialmanager/common/ProviderActivityState;Lcom/android/credentialmanager/common/DialogState;ZLcom/android/credentialmanager/CancelUiRequestState;Z)Lcom/android/credentialmanager/UiState;
-HSPLcom/android/credentialmanager/UiState;->equals(Ljava/lang/Object;)Z
-HSPLcom/android/credentialmanager/UiState;->getCancelRequestState()Lcom/android/credentialmanager/CancelUiRequestState;
-HSPLcom/android/credentialmanager/UiState;->getCreateCredentialUiState()Lcom/android/credentialmanager/createflow/CreateCredentialUiState;
-HSPLcom/android/credentialmanager/UiState;->getDialogState()Lcom/android/credentialmanager/common/DialogState;
-HSPLcom/android/credentialmanager/UiState;->getGetCredentialUiState()Lcom/android/credentialmanager/getflow/GetCredentialUiState;
-HSPLcom/android/credentialmanager/UiState;->getProviderActivityState()Lcom/android/credentialmanager/common/ProviderActivityState;
-HSPLcom/android/credentialmanager/UiState;->isAutoSelectFlow()Z
-HSPLcom/android/credentialmanager/UiState;->isInitialRender()Z
-HSPLcom/android/credentialmanager/UserConfigRepo$Companion;-><init>()V
-HSPLcom/android/credentialmanager/UserConfigRepo$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLcom/android/credentialmanager/UserConfigRepo;-><clinit>()V
-HSPLcom/android/credentialmanager/UserConfigRepo;-><init>(Landroid/content/Context;)V
-HSPLcom/android/credentialmanager/common/BaseEntry;-><clinit>()V
-HSPLcom/android/credentialmanager/common/BaseEntry;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/PendingIntent;Landroid/content/Intent;Z)V
-HSPLcom/android/credentialmanager/common/DialogState;->$values()[Lcom/android/credentialmanager/common/DialogState;
-HSPLcom/android/credentialmanager/common/DialogState;-><clinit>()V
-HSPLcom/android/credentialmanager/common/DialogState;-><init>(Ljava/lang/String;I)V
-HSPLcom/android/credentialmanager/common/ProviderActivityState;->$values()[Lcom/android/credentialmanager/common/ProviderActivityState;
-HSPLcom/android/credentialmanager/common/ProviderActivityState;-><clinit>()V
-HSPLcom/android/credentialmanager/common/ProviderActivityState;-><init>(Ljava/lang/String;I)V
-HSPLcom/android/credentialmanager/common/ProviderActivityState;->values()[Lcom/android/credentialmanager/common/ProviderActivityState;
-HSPLcom/android/credentialmanager/common/StartBalIntentSenderForResultContract;-><clinit>()V
-HSPLcom/android/credentialmanager/common/StartBalIntentSenderForResultContract;-><init>()V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetDefaults;-><clinit>()V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetDefaults;-><init>()V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetDefaults;->getElevation-D9Ej5fM()F
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetDefaults;->getMaxCompactWidth-D9Ej5fM()F
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetDefaults;->getMaxSheetWidth-D9Ej5fM()F
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetDefaults;->getMinScrimHeight-D9Ej5fM()F
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetDefaults;->getScrimColor(Landroidx/compose/runtime/Composer;I)J
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$1$1;-><init>(Lcom/android/credentialmanager/common/material/ModalBottomSheetState;Lkotlinx/coroutines/CoroutineScope;)V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$2$1$1;-><init>(Lcom/android/credentialmanager/common/material/ModalBottomSheetState;F)V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$2$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$2$1$1;->invoke-Bjo55l4(Landroidx/compose/ui/unit/Density;)J
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$2$2$1;-><init>(Landroidx/compose/runtime/MutableState;)V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$2$2$1;->invoke(Landroidx/compose/ui/layout/LayoutCoordinates;)V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$2$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$2$3$1;-><init>(Lcom/android/credentialmanager/common/material/ModalBottomSheetState;Lkotlinx/coroutines/CoroutineScope;)V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$2$3;-><init>(Lcom/android/credentialmanager/common/material/ModalBottomSheetState;Lkotlinx/coroutines/CoroutineScope;)V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$2$3;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$2$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$2$4;-><init>(Lkotlin/jvm/functions/Function3;I)V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$2$4;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$2$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1;-><init>(Lkotlin/jvm/functions/Function2;ILcom/android/credentialmanager/common/material/ModalBottomSheetState;Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/ui/graphics/Shape;JJFLkotlin/jvm/functions/Function3;)V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1;->invoke(Landroidx/compose/foundation/layout/BoxWithConstraintsScope;Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$2;-><init>(Lkotlin/jvm/functions/Function3;Landroidx/compose/ui/Modifier;Lcom/android/credentialmanager/common/material/ModalBottomSheetState;Landroidx/compose/ui/graphics/Shape;FJJLkotlin/jvm/functions/Function2;II)V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$Scrim$1$1;-><init>(JLandroidx/compose/runtime/State;)V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$Scrim$1$1;->invoke(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$Scrim$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$Scrim$2;-><init>(JLkotlin/jvm/functions/Function0;ZI)V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$Scrim$dismissModifier$1$1$1;-><init>(Lkotlin/jvm/functions/Function0;)V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$Scrim$dismissModifier$1$1;-><init>(Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$Scrim$dismissModifier$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$Scrim$dismissModifier$1$1;->invoke(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$Scrim$dismissModifier$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$Scrim$dismissModifier$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$Scrim$dismissModifier$2$1$1;-><init>(Lkotlin/jvm/functions/Function0;)V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$Scrim$dismissModifier$2$1;-><init>(Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$Scrim$dismissModifier$2$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$Scrim$dismissModifier$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$rememberModalBottomSheetState$1;-><clinit>()V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$rememberModalBottomSheetState$1;-><init>()V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$rememberModalBottomSheetState$2;-><init>(Lcom/android/credentialmanager/common/material/ModalBottomSheetValue;Landroidx/compose/animation/core/AnimationSpec;ZLkotlin/jvm/functions/Function1;)V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$rememberModalBottomSheetState$2;->invoke()Lcom/android/credentialmanager/common/material/ModalBottomSheetState;
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt$rememberModalBottomSheetState$2;->invoke()Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt;->ModalBottomSheetLayout-XBZIF-8(Lkotlin/jvm/functions/Function3;Landroidx/compose/ui/Modifier;Lcom/android/credentialmanager/common/material/ModalBottomSheetState;Landroidx/compose/ui/graphics/Shape;FJJLkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt;->Scrim-3J-VO9M(JLkotlin/jvm/functions/Function0;ZLandroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt;->Scrim_3J_VO9M$lambda$0(Landroidx/compose/runtime/State;)F
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt;->access$Scrim_3J_VO9M$lambda$0(Landroidx/compose/runtime/State;)F
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt;->access$bottomSheetSwipeable(Landroidx/compose/ui/Modifier;Lcom/android/credentialmanager/common/material/ModalBottomSheetState;FLandroidx/compose/runtime/State;)Landroidx/compose/ui/Modifier;
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt;->bottomSheetSwipeable(Landroidx/compose/ui/Modifier;Lcom/android/credentialmanager/common/material/ModalBottomSheetState;FLandroidx/compose/runtime/State;)Landroidx/compose/ui/Modifier;
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetKt;->rememberModalBottomSheetState(Lcom/android/credentialmanager/common/material/ModalBottomSheetValue;Landroidx/compose/animation/core/AnimationSpec;ZLkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Lcom/android/credentialmanager/common/material/ModalBottomSheetState;
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetState$Companion$Saver$1;-><clinit>()V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetState$Companion$Saver$1;-><init>()V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetState$Companion$Saver$1;->invoke(Landroidx/compose/runtime/saveable/SaverScope;Lcom/android/credentialmanager/common/material/ModalBottomSheetState;)Lcom/android/credentialmanager/common/material/ModalBottomSheetValue;
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetState$Companion$Saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetState$Companion$Saver$2;-><init>(Landroidx/compose/animation/core/AnimationSpec;ZLkotlin/jvm/functions/Function1;)V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetState$Companion;-><init>()V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetState$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetState$Companion;->Saver(Landroidx/compose/animation/core/AnimationSpec;ZLkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/saveable/Saver;
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetState;-><clinit>()V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetState;-><init>(Lcom/android/credentialmanager/common/material/ModalBottomSheetValue;Landroidx/compose/animation/core/AnimationSpec;ZLkotlin/jvm/functions/Function1;)V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetState;->getHasHalfExpandedState$frameworks__base__packages__CredentialManager__android_common__CredentialManager()Z
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetState;->getNestedScrollConnection$frameworks__base__packages__CredentialManager__android_common__CredentialManager()Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetState;->isVisible()Z
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetState;->show(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetValue;->$values()[Lcom/android/credentialmanager/common/material/ModalBottomSheetValue;
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetValue;-><clinit>()V
-HSPLcom/android/credentialmanager/common/material/ModalBottomSheetValue;-><init>(Ljava/lang/String;I)V
-HSPLcom/android/credentialmanager/common/material/SwipeableDefaults;-><clinit>()V
-HSPLcom/android/credentialmanager/common/material/SwipeableDefaults;-><init>()V
-HSPLcom/android/credentialmanager/common/material/SwipeableDefaults;->getAnimationSpec()Landroidx/compose/animation/core/SpringSpec;
-HSPLcom/android/credentialmanager/common/material/SwipeableDefaults;->getDefaultDurationMillis()I
-HSPLcom/android/credentialmanager/common/material/SwipeableDefaults;->getVelocityThreshold-D9Ej5fM()F
-HSPLcom/android/credentialmanager/common/material/SwipeableKt$PreUpPostDownNestedScrollConnection$1;-><init>(Lcom/android/credentialmanager/common/material/SwipeableState;)V
-HSPLcom/android/credentialmanager/common/material/SwipeableKt$swipeable$1;-><clinit>()V
-HSPLcom/android/credentialmanager/common/material/SwipeableKt$swipeable$1;-><init>()V
-HSPLcom/android/credentialmanager/common/material/SwipeableKt$swipeable$3$3$1;-><init>(Ljava/util/Map;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/unit/Density;)V
-HSPLcom/android/credentialmanager/common/material/SwipeableKt$swipeable$3$3;-><init>(Lcom/android/credentialmanager/common/material/SwipeableState;Ljava/util/Map;Lcom/android/credentialmanager/common/material/ResistanceConfig;Landroidx/compose/ui/unit/Density;Lkotlin/jvm/functions/Function2;FLkotlin/coroutines/Continuation;)V
-HSPLcom/android/credentialmanager/common/material/SwipeableKt$swipeable$3$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLcom/android/credentialmanager/common/material/SwipeableKt$swipeable$3$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/material/SwipeableKt$swipeable$3$4$1;-><init>(Lcom/android/credentialmanager/common/material/SwipeableState;Lkotlin/coroutines/Continuation;)V
-HSPLcom/android/credentialmanager/common/material/SwipeableKt$swipeable$3;-><init>(Ljava/util/Map;Lcom/android/credentialmanager/common/material/SwipeableState;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;ZLcom/android/credentialmanager/common/material/ResistanceConfig;Lkotlin/jvm/functions/Function2;F)V
-HSPLcom/android/credentialmanager/common/material/SwipeableKt$swipeable$3;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
-HSPLcom/android/credentialmanager/common/material/SwipeableKt$swipeable$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/material/SwipeableKt;->access$computeTarget(FFLjava/util/Set;Lkotlin/jvm/functions/Function2;FF)F
-HSPLcom/android/credentialmanager/common/material/SwipeableKt;->access$getOffset(Ljava/util/Map;Ljava/lang/Object;)Ljava/lang/Float;
-HSPLcom/android/credentialmanager/common/material/SwipeableKt;->computeTarget(FFLjava/util/Set;Lkotlin/jvm/functions/Function2;FF)F
-HSPLcom/android/credentialmanager/common/material/SwipeableKt;->findBounds(FLjava/util/Set;)Ljava/util/List;
-HSPLcom/android/credentialmanager/common/material/SwipeableKt;->getOffset(Ljava/util/Map;Ljava/lang/Object;)Ljava/lang/Float;
-HSPLcom/android/credentialmanager/common/material/SwipeableKt;->getPreUpPostDownNestedScrollConnection(Lcom/android/credentialmanager/common/material/SwipeableState;)Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;
-HSPLcom/android/credentialmanager/common/material/SwipeableKt;->swipeable-pPrIpRY$default(Landroidx/compose/ui/Modifier;Lcom/android/credentialmanager/common/material/SwipeableState;Ljava/util/Map;Landroidx/compose/foundation/gestures/Orientation;ZZLandroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function2;Lcom/android/credentialmanager/common/material/ResistanceConfig;FILjava/lang/Object;)Landroidx/compose/ui/Modifier;
-HSPLcom/android/credentialmanager/common/material/SwipeableKt;->swipeable-pPrIpRY(Landroidx/compose/ui/Modifier;Lcom/android/credentialmanager/common/material/SwipeableState;Ljava/util/Map;Landroidx/compose/foundation/gestures/Orientation;ZZLandroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function2;Lcom/android/credentialmanager/common/material/ResistanceConfig;F)Landroidx/compose/ui/Modifier;
-HSPLcom/android/credentialmanager/common/material/SwipeableState$Companion;-><init>()V
-HSPLcom/android/credentialmanager/common/material/SwipeableState$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLcom/android/credentialmanager/common/material/SwipeableState$animateInternalToOffset$2$1;-><init>(Landroidx/compose/foundation/gestures/DragScope;Lkotlin/jvm/internal/Ref$FloatRef;)V
-HSPLcom/android/credentialmanager/common/material/SwipeableState$animateInternalToOffset$2$1;->invoke(Landroidx/compose/animation/core/Animatable;)V
-HSPLcom/android/credentialmanager/common/material/SwipeableState$animateInternalToOffset$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/material/SwipeableState$animateInternalToOffset$2;-><init>(Lcom/android/credentialmanager/common/material/SwipeableState;FLandroidx/compose/animation/core/AnimationSpec;Lkotlin/coroutines/Continuation;)V
-HSPLcom/android/credentialmanager/common/material/SwipeableState$animateInternalToOffset$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLcom/android/credentialmanager/common/material/SwipeableState$animateInternalToOffset$2;->invoke(Landroidx/compose/foundation/gestures/DragScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/material/SwipeableState$animateInternalToOffset$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/material/SwipeableState$animateInternalToOffset$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/material/SwipeableState$animateTo$2$emit$1;-><init>(Lcom/android/credentialmanager/common/material/SwipeableState$animateTo$2;Lkotlin/coroutines/Continuation;)V
-HSPLcom/android/credentialmanager/common/material/SwipeableState$animateTo$2$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/material/SwipeableState$animateTo$2;-><init>(Ljava/lang/Object;Lcom/android/credentialmanager/common/material/SwipeableState;Landroidx/compose/animation/core/AnimationSpec;)V
-HSPLcom/android/credentialmanager/common/material/SwipeableState$animateTo$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/material/SwipeableState$animateTo$2;->emit(Ljava/util/Map;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/material/SwipeableState$draggableState$1;-><init>(Lcom/android/credentialmanager/common/material/SwipeableState;)V
-HSPLcom/android/credentialmanager/common/material/SwipeableState$draggableState$1;->invoke(F)V
-HSPLcom/android/credentialmanager/common/material/SwipeableState$draggableState$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/material/SwipeableState$latestNonEmptyAnchorsFlow$1;-><init>(Lcom/android/credentialmanager/common/material/SwipeableState;)V
-HSPLcom/android/credentialmanager/common/material/SwipeableState$latestNonEmptyAnchorsFlow$1;->invoke()Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/material/SwipeableState$latestNonEmptyAnchorsFlow$1;->invoke()Ljava/util/Map;
-HSPLcom/android/credentialmanager/common/material/SwipeableState$processNewAnchors$1;-><init>(Lcom/android/credentialmanager/common/material/SwipeableState;Lkotlin/coroutines/Continuation;)V
-HSPLcom/android/credentialmanager/common/material/SwipeableState$snapInternalToOffset$2;-><init>(FLcom/android/credentialmanager/common/material/SwipeableState;Lkotlin/coroutines/Continuation;)V
-HSPLcom/android/credentialmanager/common/material/SwipeableState$snapInternalToOffset$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLcom/android/credentialmanager/common/material/SwipeableState$snapInternalToOffset$2;->invoke(Landroidx/compose/foundation/gestures/DragScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/material/SwipeableState$snapInternalToOffset$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/material/SwipeableState$snapInternalToOffset$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/material/SwipeableState$special$$inlined$filter$1$2$1;-><init>(Lcom/android/credentialmanager/common/material/SwipeableState$special$$inlined$filter$1$2;Lkotlin/coroutines/Continuation;)V
-HSPLcom/android/credentialmanager/common/material/SwipeableState$special$$inlined$filter$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/material/SwipeableState$special$$inlined$filter$1$2;-><init>(Lkotlinx/coroutines/flow/FlowCollector;)V
-HSPLcom/android/credentialmanager/common/material/SwipeableState$special$$inlined$filter$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/material/SwipeableState$special$$inlined$filter$1;-><init>(Lkotlinx/coroutines/flow/Flow;)V
-HSPLcom/android/credentialmanager/common/material/SwipeableState$special$$inlined$filter$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/material/SwipeableState$thresholds$2;-><clinit>()V
-HSPLcom/android/credentialmanager/common/material/SwipeableState$thresholds$2;-><init>()V
-HSPLcom/android/credentialmanager/common/material/SwipeableState;-><clinit>()V
-HSPLcom/android/credentialmanager/common/material/SwipeableState;-><init>(Ljava/lang/Object;Landroidx/compose/animation/core/AnimationSpec;Lkotlin/jvm/functions/Function1;)V
-HSPLcom/android/credentialmanager/common/material/SwipeableState;->access$animateInternalToOffset(Lcom/android/credentialmanager/common/material/SwipeableState;FLandroidx/compose/animation/core/AnimationSpec;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/material/SwipeableState;->access$getAbsoluteOffset$p(Lcom/android/credentialmanager/common/material/SwipeableState;)Landroidx/compose/runtime/MutableState;
-HSPLcom/android/credentialmanager/common/material/SwipeableState;->access$getAnimationTarget$p(Lcom/android/credentialmanager/common/material/SwipeableState;)Landroidx/compose/runtime/MutableState;
-HSPLcom/android/credentialmanager/common/material/SwipeableState;->access$getOffsetState$p(Lcom/android/credentialmanager/common/material/SwipeableState;)Landroidx/compose/runtime/MutableState;
-HSPLcom/android/credentialmanager/common/material/SwipeableState;->access$getOverflowState$p(Lcom/android/credentialmanager/common/material/SwipeableState;)Landroidx/compose/runtime/MutableState;
-HSPLcom/android/credentialmanager/common/material/SwipeableState;->access$setAnimationRunning(Lcom/android/credentialmanager/common/material/SwipeableState;Z)V
-HSPLcom/android/credentialmanager/common/material/SwipeableState;->access$setCurrentValue(Lcom/android/credentialmanager/common/material/SwipeableState;Ljava/lang/Object;)V
-HSPLcom/android/credentialmanager/common/material/SwipeableState;->animateInternalToOffset(FLandroidx/compose/animation/core/AnimationSpec;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/material/SwipeableState;->animateTo$default(Lcom/android/credentialmanager/common/material/SwipeableState;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationSpec;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/material/SwipeableState;->animateTo(Ljava/lang/Object;Landroidx/compose/animation/core/AnimationSpec;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/material/SwipeableState;->ensureInit$frameworks__base__packages__CredentialManager__android_common__CredentialManager(Ljava/util/Map;)V
-HSPLcom/android/credentialmanager/common/material/SwipeableState;->getAnchors$frameworks__base__packages__CredentialManager__android_common__CredentialManager()Ljava/util/Map;
-HSPLcom/android/credentialmanager/common/material/SwipeableState;->getCurrentValue()Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/material/SwipeableState;->getDraggableState$frameworks__base__packages__CredentialManager__android_common__CredentialManager()Landroidx/compose/foundation/gestures/DraggableState;
-HSPLcom/android/credentialmanager/common/material/SwipeableState;->getMaxBound$frameworks__base__packages__CredentialManager__android_common__CredentialManager()F
-HSPLcom/android/credentialmanager/common/material/SwipeableState;->getMinBound$frameworks__base__packages__CredentialManager__android_common__CredentialManager()F
-HSPLcom/android/credentialmanager/common/material/SwipeableState;->getOffset()Landroidx/compose/runtime/State;
-HSPLcom/android/credentialmanager/common/material/SwipeableState;->getResistance$frameworks__base__packages__CredentialManager__android_common__CredentialManager()Lcom/android/credentialmanager/common/material/ResistanceConfig;
-HSPLcom/android/credentialmanager/common/material/SwipeableState;->getTargetValue()Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/material/SwipeableState;->getThresholds$frameworks__base__packages__CredentialManager__android_common__CredentialManager()Lkotlin/jvm/functions/Function2;
-HSPLcom/android/credentialmanager/common/material/SwipeableState;->isAnimationRunning()Z
-HSPLcom/android/credentialmanager/common/material/SwipeableState;->processNewAnchors$frameworks__base__packages__CredentialManager__android_common__CredentialManager(Ljava/util/Map;Ljava/util/Map;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/material/SwipeableState;->setAnchors$frameworks__base__packages__CredentialManager__android_common__CredentialManager(Ljava/util/Map;)V
-HSPLcom/android/credentialmanager/common/material/SwipeableState;->setAnimationRunning(Z)V
-HSPLcom/android/credentialmanager/common/material/SwipeableState;->setCurrentValue(Ljava/lang/Object;)V
-HSPLcom/android/credentialmanager/common/material/SwipeableState;->setResistance$frameworks__base__packages__CredentialManager__android_common__CredentialManager(Lcom/android/credentialmanager/common/material/ResistanceConfig;)V
-HSPLcom/android/credentialmanager/common/material/SwipeableState;->setThresholds$frameworks__base__packages__CredentialManager__android_common__CredentialManager(Lkotlin/jvm/functions/Function2;)V
-HSPLcom/android/credentialmanager/common/material/SwipeableState;->setVelocityThreshold$frameworks__base__packages__CredentialManager__android_common__CredentialManager(F)V
-HSPLcom/android/credentialmanager/common/material/SwipeableState;->snapInternalToOffset(FLkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/ui/BottomSheetKt$ModalBottomSheet$1$1;-><init>(Lcom/android/credentialmanager/common/material/ModalBottomSheetState;Lkotlin/coroutines/Continuation;)V
-HSPLcom/android/credentialmanager/common/ui/BottomSheetKt$ModalBottomSheet$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLcom/android/credentialmanager/common/ui/BottomSheetKt$ModalBottomSheet$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/ui/BottomSheetKt$ModalBottomSheet$1;-><init>(Lcom/android/credentialmanager/common/material/ModalBottomSheetState;ZLkotlin/jvm/functions/Function0;Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V
-HSPLcom/android/credentialmanager/common/ui/BottomSheetKt$ModalBottomSheet$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLcom/android/credentialmanager/common/ui/BottomSheetKt$ModalBottomSheet$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/ui/BottomSheetKt$ModalBottomSheet$2;-><init>(Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function0;ZLkotlin/jvm/functions/Function0;ZI)V
-HSPLcom/android/credentialmanager/common/ui/BottomSheetKt$ModalBottomSheet$2;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/common/ui/BottomSheetKt$ModalBottomSheet$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/ui/BottomSheetKt;->ModalBottomSheet(Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function0;ZLkotlin/jvm/functions/Function0;ZLandroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/common/ui/CardsKt$CredentialContainerCard$1;-><init>(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;II)V
-HSPLcom/android/credentialmanager/common/ui/CardsKt$SheetContainerCard$1;-><init>(Lkotlin/jvm/functions/Function2;ILandroidx/compose/foundation/layout/Arrangement$Vertical;Lkotlin/jvm/functions/Function1;)V
-HSPLcom/android/credentialmanager/common/ui/CardsKt$SheetContainerCard$1;->invoke(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/common/ui/CardsKt$SheetContainerCard$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/ui/CardsKt$SheetContainerCard$2;-><init>(Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/Arrangement$Vertical;Lkotlin/jvm/functions/Function1;II)V
-HSPLcom/android/credentialmanager/common/ui/CardsKt;->CredentialContainerCard(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
-HSPLcom/android/credentialmanager/common/ui/CardsKt;->SheetContainerCard(Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/Arrangement$Vertical;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V
-HSPLcom/android/credentialmanager/common/ui/ComposableSingletons$BottomSheetKt$lambda-1$1;-><clinit>()V
-HSPLcom/android/credentialmanager/common/ui/ComposableSingletons$BottomSheetKt$lambda-1$1;-><init>()V
-HSPLcom/android/credentialmanager/common/ui/ComposableSingletons$BottomSheetKt$lambda-1$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/common/ui/ComposableSingletons$BottomSheetKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/ui/ComposableSingletons$BottomSheetKt;-><clinit>()V
-HSPLcom/android/credentialmanager/common/ui/ComposableSingletons$BottomSheetKt;-><init>()V
-HSPLcom/android/credentialmanager/common/ui/ComposableSingletons$BottomSheetKt;->getLambda-1$frameworks__base__packages__CredentialManager__android_common__CredentialManager()Lkotlin/jvm/functions/Function2;
-HSPLcom/android/credentialmanager/common/ui/ComposableSingletons$EntryKt$lambda-1$1;-><clinit>()V
-HSPLcom/android/credentialmanager/common/ui/ComposableSingletons$EntryKt$lambda-1$1;-><init>()V
-HSPLcom/android/credentialmanager/common/ui/ComposableSingletons$EntryKt$lambda-1$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/common/ui/ComposableSingletons$EntryKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/ui/ComposableSingletons$EntryKt;-><clinit>()V
-HSPLcom/android/credentialmanager/common/ui/ComposableSingletons$EntryKt;-><init>()V
-HSPLcom/android/credentialmanager/common/ui/ComposableSingletons$EntryKt;->getLambda-1$frameworks__base__packages__CredentialManager__android_common__CredentialManager()Lkotlin/jvm/functions/Function2;
-HSPLcom/android/credentialmanager/common/ui/ComposableSingletons$SnackBarKt$lambda-1$1;-><clinit>()V
-HSPLcom/android/credentialmanager/common/ui/ComposableSingletons$SnackBarKt$lambda-1$1;-><init>()V
-HSPLcom/android/credentialmanager/common/ui/ComposableSingletons$SnackBarKt$lambda-1$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/common/ui/ComposableSingletons$SnackBarKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/ui/ComposableSingletons$SnackBarKt;-><clinit>()V
-HSPLcom/android/credentialmanager/common/ui/ComposableSingletons$SnackBarKt;-><init>()V
-HSPLcom/android/credentialmanager/common/ui/ComposableSingletons$SnackBarKt;->getLambda-1$frameworks__base__packages__CredentialManager__android_common__CredentialManager()Lkotlin/jvm/functions/Function2;
-HSPLcom/android/credentialmanager/common/ui/EntryKt$ActionEntry$1;-><init>(Ljava/lang/String;ILjava/lang/String;)V
-HSPLcom/android/credentialmanager/common/ui/EntryKt$ActionEntry$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/common/ui/EntryKt$ActionEntry$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/ui/EntryKt$ActionEntry$2;-><init>(Landroidx/compose/ui/graphics/ImageBitmap;)V
-HSPLcom/android/credentialmanager/common/ui/EntryKt$ActionEntry$2;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/common/ui/EntryKt$ActionEntry$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/ui/EntryKt$ActionEntry$3;-><init>(Lkotlin/jvm/functions/Function0;Ljava/lang/String;Ljava/lang/String;Landroidx/compose/ui/graphics/ImageBitmap;II)V
-HSPLcom/android/credentialmanager/common/ui/EntryKt$Entry$1;-><clinit>()V
-HSPLcom/android/credentialmanager/common/ui/EntryKt$Entry$1;-><init>()V
-HSPLcom/android/credentialmanager/common/ui/EntryKt$Entry$1;->invoke(Landroidx/compose/ui/text/TextLayoutResult;)V
-HSPLcom/android/credentialmanager/common/ui/EntryKt$Entry$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/ui/EntryKt$Entry$4;-><init>(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/ui/Modifier;I)V
-HSPLcom/android/credentialmanager/common/ui/EntryKt$Entry$4;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/common/ui/EntryKt$Entry$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/ui/EntryKt$Entry$6;-><init>(ZLjava/lang/String;ZLkotlin/jvm/functions/Function1;IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
-HSPLcom/android/credentialmanager/common/ui/EntryKt$Entry$6;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/common/ui/EntryKt$Entry$6;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/ui/EntryKt$Entry$7;-><init>(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function0;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroidx/compose/ui/graphics/ImageBitmap;ZLandroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/ui/graphics/painter/Painter;Ljava/lang/String;ZZLkotlin/jvm/functions/Function1;III)V
-HSPLcom/android/credentialmanager/common/ui/EntryKt$MoreOptionTopAppBar$1;-><init>(Ljava/lang/String;I)V
-HSPLcom/android/credentialmanager/common/ui/EntryKt$MoreOptionTopAppBar$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/common/ui/EntryKt$MoreOptionTopAppBar$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/ui/EntryKt$MoreOptionTopAppBar$2;-><init>(Lkotlin/jvm/functions/Function0;I)V
-HSPLcom/android/credentialmanager/common/ui/EntryKt$MoreOptionTopAppBar$2;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/common/ui/EntryKt$MoreOptionTopAppBar$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/ui/EntryKt$MoreOptionTopAppBar$3;-><init>(Ljava/lang/String;Lkotlin/jvm/functions/Function0;FI)V
-HSPLcom/android/credentialmanager/common/ui/EntryKt$autoMirrored$1$WhenMappings;-><clinit>()V
-HSPLcom/android/credentialmanager/common/ui/EntryKt$autoMirrored$1;-><clinit>()V
-HSPLcom/android/credentialmanager/common/ui/EntryKt$autoMirrored$1;-><init>()V
-HSPLcom/android/credentialmanager/common/ui/EntryKt$autoMirrored$1;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
-HSPLcom/android/credentialmanager/common/ui/EntryKt$autoMirrored$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/ui/EntryKt;->ActionEntry(Lkotlin/jvm/functions/Function0;Ljava/lang/String;Ljava/lang/String;Landroidx/compose/ui/graphics/ImageBitmap;Landroidx/compose/runtime/Composer;II)V
-HSPLcom/android/credentialmanager/common/ui/EntryKt;->Entry(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function0;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroidx/compose/ui/graphics/ImageBitmap;ZLandroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/ui/graphics/painter/Painter;Ljava/lang/String;ZZLkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;III)V
-HSPLcom/android/credentialmanager/common/ui/EntryKt;->MoreOptionTopAppBar-TDGSqEk(Ljava/lang/String;Lkotlin/jvm/functions/Function0;FLandroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/common/ui/EntryKt;->access$autoMirrored(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
-HSPLcom/android/credentialmanager/common/ui/EntryKt;->autoMirrored(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier;
-HSPLcom/android/credentialmanager/common/ui/SectionHeaderKt;->CredentialListSectionHeader(Ljava/lang/String;ZLandroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/common/ui/SectionHeaderKt;->InternalSectionHeader-3IgeMak(Ljava/lang/String;JZLandroidx/compose/runtime/Composer;II)V
-HSPLcom/android/credentialmanager/common/ui/SnackBarKt$Snackbar$1$2$1;-><init>(Ljava/lang/String;ILkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;)V
-HSPLcom/android/credentialmanager/common/ui/SnackBarKt$Snackbar$1$2$1;->invoke(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/common/ui/SnackBarKt$Snackbar$1$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/ui/SnackBarKt$Snackbar$1;-><init>(Lkotlin/jvm/functions/Function0;ILjava/lang/String;Lkotlin/jvm/functions/Function2;)V
-HSPLcom/android/credentialmanager/common/ui/SnackBarKt$Snackbar$1;->invoke(Landroidx/compose/foundation/layout/BoxWithConstraintsScope;Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/common/ui/SnackBarKt$Snackbar$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/ui/SnackBarKt$Snackbar$2;-><init>(ZLandroidx/compose/ui/platform/AccessibilityManager;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V
-HSPLcom/android/credentialmanager/common/ui/SnackBarKt$Snackbar$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLcom/android/credentialmanager/common/ui/SnackBarKt$Snackbar$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/ui/SnackBarKt;->Snackbar(Ljava/lang/String;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;ZLandroidx/compose/runtime/Composer;II)V
-HSPLcom/android/credentialmanager/common/ui/SystemUiControllerUtilsKt$setBottomSheetSystemBarsColor$1;-><init>(Lcom/android/compose/SystemUiController;I)V
-HSPLcom/android/credentialmanager/common/ui/SystemUiControllerUtilsKt;->setBottomSheetSystemBarsColor(Lcom/android/compose/SystemUiController;Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/common/ui/SystemUiControllerUtilsKt;->setTransparentSystemBarsColor(Lcom/android/compose/SystemUiController;Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/common/ui/TextsKt$BodySmallText$1;-><clinit>()V
-HSPLcom/android/credentialmanager/common/ui/TextsKt$BodySmallText$1;-><init>()V
-HSPLcom/android/credentialmanager/common/ui/TextsKt$BodySmallText$1;->invoke(Landroidx/compose/ui/text/TextLayoutResult;)V
-HSPLcom/android/credentialmanager/common/ui/TextsKt$BodySmallText$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/ui/TextsKt$SmallTitleText$1;-><clinit>()V
-HSPLcom/android/credentialmanager/common/ui/TextsKt$SmallTitleText$1;-><init>()V
-HSPLcom/android/credentialmanager/common/ui/TextsKt$SmallTitleText$1;->invoke(Landroidx/compose/ui/text/TextLayoutResult;)V
-HSPLcom/android/credentialmanager/common/ui/TextsKt$SmallTitleText$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/common/ui/TextsKt$SnackbarActionText$1;-><init>(Ljava/lang/String;Landroidx/compose/ui/Modifier;II)V
-HSPLcom/android/credentialmanager/common/ui/TextsKt$SnackbarContentText$1;-><init>(Ljava/lang/String;Landroidx/compose/ui/Modifier;II)V
-HSPLcom/android/credentialmanager/common/ui/TextsKt;->BodySmallText(Ljava/lang/String;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V
-HSPLcom/android/credentialmanager/common/ui/TextsKt;->LargeTitleText(Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V
-HSPLcom/android/credentialmanager/common/ui/TextsKt;->SectionHeaderText-FNF3uiM(Ljava/lang/String;Landroidx/compose/ui/Modifier;JLandroidx/compose/runtime/Composer;II)V
-HSPLcom/android/credentialmanager/common/ui/TextsKt;->SmallTitleText(Ljava/lang/String;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V
-HSPLcom/android/credentialmanager/common/ui/TextsKt;->SnackbarActionText(Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V
-HSPLcom/android/credentialmanager/common/ui/TextsKt;->SnackbarContentText(Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V
-HSPLcom/android/credentialmanager/getflow/ActionEntryInfo;-><clinit>()V
-HSPLcom/android/credentialmanager/getflow/ActionEntryInfo;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/PendingIntent;Landroid/content/Intent;Ljava/lang/String;Landroid/graphics/drawable/Drawable;Ljava/lang/String;)V
-HSPLcom/android/credentialmanager/getflow/ActionEntryInfo;->getIcon()Landroid/graphics/drawable/Drawable;
-HSPLcom/android/credentialmanager/getflow/ActionEntryInfo;->getSubTitle()Ljava/lang/String;
-HSPLcom/android/credentialmanager/getflow/ActionEntryInfo;->getTitle()Ljava/lang/String;
-HSPLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt$lambda-1$1;-><clinit>()V
-HSPLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt$lambda-1$1;-><init>()V
-HSPLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt$lambda-2$1;-><clinit>()V
-HSPLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt$lambda-2$1;-><init>()V
-HSPLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt$lambda-3$1;-><clinit>()V
-HSPLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt$lambda-3$1;-><init>()V
-HSPLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt$lambda-3$1;->invoke(Landroidx/compose/foundation/layout/RowScope;Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt$lambda-3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt;-><clinit>()V
-HSPLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt;-><init>()V
-HSPLcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt;->getLambda-3$frameworks__base__packages__CredentialManager__android_common__CredentialManager()Lkotlin/jvm/functions/Function3;
-HSPLcom/android/credentialmanager/getflow/CredentialEntryInfoComparatorByTypeThenTimestamp;-><init>()V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$ActionChips$2;-><init>(Ljava/util/List;Lkotlin/jvm/functions/Function1;I)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$ActionChips$2;->invoke(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$ActionChips$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$ActionChips$3;-><init>(Ljava/util/List;Lkotlin/jvm/functions/Function1;ZI)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$ActionEntryRow$1;-><init>(Lkotlin/jvm/functions/Function1;Lcom/android/credentialmanager/getflow/ActionEntryInfo;)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$1;-><init>(Lkotlin/jvm/functions/Function0;I)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$2$3;-><init>(Lcom/android/credentialmanager/getflow/RemoteEntryInfo;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/Ref$BooleanRef;I)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$2$3;->invoke(Landroidx/compose/foundation/lazy/LazyItemScope;Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$2$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$2$4;-><init>(Ljava/util/List;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/Ref$BooleanRef;I)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$2$4;->invoke(Landroidx/compose/foundation/lazy/LazyItemScope;Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$2$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$2$invoke$$inlined$items$default$1;-><clinit>()V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$2$invoke$$inlined$items$default$1;-><init>()V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$2$invoke$$inlined$items$default$3;-><init>(Lkotlin/jvm/functions/Function1;Ljava/util/List;)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$2$invoke$$inlined$items$default$4;-><init>(Ljava/util/List;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/Ref$BooleanRef;I)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$2;-><init>(Ljava/util/List;Ljava/util/List;Lcom/android/credentialmanager/getflow/ProviderDisplayInfo;Lkotlin/jvm/functions/Function1;ILjava/util/List;)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$2;->invoke(Landroidx/compose/foundation/lazy/LazyListScope;)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$10;-><init>(Lcom/android/credentialmanager/CredentialSelectorViewModel;Lcom/android/credentialmanager/getflow/GetCredentialUiState;Landroidx/activity/compose/ManagedActivityResultLauncher;I)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$1;-><init>(Ljava/lang/Object;)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$1;->invoke(Z)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$2;-><init>(Ljava/lang/Object;)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$2;->invoke()Ljava/lang/Object;
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$2;->invoke()V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$3;-><init>(Lcom/android/credentialmanager/CredentialSelectorViewModel;)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$3;->invoke(Lcom/android/internal/logging/UiEventLogger$UiEventEnum;Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$7;-><init>(Ljava/lang/Object;)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$8;-><init>(Ljava/lang/Object;)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$8;->invoke()Ljava/lang/Object;
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$8;->invoke()V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9$5;-><init>(Ljava/lang/Object;)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9$6;-><init>(Ljava/lang/Object;)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9$6;->invoke()Ljava/lang/Object;
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9$6;->invoke()V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9$8;-><init>(Ljava/lang/Object;)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9$9;-><init>(Lcom/android/credentialmanager/CredentialSelectorViewModel;)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9$9;->invoke(Lcom/android/internal/logging/UiEventLogger$UiEventEnum;Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9$9;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9$WhenMappings;-><clinit>()V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9;-><init>(Lcom/android/credentialmanager/CredentialSelectorViewModel;Lcom/android/credentialmanager/getflow/GetCredentialUiState;Landroidx/activity/compose/ManagedActivityResultLauncher;)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9;->invoke(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$RemoteCredentialSnackBarScreen$1$1$1;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$RemoteCredentialSnackBarScreen$1$1$1;->invoke()Ljava/lang/Object;
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$RemoteCredentialSnackBarScreen$1$1$1;->invoke()V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$RemoteCredentialSnackBarScreen$1;-><init>(Lkotlin/jvm/functions/Function1;I)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$RemoteCredentialSnackBarScreen$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$RemoteCredentialSnackBarScreen$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$RemoteCredentialSnackBarScreen$2;-><init>(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;I)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$RemoteEntryCard$1$1$1$1;-><init>(Lkotlin/jvm/functions/Function1;Lcom/android/credentialmanager/getflow/RemoteEntryInfo;)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$RemoteEntryCard$1;-><init>(Lkotlin/jvm/functions/Function1;Lcom/android/credentialmanager/getflow/RemoteEntryInfo;I)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$RemoteEntryCard$1;->invoke(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$RemoteEntryCard$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$RemoteEntryCard$2;-><init>(Lcom/android/credentialmanager/getflow/RemoteEntryInfo;Lkotlin/jvm/functions/Function1;ZI)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt;->ActionChips(Ljava/util/List;Lkotlin/jvm/functions/Function1;ZLandroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt;->ActionEntryRow(Lcom/android/credentialmanager/getflow/ActionEntryInfo;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt;->AllSignInOptionCard(Ljava/util/List;Lcom/android/credentialmanager/getflow/ProviderDisplayInfo;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt;->GetCredentialScreen(Lcom/android/credentialmanager/CredentialSelectorViewModel;Lcom/android/credentialmanager/getflow/GetCredentialUiState;Landroidx/activity/compose/ManagedActivityResultLauncher;Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt;->RemoteCredentialSnackBarScreen(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialComponentsKt;->RemoteEntryCard(Lcom/android/credentialmanager/getflow/RemoteEntryInfo;Lkotlin/jvm/functions/Function1;ZLandroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialUiState;-><clinit>()V
-HSPLcom/android/credentialmanager/getflow/GetCredentialUiState;-><init>(Ljava/util/List;Lcom/android/credentialmanager/getflow/RequestDisplayInfo;Lcom/android/credentialmanager/getflow/ProviderDisplayInfo;Lcom/android/credentialmanager/getflow/GetScreenState;Lcom/android/credentialmanager/common/BaseEntry;Z)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialUiState;-><init>(Ljava/util/List;Lcom/android/credentialmanager/getflow/RequestDisplayInfo;Lcom/android/credentialmanager/getflow/ProviderDisplayInfo;Lcom/android/credentialmanager/getflow/GetScreenState;Lcom/android/credentialmanager/common/BaseEntry;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLcom/android/credentialmanager/getflow/GetCredentialUiState;->copy$default(Lcom/android/credentialmanager/getflow/GetCredentialUiState;Ljava/util/List;Lcom/android/credentialmanager/getflow/RequestDisplayInfo;Lcom/android/credentialmanager/getflow/ProviderDisplayInfo;Lcom/android/credentialmanager/getflow/GetScreenState;Lcom/android/credentialmanager/common/BaseEntry;ZILjava/lang/Object;)Lcom/android/credentialmanager/getflow/GetCredentialUiState;
-HSPLcom/android/credentialmanager/getflow/GetCredentialUiState;->copy(Ljava/util/List;Lcom/android/credentialmanager/getflow/RequestDisplayInfo;Lcom/android/credentialmanager/getflow/ProviderDisplayInfo;Lcom/android/credentialmanager/getflow/GetScreenState;Lcom/android/credentialmanager/common/BaseEntry;Z)Lcom/android/credentialmanager/getflow/GetCredentialUiState;
-HSPLcom/android/credentialmanager/getflow/GetCredentialUiState;->equals(Ljava/lang/Object;)Z
-HSPLcom/android/credentialmanager/getflow/GetCredentialUiState;->getCurrentScreenState()Lcom/android/credentialmanager/getflow/GetScreenState;
-HSPLcom/android/credentialmanager/getflow/GetCredentialUiState;->getProviderDisplayInfo()Lcom/android/credentialmanager/getflow/ProviderDisplayInfo;
-HSPLcom/android/credentialmanager/getflow/GetCredentialUiState;->getProviderInfoList()Ljava/util/List;
-HSPLcom/android/credentialmanager/getflow/GetCredentialUiState;->getRequestDisplayInfo()Lcom/android/credentialmanager/getflow/RequestDisplayInfo;
-HSPLcom/android/credentialmanager/getflow/GetCredentialUiState;->isNoAccount()Z
-HSPLcom/android/credentialmanager/getflow/GetModelKt$toProviderDisplayInfo$$inlined$compareByDescending$1;-><init>()V
-HSPLcom/android/credentialmanager/getflow/GetModelKt;->access$toActiveEntry(Lcom/android/credentialmanager/getflow/ProviderDisplayInfo;)Lcom/android/credentialmanager/common/BaseEntry;
-HSPLcom/android/credentialmanager/getflow/GetModelKt;->access$toGetScreenState(Lcom/android/credentialmanager/getflow/ProviderDisplayInfo;)Lcom/android/credentialmanager/getflow/GetScreenState;
-HSPLcom/android/credentialmanager/getflow/GetModelKt;->access$toProviderDisplayInfo(Ljava/util/List;)Lcom/android/credentialmanager/getflow/ProviderDisplayInfo;
-HSPLcom/android/credentialmanager/getflow/GetModelKt;->findAutoSelectEntry(Lcom/android/credentialmanager/getflow/ProviderDisplayInfo;)Lcom/android/credentialmanager/getflow/CredentialEntryInfo;
-HSPLcom/android/credentialmanager/getflow/GetModelKt;->hasContentToDisplay(Lcom/android/credentialmanager/getflow/GetCredentialUiState;)Z
-HSPLcom/android/credentialmanager/getflow/GetModelKt;->toActiveEntry(Lcom/android/credentialmanager/getflow/ProviderDisplayInfo;)Lcom/android/credentialmanager/common/BaseEntry;
-HSPLcom/android/credentialmanager/getflow/GetModelKt;->toGetScreenState(Lcom/android/credentialmanager/getflow/ProviderDisplayInfo;)Lcom/android/credentialmanager/getflow/GetScreenState;
-HSPLcom/android/credentialmanager/getflow/GetModelKt;->toProviderDisplayInfo(Ljava/util/List;)Lcom/android/credentialmanager/getflow/ProviderDisplayInfo;
-HSPLcom/android/credentialmanager/getflow/GetScreenState;->$values()[Lcom/android/credentialmanager/getflow/GetScreenState;
-HSPLcom/android/credentialmanager/getflow/GetScreenState;-><clinit>()V
-HSPLcom/android/credentialmanager/getflow/GetScreenState;-><init>(Ljava/lang/String;I)V
-HSPLcom/android/credentialmanager/getflow/ProviderDisplayInfo;-><clinit>()V
-HSPLcom/android/credentialmanager/getflow/ProviderDisplayInfo;-><init>(Ljava/util/List;Ljava/util/List;Lcom/android/credentialmanager/getflow/RemoteEntryInfo;)V
-HSPLcom/android/credentialmanager/getflow/ProviderDisplayInfo;->equals(Ljava/lang/Object;)Z
-HSPLcom/android/credentialmanager/getflow/ProviderDisplayInfo;->getAuthenticationEntryList()Ljava/util/List;
-HSPLcom/android/credentialmanager/getflow/ProviderDisplayInfo;->getRemoteEntry()Lcom/android/credentialmanager/getflow/RemoteEntryInfo;
-HSPLcom/android/credentialmanager/getflow/ProviderDisplayInfo;->getSortedUserNameToCredentialEntryList()Ljava/util/List;
-HSPLcom/android/credentialmanager/getflow/ProviderInfo;-><clinit>()V
-HSPLcom/android/credentialmanager/getflow/ProviderInfo;-><init>(Ljava/lang/String;Landroid/graphics/drawable/Drawable;Ljava/lang/String;Ljava/util/List;Ljava/util/List;Lcom/android/credentialmanager/getflow/RemoteEntryInfo;Ljava/util/List;)V
-HSPLcom/android/credentialmanager/getflow/ProviderInfo;->getActionEntryList()Ljava/util/List;
-HSPLcom/android/credentialmanager/getflow/ProviderInfo;->getAuthenticationEntryList()Ljava/util/List;
-HSPLcom/android/credentialmanager/getflow/ProviderInfo;->getCredentialEntryList()Ljava/util/List;
-HSPLcom/android/credentialmanager/getflow/ProviderInfo;->getRemoteEntry()Lcom/android/credentialmanager/getflow/RemoteEntryInfo;
-HSPLcom/android/credentialmanager/getflow/RemoteEntryInfo;-><clinit>()V
-HSPLcom/android/credentialmanager/getflow/RemoteEntryInfo;-><init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/PendingIntent;Landroid/content/Intent;)V
-HSPLcom/android/credentialmanager/getflow/RequestDisplayInfo;-><clinit>()V
-HSPLcom/android/credentialmanager/getflow/RequestDisplayInfo;-><init>(Ljava/lang/String;ZZLcom/android/credentialmanager/getflow/TopBrandingContent;)V
-HSPLcom/android/credentialmanager/getflow/RequestDisplayInfo;->equals(Ljava/lang/Object;)Z
-HSPLcom/android/credentialmanager/getflow/RequestDisplayInfo;->getPreferImmediatelyAvailableCredentials()Z
-HSPLcom/android/credentialmanager/logging/GetCredentialEvent;->$values()[Lcom/android/credentialmanager/logging/GetCredentialEvent;
-HSPLcom/android/credentialmanager/logging/GetCredentialEvent;-><clinit>()V
-HSPLcom/android/credentialmanager/logging/GetCredentialEvent;-><init>(Ljava/lang/String;II)V
-HSPLcom/android/credentialmanager/logging/GetCredentialEvent;->getId()I
-HSPLcom/android/credentialmanager/logging/LifecycleEvent;->$values()[Lcom/android/credentialmanager/logging/LifecycleEvent;
-HSPLcom/android/credentialmanager/logging/LifecycleEvent;-><clinit>()V
-HSPLcom/android/credentialmanager/logging/LifecycleEvent;-><init>(Ljava/lang/String;II)V
-HSPLcom/android/credentialmanager/logging/LifecycleEvent;->getId()I
-HSPLcom/android/credentialmanager/logging/UIMetrics$log$1;-><init>(Lcom/android/credentialmanager/logging/UIMetrics;Lcom/android/internal/logging/UiEventLogger$UiEventEnum;Lcom/android/internal/logging/InstanceId;Lkotlin/coroutines/Continuation;)V
-HSPLcom/android/credentialmanager/logging/UIMetrics$log$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLcom/android/credentialmanager/logging/UIMetrics$log$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/logging/UIMetrics$log$3;-><init>(Lcom/android/credentialmanager/logging/UIMetrics;Lcom/android/internal/logging/UiEventLogger$UiEventEnum;Ljava/lang/String;Lcom/android/internal/logging/InstanceId;Lkotlin/coroutines/Continuation;)V
-HSPLcom/android/credentialmanager/logging/UIMetrics$log$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLcom/android/credentialmanager/logging/UIMetrics$log$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/logging/UIMetrics;-><clinit>()V
-HSPLcom/android/credentialmanager/logging/UIMetrics;-><init>()V
-HSPLcom/android/credentialmanager/logging/UIMetrics;->access$getMUiEventLogger$p(Lcom/android/credentialmanager/logging/UIMetrics;)Lcom/android/internal/logging/UiEventLogger;
-HSPLcom/android/credentialmanager/logging/UIMetrics;->log(Lcom/android/internal/logging/UiEventLogger$UiEventEnum;Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/logging/UIMetrics;->log(Lcom/android/internal/logging/UiEventLogger$UiEventEnum;Ljava/lang/String;Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/logging/UIMetrics;->logNormal(Lcom/android/internal/logging/UiEventLogger$UiEventEnum;Ljava/lang/String;)V
-HSPLcom/android/credentialmanager/ui/theme/AndroidColorScheme$Companion;-><init>()V
-HSPLcom/android/credentialmanager/ui/theme/AndroidColorScheme$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLcom/android/credentialmanager/ui/theme/AndroidColorScheme$Companion;->getColor-WaAFU9c(Landroid/content/Context;I)J
-HSPLcom/android/credentialmanager/ui/theme/AndroidColorScheme;-><clinit>()V
-HSPLcom/android/credentialmanager/ui/theme/AndroidColorScheme;-><init>(Landroid/content/Context;)V
-HSPLcom/android/credentialmanager/ui/theme/AndroidColorScheme;->getColorOnSurface-0d7_KjU()J
-HSPLcom/android/credentialmanager/ui/theme/AndroidColorScheme;->getColorOnSurfaceVariant-0d7_KjU()J
-HSPLcom/android/credentialmanager/ui/theme/AndroidColorScheme;->getColorSurfaceBright-0d7_KjU()J
-HSPLcom/android/credentialmanager/ui/theme/AndroidColorScheme;->getColorSurfaceContainerHigh-0d7_KjU()J
-HSPLcom/android/credentialmanager/ui/theme/AndroidColorSchemeKt$LocalAndroidColorScheme$1;-><clinit>()V
-HSPLcom/android/credentialmanager/ui/theme/AndroidColorSchemeKt$LocalAndroidColorScheme$1;-><init>()V
-HSPLcom/android/credentialmanager/ui/theme/AndroidColorSchemeKt;-><clinit>()V
-HSPLcom/android/credentialmanager/ui/theme/AndroidColorSchemeKt;->getLocalAndroidColorScheme()Landroidx/compose/runtime/ProvidableCompositionLocal;
-HSPLcom/android/credentialmanager/ui/theme/EntryShape;-><clinit>()V
-HSPLcom/android/credentialmanager/ui/theme/EntryShape;-><init>()V
-HSPLcom/android/credentialmanager/ui/theme/EntryShape;->getFullSmallRoundedCorner()Landroidx/compose/foundation/shape/RoundedCornerShape;
-HSPLcom/android/credentialmanager/ui/theme/EntryShape;->getTopRoundedCorner()Landroidx/compose/foundation/shape/RoundedCornerShape;
-HSPLcom/android/credentialmanager/ui/theme/PlatformThemeKt$PlatformTheme$1$1;-><init>(Lkotlin/jvm/functions/Function2;I)V
-HSPLcom/android/credentialmanager/ui/theme/PlatformThemeKt$PlatformTheme$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/ui/theme/PlatformThemeKt$PlatformTheme$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/ui/theme/PlatformThemeKt$PlatformTheme$1;-><init>(Lcom/android/credentialmanager/ui/theme/AndroidColorScheme;Lkotlin/jvm/functions/Function2;I)V
-HSPLcom/android/credentialmanager/ui/theme/PlatformThemeKt$PlatformTheme$1;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/ui/theme/PlatformThemeKt$PlatformTheme$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/ui/theme/PlatformThemeKt$PlatformTheme$2;-><init>(ZLkotlin/jvm/functions/Function2;II)V
-HSPLcom/android/credentialmanager/ui/theme/PlatformThemeKt$PlatformTheme$2;->invoke(Landroidx/compose/runtime/Composer;I)V
-HSPLcom/android/credentialmanager/ui/theme/PlatformThemeKt$PlatformTheme$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLcom/android/credentialmanager/ui/theme/PlatformThemeKt;->PlatformTheme(ZLkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
-HSPLcom/android/credentialmanager/ui/theme/ShapeKt;-><clinit>()V
-HSPLcom/android/credentialmanager/ui/theme/ShapeKt;->getShapes()Landroidx/compose/material3/Shapes;
-HSPLcom/android/credentialmanager/ui/theme/typography/PlatformTypographyKt;->platformTypography(Lcom/android/credentialmanager/ui/theme/typography/TypographyTokens;)Landroidx/compose/material3/Typography;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;-><init>(Lcom/android/credentialmanager/ui/theme/typography/TypefaceTokens;)V
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getBodyLargeFont()Landroidx/compose/ui/text/font/FontFamily;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getBodyLargeLineHeight-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getBodyLargeSize-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getBodyLargeTracking-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getBodyLargeWeight()Landroidx/compose/ui/text/font/FontWeight;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getBodyMediumFont()Landroidx/compose/ui/text/font/FontFamily;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getBodyMediumLineHeight-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getBodyMediumSize-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getBodyMediumTracking-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getBodyMediumWeight()Landroidx/compose/ui/text/font/FontWeight;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getBodySmallFont()Landroidx/compose/ui/text/font/FontFamily;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getBodySmallLineHeight-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getBodySmallSize-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getBodySmallTracking-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getBodySmallWeight()Landroidx/compose/ui/text/font/FontWeight;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getDisplayLargeFont()Landroidx/compose/ui/text/font/FontFamily;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getDisplayLargeLineHeight-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getDisplayLargeSize-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getDisplayLargeTracking-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getDisplayLargeWeight()Landroidx/compose/ui/text/font/FontWeight;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getDisplayMediumFont()Landroidx/compose/ui/text/font/FontFamily;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getDisplayMediumLineHeight-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getDisplayMediumSize-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getDisplayMediumTracking-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getDisplayMediumWeight()Landroidx/compose/ui/text/font/FontWeight;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getDisplaySmallFont()Landroidx/compose/ui/text/font/FontFamily;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getDisplaySmallLineHeight-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getDisplaySmallSize-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getDisplaySmallTracking-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getDisplaySmallWeight()Landroidx/compose/ui/text/font/FontWeight;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getHeadlineLargeFont()Landroidx/compose/ui/text/font/FontFamily;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getHeadlineLargeLineHeight-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getHeadlineLargeSize-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getHeadlineLargeTracking-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getHeadlineLargeWeight()Landroidx/compose/ui/text/font/FontWeight;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getHeadlineMediumFont()Landroidx/compose/ui/text/font/FontFamily;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getHeadlineMediumLineHeight-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getHeadlineMediumSize-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getHeadlineMediumTracking-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getHeadlineMediumWeight()Landroidx/compose/ui/text/font/FontWeight;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getHeadlineSmallFont()Landroidx/compose/ui/text/font/FontFamily;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getHeadlineSmallLineHeight-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getHeadlineSmallSize-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getHeadlineSmallTracking-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getHeadlineSmallWeight()Landroidx/compose/ui/text/font/FontWeight;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getLabelLargeFont()Landroidx/compose/ui/text/font/FontFamily;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getLabelLargeLineHeight-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getLabelLargeSize-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getLabelLargeTracking-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getLabelLargeWeight()Landroidx/compose/ui/text/font/FontWeight;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getLabelMediumFont()Landroidx/compose/ui/text/font/FontFamily;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getLabelMediumLineHeight-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getLabelMediumSize-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getLabelMediumTracking-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getLabelMediumWeight()Landroidx/compose/ui/text/font/FontWeight;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getLabelSmallFont()Landroidx/compose/ui/text/font/FontFamily;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getLabelSmallLineHeight-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getLabelSmallSize-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getLabelSmallTracking-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getLabelSmallWeight()Landroidx/compose/ui/text/font/FontWeight;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getTitleLargeFont()Landroidx/compose/ui/text/font/FontFamily;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getTitleLargeLineHeight-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getTitleLargeSize-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getTitleLargeTracking-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getTitleLargeWeight()Landroidx/compose/ui/text/font/FontWeight;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getTitleMediumFont()Landroidx/compose/ui/text/font/FontFamily;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getTitleMediumLineHeight-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getTitleMediumSize-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getTitleMediumTracking-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getTitleMediumWeight()Landroidx/compose/ui/text/font/FontWeight;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getTitleSmallFont()Landroidx/compose/ui/text/font/FontFamily;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getTitleSmallLineHeight-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getTitleSmallSize-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getTitleSmallTracking-XSAIIZE()J
-HSPLcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;->getTitleSmallWeight()Landroidx/compose/ui/text/font/FontWeight;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceNames$Companion;-><init>()V
-HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceNames$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceNames$Companion;->get(Landroid/content/Context;)Lcom/android/credentialmanager/ui/theme/typography/TypefaceNames;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceNames$Companion;->getTypefaceName(Landroid/content/Context;Lcom/android/credentialmanager/ui/theme/typography/TypefaceNames$Config;)Ljava/lang/String;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceNames$Config;->$values()[Lcom/android/credentialmanager/ui/theme/typography/TypefaceNames$Config;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceNames$Config;-><clinit>()V
-HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceNames$Config;-><init>(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
-HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceNames$Config;->getConfigName()Ljava/lang/String;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceNames;-><clinit>()V
-HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceNames;-><init>(Ljava/lang/String;Ljava/lang/String;)V
-HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceNames;-><init>(Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceNames;->equals(Ljava/lang/Object;)Z
-HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceNames;->getBrand()Ljava/lang/String;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceNames;->getPlain()Ljava/lang/String;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceTokens$Companion;-><init>()V
-HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceTokens$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceTokens$Companion;->getWeightMedium()Landroidx/compose/ui/text/font/FontWeight;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceTokens$Companion;->getWeightRegular()Landroidx/compose/ui/text/font/FontWeight;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceTokens;-><clinit>()V
-HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceTokens;-><init>(Lcom/android/credentialmanager/ui/theme/typography/TypefaceNames;)V
-HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceTokens;->access$getWeightMedium$cp()Landroidx/compose/ui/text/font/FontWeight;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceTokens;->access$getWeightRegular$cp()Landroidx/compose/ui/text/font/FontWeight;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceTokens;->getBrand()Landroidx/compose/ui/text/font/FontFamily;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypefaceTokens;->getPlain()Landroidx/compose/ui/text/font/FontFamily;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypographyTokens;-><init>(Lcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;)V
-HSPLcom/android/credentialmanager/ui/theme/typography/TypographyTokens;->getBodyLarge()Landroidx/compose/ui/text/TextStyle;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypographyTokens;->getBodyMedium()Landroidx/compose/ui/text/TextStyle;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypographyTokens;->getBodySmall()Landroidx/compose/ui/text/TextStyle;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypographyTokens;->getDisplayLarge()Landroidx/compose/ui/text/TextStyle;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypographyTokens;->getDisplayMedium()Landroidx/compose/ui/text/TextStyle;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypographyTokens;->getDisplaySmall()Landroidx/compose/ui/text/TextStyle;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypographyTokens;->getHeadlineLarge()Landroidx/compose/ui/text/TextStyle;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypographyTokens;->getHeadlineMedium()Landroidx/compose/ui/text/TextStyle;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypographyTokens;->getHeadlineSmall()Landroidx/compose/ui/text/TextStyle;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypographyTokens;->getLabelLarge()Landroidx/compose/ui/text/TextStyle;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypographyTokens;->getLabelMedium()Landroidx/compose/ui/text/TextStyle;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypographyTokens;->getLabelSmall()Landroidx/compose/ui/text/TextStyle;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypographyTokens;->getTitleLarge()Landroidx/compose/ui/text/TextStyle;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypographyTokens;->getTitleMedium()Landroidx/compose/ui/text/TextStyle;
-HSPLcom/android/credentialmanager/ui/theme/typography/TypographyTokens;->getTitleSmall()Landroidx/compose/ui/text/TextStyle;
-HSPLkotlin/LazyKt;->lazy(Lkotlin/LazyThreadSafetyMode;Lkotlin/jvm/functions/Function0;)Lkotlin/Lazy;
-HSPLkotlin/LazyKt;->lazy(Lkotlin/jvm/functions/Function0;)Lkotlin/Lazy;
-HSPLkotlin/LazyKt__LazyJVMKt$WhenMappings;-><clinit>()V
-HSPLkotlin/LazyKt__LazyJVMKt;->lazy(Lkotlin/LazyThreadSafetyMode;Lkotlin/jvm/functions/Function0;)Lkotlin/Lazy;
-HSPLkotlin/LazyKt__LazyJVMKt;->lazy(Lkotlin/jvm/functions/Function0;)Lkotlin/Lazy;
-HSPLkotlin/LazyThreadSafetyMode;->$values()[Lkotlin/LazyThreadSafetyMode;
-HSPLkotlin/LazyThreadSafetyMode;-><clinit>()V
-HSPLkotlin/LazyThreadSafetyMode;-><init>(Ljava/lang/String;I)V
-HSPLkotlin/LazyThreadSafetyMode;->values()[Lkotlin/LazyThreadSafetyMode;
-HSPLkotlin/Pair;-><init>(Ljava/lang/Object;Ljava/lang/Object;)V
-HSPLkotlin/Pair;->component1()Ljava/lang/Object;
-HSPLkotlin/Pair;->component2()Ljava/lang/Object;
-HSPLkotlin/Pair;->getFirst()Ljava/lang/Object;
-HSPLkotlin/Pair;->getSecond()Ljava/lang/Object;
-HSPLkotlin/Result$Companion;-><init>()V
-HSPLkotlin/Result$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLkotlin/Result$Failure;-><init>(Ljava/lang/Throwable;)V
-HSPLkotlin/Result;-><clinit>()V
-HSPLkotlin/Result;->constructor-impl(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlin/Result;->exceptionOrNull-impl(Ljava/lang/Object;)Ljava/lang/Throwable;
-HSPLkotlin/Result;->isFailure-impl(Ljava/lang/Object;)Z
-HSPLkotlin/ResultKt;->createFailure(Ljava/lang/Throwable;)Ljava/lang/Object;
-HSPLkotlin/ResultKt;->throwOnFailure(Ljava/lang/Object;)V
-HSPLkotlin/SynchronizedLazyImpl;-><init>(Lkotlin/jvm/functions/Function0;Ljava/lang/Object;)V
-HSPLkotlin/SynchronizedLazyImpl;-><init>(Lkotlin/jvm/functions/Function0;Ljava/lang/Object;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLkotlin/SynchronizedLazyImpl;->getValue()Ljava/lang/Object;
-HSPLkotlin/Triple;-><init>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
-HSPLkotlin/Triple;->component1()Ljava/lang/Object;
-HSPLkotlin/Triple;->component2()Ljava/lang/Object;
-HSPLkotlin/TuplesKt;->to(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
-HSPLkotlin/ULong$Companion;-><init>()V
-HSPLkotlin/ULong$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLkotlin/ULong;-><clinit>()V
-HSPLkotlin/ULong;->constructor-impl(J)J
-HSPLkotlin/UNINITIALIZED_VALUE;-><clinit>()V
-HSPLkotlin/UNINITIALIZED_VALUE;-><init>()V
-HSPLkotlin/Unit;-><clinit>()V
-HSPLkotlin/Unit;-><init>()V
-HSPLkotlin/UnsafeLazyImpl;-><init>(Lkotlin/jvm/functions/Function0;)V
-HSPLkotlin/UnsafeLazyImpl;->getValue()Ljava/lang/Object;
-HSPLkotlin/UnsignedKt;->ulongToDouble(J)D
-HSPLkotlin/collections/AbstractCollection;-><init>()V
-HSPLkotlin/collections/AbstractCollection;->isEmpty()Z
-HSPLkotlin/collections/AbstractCollection;->size()I
-HSPLkotlin/collections/AbstractList$Companion;-><init>()V
-HSPLkotlin/collections/AbstractList$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLkotlin/collections/AbstractList$Companion;->checkElementIndex$kotlin_stdlib(II)V
-HSPLkotlin/collections/AbstractList;-><clinit>()V
-HSPLkotlin/collections/AbstractList;-><init>()V
-HSPLkotlin/collections/AbstractMap$Companion;-><init>()V
-HSPLkotlin/collections/AbstractMap$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLkotlin/collections/AbstractMap;-><clinit>()V
-HSPLkotlin/collections/AbstractMap;-><init>()V
-HSPLkotlin/collections/AbstractMap;->containsEntry$kotlin_stdlib(Ljava/util/Map$Entry;)Z
-HSPLkotlin/collections/AbstractMap;->entrySet()Ljava/util/Set;
-HSPLkotlin/collections/AbstractMap;->equals(Ljava/lang/Object;)Z
-HSPLkotlin/collections/AbstractMap;->size()I
-HSPLkotlin/collections/AbstractMutableList;-><init>()V
-HSPLkotlin/collections/AbstractMutableList;->remove(I)Ljava/lang/Object;
-HSPLkotlin/collections/AbstractMutableList;->size()I
-HSPLkotlin/collections/AbstractMutableMap;-><init>()V
-HSPLkotlin/collections/AbstractMutableMap;->size()I
-HSPLkotlin/collections/AbstractSet$Companion;-><init>()V
-HSPLkotlin/collections/AbstractSet$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLkotlin/collections/AbstractSet$Companion;->setEquals$kotlin_stdlib(Ljava/util/Set;Ljava/util/Set;)Z
-HSPLkotlin/collections/AbstractSet;-><clinit>()V
-HSPLkotlin/collections/AbstractSet;-><init>()V
-HSPLkotlin/collections/AbstractSet;->equals(Ljava/lang/Object;)Z
-HSPLkotlin/collections/ArrayDeque$Companion;-><init>()V
-HSPLkotlin/collections/ArrayDeque$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLkotlin/collections/ArrayDeque$Companion;->newCapacity$kotlin_stdlib(II)I
-HSPLkotlin/collections/ArrayDeque;-><clinit>()V
-HSPLkotlin/collections/ArrayDeque;-><init>()V
-HSPLkotlin/collections/ArrayDeque;->add(Ljava/lang/Object;)Z
-HSPLkotlin/collections/ArrayDeque;->addLast(Ljava/lang/Object;)V
-HSPLkotlin/collections/ArrayDeque;->copyElements(I)V
-HSPLkotlin/collections/ArrayDeque;->ensureCapacity(I)V
-HSPLkotlin/collections/ArrayDeque;->get(I)Ljava/lang/Object;
-HSPLkotlin/collections/ArrayDeque;->getSize()I
-HSPLkotlin/collections/ArrayDeque;->incremented(I)I
-HSPLkotlin/collections/ArrayDeque;->indexOf(Ljava/lang/Object;)I
-HSPLkotlin/collections/ArrayDeque;->isEmpty()Z
-HSPLkotlin/collections/ArrayDeque;->positiveMod(I)I
-HSPLkotlin/collections/ArrayDeque;->remove(Ljava/lang/Object;)Z
-HSPLkotlin/collections/ArrayDeque;->removeAt(I)Ljava/lang/Object;
-HSPLkotlin/collections/ArrayDeque;->removeFirst()Ljava/lang/Object;
-HSPLkotlin/collections/ArrayDeque;->removeFirstOrNull()Ljava/lang/Object;
-HSPLkotlin/collections/ArrayDeque;->removeLast()Ljava/lang/Object;
-HSPLkotlin/collections/ArraysKt;->asList([Ljava/lang/Object;)Ljava/util/List;
-HSPLkotlin/collections/ArraysKt;->copyInto$default([F[FIIIILjava/lang/Object;)[F
-HSPLkotlin/collections/ArraysKt;->copyInto$default([I[IIIIILjava/lang/Object;)[I
-HSPLkotlin/collections/ArraysKt;->copyInto$default([Ljava/lang/Object;[Ljava/lang/Object;IIIILjava/lang/Object;)[Ljava/lang/Object;
-HSPLkotlin/collections/ArraysKt;->copyInto([F[FIII)[F
-HSPLkotlin/collections/ArraysKt;->copyInto([I[IIII)[I
-HSPLkotlin/collections/ArraysKt;->copyInto([Ljava/lang/Object;[Ljava/lang/Object;III)[Ljava/lang/Object;
-HSPLkotlin/collections/ArraysKt;->copyOfRange([Ljava/lang/Object;II)[Ljava/lang/Object;
-HSPLkotlin/collections/ArraysKt;->fill$default([IIIIILjava/lang/Object;)V
-HSPLkotlin/collections/ArraysKt;->fill$default([Ljava/lang/Object;Ljava/lang/Object;IIILjava/lang/Object;)V
-HSPLkotlin/collections/ArraysKt;->fill([IIII)V
-HSPLkotlin/collections/ArraysKt;->fill([Ljava/lang/Object;Ljava/lang/Object;II)V
-HSPLkotlin/collections/ArraysKt;->getLastIndex([Ljava/lang/Object;)I
-HSPLkotlin/collections/ArraysKt;->sortWith([Ljava/lang/Object;Ljava/util/Comparator;II)V
-HSPLkotlin/collections/ArraysKt__ArraysJVMKt;->copyOfRangeToIndexCheck(II)V
-HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->asList([Ljava/lang/Object;)Ljava/util/List;
-HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto$default([F[FIIIILjava/lang/Object;)[F
-HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto$default([I[IIIIILjava/lang/Object;)[I
-HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto$default([Ljava/lang/Object;[Ljava/lang/Object;IIIILjava/lang/Object;)[Ljava/lang/Object;
-HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto([F[FIII)[F
-HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto([I[IIII)[I
-HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto([Ljava/lang/Object;[Ljava/lang/Object;III)[Ljava/lang/Object;
-HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyOfRange([Ljava/lang/Object;II)[Ljava/lang/Object;
-HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->fill$default([IIIIILjava/lang/Object;)V
-HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->fill$default([Ljava/lang/Object;Ljava/lang/Object;IIILjava/lang/Object;)V
-HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->fill([IIII)V
-HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->fill([Ljava/lang/Object;Ljava/lang/Object;II)V
-HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->sortWith([Ljava/lang/Object;Ljava/util/Comparator;II)V
-HSPLkotlin/collections/ArraysKt___ArraysKt;->getLastIndex([Ljava/lang/Object;)I
-HSPLkotlin/collections/ArraysUtilJVM;->asList([Ljava/lang/Object;)Ljava/util/List;
-HSPLkotlin/collections/CollectionsKt;->addAll(Ljava/util/Collection;Ljava/lang/Iterable;)Z
-HSPLkotlin/collections/CollectionsKt;->collectionSizeOrDefault(Ljava/lang/Iterable;I)I
-HSPLkotlin/collections/CollectionsKt;->distinct(Ljava/lang/Iterable;)Ljava/util/List;
-HSPLkotlin/collections/CollectionsKt;->emptyList()Ljava/util/List;
-HSPLkotlin/collections/CollectionsKt;->first(Ljava/util/List;)Ljava/lang/Object;
-HSPLkotlin/collections/CollectionsKt;->firstOrNull(Ljava/lang/Iterable;)Ljava/lang/Object;
-HSPLkotlin/collections/CollectionsKt;->getLastIndex(Ljava/util/List;)I
-HSPLkotlin/collections/CollectionsKt;->getOrNull(Ljava/util/List;I)Ljava/lang/Object;
-HSPLkotlin/collections/CollectionsKt;->last(Ljava/util/List;)Ljava/lang/Object;
-HSPLkotlin/collections/CollectionsKt;->lastOrNull(Ljava/util/List;)Ljava/lang/Object;
-HSPLkotlin/collections/CollectionsKt;->listOf(Ljava/lang/Object;)Ljava/util/List;
-HSPLkotlin/collections/CollectionsKt;->listOf([Ljava/lang/Object;)Ljava/util/List;
-HSPLkotlin/collections/CollectionsKt;->listOfNotNull(Ljava/lang/Object;)Ljava/util/List;
-HSPLkotlin/collections/CollectionsKt;->maxOrNull(Ljava/lang/Iterable;)Ljava/lang/Float;
-HSPLkotlin/collections/CollectionsKt;->minOrNull(Ljava/lang/Iterable;)Ljava/lang/Float;
-HSPLkotlin/collections/CollectionsKt;->optimizeReadOnlyList(Ljava/util/List;)Ljava/util/List;
-HSPLkotlin/collections/CollectionsKt;->removeFirstOrNull(Ljava/util/List;)Ljava/lang/Object;
-HSPLkotlin/collections/CollectionsKt;->singleOrNull(Ljava/util/List;)Ljava/lang/Object;
-HSPLkotlin/collections/CollectionsKt;->sortWith(Ljava/util/List;Ljava/util/Comparator;)V
-HSPLkotlin/collections/CollectionsKt;->sortedWith(Ljava/lang/Iterable;Ljava/util/Comparator;)Ljava/util/List;
-HSPLkotlin/collections/CollectionsKt;->toList(Ljava/lang/Iterable;)Ljava/util/List;
-HSPLkotlin/collections/CollectionsKt;->toMutableList(Ljava/util/Collection;)Ljava/util/List;
-HSPLkotlin/collections/CollectionsKt__CollectionsJVMKt;->listOf(Ljava/lang/Object;)Ljava/util/List;
-HSPLkotlin/collections/CollectionsKt__CollectionsKt;->emptyList()Ljava/util/List;
-HSPLkotlin/collections/CollectionsKt__CollectionsKt;->getLastIndex(Ljava/util/List;)I
-HSPLkotlin/collections/CollectionsKt__CollectionsKt;->listOf([Ljava/lang/Object;)Ljava/util/List;
-HSPLkotlin/collections/CollectionsKt__CollectionsKt;->listOfNotNull(Ljava/lang/Object;)Ljava/util/List;
-HSPLkotlin/collections/CollectionsKt__CollectionsKt;->optimizeReadOnlyList(Ljava/util/List;)Ljava/util/List;
-HSPLkotlin/collections/CollectionsKt__IterablesKt;->collectionSizeOrDefault(Ljava/lang/Iterable;I)I
-HSPLkotlin/collections/CollectionsKt__MutableCollectionsJVMKt;->sortWith(Ljava/util/List;Ljava/util/Comparator;)V
-HSPLkotlin/collections/CollectionsKt__MutableCollectionsKt;->addAll(Ljava/util/Collection;Ljava/lang/Iterable;)Z
-HSPLkotlin/collections/CollectionsKt__MutableCollectionsKt;->removeFirstOrNull(Ljava/util/List;)Ljava/lang/Object;
-HSPLkotlin/collections/CollectionsKt___CollectionsKt;->distinct(Ljava/lang/Iterable;)Ljava/util/List;
-HSPLkotlin/collections/CollectionsKt___CollectionsKt;->first(Ljava/util/List;)Ljava/lang/Object;
-HSPLkotlin/collections/CollectionsKt___CollectionsKt;->firstOrNull(Ljava/lang/Iterable;)Ljava/lang/Object;
-HSPLkotlin/collections/CollectionsKt___CollectionsKt;->getOrNull(Ljava/util/List;I)Ljava/lang/Object;
-HSPLkotlin/collections/CollectionsKt___CollectionsKt;->last(Ljava/util/List;)Ljava/lang/Object;
-HSPLkotlin/collections/CollectionsKt___CollectionsKt;->lastOrNull(Ljava/util/List;)Ljava/lang/Object;
-HSPLkotlin/collections/CollectionsKt___CollectionsKt;->maxOrNull(Ljava/lang/Iterable;)Ljava/lang/Float;
-HSPLkotlin/collections/CollectionsKt___CollectionsKt;->minOrNull(Ljava/lang/Iterable;)Ljava/lang/Float;
-HSPLkotlin/collections/CollectionsKt___CollectionsKt;->singleOrNull(Ljava/util/List;)Ljava/lang/Object;
-HSPLkotlin/collections/CollectionsKt___CollectionsKt;->sortedWith(Ljava/lang/Iterable;Ljava/util/Comparator;)Ljava/util/List;
-HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toList(Ljava/lang/Iterable;)Ljava/util/List;
-HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toMutableList(Ljava/util/Collection;)Ljava/util/List;
-HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toMutableSet(Ljava/lang/Iterable;)Ljava/util/Set;
-HSPLkotlin/collections/EmptyIterator;-><clinit>()V
-HSPLkotlin/collections/EmptyIterator;-><init>()V
-HSPLkotlin/collections/EmptyIterator;->hasNext()Z
-HSPLkotlin/collections/EmptyList;-><clinit>()V
-HSPLkotlin/collections/EmptyList;-><init>()V
-HSPLkotlin/collections/EmptyList;->contains(Ljava/lang/Object;)Z
-HSPLkotlin/collections/EmptyList;->equals(Ljava/lang/Object;)Z
-HSPLkotlin/collections/EmptyList;->getSize()I
-HSPLkotlin/collections/EmptyList;->isEmpty()Z
-HSPLkotlin/collections/EmptyList;->size()I
-HSPLkotlin/collections/EmptyMap;-><clinit>()V
-HSPLkotlin/collections/EmptyMap;-><init>()V
-HSPLkotlin/collections/EmptyMap;->containsKey(Ljava/lang/Object;)Z
-HSPLkotlin/collections/EmptyMap;->entrySet()Ljava/util/Set;
-HSPLkotlin/collections/EmptyMap;->equals(Ljava/lang/Object;)Z
-HSPLkotlin/collections/EmptyMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlin/collections/EmptyMap;->get(Ljava/lang/Object;)Ljava/lang/Void;
-HSPLkotlin/collections/EmptyMap;->getEntries()Ljava/util/Set;
-HSPLkotlin/collections/EmptyMap;->getKeys()Ljava/util/Set;
-HSPLkotlin/collections/EmptyMap;->getSize()I
-HSPLkotlin/collections/EmptyMap;->getValues()Ljava/util/Collection;
-HSPLkotlin/collections/EmptyMap;->isEmpty()Z
-HSPLkotlin/collections/EmptyMap;->keySet()Ljava/util/Set;
-HSPLkotlin/collections/EmptyMap;->size()I
-HSPLkotlin/collections/EmptyMap;->values()Ljava/util/Collection;
-HSPLkotlin/collections/EmptySet;-><clinit>()V
-HSPLkotlin/collections/EmptySet;-><init>()V
-HSPLkotlin/collections/EmptySet;->iterator()Ljava/util/Iterator;
-HSPLkotlin/collections/IntIterator;-><init>()V
-HSPLkotlin/collections/MapsKt;->emptyMap()Ljava/util/Map;
-HSPLkotlin/collections/MapsKt;->mapCapacity(I)I
-HSPLkotlin/collections/MapsKt;->mapOf([Lkotlin/Pair;)Ljava/util/Map;
-HSPLkotlin/collections/MapsKt;->toMap(Ljava/lang/Iterable;)Ljava/util/Map;
-HSPLkotlin/collections/MapsKt;->toMutableMap(Ljava/util/Map;)Ljava/util/Map;
-HSPLkotlin/collections/MapsKt__MapsJVMKt;->mapCapacity(I)I
-HSPLkotlin/collections/MapsKt__MapsKt;->emptyMap()Ljava/util/Map;
-HSPLkotlin/collections/MapsKt__MapsKt;->mapOf([Lkotlin/Pair;)Ljava/util/Map;
-HSPLkotlin/collections/MapsKt__MapsKt;->putAll(Ljava/util/Map;Ljava/lang/Iterable;)V
-HSPLkotlin/collections/MapsKt__MapsKt;->putAll(Ljava/util/Map;[Lkotlin/Pair;)V
-HSPLkotlin/collections/MapsKt__MapsKt;->toMap(Ljava/lang/Iterable;)Ljava/util/Map;
-HSPLkotlin/collections/MapsKt__MapsKt;->toMap(Ljava/lang/Iterable;Ljava/util/Map;)Ljava/util/Map;
-HSPLkotlin/collections/MapsKt__MapsKt;->toMap([Lkotlin/Pair;Ljava/util/Map;)Ljava/util/Map;
-HSPLkotlin/collections/MapsKt__MapsKt;->toMutableMap(Ljava/util/Map;)Ljava/util/Map;
-HSPLkotlin/comparisons/ComparisonsKt;->compareValues(Ljava/lang/Comparable;Ljava/lang/Comparable;)I
-HSPLkotlin/comparisons/ComparisonsKt__ComparisonsKt;->compareValues(Ljava/lang/Comparable;Ljava/lang/Comparable;)I
-HSPLkotlin/coroutines/AbstractCoroutineContextElement;-><init>(Lkotlin/coroutines/CoroutineContext$Key;)V
-HSPLkotlin/coroutines/AbstractCoroutineContextElement;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
-HSPLkotlin/coroutines/AbstractCoroutineContextElement;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
-HSPLkotlin/coroutines/AbstractCoroutineContextElement;->getKey()Lkotlin/coroutines/CoroutineContext$Key;
-HSPLkotlin/coroutines/AbstractCoroutineContextElement;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
-HSPLkotlin/coroutines/AbstractCoroutineContextElement;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;
-HSPLkotlin/coroutines/AbstractCoroutineContextKey;-><init>(Lkotlin/coroutines/CoroutineContext$Key;Lkotlin/jvm/functions/Function1;)V
-HSPLkotlin/coroutines/CombinedContext;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext$Element;)V
-HSPLkotlin/coroutines/CombinedContext;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
-HSPLkotlin/coroutines/CombinedContext;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
-HSPLkotlin/coroutines/CombinedContext;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
-HSPLkotlin/coroutines/CombinedContext;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;
-HSPLkotlin/coroutines/ContinuationInterceptor$DefaultImpls;->get(Lkotlin/coroutines/ContinuationInterceptor;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
-HSPLkotlin/coroutines/ContinuationInterceptor$DefaultImpls;->minusKey(Lkotlin/coroutines/ContinuationInterceptor;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
-HSPLkotlin/coroutines/ContinuationInterceptor$Key;-><clinit>()V
-HSPLkotlin/coroutines/ContinuationInterceptor$Key;-><init>()V
-HSPLkotlin/coroutines/ContinuationInterceptor;-><clinit>()V
-HSPLkotlin/coroutines/ContinuationKt;->createCoroutine(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLkotlin/coroutines/ContinuationKt;->startCoroutine(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V
-HSPLkotlin/coroutines/CoroutineContext$DefaultImpls;->plus(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;
-HSPLkotlin/coroutines/CoroutineContext$Element$DefaultImpls;->fold(Lkotlin/coroutines/CoroutineContext$Element;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
-HSPLkotlin/coroutines/CoroutineContext$Element$DefaultImpls;->get(Lkotlin/coroutines/CoroutineContext$Element;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
-HSPLkotlin/coroutines/CoroutineContext$Element$DefaultImpls;->minusKey(Lkotlin/coroutines/CoroutineContext$Element;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
-HSPLkotlin/coroutines/CoroutineContext$Element$DefaultImpls;->plus(Lkotlin/coroutines/CoroutineContext$Element;Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;
-HSPLkotlin/coroutines/CoroutineContext$plus$1;-><clinit>()V
-HSPLkotlin/coroutines/CoroutineContext$plus$1;-><init>()V
-HSPLkotlin/coroutines/CoroutineContext$plus$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlin/coroutines/CoroutineContext$plus$1;->invoke(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext$Element;)Lkotlin/coroutines/CoroutineContext;
-HSPLkotlin/coroutines/EmptyCoroutineContext;-><clinit>()V
-HSPLkotlin/coroutines/EmptyCoroutineContext;-><init>()V
-HSPLkotlin/coroutines/EmptyCoroutineContext;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
-HSPLkotlin/coroutines/EmptyCoroutineContext;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
-HSPLkotlin/coroutines/EmptyCoroutineContext;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;
-HSPLkotlin/coroutines/SafeContinuation$Companion;-><init>()V
-HSPLkotlin/coroutines/SafeContinuation$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLkotlin/coroutines/SafeContinuation;-><clinit>()V
-HSPLkotlin/coroutines/SafeContinuation;-><init>(Lkotlin/coroutines/Continuation;Ljava/lang/Object;)V
-HSPLkotlin/coroutines/SafeContinuation;->resumeWith(Ljava/lang/Object;)V
-HSPLkotlin/coroutines/intrinsics/CoroutineSingletons;->$values()[Lkotlin/coroutines/intrinsics/CoroutineSingletons;
-HSPLkotlin/coroutines/intrinsics/CoroutineSingletons;-><clinit>()V
-HSPLkotlin/coroutines/intrinsics/CoroutineSingletons;-><init>(Ljava/lang/String;I)V
-HSPLkotlin/coroutines/intrinsics/IntrinsicsKt;->createCoroutineUnintercepted(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLkotlin/coroutines/intrinsics/IntrinsicsKt;->getCOROUTINE_SUSPENDED()Ljava/lang/Object;
-HSPLkotlin/coroutines/intrinsics/IntrinsicsKt;->intercepted(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLkotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt;->createCoroutineUnintercepted(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLkotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt;->intercepted(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLkotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsKt;->getCOROUTINE_SUSPENDED()Ljava/lang/Object;
-HSPLkotlin/coroutines/jvm/internal/BaseContinuationImpl;-><init>(Lkotlin/coroutines/Continuation;)V
-HSPLkotlin/coroutines/jvm/internal/BaseContinuationImpl;->releaseIntercepted()V
-HSPLkotlin/coroutines/jvm/internal/BaseContinuationImpl;->resumeWith(Ljava/lang/Object;)V
-HSPLkotlin/coroutines/jvm/internal/Boxing;->boxBoolean(Z)Ljava/lang/Boolean;
-HSPLkotlin/coroutines/jvm/internal/Boxing;->boxFloat(F)Ljava/lang/Float;
-HSPLkotlin/coroutines/jvm/internal/CompletedContinuation;-><clinit>()V
-HSPLkotlin/coroutines/jvm/internal/CompletedContinuation;-><init>()V
-HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;-><init>(Lkotlin/coroutines/Continuation;)V
-HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;-><init>(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;)V
-HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;->getContext()Lkotlin/coroutines/CoroutineContext;
-HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;->intercepted()Lkotlin/coroutines/Continuation;
-HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;->releaseIntercepted()V
-HSPLkotlin/coroutines/jvm/internal/DebugProbesKt;->probeCoroutineCreated(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLkotlin/coroutines/jvm/internal/DebugProbesKt;->probeCoroutineResumed(Lkotlin/coroutines/Continuation;)V
-HSPLkotlin/coroutines/jvm/internal/DebugProbesKt;->probeCoroutineSuspended(Lkotlin/coroutines/Continuation;)V
-HSPLkotlin/coroutines/jvm/internal/RestrictedContinuationImpl;-><init>(Lkotlin/coroutines/Continuation;)V
-HSPLkotlin/coroutines/jvm/internal/RestrictedContinuationImpl;->getContext()Lkotlin/coroutines/CoroutineContext;
-HSPLkotlin/coroutines/jvm/internal/RestrictedSuspendLambda;-><init>(ILkotlin/coroutines/Continuation;)V
-HSPLkotlin/coroutines/jvm/internal/SuspendLambda;-><init>(ILkotlin/coroutines/Continuation;)V
-HSPLkotlin/coroutines/jvm/internal/SuspendLambda;->getArity()I
-HSPLkotlin/internal/ProgressionUtilKt;->differenceModulo(III)I
-HSPLkotlin/internal/ProgressionUtilKt;->getProgressionLastElement(III)I
-HSPLkotlin/internal/ProgressionUtilKt;->mod(II)I
-HSPLkotlin/jvm/JvmClassMappingKt;->getJavaClass(Lkotlin/reflect/KClass;)Ljava/lang/Class;
-HSPLkotlin/jvm/JvmClassMappingKt;->getJavaObjectType(Lkotlin/reflect/KClass;)Ljava/lang/Class;
-HSPLkotlin/jvm/internal/CallableReference$NoReceiver;-><clinit>()V
-HSPLkotlin/jvm/internal/CallableReference$NoReceiver;-><init>()V
-HSPLkotlin/jvm/internal/CallableReference$NoReceiver;->access$000()Lkotlin/jvm/internal/CallableReference$NoReceiver;
-HSPLkotlin/jvm/internal/CallableReference;-><clinit>()V
-HSPLkotlin/jvm/internal/CallableReference;-><init>(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;Z)V
-HSPLkotlin/jvm/internal/CallableReference;->getBoundReceiver()Ljava/lang/Object;
-HSPLkotlin/jvm/internal/CallableReference;->getName()Ljava/lang/String;
-HSPLkotlin/jvm/internal/CallableReference;->getOwner()Lkotlin/reflect/KDeclarationContainer;
-HSPLkotlin/jvm/internal/CallableReference;->getSignature()Ljava/lang/String;
-HSPLkotlin/jvm/internal/ClassReference$Companion;-><init>()V
-HSPLkotlin/jvm/internal/ClassReference$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLkotlin/jvm/internal/ClassReference;-><clinit>()V
-HSPLkotlin/jvm/internal/ClassReference;-><init>(Ljava/lang/Class;)V
-HSPLkotlin/jvm/internal/ClassReference;->equals(Ljava/lang/Object;)Z
-HSPLkotlin/jvm/internal/ClassReference;->getJClass()Ljava/lang/Class;
-HSPLkotlin/jvm/internal/FloatCompanionObject;-><clinit>()V
-HSPLkotlin/jvm/internal/FloatCompanionObject;-><init>()V
-HSPLkotlin/jvm/internal/FunctionReference;-><init>(ILjava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V
-HSPLkotlin/jvm/internal/FunctionReference;->equals(Ljava/lang/Object;)Z
-HSPLkotlin/jvm/internal/FunctionReference;->getArity()I
-HSPLkotlin/jvm/internal/FunctionReferenceImpl;-><init>(ILjava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V
-HSPLkotlin/jvm/internal/FunctionReferenceImpl;-><init>(ILjava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V
-HSPLkotlin/jvm/internal/InlineMarker;->mark(I)V
-HSPLkotlin/jvm/internal/IntCompanionObject;-><clinit>()V
-HSPLkotlin/jvm/internal/IntCompanionObject;-><init>()V
-HSPLkotlin/jvm/internal/Intrinsics;->areEqual(Ljava/lang/Float;F)Z
-HSPLkotlin/jvm/internal/Intrinsics;->areEqual(Ljava/lang/Float;Ljava/lang/Float;)Z
-HSPLkotlin/jvm/internal/Intrinsics;->areEqual(Ljava/lang/Object;Ljava/lang/Object;)Z
-HSPLkotlin/jvm/internal/Intrinsics;->checkNotNull(Ljava/lang/Object;)V
-HSPLkotlin/jvm/internal/Intrinsics;->checkNotNull(Ljava/lang/Object;Ljava/lang/String;)V
-HSPLkotlin/jvm/internal/Intrinsics;->checkNotNullExpressionValue(Ljava/lang/Object;Ljava/lang/String;)V
-HSPLkotlin/jvm/internal/Intrinsics;->checkNotNullParameter(Ljava/lang/Object;Ljava/lang/String;)V
-HSPLkotlin/jvm/internal/Intrinsics;->compare(II)I
-HSPLkotlin/jvm/internal/Lambda;-><init>(I)V
-HSPLkotlin/jvm/internal/Lambda;->getArity()I
-HSPLkotlin/jvm/internal/MutablePropertyReference1;-><init>(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V
-HSPLkotlin/jvm/internal/MutablePropertyReference1Impl;-><init>(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V
-HSPLkotlin/jvm/internal/MutablePropertyReference;-><init>(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V
-HSPLkotlin/jvm/internal/PropertyReference;-><init>(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V
-HSPLkotlin/jvm/internal/Ref$BooleanRef;-><init>()V
-HSPLkotlin/jvm/internal/Ref$FloatRef;-><init>()V
-HSPLkotlin/jvm/internal/Ref$IntRef;-><init>()V
-HSPLkotlin/jvm/internal/Ref$LongRef;-><init>()V
-HSPLkotlin/jvm/internal/Ref$ObjectRef;-><init>()V
-HSPLkotlin/jvm/internal/Reflection;-><clinit>()V
-HSPLkotlin/jvm/internal/Reflection;->getOrCreateKotlinClass(Ljava/lang/Class;)Lkotlin/reflect/KClass;
-HSPLkotlin/jvm/internal/Reflection;->mutableProperty1(Lkotlin/jvm/internal/MutablePropertyReference1;)Lkotlin/reflect/KMutableProperty1;
-HSPLkotlin/jvm/internal/ReflectionFactory;-><init>()V
-HSPLkotlin/jvm/internal/ReflectionFactory;->getOrCreateKotlinClass(Ljava/lang/Class;)Lkotlin/reflect/KClass;
-HSPLkotlin/jvm/internal/ReflectionFactory;->mutableProperty1(Lkotlin/jvm/internal/MutablePropertyReference1;)Lkotlin/reflect/KMutableProperty1;
-HSPLkotlin/jvm/internal/SpreadBuilder;-><init>(I)V
-HSPLkotlin/jvm/internal/SpreadBuilder;->add(Ljava/lang/Object;)V
-HSPLkotlin/jvm/internal/SpreadBuilder;->addSpread(Ljava/lang/Object;)V
-HSPLkotlin/jvm/internal/SpreadBuilder;->size()I
-HSPLkotlin/jvm/internal/SpreadBuilder;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
-HSPLkotlin/jvm/internal/TypeIntrinsics;->asMutableCollection(Ljava/lang/Object;)Ljava/util/Collection;
-HSPLkotlin/jvm/internal/TypeIntrinsics;->beforeCheckcastToFunctionOfArity(Ljava/lang/Object;I)Ljava/lang/Object;
-HSPLkotlin/jvm/internal/TypeIntrinsics;->castToCollection(Ljava/lang/Object;)Ljava/util/Collection;
-HSPLkotlin/jvm/internal/TypeIntrinsics;->getFunctionArity(Ljava/lang/Object;)I
-HSPLkotlin/jvm/internal/TypeIntrinsics;->isFunctionOfArity(Ljava/lang/Object;I)Z
-HSPLkotlin/jvm/internal/TypeIntrinsics;->isMutableSet(Ljava/lang/Object;)Z
-HSPLkotlin/math/MathKt;->getSign(I)I
-HSPLkotlin/math/MathKt;->roundToInt(F)I
-HSPLkotlin/math/MathKt__MathJVMKt;->getSign(I)I
-HSPLkotlin/math/MathKt__MathJVMKt;->roundToInt(F)I
-HSPLkotlin/ranges/IntProgression$Companion;-><init>()V
-HSPLkotlin/ranges/IntProgression$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLkotlin/ranges/IntProgression;-><clinit>()V
-HSPLkotlin/ranges/IntProgression;-><init>(III)V
-HSPLkotlin/ranges/IntProgression;->getFirst()I
-HSPLkotlin/ranges/IntProgression;->getLast()I
-HSPLkotlin/ranges/IntProgression;->iterator()Ljava/util/Iterator;
-HSPLkotlin/ranges/IntProgression;->iterator()Lkotlin/collections/IntIterator;
-HSPLkotlin/ranges/IntProgressionIterator;-><init>(III)V
-HSPLkotlin/ranges/IntProgressionIterator;->hasNext()Z
-HSPLkotlin/ranges/IntProgressionIterator;->nextInt()I
-HSPLkotlin/ranges/IntRange$Companion;-><init>()V
-HSPLkotlin/ranges/IntRange$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLkotlin/ranges/IntRange;-><clinit>()V
-HSPLkotlin/ranges/IntRange;-><init>(II)V
-HSPLkotlin/ranges/IntRange;->contains(I)Z
-HSPLkotlin/ranges/IntRange;->equals(Ljava/lang/Object;)Z
-HSPLkotlin/ranges/IntRange;->isEmpty()Z
-HSPLkotlin/ranges/RangesKt;->coerceAtLeast(II)I
-HSPLkotlin/ranges/RangesKt;->coerceAtLeast(Ljava/lang/Comparable;Ljava/lang/Comparable;)Ljava/lang/Comparable;
-HSPLkotlin/ranges/RangesKt;->coerceAtMost(FF)F
-HSPLkotlin/ranges/RangesKt;->coerceAtMost(II)I
-HSPLkotlin/ranges/RangesKt;->coerceIn(DDD)D
-HSPLkotlin/ranges/RangesKt;->coerceIn(FFF)F
-HSPLkotlin/ranges/RangesKt;->coerceIn(III)I
-HSPLkotlin/ranges/RangesKt;->coerceIn(JJJ)J
-HSPLkotlin/ranges/RangesKt;->until(II)Lkotlin/ranges/IntRange;
-HSPLkotlin/ranges/RangesKt___RangesKt;->coerceAtLeast(II)I
-HSPLkotlin/ranges/RangesKt___RangesKt;->coerceAtLeast(Ljava/lang/Comparable;Ljava/lang/Comparable;)Ljava/lang/Comparable;
-HSPLkotlin/ranges/RangesKt___RangesKt;->coerceAtMost(FF)F
-HSPLkotlin/ranges/RangesKt___RangesKt;->coerceAtMost(II)I
-HSPLkotlin/ranges/RangesKt___RangesKt;->coerceIn(DDD)D
-HSPLkotlin/ranges/RangesKt___RangesKt;->coerceIn(FFF)F
-HSPLkotlin/ranges/RangesKt___RangesKt;->coerceIn(III)I
-HSPLkotlin/ranges/RangesKt___RangesKt;->coerceIn(JJJ)J
-HSPLkotlin/ranges/RangesKt___RangesKt;->until(II)Lkotlin/ranges/IntRange;
-HSPLkotlin/sequences/ConstrainedOnceSequence;-><init>(Lkotlin/sequences/Sequence;)V
-HSPLkotlin/sequences/ConstrainedOnceSequence;->iterator()Ljava/util/Iterator;
-HSPLkotlin/sequences/FilteringSequence$iterator$1;-><init>(Lkotlin/sequences/FilteringSequence;)V
-HSPLkotlin/sequences/FilteringSequence$iterator$1;->calcNext()V
-HSPLkotlin/sequences/FilteringSequence$iterator$1;->hasNext()Z
-HSPLkotlin/sequences/FilteringSequence$iterator$1;->next()Ljava/lang/Object;
-HSPLkotlin/sequences/FilteringSequence;-><init>(Lkotlin/sequences/Sequence;ZLkotlin/jvm/functions/Function1;)V
-HSPLkotlin/sequences/FilteringSequence;->access$getPredicate$p(Lkotlin/sequences/FilteringSequence;)Lkotlin/jvm/functions/Function1;
-HSPLkotlin/sequences/FilteringSequence;->access$getSendWhen$p(Lkotlin/sequences/FilteringSequence;)Z
-HSPLkotlin/sequences/FilteringSequence;->access$getSequence$p(Lkotlin/sequences/FilteringSequence;)Lkotlin/sequences/Sequence;
-HSPLkotlin/sequences/FilteringSequence;->iterator()Ljava/util/Iterator;
-HSPLkotlin/sequences/GeneratorSequence$iterator$1;-><init>(Lkotlin/sequences/GeneratorSequence;)V
-HSPLkotlin/sequences/GeneratorSequence$iterator$1;->calcNext()V
-HSPLkotlin/sequences/GeneratorSequence$iterator$1;->hasNext()Z
-HSPLkotlin/sequences/GeneratorSequence$iterator$1;->next()Ljava/lang/Object;
-HSPLkotlin/sequences/GeneratorSequence;-><init>(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;)V
-HSPLkotlin/sequences/GeneratorSequence;->access$getGetInitialValue$p(Lkotlin/sequences/GeneratorSequence;)Lkotlin/jvm/functions/Function0;
-HSPLkotlin/sequences/GeneratorSequence;->access$getGetNextValue$p(Lkotlin/sequences/GeneratorSequence;)Lkotlin/jvm/functions/Function1;
-HSPLkotlin/sequences/GeneratorSequence;->iterator()Ljava/util/Iterator;
-HSPLkotlin/sequences/SequencesKt;->asSequence(Ljava/util/Iterator;)Lkotlin/sequences/Sequence;
-HSPLkotlin/sequences/SequencesKt;->firstOrNull(Lkotlin/sequences/Sequence;)Ljava/lang/Object;
-HSPLkotlin/sequences/SequencesKt;->generateSequence(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence;
-HSPLkotlin/sequences/SequencesKt;->mapNotNull(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence;
-HSPLkotlin/sequences/SequencesKt;->toList(Lkotlin/sequences/Sequence;)Ljava/util/List;
-HSPLkotlin/sequences/SequencesKt__SequencesKt$asSequence$$inlined$Sequence$1;-><init>(Ljava/util/Iterator;)V
-HSPLkotlin/sequences/SequencesKt__SequencesKt$asSequence$$inlined$Sequence$1;->iterator()Ljava/util/Iterator;
-HSPLkotlin/sequences/SequencesKt__SequencesKt$generateSequence$2;-><init>(Ljava/lang/Object;)V
-HSPLkotlin/sequences/SequencesKt__SequencesKt$generateSequence$2;->invoke()Ljava/lang/Object;
-HSPLkotlin/sequences/SequencesKt__SequencesKt;->asSequence(Ljava/util/Iterator;)Lkotlin/sequences/Sequence;
-HSPLkotlin/sequences/SequencesKt__SequencesKt;->constrainOnce(Lkotlin/sequences/Sequence;)Lkotlin/sequences/Sequence;
-HSPLkotlin/sequences/SequencesKt__SequencesKt;->generateSequence(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence;
-HSPLkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1;-><clinit>()V
-HSPLkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1;-><init>()V
-HSPLkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1;->invoke(Ljava/lang/Object;)Ljava/lang/Boolean;
-HSPLkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlin/sequences/SequencesKt___SequencesKt;->filterNot(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence;
-HSPLkotlin/sequences/SequencesKt___SequencesKt;->filterNotNull(Lkotlin/sequences/Sequence;)Lkotlin/sequences/Sequence;
-HSPLkotlin/sequences/SequencesKt___SequencesKt;->firstOrNull(Lkotlin/sequences/Sequence;)Ljava/lang/Object;
-HSPLkotlin/sequences/SequencesKt___SequencesKt;->mapNotNull(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence;
-HSPLkotlin/sequences/SequencesKt___SequencesKt;->toCollection(Lkotlin/sequences/Sequence;Ljava/util/Collection;)Ljava/util/Collection;
-HSPLkotlin/sequences/SequencesKt___SequencesKt;->toList(Lkotlin/sequences/Sequence;)Ljava/util/List;
-HSPLkotlin/sequences/SequencesKt___SequencesKt;->toMutableList(Lkotlin/sequences/Sequence;)Ljava/util/List;
-HSPLkotlin/sequences/TransformingSequence$iterator$1;-><init>(Lkotlin/sequences/TransformingSequence;)V
-HSPLkotlin/sequences/TransformingSequence$iterator$1;->hasNext()Z
-HSPLkotlin/sequences/TransformingSequence$iterator$1;->next()Ljava/lang/Object;
-HSPLkotlin/sequences/TransformingSequence;-><init>(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)V
-HSPLkotlin/sequences/TransformingSequence;->access$getSequence$p(Lkotlin/sequences/TransformingSequence;)Lkotlin/sequences/Sequence;
-HSPLkotlin/sequences/TransformingSequence;->access$getTransformer$p(Lkotlin/sequences/TransformingSequence;)Lkotlin/jvm/functions/Function1;
-HSPLkotlin/sequences/TransformingSequence;->iterator()Ljava/util/Iterator;
-HSPLkotlin/text/CharsKt;->checkRadix(I)I
-HSPLkotlin/text/CharsKt__CharJVMKt;->checkRadix(I)I
-HSPLkotlin/text/CharsKt__CharJVMKt;->isWhitespace(C)Z
-HSPLkotlin/text/StringsKt;->isBlank(Ljava/lang/CharSequence;)Z
-HSPLkotlin/text/StringsKt;->substringAfterLast$default(Ljava/lang/String;CLjava/lang/String;ILjava/lang/Object;)Ljava/lang/String;
-HSPLkotlin/text/StringsKt__StringsJVMKt;->isBlank(Ljava/lang/CharSequence;)Z
-HSPLkotlin/text/StringsKt__StringsKt;->getIndices(Ljava/lang/CharSequence;)Lkotlin/ranges/IntRange;
-HSPLkotlin/text/StringsKt__StringsKt;->getLastIndex(Ljava/lang/CharSequence;)I
-HSPLkotlin/text/StringsKt__StringsKt;->lastIndexOf$default(Ljava/lang/CharSequence;CIZILjava/lang/Object;)I
-HSPLkotlin/text/StringsKt__StringsKt;->lastIndexOf(Ljava/lang/CharSequence;CIZ)I
-HSPLkotlin/text/StringsKt__StringsKt;->substringAfterLast$default(Ljava/lang/String;CLjava/lang/String;ILjava/lang/Object;)Ljava/lang/String;
-HSPLkotlin/text/StringsKt__StringsKt;->substringAfterLast(Ljava/lang/String;CLjava/lang/String;)Ljava/lang/String;
-HSPLkotlinx/atomicfu/AtomicArray;-><init>(I)V
-HSPLkotlinx/atomicfu/AtomicBoolean$Companion;-><init>()V
-HSPLkotlinx/atomicfu/AtomicBoolean$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLkotlinx/atomicfu/AtomicBoolean;-><clinit>()V
-HSPLkotlinx/atomicfu/AtomicBoolean;-><init>(ZLkotlinx/atomicfu/TraceBase;)V
-HSPLkotlinx/atomicfu/AtomicBoolean;->compareAndSet(ZZ)Z
-HSPLkotlinx/atomicfu/AtomicBoolean;->getValue()Z
-HSPLkotlinx/atomicfu/AtomicBoolean;->setValue(Z)V
-HSPLkotlinx/atomicfu/AtomicFU;->atomic(I)Lkotlinx/atomicfu/AtomicInt;
-HSPLkotlinx/atomicfu/AtomicFU;->atomic(ILkotlinx/atomicfu/TraceBase;)Lkotlinx/atomicfu/AtomicInt;
-HSPLkotlinx/atomicfu/AtomicFU;->atomic(J)Lkotlinx/atomicfu/AtomicLong;
-HSPLkotlinx/atomicfu/AtomicFU;->atomic(JLkotlinx/atomicfu/TraceBase;)Lkotlinx/atomicfu/AtomicLong;
-HSPLkotlinx/atomicfu/AtomicFU;->atomic(Ljava/lang/Object;)Lkotlinx/atomicfu/AtomicRef;
-HSPLkotlinx/atomicfu/AtomicFU;->atomic(Ljava/lang/Object;Lkotlinx/atomicfu/TraceBase;)Lkotlinx/atomicfu/AtomicRef;
-HSPLkotlinx/atomicfu/AtomicFU;->atomic(Z)Lkotlinx/atomicfu/AtomicBoolean;
-HSPLkotlinx/atomicfu/AtomicFU;->atomic(ZLkotlinx/atomicfu/TraceBase;)Lkotlinx/atomicfu/AtomicBoolean;
-HSPLkotlinx/atomicfu/AtomicFU_commonKt;->atomicArrayOfNulls(I)Lkotlinx/atomicfu/AtomicArray;
-HSPLkotlinx/atomicfu/AtomicInt$Companion;-><init>()V
-HSPLkotlinx/atomicfu/AtomicInt$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLkotlinx/atomicfu/AtomicInt;-><clinit>()V
-HSPLkotlinx/atomicfu/AtomicInt;-><init>(ILkotlinx/atomicfu/TraceBase;)V
-HSPLkotlinx/atomicfu/AtomicInt;->compareAndSet(II)Z
-HSPLkotlinx/atomicfu/AtomicInt;->getValue()I
-HSPLkotlinx/atomicfu/AtomicInt;->setValue(I)V
-HSPLkotlinx/atomicfu/AtomicLong$Companion;-><init>()V
-HSPLkotlinx/atomicfu/AtomicLong$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLkotlinx/atomicfu/AtomicLong;-><clinit>()V
-HSPLkotlinx/atomicfu/AtomicLong;-><init>(JLkotlinx/atomicfu/TraceBase;)V
-HSPLkotlinx/atomicfu/AtomicRef$Companion;-><init>()V
-HSPLkotlinx/atomicfu/AtomicRef$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLkotlinx/atomicfu/AtomicRef;-><clinit>()V
-HSPLkotlinx/atomicfu/AtomicRef;-><init>(Ljava/lang/Object;Lkotlinx/atomicfu/TraceBase;)V
-HSPLkotlinx/atomicfu/AtomicRef;->compareAndSet(Ljava/lang/Object;Ljava/lang/Object;)Z
-HSPLkotlinx/atomicfu/AtomicRef;->getAndSet(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/atomicfu/AtomicRef;->getValue()Ljava/lang/Object;
-HSPLkotlinx/atomicfu/AtomicRef;->lazySet(Ljava/lang/Object;)V
-HSPLkotlinx/atomicfu/AtomicRef;->setValue(Ljava/lang/Object;)V
-HSPLkotlinx/atomicfu/TraceBase$None;-><clinit>()V
-HSPLkotlinx/atomicfu/TraceBase$None;-><init>()V
-HSPLkotlinx/atomicfu/TraceBase;-><init>()V
-HSPLkotlinx/coroutines/AbstractCoroutine;-><init>(Lkotlin/coroutines/CoroutineContext;ZZ)V
-HSPLkotlinx/coroutines/AbstractCoroutine;->afterResume(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/AbstractCoroutine;->cancellationExceptionMessage()Ljava/lang/String;
-HSPLkotlinx/coroutines/AbstractCoroutine;->getContext()Lkotlin/coroutines/CoroutineContext;
-HSPLkotlinx/coroutines/AbstractCoroutine;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext;
-HSPLkotlinx/coroutines/AbstractCoroutine;->isActive()Z
-HSPLkotlinx/coroutines/AbstractCoroutine;->onCancelled(Ljava/lang/Throwable;Z)V
-HSPLkotlinx/coroutines/AbstractCoroutine;->onCompleted(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/AbstractCoroutine;->onCompletionInternal(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/AbstractCoroutine;->resumeWith(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/AbstractCoroutine;->start(Lkotlinx/coroutines/CoroutineStart;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V
-HSPLkotlinx/coroutines/Active;-><clinit>()V
-HSPLkotlinx/coroutines/Active;-><init>()V
-HSPLkotlinx/coroutines/BeforeResumeCancelHandler;-><init>()V
-HSPLkotlinx/coroutines/BlockingEventLoop;-><init>(Ljava/lang/Thread;)V
-HSPLkotlinx/coroutines/BuildersKt;->launch$default(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/Job;
-HSPLkotlinx/coroutines/BuildersKt;->launch(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/Job;
-HSPLkotlinx/coroutines/BuildersKt;->withContext(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/BuildersKt__Builders_commonKt;->launch$default(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/Job;
-HSPLkotlinx/coroutines/BuildersKt__Builders_commonKt;->launch(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/Job;
-HSPLkotlinx/coroutines/BuildersKt__Builders_commonKt;->withContext(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/CancelHandler;-><init>()V
-HSPLkotlinx/coroutines/CancelHandlerBase;-><init>()V
-HSPLkotlinx/coroutines/CancellableContinuationImpl;-><init>(Lkotlin/coroutines/Continuation;I)V
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->callCancelHandler(Lkotlinx/coroutines/CancelHandler;Ljava/lang/Throwable;)V
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->cancel(Ljava/lang/Throwable;)Z
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->cancelCompletedResult$external__kotlinx_coroutines__android_common__kotlinx_coroutines(Ljava/lang/Object;Ljava/lang/Throwable;)V
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->cancelLater(Ljava/lang/Throwable;)Z
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->completeResume(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->detachChild$external__kotlinx_coroutines__android_common__kotlinx_coroutines()V
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->detachChildIfNonResuable()V
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->dispatchResume(I)V
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->getContext()Lkotlin/coroutines/CoroutineContext;
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->getContinuationCancellationCause(Lkotlinx/coroutines/Job;)Ljava/lang/Throwable;
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->getDelegate$external__kotlinx_coroutines__android_common__kotlinx_coroutines()Lkotlin/coroutines/Continuation;
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->getExceptionalResult$external__kotlinx_coroutines__android_common__kotlinx_coroutines(Ljava/lang/Object;)Ljava/lang/Throwable;
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->getResult()Ljava/lang/Object;
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->getState$external__kotlinx_coroutines__android_common__kotlinx_coroutines()Ljava/lang/Object;
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->getSuccessfulResult$external__kotlinx_coroutines__android_common__kotlinx_coroutines(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->initCancellability()V
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->installParentHandle()Lkotlinx/coroutines/DisposableHandle;
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->invokeOnCancellation(Lkotlin/jvm/functions/Function1;)V
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->isCompleted()Z
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->isReusable()Z
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->makeCancelHandler(Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/CancelHandler;
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->parentCancelled$external__kotlinx_coroutines__android_common__kotlinx_coroutines(Ljava/lang/Throwable;)V
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->releaseClaimedReusableContinuation()V
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->resetStateReusable()Z
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->resumeImpl$default(Lkotlinx/coroutines/CancellableContinuationImpl;Ljava/lang/Object;ILkotlin/jvm/functions/Function1;ILjava/lang/Object;)V
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->resumeImpl(Ljava/lang/Object;ILkotlin/jvm/functions/Function1;)V
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->resumeWith(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->resumedState(Lkotlinx/coroutines/NotCompleted;Ljava/lang/Object;ILkotlin/jvm/functions/Function1;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->takeState$external__kotlinx_coroutines__android_common__kotlinx_coroutines()Ljava/lang/Object;
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->tryResume()Z
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->tryResume(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->tryResumeImpl(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/internal/Symbol;
-HSPLkotlinx/coroutines/CancellableContinuationImpl;->trySuspend()Z
-HSPLkotlinx/coroutines/CancellableContinuationImplKt;-><clinit>()V
-HSPLkotlinx/coroutines/CancellableContinuationKt;->disposeOnCancellation(Lkotlinx/coroutines/CancellableContinuation;Lkotlinx/coroutines/DisposableHandle;)V
-HSPLkotlinx/coroutines/CancellableContinuationKt;->getOrCreateCancellableContinuation(Lkotlin/coroutines/Continuation;)Lkotlinx/coroutines/CancellableContinuationImpl;
-HSPLkotlinx/coroutines/CancellableContinuationKt;->removeOnCancellation(Lkotlinx/coroutines/CancellableContinuation;Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V
-HSPLkotlinx/coroutines/CancelledContinuation;-><init>(Lkotlin/coroutines/Continuation;Ljava/lang/Throwable;Z)V
-HSPLkotlinx/coroutines/CancelledContinuation;->makeResumed()Z
-HSPLkotlinx/coroutines/ChildContinuation;-><init>(Lkotlinx/coroutines/CancellableContinuationImpl;)V
-HSPLkotlinx/coroutines/ChildContinuation;->invoke(Ljava/lang/Throwable;)V
-HSPLkotlinx/coroutines/ChildHandleNode;-><init>(Lkotlinx/coroutines/ChildJob;)V
-HSPLkotlinx/coroutines/ChildHandleNode;->childCancelled(Ljava/lang/Throwable;)Z
-HSPLkotlinx/coroutines/ChildHandleNode;->invoke(Ljava/lang/Throwable;)V
-HSPLkotlinx/coroutines/CompletedContinuation;-><init>(Ljava/lang/Object;Lkotlinx/coroutines/CancelHandler;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Ljava/lang/Throwable;)V
-HSPLkotlinx/coroutines/CompletedContinuation;-><init>(Ljava/lang/Object;Lkotlinx/coroutines/CancelHandler;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLkotlinx/coroutines/CompletedExceptionally;-><init>(Ljava/lang/Throwable;Z)V
-HSPLkotlinx/coroutines/CompletedExceptionally;-><init>(Ljava/lang/Throwable;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLkotlinx/coroutines/CompletedExceptionally;->getHandled()Z
-HSPLkotlinx/coroutines/CompletedExceptionally;->makeHandled()Z
-HSPLkotlinx/coroutines/CompletionHandlerBase;-><init>()V
-HSPLkotlinx/coroutines/CompletionStateKt;->recoverResult(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/CompletionStateKt;->toState$default(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/CompletionStateKt;->toState(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/CompletionStateKt;->toState(Ljava/lang/Object;Lkotlinx/coroutines/CancellableContinuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/CoroutineContextKt$hasCopyableElements$1;-><clinit>()V
-HSPLkotlinx/coroutines/CoroutineContextKt$hasCopyableElements$1;-><init>()V
-HSPLkotlinx/coroutines/CoroutineContextKt$hasCopyableElements$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/CoroutineContextKt$hasCopyableElements$1;->invoke(ZLkotlin/coroutines/CoroutineContext$Element;)Ljava/lang/Boolean;
-HSPLkotlinx/coroutines/CoroutineContextKt;->foldCopies(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext;Z)Lkotlin/coroutines/CoroutineContext;
-HSPLkotlinx/coroutines/CoroutineContextKt;->hasCopyableElements(Lkotlin/coroutines/CoroutineContext;)Z
-HSPLkotlinx/coroutines/CoroutineContextKt;->newCoroutineContext(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;
-HSPLkotlinx/coroutines/CoroutineContextKt;->newCoroutineContext(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;
-HSPLkotlinx/coroutines/CoroutineDispatcher$Key$1;-><clinit>()V
-HSPLkotlinx/coroutines/CoroutineDispatcher$Key$1;-><init>()V
-HSPLkotlinx/coroutines/CoroutineDispatcher$Key;-><init>()V
-HSPLkotlinx/coroutines/CoroutineDispatcher$Key;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLkotlinx/coroutines/CoroutineDispatcher;-><clinit>()V
-HSPLkotlinx/coroutines/CoroutineDispatcher;-><init>()V
-HSPLkotlinx/coroutines/CoroutineDispatcher;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
-HSPLkotlinx/coroutines/CoroutineDispatcher;->interceptContinuation(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLkotlinx/coroutines/CoroutineDispatcher;->isDispatchNeeded(Lkotlin/coroutines/CoroutineContext;)Z
-HSPLkotlinx/coroutines/CoroutineDispatcher;->limitedParallelism(I)Lkotlinx/coroutines/CoroutineDispatcher;
-HSPLkotlinx/coroutines/CoroutineDispatcher;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
-HSPLkotlinx/coroutines/CoroutineDispatcher;->releaseInterceptedContinuation(Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/CoroutineExceptionHandler$Key;-><clinit>()V
-HSPLkotlinx/coroutines/CoroutineExceptionHandler$Key;-><init>()V
-HSPLkotlinx/coroutines/CoroutineExceptionHandler;-><clinit>()V
-HSPLkotlinx/coroutines/CoroutineScopeKt;->CoroutineScope(Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/CoroutineScope;
-HSPLkotlinx/coroutines/CoroutineScopeKt;->MainScope()Lkotlinx/coroutines/CoroutineScope;
-HSPLkotlinx/coroutines/CoroutineScopeKt;->cancel$default(Lkotlinx/coroutines/CoroutineScope;Ljava/util/concurrent/CancellationException;ILjava/lang/Object;)V
-HSPLkotlinx/coroutines/CoroutineScopeKt;->cancel(Lkotlinx/coroutines/CoroutineScope;Ljava/util/concurrent/CancellationException;)V
-HSPLkotlinx/coroutines/CoroutineScopeKt;->coroutineScope(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/CoroutineScopeKt;->isActive(Lkotlinx/coroutines/CoroutineScope;)Z
-HSPLkotlinx/coroutines/CoroutineStart$WhenMappings;-><clinit>()V
-HSPLkotlinx/coroutines/CoroutineStart;->$values()[Lkotlinx/coroutines/CoroutineStart;
-HSPLkotlinx/coroutines/CoroutineStart;-><clinit>()V
-HSPLkotlinx/coroutines/CoroutineStart;-><init>(Ljava/lang/String;I)V
-HSPLkotlinx/coroutines/CoroutineStart;->invoke(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/CoroutineStart;->isLazy()Z
-HSPLkotlinx/coroutines/CoroutineStart;->values()[Lkotlinx/coroutines/CoroutineStart;
-HSPLkotlinx/coroutines/DebugStringsKt;->getClassSimpleName(Ljava/lang/Object;)Ljava/lang/String;
-HSPLkotlinx/coroutines/DefaultExecutor;-><clinit>()V
-HSPLkotlinx/coroutines/DefaultExecutor;-><init>()V
-HSPLkotlinx/coroutines/DefaultExecutorKt;-><clinit>()V
-HSPLkotlinx/coroutines/DefaultExecutorKt;->getDefaultDelay()Lkotlinx/coroutines/Delay;
-HSPLkotlinx/coroutines/DefaultExecutorKt;->initializeDefaultDelay()Lkotlinx/coroutines/Delay;
-HSPLkotlinx/coroutines/DelayKt;->delay(JLkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/DispatchedTask;-><init>(I)V
-HSPLkotlinx/coroutines/DispatchedTask;->getExceptionalResult$external__kotlinx_coroutines__android_common__kotlinx_coroutines(Ljava/lang/Object;)Ljava/lang/Throwable;
-HSPLkotlinx/coroutines/DispatchedTask;->getSuccessfulResult$external__kotlinx_coroutines__android_common__kotlinx_coroutines(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/DispatchedTask;->handleFatalException(Ljava/lang/Throwable;Ljava/lang/Throwable;)V
-HSPLkotlinx/coroutines/DispatchedTask;->run()V
-HSPLkotlinx/coroutines/DispatchedTaskKt;->dispatch(Lkotlinx/coroutines/DispatchedTask;I)V
-HSPLkotlinx/coroutines/DispatchedTaskKt;->isCancellableMode(I)Z
-HSPLkotlinx/coroutines/DispatchedTaskKt;->isReusableMode(I)Z
-HSPLkotlinx/coroutines/DispatchedTaskKt;->resume(Lkotlinx/coroutines/DispatchedTask;Lkotlin/coroutines/Continuation;Z)V
-HSPLkotlinx/coroutines/DispatchedTaskKt;->resumeUnconfined(Lkotlinx/coroutines/DispatchedTask;)V
-HSPLkotlinx/coroutines/Dispatchers;-><clinit>()V
-HSPLkotlinx/coroutines/Dispatchers;-><init>()V
-HSPLkotlinx/coroutines/Dispatchers;->getDefault()Lkotlinx/coroutines/CoroutineDispatcher;
-HSPLkotlinx/coroutines/Dispatchers;->getMain()Lkotlinx/coroutines/MainCoroutineDispatcher;
-HSPLkotlinx/coroutines/DisposeOnCancel;-><init>(Lkotlinx/coroutines/DisposableHandle;)V
-HSPLkotlinx/coroutines/Empty;-><init>(Z)V
-HSPLkotlinx/coroutines/Empty;->getList()Lkotlinx/coroutines/NodeList;
-HSPLkotlinx/coroutines/Empty;->isActive()Z
-HSPLkotlinx/coroutines/EventLoop;-><init>()V
-HSPLkotlinx/coroutines/EventLoop;->decrementUseCount(Z)V
-HSPLkotlinx/coroutines/EventLoop;->delta(Z)J
-HSPLkotlinx/coroutines/EventLoop;->incrementUseCount$default(Lkotlinx/coroutines/EventLoop;ZILjava/lang/Object;)V
-HSPLkotlinx/coroutines/EventLoop;->incrementUseCount(Z)V
-HSPLkotlinx/coroutines/EventLoop;->isUnconfinedLoopActive()Z
-HSPLkotlinx/coroutines/EventLoop;->processUnconfinedEvent()Z
-HSPLkotlinx/coroutines/EventLoopImplBase;-><init>()V
-HSPLkotlinx/coroutines/EventLoopImplPlatform;-><init>()V
-HSPLkotlinx/coroutines/EventLoopKt;->createEventLoop()Lkotlinx/coroutines/EventLoop;
-HSPLkotlinx/coroutines/ExceptionsKt;->CancellationException(Ljava/lang/String;Ljava/lang/Throwable;)Ljava/util/concurrent/CancellationException;
-HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher$Key$1;-><clinit>()V
-HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher$Key$1;-><init>()V
-HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher$Key;-><init>()V
-HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher$Key;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher;-><clinit>()V
-HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher;-><init>()V
-HSPLkotlinx/coroutines/GlobalScope;-><clinit>()V
-HSPLkotlinx/coroutines/GlobalScope;-><init>()V
-HSPLkotlinx/coroutines/GlobalScope;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext;
-HSPLkotlinx/coroutines/InvokeOnCancel;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLkotlinx/coroutines/InvokeOnCancel;->invoke(Ljava/lang/Throwable;)V
-HSPLkotlinx/coroutines/InvokeOnCompletion;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLkotlinx/coroutines/InvokeOnCompletion;->invoke(Ljava/lang/Throwable;)V
-HSPLkotlinx/coroutines/Job$DefaultImpls;->cancel$default(Lkotlinx/coroutines/Job;Ljava/util/concurrent/CancellationException;ILjava/lang/Object;)V
-HSPLkotlinx/coroutines/Job$DefaultImpls;->fold(Lkotlinx/coroutines/Job;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/Job$DefaultImpls;->get(Lkotlinx/coroutines/Job;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
-HSPLkotlinx/coroutines/Job$DefaultImpls;->invokeOnCompletion$default(Lkotlinx/coroutines/Job;ZZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lkotlinx/coroutines/DisposableHandle;
-HSPLkotlinx/coroutines/Job$DefaultImpls;->minusKey(Lkotlinx/coroutines/Job;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
-HSPLkotlinx/coroutines/Job$DefaultImpls;->plus(Lkotlinx/coroutines/Job;Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;
-HSPLkotlinx/coroutines/Job$Key;-><clinit>()V
-HSPLkotlinx/coroutines/Job$Key;-><init>()V
-HSPLkotlinx/coroutines/Job;-><clinit>()V
-HSPLkotlinx/coroutines/JobCancellationException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;Lkotlinx/coroutines/Job;)V
-HSPLkotlinx/coroutines/JobCancellationException;->equals(Ljava/lang/Object;)Z
-HSPLkotlinx/coroutines/JobCancellationException;->fillInStackTrace()Ljava/lang/Throwable;
-HSPLkotlinx/coroutines/JobCancellingNode;-><init>()V
-HSPLkotlinx/coroutines/JobImpl;-><init>(Lkotlinx/coroutines/Job;)V
-HSPLkotlinx/coroutines/JobImpl;->getHandlesException$external__kotlinx_coroutines__android_common__kotlinx_coroutines()Z
-HSPLkotlinx/coroutines/JobImpl;->getOnCancelComplete$external__kotlinx_coroutines__android_common__kotlinx_coroutines()Z
-HSPLkotlinx/coroutines/JobImpl;->handlesException()Z
-HSPLkotlinx/coroutines/JobKt;->Job$default(Lkotlinx/coroutines/Job;ILjava/lang/Object;)Lkotlinx/coroutines/CompletableJob;
-HSPLkotlinx/coroutines/JobKt;->Job(Lkotlinx/coroutines/Job;)Lkotlinx/coroutines/CompletableJob;
-HSPLkotlinx/coroutines/JobKt;->ensureActive(Lkotlin/coroutines/CoroutineContext;)V
-HSPLkotlinx/coroutines/JobKt;->ensureActive(Lkotlinx/coroutines/Job;)V
-HSPLkotlinx/coroutines/JobKt;->getJob(Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/Job;
-HSPLkotlinx/coroutines/JobKt;->isActive(Lkotlin/coroutines/CoroutineContext;)Z
-HSPLkotlinx/coroutines/JobKt__JobKt;->Job$default(Lkotlinx/coroutines/Job;ILjava/lang/Object;)Lkotlinx/coroutines/CompletableJob;
-HSPLkotlinx/coroutines/JobKt__JobKt;->Job(Lkotlinx/coroutines/Job;)Lkotlinx/coroutines/CompletableJob;
-HSPLkotlinx/coroutines/JobKt__JobKt;->ensureActive(Lkotlin/coroutines/CoroutineContext;)V
-HSPLkotlinx/coroutines/JobKt__JobKt;->ensureActive(Lkotlinx/coroutines/Job;)V
-HSPLkotlinx/coroutines/JobKt__JobKt;->getJob(Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/Job;
-HSPLkotlinx/coroutines/JobKt__JobKt;->isActive(Lkotlin/coroutines/CoroutineContext;)Z
-HSPLkotlinx/coroutines/JobNode;-><init>()V
-HSPLkotlinx/coroutines/JobNode;->dispose()V
-HSPLkotlinx/coroutines/JobNode;->getJob()Lkotlinx/coroutines/JobSupport;
-HSPLkotlinx/coroutines/JobNode;->getList()Lkotlinx/coroutines/NodeList;
-HSPLkotlinx/coroutines/JobNode;->isActive()Z
-HSPLkotlinx/coroutines/JobNode;->setJob(Lkotlinx/coroutines/JobSupport;)V
-HSPLkotlinx/coroutines/JobSupport$ChildCompletion;-><init>(Lkotlinx/coroutines/JobSupport;Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/JobSupport$ChildCompletion;->invoke(Ljava/lang/Throwable;)V
-HSPLkotlinx/coroutines/JobSupport$Finishing;-><init>(Lkotlinx/coroutines/NodeList;ZLjava/lang/Throwable;)V
-HSPLkotlinx/coroutines/JobSupport$Finishing;->addExceptionLocked(Ljava/lang/Throwable;)V
-HSPLkotlinx/coroutines/JobSupport$Finishing;->allocateList()Ljava/util/ArrayList;
-HSPLkotlinx/coroutines/JobSupport$Finishing;->getExceptionsHolder()Ljava/lang/Object;
-HSPLkotlinx/coroutines/JobSupport$Finishing;->getList()Lkotlinx/coroutines/NodeList;
-HSPLkotlinx/coroutines/JobSupport$Finishing;->getRootCause()Ljava/lang/Throwable;
-HSPLkotlinx/coroutines/JobSupport$Finishing;->isActive()Z
-HSPLkotlinx/coroutines/JobSupport$Finishing;->isCancelling()Z
-HSPLkotlinx/coroutines/JobSupport$Finishing;->isCompleting()Z
-HSPLkotlinx/coroutines/JobSupport$Finishing;->isSealed()Z
-HSPLkotlinx/coroutines/JobSupport$Finishing;->sealLocked(Ljava/lang/Throwable;)Ljava/util/List;
-HSPLkotlinx/coroutines/JobSupport$Finishing;->setCompleting(Z)V
-HSPLkotlinx/coroutines/JobSupport$Finishing;->setExceptionsHolder(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/JobSupport$Finishing;->setRootCause(Ljava/lang/Throwable;)V
-HSPLkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;-><init>(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/JobSupport;Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;->prepare(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;->prepare(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/JobSupport;-><init>(Z)V
-HSPLkotlinx/coroutines/JobSupport;->access$cancellationExceptionMessage(Lkotlinx/coroutines/JobSupport;)Ljava/lang/String;
-HSPLkotlinx/coroutines/JobSupport;->access$continueCompleting(Lkotlinx/coroutines/JobSupport;Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/JobSupport;->addLastAtomic(Ljava/lang/Object;Lkotlinx/coroutines/NodeList;Lkotlinx/coroutines/JobNode;)Z
-HSPLkotlinx/coroutines/JobSupport;->addSuppressedExceptions(Ljava/lang/Throwable;Ljava/util/List;)V
-HSPLkotlinx/coroutines/JobSupport;->afterCompletion(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/JobSupport;->attachChild(Lkotlinx/coroutines/ChildJob;)Lkotlinx/coroutines/ChildHandle;
-HSPLkotlinx/coroutines/JobSupport;->cancel(Ljava/util/concurrent/CancellationException;)V
-HSPLkotlinx/coroutines/JobSupport;->cancelImpl$external__kotlinx_coroutines__android_common__kotlinx_coroutines(Ljava/lang/Object;)Z
-HSPLkotlinx/coroutines/JobSupport;->cancelInternal(Ljava/lang/Throwable;)V
-HSPLkotlinx/coroutines/JobSupport;->cancelMakeCompleting(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/JobSupport;->cancelParent(Ljava/lang/Throwable;)Z
-HSPLkotlinx/coroutines/JobSupport;->cancellationExceptionMessage()Ljava/lang/String;
-HSPLkotlinx/coroutines/JobSupport;->childCancelled(Ljava/lang/Throwable;)Z
-HSPLkotlinx/coroutines/JobSupport;->completeStateFinalization(Lkotlinx/coroutines/Incomplete;Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/JobSupport;->continueCompleting(Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/JobSupport;->createCauseException(Ljava/lang/Object;)Ljava/lang/Throwable;
-HSPLkotlinx/coroutines/JobSupport;->finalizeFinishingState(Lkotlinx/coroutines/JobSupport$Finishing;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/JobSupport;->firstChild(Lkotlinx/coroutines/Incomplete;)Lkotlinx/coroutines/ChildHandleNode;
-HSPLkotlinx/coroutines/JobSupport;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/JobSupport;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
-HSPLkotlinx/coroutines/JobSupport;->getCancellationException()Ljava/util/concurrent/CancellationException;
-HSPLkotlinx/coroutines/JobSupport;->getChildJobCancellationCause()Ljava/util/concurrent/CancellationException;
-HSPLkotlinx/coroutines/JobSupport;->getFinalRootCause(Lkotlinx/coroutines/JobSupport$Finishing;Ljava/util/List;)Ljava/lang/Throwable;
-HSPLkotlinx/coroutines/JobSupport;->getKey()Lkotlin/coroutines/CoroutineContext$Key;
-HSPLkotlinx/coroutines/JobSupport;->getOnCancelComplete$external__kotlinx_coroutines__android_common__kotlinx_coroutines()Z
-HSPLkotlinx/coroutines/JobSupport;->getOrPromoteCancellingList(Lkotlinx/coroutines/Incomplete;)Lkotlinx/coroutines/NodeList;
-HSPLkotlinx/coroutines/JobSupport;->getParentHandle$external__kotlinx_coroutines__android_common__kotlinx_coroutines()Lkotlinx/coroutines/ChildHandle;
-HSPLkotlinx/coroutines/JobSupport;->getState$external__kotlinx_coroutines__android_common__kotlinx_coroutines()Ljava/lang/Object;
-HSPLkotlinx/coroutines/JobSupport;->initParentJob(Lkotlinx/coroutines/Job;)V
-HSPLkotlinx/coroutines/JobSupport;->invokeOnCompletion(Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/DisposableHandle;
-HSPLkotlinx/coroutines/JobSupport;->invokeOnCompletion(ZZLkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/DisposableHandle;
-HSPLkotlinx/coroutines/JobSupport;->isActive()Z
-HSPLkotlinx/coroutines/JobSupport;->isCompleted()Z
-HSPLkotlinx/coroutines/JobSupport;->isScopedCoroutine()Z
-HSPLkotlinx/coroutines/JobSupport;->join(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/JobSupport;->joinInternal()Z
-HSPLkotlinx/coroutines/JobSupport;->joinSuspend(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/JobSupport;->makeCancelling(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/JobSupport;->makeCompletingOnce$external__kotlinx_coroutines__android_common__kotlinx_coroutines(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/JobSupport;->makeNode(Lkotlin/jvm/functions/Function1;Z)Lkotlinx/coroutines/JobNode;
-HSPLkotlinx/coroutines/JobSupport;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext;
-HSPLkotlinx/coroutines/JobSupport;->nextChild(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)Lkotlinx/coroutines/ChildHandleNode;
-HSPLkotlinx/coroutines/JobSupport;->notifyCancelling(Lkotlinx/coroutines/NodeList;Ljava/lang/Throwable;)V
-HSPLkotlinx/coroutines/JobSupport;->notifyCompletion(Lkotlinx/coroutines/NodeList;Ljava/lang/Throwable;)V
-HSPLkotlinx/coroutines/JobSupport;->onCancelling(Ljava/lang/Throwable;)V
-HSPLkotlinx/coroutines/JobSupport;->onCompletionInternal(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/JobSupport;->parentCancelled(Lkotlinx/coroutines/ParentJob;)V
-HSPLkotlinx/coroutines/JobSupport;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext;
-HSPLkotlinx/coroutines/JobSupport;->promoteSingleToNodeList(Lkotlinx/coroutines/JobNode;)V
-HSPLkotlinx/coroutines/JobSupport;->removeNode$external__kotlinx_coroutines__android_common__kotlinx_coroutines(Lkotlinx/coroutines/JobNode;)V
-HSPLkotlinx/coroutines/JobSupport;->setParentHandle$external__kotlinx_coroutines__android_common__kotlinx_coroutines(Lkotlinx/coroutines/ChildHandle;)V
-HSPLkotlinx/coroutines/JobSupport;->start()Z
-HSPLkotlinx/coroutines/JobSupport;->startInternal(Ljava/lang/Object;)I
-HSPLkotlinx/coroutines/JobSupport;->toCancellationException(Ljava/lang/Throwable;Ljava/lang/String;)Ljava/util/concurrent/CancellationException;
-HSPLkotlinx/coroutines/JobSupport;->tryFinalizeSimpleState(Lkotlinx/coroutines/Incomplete;Ljava/lang/Object;)Z
-HSPLkotlinx/coroutines/JobSupport;->tryMakeCancelling(Lkotlinx/coroutines/Incomplete;Ljava/lang/Throwable;)Z
-HSPLkotlinx/coroutines/JobSupport;->tryMakeCompleting(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/JobSupport;->tryMakeCompletingSlowPath(Lkotlinx/coroutines/Incomplete;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/JobSupport;->tryWaitForChild(Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)Z
-HSPLkotlinx/coroutines/JobSupportKt;-><clinit>()V
-HSPLkotlinx/coroutines/JobSupportKt;->access$getCOMPLETING_ALREADY$p()Lkotlinx/coroutines/internal/Symbol;
-HSPLkotlinx/coroutines/JobSupportKt;->access$getCOMPLETING_RETRY$p()Lkotlinx/coroutines/internal/Symbol;
-HSPLkotlinx/coroutines/JobSupportKt;->access$getEMPTY_ACTIVE$p()Lkotlinx/coroutines/Empty;
-HSPLkotlinx/coroutines/JobSupportKt;->access$getSEALED$p()Lkotlinx/coroutines/internal/Symbol;
-HSPLkotlinx/coroutines/JobSupportKt;->access$getTOO_LATE_TO_CANCEL$p()Lkotlinx/coroutines/internal/Symbol;
-HSPLkotlinx/coroutines/JobSupportKt;->boxIncomplete(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/JobSupportKt;->unboxState(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/MainCoroutineDispatcher;-><init>()V
-HSPLkotlinx/coroutines/NodeList;-><init>()V
-HSPLkotlinx/coroutines/NodeList;->getList()Lkotlinx/coroutines/NodeList;
-HSPLkotlinx/coroutines/NodeList;->isActive()Z
-HSPLkotlinx/coroutines/NonDisposableHandle;-><clinit>()V
-HSPLkotlinx/coroutines/NonDisposableHandle;-><init>()V
-HSPLkotlinx/coroutines/NonDisposableHandle;->dispose()V
-HSPLkotlinx/coroutines/RemoveOnCancel;-><init>(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V
-HSPLkotlinx/coroutines/ResumeOnCompletion;-><init>(Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/ResumeOnCompletion;->invoke(Ljava/lang/Throwable;)V
-HSPLkotlinx/coroutines/StandaloneCoroutine;-><init>(Lkotlin/coroutines/CoroutineContext;Z)V
-HSPLkotlinx/coroutines/SupervisorJobImpl;-><init>(Lkotlinx/coroutines/Job;)V
-HSPLkotlinx/coroutines/SupervisorKt;->SupervisorJob$default(Lkotlinx/coroutines/Job;ILjava/lang/Object;)Lkotlinx/coroutines/CompletableJob;
-HSPLkotlinx/coroutines/SupervisorKt;->SupervisorJob(Lkotlinx/coroutines/Job;)Lkotlinx/coroutines/CompletableJob;
-HSPLkotlinx/coroutines/ThreadLocalEventLoop;-><clinit>()V
-HSPLkotlinx/coroutines/ThreadLocalEventLoop;-><init>()V
-HSPLkotlinx/coroutines/ThreadLocalEventLoop;->getEventLoop$external__kotlinx_coroutines__android_common__kotlinx_coroutines()Lkotlinx/coroutines/EventLoop;
-HSPLkotlinx/coroutines/Unconfined;-><clinit>()V
-HSPLkotlinx/coroutines/Unconfined;-><init>()V
-HSPLkotlinx/coroutines/UndispatchedCoroutine;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/UndispatchedCoroutine;->afterResume(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/UndispatchedMarker;-><clinit>()V
-HSPLkotlinx/coroutines/UndispatchedMarker;-><init>()V
-HSPLkotlinx/coroutines/UndispatchedMarker;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/UndispatchedMarker;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element;
-HSPLkotlinx/coroutines/UndispatchedMarker;->getKey()Lkotlin/coroutines/CoroutineContext$Key;
-HSPLkotlinx/coroutines/android/AndroidDispatcherFactory;-><init>()V
-HSPLkotlinx/coroutines/android/AndroidDispatcherFactory;->createDispatcher(Ljava/util/List;)Lkotlinx/coroutines/MainCoroutineDispatcher;
-HSPLkotlinx/coroutines/android/HandlerContext;-><init>(Landroid/os/Handler;Ljava/lang/String;)V
-HSPLkotlinx/coroutines/android/HandlerContext;-><init>(Landroid/os/Handler;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLkotlinx/coroutines/android/HandlerContext;-><init>(Landroid/os/Handler;Ljava/lang/String;Z)V
-HSPLkotlinx/coroutines/android/HandlerContext;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V
-HSPLkotlinx/coroutines/android/HandlerContext;->getImmediate()Lkotlinx/coroutines/android/HandlerContext;
-HSPLkotlinx/coroutines/android/HandlerContext;->getImmediate()Lkotlinx/coroutines/android/HandlerDispatcher;
-HSPLkotlinx/coroutines/android/HandlerContext;->isDispatchNeeded(Lkotlin/coroutines/CoroutineContext;)Z
-HSPLkotlinx/coroutines/android/HandlerDispatcher;-><init>()V
-HSPLkotlinx/coroutines/android/HandlerDispatcher;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLkotlinx/coroutines/android/HandlerDispatcherKt;-><clinit>()V
-HSPLkotlinx/coroutines/android/HandlerDispatcherKt;->asHandler(Landroid/os/Looper;Z)Landroid/os/Handler;
-HSPLkotlinx/coroutines/android/HandlerDispatcherKt;->from(Landroid/os/Handler;Ljava/lang/String;)Lkotlinx/coroutines/android/HandlerDispatcher;
-HSPLkotlinx/coroutines/channels/AbstractChannel$Itr;-><init>(Lkotlinx/coroutines/channels/AbstractChannel;)V
-HSPLkotlinx/coroutines/channels/AbstractChannel$Itr;->hasNext(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/AbstractChannel$Itr;->hasNextResult(Ljava/lang/Object;)Z
-HSPLkotlinx/coroutines/channels/AbstractChannel$Itr;->hasNextSuspend(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/AbstractChannel$Itr;->next()Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/AbstractChannel$Itr;->setResult(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/channels/AbstractChannel$ReceiveElement;-><init>(Lkotlinx/coroutines/CancellableContinuation;I)V
-HSPLkotlinx/coroutines/channels/AbstractChannel$ReceiveElement;->completeResumeReceive(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/channels/AbstractChannel$ReceiveElement;->resumeValue(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/AbstractChannel$ReceiveElement;->tryResumeReceive(Ljava/lang/Object;Lkotlinx/coroutines/internal/LockFreeLinkedListNode$PrepareOp;)Lkotlinx/coroutines/internal/Symbol;
-HSPLkotlinx/coroutines/channels/AbstractChannel$ReceiveHasNext;-><init>(Lkotlinx/coroutines/channels/AbstractChannel$Itr;Lkotlinx/coroutines/CancellableContinuation;)V
-HSPLkotlinx/coroutines/channels/AbstractChannel$ReceiveHasNext;->completeResumeReceive(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/channels/AbstractChannel$ReceiveHasNext;->resumeOnCancellationFun(Ljava/lang/Object;)Lkotlin/jvm/functions/Function1;
-HSPLkotlinx/coroutines/channels/AbstractChannel$ReceiveHasNext;->tryResumeReceive(Ljava/lang/Object;Lkotlinx/coroutines/internal/LockFreeLinkedListNode$PrepareOp;)Lkotlinx/coroutines/internal/Symbol;
-HSPLkotlinx/coroutines/channels/AbstractChannel$RemoveReceiveOnCancel;-><init>(Lkotlinx/coroutines/channels/AbstractChannel;Lkotlinx/coroutines/channels/Receive;)V
-HSPLkotlinx/coroutines/channels/AbstractChannel$RemoveReceiveOnCancel;->invoke(Ljava/lang/Throwable;)V
-HSPLkotlinx/coroutines/channels/AbstractChannel$enqueueReceiveInternal$$inlined$addLastIfPrevAndIf$1;-><init>(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/channels/AbstractChannel;)V
-HSPLkotlinx/coroutines/channels/AbstractChannel$enqueueReceiveInternal$$inlined$addLastIfPrevAndIf$1;->prepare(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/AbstractChannel$enqueueReceiveInternal$$inlined$addLastIfPrevAndIf$1;->prepare(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/AbstractChannel$receiveCatching$1;-><init>(Lkotlinx/coroutines/channels/AbstractChannel;Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/channels/AbstractChannel$receiveCatching$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/AbstractChannel;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLkotlinx/coroutines/channels/AbstractChannel;->access$enqueueReceive(Lkotlinx/coroutines/channels/AbstractChannel;Lkotlinx/coroutines/channels/Receive;)Z
-HSPLkotlinx/coroutines/channels/AbstractChannel;->access$removeReceiveOnCancel(Lkotlinx/coroutines/channels/AbstractChannel;Lkotlinx/coroutines/CancellableContinuation;Lkotlinx/coroutines/channels/Receive;)V
-HSPLkotlinx/coroutines/channels/AbstractChannel;->enqueueReceive(Lkotlinx/coroutines/channels/Receive;)Z
-HSPLkotlinx/coroutines/channels/AbstractChannel;->enqueueReceiveInternal(Lkotlinx/coroutines/channels/Receive;)Z
-HSPLkotlinx/coroutines/channels/AbstractChannel;->iterator()Lkotlinx/coroutines/channels/ChannelIterator;
-HSPLkotlinx/coroutines/channels/AbstractChannel;->onReceiveDequeued()V
-HSPLkotlinx/coroutines/channels/AbstractChannel;->onReceiveEnqueued()V
-HSPLkotlinx/coroutines/channels/AbstractChannel;->pollInternal()Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/AbstractChannel;->receive(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/AbstractChannel;->receiveCatching-JP2dKIU(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/AbstractChannel;->receiveSuspend(ILkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/AbstractChannel;->removeReceiveOnCancel(Lkotlinx/coroutines/CancellableContinuation;Lkotlinx/coroutines/channels/Receive;)V
-HSPLkotlinx/coroutines/channels/AbstractChannel;->takeFirstReceiveOrPeekClosed()Lkotlinx/coroutines/channels/ReceiveOrClosed;
-HSPLkotlinx/coroutines/channels/AbstractChannel;->tryReceive-PtdJZtk()Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/AbstractChannelKt;-><clinit>()V
-HSPLkotlinx/coroutines/channels/AbstractSendChannel$SendBuffered;-><init>(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/channels/AbstractSendChannel$SendBuffered;->completeResumeSend()V
-HSPLkotlinx/coroutines/channels/AbstractSendChannel$SendBuffered;->getPollResult()Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/AbstractSendChannel$SendBuffered;->tryResumeSend(Lkotlinx/coroutines/internal/LockFreeLinkedListNode$PrepareOp;)Lkotlinx/coroutines/internal/Symbol;
-HSPLkotlinx/coroutines/channels/AbstractSendChannel;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLkotlinx/coroutines/channels/AbstractSendChannel;->getClosedForSend()Lkotlinx/coroutines/channels/Closed;
-HSPLkotlinx/coroutines/channels/AbstractSendChannel;->getQueue()Lkotlinx/coroutines/internal/LockFreeLinkedListHead;
-HSPLkotlinx/coroutines/channels/AbstractSendChannel;->offerInternal(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/AbstractSendChannel;->send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/AbstractSendChannel;->sendBuffered(Ljava/lang/Object;)Lkotlinx/coroutines/channels/ReceiveOrClosed;
-HSPLkotlinx/coroutines/channels/AbstractSendChannel;->takeFirstReceiveOrPeekClosed()Lkotlinx/coroutines/channels/ReceiveOrClosed;
-HSPLkotlinx/coroutines/channels/AbstractSendChannel;->takeFirstSendOrPeekClosed()Lkotlinx/coroutines/channels/Send;
-HSPLkotlinx/coroutines/channels/AbstractSendChannel;->trySend-JP2dKIU(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/ArrayChannel;-><init>(ILkotlinx/coroutines/channels/BufferOverflow;Lkotlin/jvm/functions/Function1;)V
-HSPLkotlinx/coroutines/channels/ArrayChannel;->enqueueReceiveInternal(Lkotlinx/coroutines/channels/Receive;)Z
-HSPLkotlinx/coroutines/channels/ArrayChannel;->isBufferAlwaysEmpty()Z
-HSPLkotlinx/coroutines/channels/ArrayChannel;->isBufferEmpty()Z
-HSPLkotlinx/coroutines/channels/ArrayChannel;->offerInternal(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/ArrayChannel;->pollInternal()Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/ArrayChannel;->updateBufferSize(I)Lkotlinx/coroutines/internal/Symbol;
-HSPLkotlinx/coroutines/channels/BufferOverflow;->$values()[Lkotlinx/coroutines/channels/BufferOverflow;
-HSPLkotlinx/coroutines/channels/BufferOverflow;-><clinit>()V
-HSPLkotlinx/coroutines/channels/BufferOverflow;-><init>(Ljava/lang/String;I)V
-HSPLkotlinx/coroutines/channels/Channel$Factory;-><clinit>()V
-HSPLkotlinx/coroutines/channels/Channel$Factory;-><init>()V
-HSPLkotlinx/coroutines/channels/Channel$Factory;->getCHANNEL_DEFAULT_CAPACITY$external__kotlinx_coroutines__android_common__kotlinx_coroutines()I
-HSPLkotlinx/coroutines/channels/Channel;-><clinit>()V
-HSPLkotlinx/coroutines/channels/ChannelCoroutine;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/channels/Channel;ZZ)V
-HSPLkotlinx/coroutines/channels/ChannelCoroutine;->receiveCatching-JP2dKIU(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/ChannelCoroutine;->send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/ChannelKt;->Channel$default(ILkotlinx/coroutines/channels/BufferOverflow;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lkotlinx/coroutines/channels/Channel;
-HSPLkotlinx/coroutines/channels/ChannelKt;->Channel(ILkotlinx/coroutines/channels/BufferOverflow;Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/channels/Channel;
-HSPLkotlinx/coroutines/channels/ChannelResult$Companion;-><init>()V
-HSPLkotlinx/coroutines/channels/ChannelResult$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLkotlinx/coroutines/channels/ChannelResult$Companion;->failure-PtdJZtk()Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/ChannelResult$Companion;->success-JP2dKIU(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/ChannelResult$Failed;-><init>()V
-HSPLkotlinx/coroutines/channels/ChannelResult;-><clinit>()V
-HSPLkotlinx/coroutines/channels/ChannelResult;-><init>(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/channels/ChannelResult;->access$getFailed$cp()Lkotlinx/coroutines/channels/ChannelResult$Failed;
-HSPLkotlinx/coroutines/channels/ChannelResult;->box-impl(Ljava/lang/Object;)Lkotlinx/coroutines/channels/ChannelResult;
-HSPLkotlinx/coroutines/channels/ChannelResult;->constructor-impl(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/ChannelResult;->getOrNull-impl(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/ChannelResult;->getOrThrow-impl(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/ChannelResult;->isClosed-impl(Ljava/lang/Object;)Z
-HSPLkotlinx/coroutines/channels/ChannelResult;->unbox-impl()Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/ConflatedChannel;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLkotlinx/coroutines/channels/ConflatedChannel;->enqueueReceiveInternal(Lkotlinx/coroutines/channels/Receive;)Z
-HSPLkotlinx/coroutines/channels/ConflatedChannel;->isBufferAlwaysEmpty()Z
-HSPLkotlinx/coroutines/channels/ConflatedChannel;->isBufferEmpty()Z
-HSPLkotlinx/coroutines/channels/ConflatedChannel;->offerInternal(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/ConflatedChannel;->pollInternal()Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/ConflatedChannel;->updateValueLocked(Ljava/lang/Object;)Lkotlinx/coroutines/internal/UndeliveredElementException;
-HSPLkotlinx/coroutines/channels/LinkedListChannel;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLkotlinx/coroutines/channels/LinkedListChannel;->isBufferAlwaysEmpty()Z
-HSPLkotlinx/coroutines/channels/LinkedListChannel;->offerInternal(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/ProduceKt;->produce$default(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/channels/ReceiveChannel;
-HSPLkotlinx/coroutines/channels/ProduceKt;->produce(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/channels/ReceiveChannel;
-HSPLkotlinx/coroutines/channels/ProducerCoroutine;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/channels/Channel;)V
-HSPLkotlinx/coroutines/channels/Receive;-><init>()V
-HSPLkotlinx/coroutines/channels/Receive;->getOfferResult()Ljava/lang/Object;
-HSPLkotlinx/coroutines/channels/Receive;->getOfferResult()Lkotlinx/coroutines/internal/Symbol;
-HSPLkotlinx/coroutines/channels/Receive;->resumeOnCancellationFun(Ljava/lang/Object;)Lkotlin/jvm/functions/Function1;
-HSPLkotlinx/coroutines/channels/RendezvousChannel;-><init>(Lkotlin/jvm/functions/Function1;)V
-HSPLkotlinx/coroutines/channels/RendezvousChannel;->isBufferAlwaysEmpty()Z
-HSPLkotlinx/coroutines/channels/Send;-><init>()V
-HSPLkotlinx/coroutines/flow/AbstractFlow$collect$1;-><init>(Lkotlinx/coroutines/flow/AbstractFlow;Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/flow/AbstractFlow$collect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/AbstractFlow;-><init>()V
-HSPLkotlinx/coroutines/flow/AbstractFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2$emit$1;-><init>(Lkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;-><init>(Lkotlinx/coroutines/flow/DistinctFlowImpl;Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/flow/FlowCollector;)V
-HSPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/DistinctFlowImpl;-><init>(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)V
-HSPLkotlinx/coroutines/flow/DistinctFlowImpl;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt;->buffer$default(Lkotlinx/coroutines/flow/Flow;ILkotlinx/coroutines/channels/BufferOverflow;ILjava/lang/Object;)Lkotlinx/coroutines/flow/Flow;
-HSPLkotlinx/coroutines/flow/FlowKt;->buffer(Lkotlinx/coroutines/flow/Flow;ILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/Flow;
-HSPLkotlinx/coroutines/flow/FlowKt;->collect(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt;->collectLatest(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt;->distinctUntilChanged(Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow;
-HSPLkotlinx/coroutines/flow/FlowKt;->dropWhile(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow;
-HSPLkotlinx/coroutines/flow/FlowKt;->emitAll(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/channels/ReceiveChannel;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt;->ensureActive(Lkotlinx/coroutines/flow/FlowCollector;)V
-HSPLkotlinx/coroutines/flow/FlowKt;->first(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt;->flow(Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow;
-HSPLkotlinx/coroutines/flow/FlowKt;->mapLatest(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow;
-HSPLkotlinx/coroutines/flow/FlowKt;->stateIn(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/SharingStarted;Ljava/lang/Object;)Lkotlinx/coroutines/flow/StateFlow;
-HSPLkotlinx/coroutines/flow/FlowKt;->take(Lkotlinx/coroutines/flow/Flow;I)Lkotlinx/coroutines/flow/Flow;
-HSPLkotlinx/coroutines/flow/FlowKt;->transformLatest(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow;
-HSPLkotlinx/coroutines/flow/FlowKt__BuildersKt;->flow(Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow;
-HSPLkotlinx/coroutines/flow/FlowKt__ChannelsKt$emitAllImpl$1;-><init>(Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/flow/FlowKt__ChannelsKt$emitAllImpl$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt__ChannelsKt;->access$emitAllImpl$FlowKt__ChannelsKt(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/channels/ReceiveChannel;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt__ChannelsKt;->emitAll(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/channels/ReceiveChannel;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt__ChannelsKt;->emitAllImpl$FlowKt__ChannelsKt(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/channels/ReceiveChannel;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt__CollectKt;->collect(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt__CollectKt;->collectLatest(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt__ContextKt;->buffer$default(Lkotlinx/coroutines/flow/Flow;ILkotlinx/coroutines/channels/BufferOverflow;ILjava/lang/Object;)Lkotlinx/coroutines/flow/Flow;
-HSPLkotlinx/coroutines/flow/FlowKt__ContextKt;->buffer(Lkotlinx/coroutines/flow/Flow;ILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/Flow;
-HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1;-><clinit>()V
-HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1;-><init>()V
-HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Boolean;
-HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultKeySelector$1;-><clinit>()V
-HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultKeySelector$1;-><init>()V
-HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultKeySelector$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt;-><clinit>()V
-HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt;->distinctUntilChanged(Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow;
-HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt;->distinctUntilChangedBy$FlowKt__DistinctKt(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow;
-HSPLkotlinx/coroutines/flow/FlowKt__EmittersKt;->ensureActive(Lkotlinx/coroutines/flow/FlowCollector;)V
-HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$$inlined$unsafeFlow$1;-><init>(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)V
-HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1$emit$1;-><init>(Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;-><init>(Lkotlin/jvm/internal/Ref$BooleanRef;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/jvm/functions/Function2;)V
-HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$emitAbort$1;-><init>(Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$emitAbort$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$take$$inlined$unsafeFlow$1$1;-><init>(Lkotlinx/coroutines/flow/FlowKt__LimitKt$take$$inlined$unsafeFlow$1;Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$take$$inlined$unsafeFlow$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$take$$inlined$unsafeFlow$1;-><init>(Lkotlinx/coroutines/flow/Flow;I)V
-HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$take$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$take$2$1$emit$1;-><init>(Lkotlinx/coroutines/flow/FlowKt__LimitKt$take$2$1;Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$take$2$1$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$take$2$1;-><init>(Lkotlin/jvm/internal/Ref$IntRef;ILkotlinx/coroutines/flow/FlowCollector;)V
-HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$take$2$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt__LimitKt;->access$emitAbort$FlowKt__LimitKt(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt__LimitKt;->dropWhile(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow;
-HSPLkotlinx/coroutines/flow/FlowKt__LimitKt;->emitAbort$FlowKt__LimitKt(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt__LimitKt;->take(Lkotlinx/coroutines/flow/Flow;I)Lkotlinx/coroutines/flow/Flow;
-HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;-><init>(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt__MergeKt;-><clinit>()V
-HSPLkotlinx/coroutines/flow/FlowKt__MergeKt;->mapLatest(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow;
-HSPLkotlinx/coroutines/flow/FlowKt__MergeKt;->transformLatest(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow;
-HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2$1;-><init>(Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;-><init>(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/internal/Ref$ObjectRef;)V
-HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$3;-><init>(Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt;->first(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2$WhenMappings;-><clinit>()V
-HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;-><init>(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/MutableSharedFlow;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->invoke(Lkotlinx/coroutines/flow/SharingCommand;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;-><init>(Lkotlinx/coroutines/flow/SharingStarted;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/MutableSharedFlow;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/FlowKt__ShareKt;->configureSharing$FlowKt__ShareKt(Lkotlinx/coroutines/flow/Flow;I)Lkotlinx/coroutines/flow/SharingConfig;
-HSPLkotlinx/coroutines/flow/FlowKt__ShareKt;->launchSharing$FlowKt__ShareKt(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/MutableSharedFlow;Lkotlinx/coroutines/flow/SharingStarted;Ljava/lang/Object;)Lkotlinx/coroutines/Job;
-HSPLkotlinx/coroutines/flow/FlowKt__ShareKt;->stateIn(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/SharingStarted;Ljava/lang/Object;)Lkotlinx/coroutines/flow/StateFlow;
-HSPLkotlinx/coroutines/flow/ReadonlyStateFlow;-><init>(Lkotlinx/coroutines/flow/StateFlow;Lkotlinx/coroutines/Job;)V
-HSPLkotlinx/coroutines/flow/ReadonlyStateFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/ReadonlyStateFlow;->getValue()Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/SafeFlow;-><init>(Lkotlin/jvm/functions/Function2;)V
-HSPLkotlinx/coroutines/flow/SafeFlow;->collectSafely(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/SharedFlowImpl$collect$1;-><init>(Lkotlinx/coroutines/flow/SharedFlowImpl;Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/flow/SharedFlowImpl$collect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;-><init>(IILkotlinx/coroutines/channels/BufferOverflow;)V
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->access$tryPeekLocked(Lkotlinx/coroutines/flow/SharedFlowImpl;Lkotlinx/coroutines/flow/SharedFlowSlot;)J
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->awaitValue(Lkotlinx/coroutines/flow/SharedFlowSlot;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->cleanupTailLocked()V
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->collect$suspendImpl(Lkotlinx/coroutines/flow/SharedFlowImpl;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->createSlot()Lkotlinx/coroutines/flow/SharedFlowSlot;
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->createSlot()Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->createSlotArray(I)[Lkotlinx/coroutines/flow/SharedFlowSlot;
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->createSlotArray(I)[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->dropOldestLocked()V
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->emit$suspendImpl(Lkotlinx/coroutines/flow/SharedFlowImpl;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->enqueueLocked(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->findSlotsToResumeLocked([Lkotlin/coroutines/Continuation;)[Lkotlin/coroutines/Continuation;
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->getBufferEndIndex()J
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->getHead()J
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->getLastReplayedLocked()Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->getPeekedValueLockedAt(J)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->getQueueEndIndex()J
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->getReplaySize()I
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->getTotalSize()I
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->growBuffer([Ljava/lang/Object;II)[Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->tryEmit(Ljava/lang/Object;)Z
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->tryEmitLocked(Ljava/lang/Object;)Z
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->tryEmitNoCollectorsLocked(Ljava/lang/Object;)Z
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->tryPeekLocked(Lkotlinx/coroutines/flow/SharedFlowSlot;)J
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->tryTakeValue(Lkotlinx/coroutines/flow/SharedFlowSlot;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->updateBufferLocked(JJJJ)V
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->updateCollectorIndexLocked$external__kotlinx_coroutines__android_common__kotlinx_coroutines(J)[Lkotlin/coroutines/Continuation;
-HSPLkotlinx/coroutines/flow/SharedFlowImpl;->updateNewCollectorIndexLocked$external__kotlinx_coroutines__android_common__kotlinx_coroutines()J
-HSPLkotlinx/coroutines/flow/SharedFlowKt;-><clinit>()V
-HSPLkotlinx/coroutines/flow/SharedFlowKt;->MutableSharedFlow$default(IILkotlinx/coroutines/channels/BufferOverflow;ILjava/lang/Object;)Lkotlinx/coroutines/flow/MutableSharedFlow;
-HSPLkotlinx/coroutines/flow/SharedFlowKt;->MutableSharedFlow(IILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/MutableSharedFlow;
-HSPLkotlinx/coroutines/flow/SharedFlowKt;->access$getBufferAt([Ljava/lang/Object;J)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/SharedFlowKt;->access$setBufferAt([Ljava/lang/Object;JLjava/lang/Object;)V
-HSPLkotlinx/coroutines/flow/SharedFlowKt;->getBufferAt([Ljava/lang/Object;J)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/SharedFlowKt;->setBufferAt([Ljava/lang/Object;JLjava/lang/Object;)V
-HSPLkotlinx/coroutines/flow/SharedFlowSlot;-><init>()V
-HSPLkotlinx/coroutines/flow/SharedFlowSlot;->allocateLocked(Ljava/lang/Object;)Z
-HSPLkotlinx/coroutines/flow/SharedFlowSlot;->allocateLocked(Lkotlinx/coroutines/flow/SharedFlowImpl;)Z
-HSPLkotlinx/coroutines/flow/SharedFlowSlot;->freeLocked(Ljava/lang/Object;)[Lkotlin/coroutines/Continuation;
-HSPLkotlinx/coroutines/flow/SharedFlowSlot;->freeLocked(Lkotlinx/coroutines/flow/SharedFlowImpl;)[Lkotlin/coroutines/Continuation;
-HSPLkotlinx/coroutines/flow/SharingCommand;->$values()[Lkotlinx/coroutines/flow/SharingCommand;
-HSPLkotlinx/coroutines/flow/SharingCommand;-><clinit>()V
-HSPLkotlinx/coroutines/flow/SharingCommand;-><init>(Ljava/lang/String;I)V
-HSPLkotlinx/coroutines/flow/SharingCommand;->values()[Lkotlinx/coroutines/flow/SharingCommand;
-HSPLkotlinx/coroutines/flow/SharingConfig;-><init>(Lkotlinx/coroutines/flow/Flow;ILkotlinx/coroutines/channels/BufferOverflow;Lkotlin/coroutines/CoroutineContext;)V
-HSPLkotlinx/coroutines/flow/SharingStarted$Companion;-><clinit>()V
-HSPLkotlinx/coroutines/flow/SharingStarted$Companion;-><init>()V
-HSPLkotlinx/coroutines/flow/SharingStarted$Companion;->WhileSubscribed$default(Lkotlinx/coroutines/flow/SharingStarted$Companion;JJILjava/lang/Object;)Lkotlinx/coroutines/flow/SharingStarted;
-HSPLkotlinx/coroutines/flow/SharingStarted$Companion;->WhileSubscribed(JJ)Lkotlinx/coroutines/flow/SharingStarted;
-HSPLkotlinx/coroutines/flow/SharingStarted$Companion;->getEagerly()Lkotlinx/coroutines/flow/SharingStarted;
-HSPLkotlinx/coroutines/flow/SharingStarted$Companion;->getLazily()Lkotlinx/coroutines/flow/SharingStarted;
-HSPLkotlinx/coroutines/flow/SharingStarted;-><clinit>()V
-HSPLkotlinx/coroutines/flow/StartedEagerly;-><init>()V
-HSPLkotlinx/coroutines/flow/StartedLazily;-><init>()V
-HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;-><init>(Lkotlinx/coroutines/flow/StartedWhileSubscribed;Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;ILkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;-><init>(Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->invoke(Lkotlinx/coroutines/flow/SharingCommand;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/StartedWhileSubscribed;-><init>(JJ)V
-HSPLkotlinx/coroutines/flow/StartedWhileSubscribed;->access$getReplayExpiration$p(Lkotlinx/coroutines/flow/StartedWhileSubscribed;)J
-HSPLkotlinx/coroutines/flow/StartedWhileSubscribed;->access$getStopTimeout$p(Lkotlinx/coroutines/flow/StartedWhileSubscribed;)J
-HSPLkotlinx/coroutines/flow/StartedWhileSubscribed;->command(Lkotlinx/coroutines/flow/StateFlow;)Lkotlinx/coroutines/flow/Flow;
-HSPLkotlinx/coroutines/flow/StartedWhileSubscribed;->equals(Ljava/lang/Object;)Z
-HSPLkotlinx/coroutines/flow/StateFlowImpl$collect$1;-><init>(Lkotlinx/coroutines/flow/StateFlowImpl;Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/flow/StateFlowImpl$collect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/StateFlowImpl;-><init>(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/flow/StateFlowImpl;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/StateFlowImpl;->compareAndSet(Ljava/lang/Object;Ljava/lang/Object;)Z
-HSPLkotlinx/coroutines/flow/StateFlowImpl;->createSlot()Lkotlinx/coroutines/flow/StateFlowSlot;
-HSPLkotlinx/coroutines/flow/StateFlowImpl;->createSlot()Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;
-HSPLkotlinx/coroutines/flow/StateFlowImpl;->createSlotArray(I)[Lkotlinx/coroutines/flow/StateFlowSlot;
-HSPLkotlinx/coroutines/flow/StateFlowImpl;->createSlotArray(I)[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;
-HSPLkotlinx/coroutines/flow/StateFlowImpl;->getValue()Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/StateFlowImpl;->setValue(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/flow/StateFlowImpl;->updateState(Ljava/lang/Object;Ljava/lang/Object;)Z
-HSPLkotlinx/coroutines/flow/StateFlowKt;-><clinit>()V
-HSPLkotlinx/coroutines/flow/StateFlowKt;->MutableStateFlow(Ljava/lang/Object;)Lkotlinx/coroutines/flow/MutableStateFlow;
-HSPLkotlinx/coroutines/flow/StateFlowKt;->access$getNONE$p()Lkotlinx/coroutines/internal/Symbol;
-HSPLkotlinx/coroutines/flow/StateFlowKt;->access$getPENDING$p()Lkotlinx/coroutines/internal/Symbol;
-HSPLkotlinx/coroutines/flow/StateFlowSlot;-><init>()V
-HSPLkotlinx/coroutines/flow/StateFlowSlot;->access$get_state$p(Lkotlinx/coroutines/flow/StateFlowSlot;)Lkotlinx/atomicfu/AtomicRef;
-HSPLkotlinx/coroutines/flow/StateFlowSlot;->allocateLocked(Ljava/lang/Object;)Z
-HSPLkotlinx/coroutines/flow/StateFlowSlot;->allocateLocked(Lkotlinx/coroutines/flow/StateFlowImpl;)Z
-HSPLkotlinx/coroutines/flow/StateFlowSlot;->awaitPending(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/StateFlowSlot;->freeLocked(Ljava/lang/Object;)[Lkotlin/coroutines/Continuation;
-HSPLkotlinx/coroutines/flow/StateFlowSlot;->freeLocked(Lkotlinx/coroutines/flow/StateFlowImpl;)[Lkotlin/coroutines/Continuation;
-HSPLkotlinx/coroutines/flow/StateFlowSlot;->makePending()V
-HSPLkotlinx/coroutines/flow/StateFlowSlot;->takePending()Z
-HSPLkotlinx/coroutines/flow/internal/AbortFlowException;-><init>(Lkotlinx/coroutines/flow/FlowCollector;)V
-HSPLkotlinx/coroutines/flow/internal/AbortFlowException;->fillInStackTrace()Ljava/lang/Throwable;
-HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;-><init>()V
-HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->access$getNCollectors(Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;)I
-HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->access$getSlots(Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;)[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;
-HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->allocateSlot()Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;
-HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->freeSlot(Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;)V
-HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->getNCollectors()I
-HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->getSlots()[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;
-HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->getSubscriptionCount()Lkotlinx/coroutines/flow/StateFlow;
-HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlowKt;-><clinit>()V
-HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;-><init>()V
-HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;-><init>(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/flow/internal/ChannelFlow;Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1;-><init>(Lkotlinx/coroutines/flow/internal/ChannelFlow;Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/ChannelFlow;-><init>(Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V
-HSPLkotlinx/coroutines/flow/internal/ChannelFlow;->collect$suspendImpl(Lkotlinx/coroutines/flow/internal/ChannelFlow;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/ChannelFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/ChannelFlow;->fuse(Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/Flow;
-HSPLkotlinx/coroutines/flow/internal/ChannelFlow;->getCollectToFun$external__kotlinx_coroutines__android_common__kotlinx_coroutines()Lkotlin/jvm/functions/Function2;
-HSPLkotlinx/coroutines/flow/internal/ChannelFlow;->getProduceCapacity$external__kotlinx_coroutines__android_common__kotlinx_coroutines()I
-HSPLkotlinx/coroutines/flow/internal/ChannelFlow;->produceImpl(Lkotlinx/coroutines/CoroutineScope;)Lkotlinx/coroutines/channels/ReceiveChannel;
-HSPLkotlinx/coroutines/flow/internal/ChannelFlowOperator;-><init>(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V
-HSPLkotlinx/coroutines/flow/internal/ChannelFlowOperator;->collect$suspendImpl(Lkotlinx/coroutines/flow/internal/ChannelFlowOperator;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/ChannelFlowOperator;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/ChannelFlowOperator;->collectTo$suspendImpl(Lkotlinx/coroutines/flow/internal/ChannelFlowOperator;Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/ChannelFlowOperator;->collectTo(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;-><init>(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$emit$1;-><init>(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;-><init>(Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;Lkotlinx/coroutines/flow/FlowCollector;)V
-HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;-><init>(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;-><init>(Lkotlin/jvm/functions/Function3;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V
-HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;-><init>(Lkotlin/jvm/functions/Function3;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;->access$getTransform$p(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;)Lkotlin/jvm/functions/Function3;
-HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;->create(Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/internal/ChannelFlow;
-HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;->flowCollect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/ChildCancelledException;-><init>()V
-HSPLkotlinx/coroutines/flow/internal/ChildCancelledException;->fillInStackTrace()Ljava/lang/Throwable;
-HSPLkotlinx/coroutines/flow/internal/DownstreamExceptionContext;-><init>(Ljava/lang/Throwable;Lkotlin/coroutines/CoroutineContext;)V
-HSPLkotlinx/coroutines/flow/internal/FlowExceptions_commonKt;->checkOwnership(Lkotlinx/coroutines/flow/internal/AbortFlowException;Lkotlinx/coroutines/flow/FlowCollector;)V
-HSPLkotlinx/coroutines/flow/internal/FusibleFlow$DefaultImpls;->fuse$default(Lkotlinx/coroutines/flow/internal/FusibleFlow;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;ILjava/lang/Object;)Lkotlinx/coroutines/flow/Flow;
-HSPLkotlinx/coroutines/flow/internal/NoOpContinuation;-><clinit>()V
-HSPLkotlinx/coroutines/flow/internal/NoOpContinuation;-><init>()V
-HSPLkotlinx/coroutines/flow/internal/NopCollector;-><clinit>()V
-HSPLkotlinx/coroutines/flow/internal/NopCollector;-><init>()V
-HSPLkotlinx/coroutines/flow/internal/NopCollector;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/NullSurrogateKt;-><clinit>()V
-HSPLkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1;-><clinit>()V
-HSPLkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1;-><init>()V
-HSPLkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1;->invoke(ILkotlin/coroutines/CoroutineContext$Element;)Ljava/lang/Integer;
-HSPLkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/SafeCollector;-><init>(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/CoroutineContext;)V
-HSPLkotlinx/coroutines/flow/internal/SafeCollector;->checkContext(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/flow/internal/SafeCollector;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/SafeCollector;->emit(Lkotlin/coroutines/Continuation;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/SafeCollector;->getContext()Lkotlin/coroutines/CoroutineContext;
-HSPLkotlinx/coroutines/flow/internal/SafeCollector;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/SafeCollector;->releaseIntercepted()V
-HSPLkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1;-><clinit>()V
-HSPLkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1;-><init>()V
-HSPLkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/SafeCollectorKt;-><clinit>()V
-HSPLkotlinx/coroutines/flow/internal/SafeCollectorKt;->access$getEmitFun$p()Lkotlin/jvm/functions/Function3;
-HSPLkotlinx/coroutines/flow/internal/SafeCollector_commonKt$checkContext$result$1;-><init>(Lkotlinx/coroutines/flow/internal/SafeCollector;)V
-HSPLkotlinx/coroutines/flow/internal/SafeCollector_commonKt$checkContext$result$1;->invoke(ILkotlin/coroutines/CoroutineContext$Element;)Ljava/lang/Integer;
-HSPLkotlinx/coroutines/flow/internal/SafeCollector_commonKt$checkContext$result$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/SafeCollector_commonKt;->checkContext(Lkotlinx/coroutines/flow/internal/SafeCollector;Lkotlin/coroutines/CoroutineContext;)V
-HSPLkotlinx/coroutines/flow/internal/SafeCollector_commonKt;->transitiveCoroutineParent(Lkotlinx/coroutines/Job;Lkotlinx/coroutines/Job;)Lkotlinx/coroutines/Job;
-HSPLkotlinx/coroutines/flow/internal/SendingCollector;-><init>(Lkotlinx/coroutines/channels/SendChannel;)V
-HSPLkotlinx/coroutines/flow/internal/SendingCollector;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/flow/internal/SubscriptionCountStateFlow;-><init>(I)V
-HSPLkotlinx/coroutines/flow/internal/SubscriptionCountStateFlow;->increment(I)Z
-HSPLkotlinx/coroutines/internal/AtomicKt;-><clinit>()V
-HSPLkotlinx/coroutines/internal/AtomicOp;-><init>()V
-HSPLkotlinx/coroutines/internal/AtomicOp;->decide(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/internal/AtomicOp;->perform(Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/internal/ContextScope;-><init>(Lkotlin/coroutines/CoroutineContext;)V
-HSPLkotlinx/coroutines/internal/ContextScope;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext;
-HSPLkotlinx/coroutines/internal/DispatchedContinuation;-><init>(Lkotlinx/coroutines/CoroutineDispatcher;Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/internal/DispatchedContinuation;->awaitReusability()V
-HSPLkotlinx/coroutines/internal/DispatchedContinuation;->claimReusableCancellableContinuation()Lkotlinx/coroutines/CancellableContinuationImpl;
-HSPLkotlinx/coroutines/internal/DispatchedContinuation;->getContext()Lkotlin/coroutines/CoroutineContext;
-HSPLkotlinx/coroutines/internal/DispatchedContinuation;->getDelegate$external__kotlinx_coroutines__android_common__kotlinx_coroutines()Lkotlin/coroutines/Continuation;
-HSPLkotlinx/coroutines/internal/DispatchedContinuation;->getReusableCancellableContinuation()Lkotlinx/coroutines/CancellableContinuationImpl;
-HSPLkotlinx/coroutines/internal/DispatchedContinuation;->isReusable()Z
-HSPLkotlinx/coroutines/internal/DispatchedContinuation;->postponeCancellation(Ljava/lang/Throwable;)Z
-HSPLkotlinx/coroutines/internal/DispatchedContinuation;->release()V
-HSPLkotlinx/coroutines/internal/DispatchedContinuation;->resumeWith(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/internal/DispatchedContinuation;->takeState$external__kotlinx_coroutines__android_common__kotlinx_coroutines()Ljava/lang/Object;
-HSPLkotlinx/coroutines/internal/DispatchedContinuation;->tryReleaseClaimedContinuation(Lkotlinx/coroutines/CancellableContinuation;)Ljava/lang/Throwable;
-HSPLkotlinx/coroutines/internal/DispatchedContinuationKt;-><clinit>()V
-HSPLkotlinx/coroutines/internal/DispatchedContinuationKt;->access$getUNDEFINED$p()Lkotlinx/coroutines/internal/Symbol;
-HSPLkotlinx/coroutines/internal/DispatchedContinuationKt;->resumeCancellableWith(Lkotlin/coroutines/Continuation;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V
-HSPLkotlinx/coroutines/internal/LimitedDispatcher;-><init>(Lkotlinx/coroutines/CoroutineDispatcher;I)V
-HSPLkotlinx/coroutines/internal/LimitedDispatcherKt;->checkParallelism(I)V
-HSPLkotlinx/coroutines/internal/LockFreeLinkedListHead;-><init>()V
-HSPLkotlinx/coroutines/internal/LockFreeLinkedListHead;->isRemoved()Z
-HSPLkotlinx/coroutines/internal/LockFreeLinkedListKt;-><clinit>()V
-HSPLkotlinx/coroutines/internal/LockFreeLinkedListKt;->unwrap(Ljava/lang/Object;)Lkotlinx/coroutines/internal/LockFreeLinkedListNode;
-HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode$CondAddOp;-><init>(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V
-HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode$CondAddOp;->complete(Ljava/lang/Object;Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode$CondAddOp;->complete(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;-><init>()V
-HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->access$finishAdd(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V
-HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->access$get_next$p(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)Lkotlinx/atomicfu/AtomicRef;
-HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->addLast(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V
-HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->addNext(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)Z
-HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->addOneIfEmpty(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)Z
-HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->correctPrev(Lkotlinx/coroutines/internal/OpDescriptor;)Lkotlinx/coroutines/internal/LockFreeLinkedListNode;
-HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->findPrevNonRemoved(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)Lkotlinx/coroutines/internal/LockFreeLinkedListNode;
-HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->finishAdd(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V
-HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->getNext()Ljava/lang/Object;
-HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->getNextNode()Lkotlinx/coroutines/internal/LockFreeLinkedListNode;
-HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->getPrevNode()Lkotlinx/coroutines/internal/LockFreeLinkedListNode;
-HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->isRemoved()Z
-HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->remove()Z
-HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->removeFirstOrNull()Lkotlinx/coroutines/internal/LockFreeLinkedListNode;
-HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->removeOrNext()Lkotlinx/coroutines/internal/LockFreeLinkedListNode;
-HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->removed()Lkotlinx/coroutines/internal/Removed;
-HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->tryCondAddNext(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/internal/LockFreeLinkedListNode$CondAddOp;)I
-HSPLkotlinx/coroutines/internal/LockFreeTaskQueue;-><init>(Z)V
-HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore$Companion;-><init>()V
-HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;-><clinit>()V
-HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;-><init>(IZ)V
-HSPLkotlinx/coroutines/internal/MainDispatcherLoader;-><clinit>()V
-HSPLkotlinx/coroutines/internal/MainDispatcherLoader;-><init>()V
-HSPLkotlinx/coroutines/internal/MainDispatcherLoader;->loadMainDispatcher()Lkotlinx/coroutines/MainCoroutineDispatcher;
-HSPLkotlinx/coroutines/internal/MainDispatchersKt;-><clinit>()V
-HSPLkotlinx/coroutines/internal/MainDispatchersKt;->tryCreateDispatcher(Lkotlinx/coroutines/internal/MainDispatcherFactory;Ljava/util/List;)Lkotlinx/coroutines/MainCoroutineDispatcher;
-HSPLkotlinx/coroutines/internal/OpDescriptor;-><init>()V
-HSPLkotlinx/coroutines/internal/Removed;-><init>(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V
-HSPLkotlinx/coroutines/internal/ResizableAtomicArray;-><init>(I)V
-HSPLkotlinx/coroutines/internal/ScopeCoroutine;-><init>(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/internal/ScopeCoroutine;->afterResume(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/internal/ScopeCoroutine;->isScopedCoroutine()Z
-HSPLkotlinx/coroutines/internal/Symbol;-><init>(Ljava/lang/String;)V
-HSPLkotlinx/coroutines/internal/SystemPropsKt;->getAVAILABLE_PROCESSORS()I
-HSPLkotlinx/coroutines/internal/SystemPropsKt;->systemProp$default(Ljava/lang/String;IIIILjava/lang/Object;)I
-HSPLkotlinx/coroutines/internal/SystemPropsKt;->systemProp$default(Ljava/lang/String;JJJILjava/lang/Object;)J
-HSPLkotlinx/coroutines/internal/SystemPropsKt;->systemProp(Ljava/lang/String;)Ljava/lang/String;
-HSPLkotlinx/coroutines/internal/SystemPropsKt;->systemProp(Ljava/lang/String;III)I
-HSPLkotlinx/coroutines/internal/SystemPropsKt;->systemProp(Ljava/lang/String;JJJ)J
-HSPLkotlinx/coroutines/internal/SystemPropsKt;->systemProp(Ljava/lang/String;Z)Z
-HSPLkotlinx/coroutines/internal/SystemPropsKt__SystemPropsKt;-><clinit>()V
-HSPLkotlinx/coroutines/internal/SystemPropsKt__SystemPropsKt;->getAVAILABLE_PROCESSORS()I
-HSPLkotlinx/coroutines/internal/SystemPropsKt__SystemPropsKt;->systemProp(Ljava/lang/String;)Ljava/lang/String;
-HSPLkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt;->systemProp$default(Ljava/lang/String;IIIILjava/lang/Object;)I
-HSPLkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt;->systemProp$default(Ljava/lang/String;JJJILjava/lang/Object;)J
-HSPLkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt;->systemProp(Ljava/lang/String;III)I
-HSPLkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt;->systemProp(Ljava/lang/String;JJJ)J
-HSPLkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt;->systemProp(Ljava/lang/String;Z)Z
-HSPLkotlinx/coroutines/internal/ThreadContextKt$countAll$1;-><clinit>()V
-HSPLkotlinx/coroutines/internal/ThreadContextKt$countAll$1;-><init>()V
-HSPLkotlinx/coroutines/internal/ThreadContextKt$countAll$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/internal/ThreadContextKt$countAll$1;->invoke(Ljava/lang/Object;Lkotlin/coroutines/CoroutineContext$Element;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/internal/ThreadContextKt$findOne$1;-><clinit>()V
-HSPLkotlinx/coroutines/internal/ThreadContextKt$findOne$1;-><init>()V
-HSPLkotlinx/coroutines/internal/ThreadContextKt$updateState$1;-><clinit>()V
-HSPLkotlinx/coroutines/internal/ThreadContextKt$updateState$1;-><init>()V
-HSPLkotlinx/coroutines/internal/ThreadContextKt;-><clinit>()V
-HSPLkotlinx/coroutines/internal/ThreadContextKt;->restoreThreadContext(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/internal/ThreadContextKt;->threadContextElements(Lkotlin/coroutines/CoroutineContext;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/internal/ThreadContextKt;->updateThreadContext(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/intrinsics/CancellableKt;->startCoroutineCancellable$default(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V
-HSPLkotlinx/coroutines/intrinsics/CancellableKt;->startCoroutineCancellable(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function1;)V
-HSPLkotlinx/coroutines/intrinsics/UndispatchedKt;->startCoroutineUndispatched(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V
-HSPLkotlinx/coroutines/intrinsics/UndispatchedKt;->startUndispatchedOrReturn(Lkotlinx/coroutines/internal/ScopeCoroutine;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Companion;-><init>()V
-HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Companion;-><init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
-HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;-><clinit>()V
-HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;-><init>(IIJLjava/lang/String;)V
-HSPLkotlinx/coroutines/scheduling/DefaultIoScheduler;-><clinit>()V
-HSPLkotlinx/coroutines/scheduling/DefaultIoScheduler;-><init>()V
-HSPLkotlinx/coroutines/scheduling/DefaultScheduler;-><clinit>()V
-HSPLkotlinx/coroutines/scheduling/DefaultScheduler;-><init>()V
-HSPLkotlinx/coroutines/scheduling/GlobalQueue;-><init>()V
-HSPLkotlinx/coroutines/scheduling/NanoTimeSource;-><clinit>()V
-HSPLkotlinx/coroutines/scheduling/NanoTimeSource;-><init>()V
-HSPLkotlinx/coroutines/scheduling/SchedulerCoroutineDispatcher;-><init>(IIJLjava/lang/String;)V
-HSPLkotlinx/coroutines/scheduling/SchedulerCoroutineDispatcher;->createScheduler()Lkotlinx/coroutines/scheduling/CoroutineScheduler;
-HSPLkotlinx/coroutines/scheduling/SchedulerTimeSource;-><init>()V
-HSPLkotlinx/coroutines/scheduling/Task;-><init>()V
-HSPLkotlinx/coroutines/scheduling/Task;-><init>(JLkotlinx/coroutines/scheduling/TaskContext;)V
-HSPLkotlinx/coroutines/scheduling/TaskContextImpl;-><init>(I)V
-HSPLkotlinx/coroutines/scheduling/TaskContextImpl;->afterTask()V
-HSPLkotlinx/coroutines/scheduling/TasksKt;-><clinit>()V
-HSPLkotlinx/coroutines/scheduling/UnlimitedIoScheduler;-><clinit>()V
-HSPLkotlinx/coroutines/scheduling/UnlimitedIoScheduler;-><init>()V
-HSPLkotlinx/coroutines/sync/Empty;-><init>(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/sync/Mutex$DefaultImpls;->lock$default(Lkotlinx/coroutines/sync/Mutex;Ljava/lang/Object;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/sync/Mutex$DefaultImpls;->unlock$default(Lkotlinx/coroutines/sync/Mutex;Ljava/lang/Object;ILjava/lang/Object;)V
-HSPLkotlinx/coroutines/sync/MutexImpl$LockCont$tryResumeLockWaiter$1;-><init>(Lkotlinx/coroutines/sync/MutexImpl;Lkotlinx/coroutines/sync/MutexImpl$LockCont;)V
-HSPLkotlinx/coroutines/sync/MutexImpl$LockCont;-><init>(Lkotlinx/coroutines/sync/MutexImpl;Ljava/lang/Object;Lkotlinx/coroutines/CancellableContinuation;)V
-HSPLkotlinx/coroutines/sync/MutexImpl$LockCont;->completeResumeLockWaiter()V
-HSPLkotlinx/coroutines/sync/MutexImpl$LockCont;->tryResumeLockWaiter()Z
-HSPLkotlinx/coroutines/sync/MutexImpl$LockWaiter;-><init>(Lkotlinx/coroutines/sync/MutexImpl;Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/sync/MutexImpl$LockWaiter;->take()Z
-HSPLkotlinx/coroutines/sync/MutexImpl$LockedQueue;-><init>(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/sync/MutexImpl;-><init>(Z)V
-HSPLkotlinx/coroutines/sync/MutexImpl;->access$get_state$p(Lkotlinx/coroutines/sync/MutexImpl;)Lkotlinx/atomicfu/AtomicRef;
-HSPLkotlinx/coroutines/sync/MutexImpl;->lock(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/sync/MutexImpl;->lockSuspend(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-HSPLkotlinx/coroutines/sync/MutexImpl;->tryLock(Ljava/lang/Object;)Z
-HSPLkotlinx/coroutines/sync/MutexImpl;->unlock(Ljava/lang/Object;)V
-HSPLkotlinx/coroutines/sync/MutexKt;-><clinit>()V
-HSPLkotlinx/coroutines/sync/MutexKt;->Mutex$default(ZILjava/lang/Object;)Lkotlinx/coroutines/sync/Mutex;
-HSPLkotlinx/coroutines/sync/MutexKt;->Mutex(Z)Lkotlinx/coroutines/sync/Mutex;
-HSPLkotlinx/coroutines/sync/MutexKt;->access$getEMPTY_LOCKED$p()Lkotlinx/coroutines/sync/Empty;
-HSPLkotlinx/coroutines/sync/MutexKt;->access$getEMPTY_UNLOCKED$p()Lkotlinx/coroutines/sync/Empty;
-HSPLkotlinx/coroutines/sync/MutexKt;->access$getLOCKED$p()Lkotlinx/coroutines/internal/Symbol;
-HSPLkotlinx/coroutines/sync/MutexKt;->access$getUNLOCKED$p()Lkotlinx/coroutines/internal/Symbol;
-Landroidx/activity/Cancellable;
-Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda0;
-Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda1;
-Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda2;
-Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda3;
-Landroidx/activity/ComponentActivity$1;
-Landroidx/activity/ComponentActivity$2;
-Landroidx/activity/ComponentActivity$3;
-Landroidx/activity/ComponentActivity$4;
-Landroidx/activity/ComponentActivity$5;
-Landroidx/activity/ComponentActivity$Api19Impl;
-Landroidx/activity/ComponentActivity$Api33Impl;
-Landroidx/activity/ComponentActivity$NonConfigurationInstances;
-Landroidx/activity/ComponentActivity$ReportFullyDrawnExecutor;
-Landroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;
-Landroidx/activity/ComponentActivity;
-Landroidx/activity/FullyDrawnReporter$$ExternalSyntheticLambda0;
-Landroidx/activity/FullyDrawnReporter;
-Landroidx/activity/FullyDrawnReporterOwner;
-Landroidx/activity/OnBackPressedCallback;
-Landroidx/activity/OnBackPressedDispatcher$1;
-Landroidx/activity/OnBackPressedDispatcher$2;
-Landroidx/activity/OnBackPressedDispatcher$Api33Impl$$ExternalSyntheticLambda0;
-Landroidx/activity/OnBackPressedDispatcher$Api33Impl;
-Landroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;
-Landroidx/activity/OnBackPressedDispatcher$OnBackPressedCancellable;
-Landroidx/activity/OnBackPressedDispatcher;
-Landroidx/activity/OnBackPressedDispatcherOwner;
-Landroidx/activity/R$id;
-Landroidx/activity/ViewTreeFullyDrawnReporterOwner;
-Landroidx/activity/ViewTreeOnBackPressedDispatcherOwner;
-Landroidx/activity/compose/ActivityResultLauncherHolder;
-Landroidx/activity/compose/ActivityResultRegistryKt$rememberLauncherForActivityResult$1$1;
-Landroidx/activity/compose/ActivityResultRegistryKt$rememberLauncherForActivityResult$1$invoke$$inlined$onDispose$1;
-Landroidx/activity/compose/ActivityResultRegistryKt$rememberLauncherForActivityResult$1;
-Landroidx/activity/compose/ActivityResultRegistryKt$rememberLauncherForActivityResult$key$1;
-Landroidx/activity/compose/ActivityResultRegistryKt;
-Landroidx/activity/compose/ComponentActivityKt;
-Landroidx/activity/compose/LocalActivityResultRegistryOwner$LocalComposition$1;
-Landroidx/activity/compose/LocalActivityResultRegistryOwner;
-Landroidx/activity/compose/ManagedActivityResultLauncher;
-Landroidx/activity/contextaware/ContextAwareHelper;
-Landroidx/activity/contextaware/OnContextAvailableListener;
-Landroidx/activity/result/ActivityResult;
-Landroidx/activity/result/ActivityResultCallback;
-Landroidx/activity/result/ActivityResultLauncher;
-Landroidx/activity/result/ActivityResultRegistry$$ExternalSyntheticThrowCCEIfNotNull0;
-Landroidx/activity/result/ActivityResultRegistry$3;
-Landroidx/activity/result/ActivityResultRegistry$CallbackAndContract;
-Landroidx/activity/result/ActivityResultRegistry;
-Landroidx/activity/result/ActivityResultRegistryOwner;
-Landroidx/activity/result/contract/ActivityResultContract;
-Landroidx/arch/core/executor/ArchTaskExecutor$$ExternalSyntheticLambda0;
-Landroidx/arch/core/executor/ArchTaskExecutor$$ExternalSyntheticLambda1;
-Landroidx/arch/core/executor/ArchTaskExecutor;
-Landroidx/arch/core/executor/DefaultTaskExecutor$1;
-Landroidx/arch/core/executor/DefaultTaskExecutor;
-Landroidx/arch/core/executor/TaskExecutor;
-Landroidx/arch/core/internal/FastSafeIterableMap;
-Landroidx/arch/core/internal/SafeIterableMap$AscendingIterator;
-Landroidx/arch/core/internal/SafeIterableMap$DescendingIterator;
-Landroidx/arch/core/internal/SafeIterableMap$Entry;
-Landroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;
-Landroidx/arch/core/internal/SafeIterableMap$ListIterator;
-Landroidx/arch/core/internal/SafeIterableMap$SupportRemove;
-Landroidx/arch/core/internal/SafeIterableMap;
-Landroidx/collection/ArraySet$Companion;
-Landroidx/collection/ArraySet;
-Landroidx/collection/LruCache;
-Landroidx/collection/SimpleArrayMap;
-Landroidx/collection/SparseArrayCompat;
-Landroidx/collection/internal/ContainerHelpersKt;
-Landroidx/collection/internal/Lock;
-Landroidx/collection/internal/LruHashMap;
-Landroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$1;
-Landroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$2;
-Landroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1;
-Landroidx/compose/animation/ColorVectorConverterKt;
-Landroidx/compose/animation/FlingCalculator;
-Landroidx/compose/animation/FlingCalculatorKt;
-Landroidx/compose/animation/SingleValueAnimationKt;
-Landroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;
-Landroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;
-Landroidx/compose/animation/core/Animatable$runAnimation$2$1;
-Landroidx/compose/animation/core/Animatable$runAnimation$2;
-Landroidx/compose/animation/core/Animatable;
-Landroidx/compose/animation/core/AnimatableKt;
-Landroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$2;
-Landroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1;
-Landroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;
-Landroidx/compose/animation/core/AnimateAsStateKt;
-Landroidx/compose/animation/core/Animation;
-Landroidx/compose/animation/core/AnimationEndReason;
-Landroidx/compose/animation/core/AnimationKt;
-Landroidx/compose/animation/core/AnimationResult;
-Landroidx/compose/animation/core/AnimationScope;
-Landroidx/compose/animation/core/AnimationSpec;
-Landroidx/compose/animation/core/AnimationSpecKt;
-Landroidx/compose/animation/core/AnimationState;
-Landroidx/compose/animation/core/AnimationStateKt;
-Landroidx/compose/animation/core/AnimationVector1D;
-Landroidx/compose/animation/core/AnimationVector4D;
-Landroidx/compose/animation/core/AnimationVector;
-Landroidx/compose/animation/core/AnimationVectorsKt;
-Landroidx/compose/animation/core/Animations;
-Landroidx/compose/animation/core/ComplexDouble;
-Landroidx/compose/animation/core/ComplexDoubleKt;
-Landroidx/compose/animation/core/CubicBezierEasing;
-Landroidx/compose/animation/core/DecayAnimationSpec;
-Landroidx/compose/animation/core/DecayAnimationSpecImpl;
-Landroidx/compose/animation/core/DecayAnimationSpecKt;
-Landroidx/compose/animation/core/Easing;
-Landroidx/compose/animation/core/EasingKt$LinearEasing$1;
-Landroidx/compose/animation/core/EasingKt;
-Landroidx/compose/animation/core/FiniteAnimationSpec;
-Landroidx/compose/animation/core/FloatAnimationSpec;
-Landroidx/compose/animation/core/FloatDecayAnimationSpec;
-Landroidx/compose/animation/core/FloatSpringSpec;
-Landroidx/compose/animation/core/FloatTweenSpec;
-Landroidx/compose/animation/core/Motion;
-Landroidx/compose/animation/core/MutatePriority;
-Landroidx/compose/animation/core/MutatorMutex$Mutator;
-Landroidx/compose/animation/core/MutatorMutex$mutate$2;
-Landroidx/compose/animation/core/MutatorMutex;
-Landroidx/compose/animation/core/SpringEstimationKt$estimateCriticallyDamped$fn$1;
-Landroidx/compose/animation/core/SpringEstimationKt$estimateCriticallyDamped$fnPrime$1;
-Landroidx/compose/animation/core/SpringEstimationKt;
-Landroidx/compose/animation/core/SpringSimulation;
-Landroidx/compose/animation/core/SpringSimulationKt;
-Landroidx/compose/animation/core/SpringSpec;
-Landroidx/compose/animation/core/SuspendAnimationKt$animate$4;
-Landroidx/compose/animation/core/SuspendAnimationKt$animate$6$1;
-Landroidx/compose/animation/core/SuspendAnimationKt$animate$6;
-Landroidx/compose/animation/core/SuspendAnimationKt$animate$7;
-Landroidx/compose/animation/core/SuspendAnimationKt$animate$9;
-Landroidx/compose/animation/core/SuspendAnimationKt$callWithFrameNanos$2;
-Landroidx/compose/animation/core/SuspendAnimationKt;
-Landroidx/compose/animation/core/TargetBasedAnimation;
-Landroidx/compose/animation/core/TweenSpec;
-Landroidx/compose/animation/core/TwoWayConverter;
-Landroidx/compose/animation/core/TwoWayConverterImpl;
-Landroidx/compose/animation/core/VectorConvertersKt$DpOffsetToVector$1;
-Landroidx/compose/animation/core/VectorConvertersKt$DpOffsetToVector$2;
-Landroidx/compose/animation/core/VectorConvertersKt$DpToVector$1;
-Landroidx/compose/animation/core/VectorConvertersKt$DpToVector$2;
-Landroidx/compose/animation/core/VectorConvertersKt$FloatToVector$1;
-Landroidx/compose/animation/core/VectorConvertersKt$FloatToVector$2;
-Landroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$1;
-Landroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$2;
-Landroidx/compose/animation/core/VectorConvertersKt$IntSizeToVector$1;
-Landroidx/compose/animation/core/VectorConvertersKt$IntSizeToVector$2;
-Landroidx/compose/animation/core/VectorConvertersKt$IntToVector$1;
-Landroidx/compose/animation/core/VectorConvertersKt$IntToVector$2;
-Landroidx/compose/animation/core/VectorConvertersKt$OffsetToVector$1;
-Landroidx/compose/animation/core/VectorConvertersKt$OffsetToVector$2;
-Landroidx/compose/animation/core/VectorConvertersKt$RectToVector$1;
-Landroidx/compose/animation/core/VectorConvertersKt$RectToVector$2;
-Landroidx/compose/animation/core/VectorConvertersKt$SizeToVector$1;
-Landroidx/compose/animation/core/VectorConvertersKt$SizeToVector$2;
-Landroidx/compose/animation/core/VectorConvertersKt;
-Landroidx/compose/animation/core/VectorizedAnimationSpec;
-Landroidx/compose/animation/core/VectorizedAnimationSpecKt$createSpringAnimations$2;
-Landroidx/compose/animation/core/VectorizedAnimationSpecKt;
-Landroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec;
-Landroidx/compose/animation/core/VectorizedFiniteAnimationSpec;
-Landroidx/compose/animation/core/VectorizedFloatAnimationSpec$1;
-Landroidx/compose/animation/core/VectorizedFloatAnimationSpec;
-Landroidx/compose/animation/core/VectorizedSpringSpec;
-Landroidx/compose/animation/core/VectorizedTweenSpec;
-Landroidx/compose/animation/core/VisibilityThresholdsKt;
-Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;
-Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;
-Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$onNewSize$1;
-Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;
-Landroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1$1;
-Landroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1;
-Landroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2$1;
-Landroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2;
-Landroidx/compose/foundation/AndroidOverscrollKt;
-Landroidx/compose/foundation/Api31Impl;
-Landroidx/compose/foundation/Background;
-Landroidx/compose/foundation/BackgroundKt;
-Landroidx/compose/foundation/BorderStroke;
-Landroidx/compose/foundation/CanvasKt;
-Landroidx/compose/foundation/CheckScrollableContainerConstraintsKt;
-Landroidx/compose/foundation/ClickableKt$PressedInteractionSourceDisposableEffect$1$invoke$$inlined$onDispose$1;
-Landroidx/compose/foundation/ClickableKt$PressedInteractionSourceDisposableEffect$1;
-Landroidx/compose/foundation/ClickableKt$clickable$4$1$1;
-Landroidx/compose/foundation/ClickableKt$clickable$4$delayPressInteraction$1$1;
-Landroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1$1;
-Landroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1$2;
-Landroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1;
-Landroidx/compose/foundation/ClickableKt$clickable$4;
-Landroidx/compose/foundation/ClickableKt$genericClickableWithoutGesture$clickSemantics$1$1;
-Landroidx/compose/foundation/ClickableKt$genericClickableWithoutGesture$clickSemantics$1;
-Landroidx/compose/foundation/ClickableKt$genericClickableWithoutGesture$detectPressAndClickFromKey$1;
-Landroidx/compose/foundation/ClickableKt$handlePressInteraction$2$delayJob$1;
-Landroidx/compose/foundation/ClickableKt$handlePressInteraction$2;
-Landroidx/compose/foundation/ClickableKt;
-Landroidx/compose/foundation/Clickable_androidKt$isComposeRootInScrollableContainer$1;
-Landroidx/compose/foundation/Clickable_androidKt;
-Landroidx/compose/foundation/ClipScrollableContainerKt$HorizontalScrollableClipModifier$1;
-Landroidx/compose/foundation/ClipScrollableContainerKt$VerticalScrollableClipModifier$1;
-Landroidx/compose/foundation/ClipScrollableContainerKt;
-Landroidx/compose/foundation/DarkThemeKt;
-Landroidx/compose/foundation/DarkTheme_androidKt;
-Landroidx/compose/foundation/DrawOverscrollModifier;
-Landroidx/compose/foundation/EdgeEffectCompat;
-Landroidx/compose/foundation/FocusableKt$focusGroup$1;
-Landroidx/compose/foundation/FocusableKt$focusable$2$1$1$invoke$$inlined$onDispose$1;
-Landroidx/compose/foundation/FocusableKt$focusable$2$1$1;
-Landroidx/compose/foundation/FocusableKt$focusable$2$2$invoke$$inlined$onDispose$1;
-Landroidx/compose/foundation/FocusableKt$focusable$2$2;
-Landroidx/compose/foundation/FocusableKt$focusable$2$3$1$invoke$$inlined$onDispose$1;
-Landroidx/compose/foundation/FocusableKt$focusable$2$3$1;
-Landroidx/compose/foundation/FocusableKt$focusable$2$4$1$1;
-Landroidx/compose/foundation/FocusableKt$focusable$2$4$1;
-Landroidx/compose/foundation/FocusableKt$focusable$2$5$2;
-Landroidx/compose/foundation/FocusableKt$focusable$2$5;
-Landroidx/compose/foundation/FocusableKt$focusable$2;
-Landroidx/compose/foundation/FocusableKt$focusableInNonTouchMode$2$1;
-Landroidx/compose/foundation/FocusableKt$focusableInNonTouchMode$2;
-Landroidx/compose/foundation/FocusableKt;
-Landroidx/compose/foundation/FocusedBoundsKt$ModifierLocalFocusedBoundsObserver$1;
-Landroidx/compose/foundation/FocusedBoundsKt$onFocusedBoundsChanged$2;
-Landroidx/compose/foundation/FocusedBoundsKt;
-Landroidx/compose/foundation/FocusedBoundsObserverModifier;
-Landroidx/compose/foundation/HoverableKt$hoverable$2$1$1$invoke$$inlined$onDispose$1;
-Landroidx/compose/foundation/HoverableKt$hoverable$2$1$1;
-Landroidx/compose/foundation/HoverableKt$hoverable$2$2$1;
-Landroidx/compose/foundation/HoverableKt$hoverable$2$3$1;
-Landroidx/compose/foundation/HoverableKt$hoverable$2$3;
-Landroidx/compose/foundation/HoverableKt$hoverable$2;
-Landroidx/compose/foundation/HoverableKt;
-Landroidx/compose/foundation/ImageKt$Image$2$measure$1;
-Landroidx/compose/foundation/ImageKt$Image$2;
-Landroidx/compose/foundation/ImageKt;
-Landroidx/compose/foundation/Indication;
-Landroidx/compose/foundation/IndicationInstance;
-Landroidx/compose/foundation/IndicationKt$LocalIndication$1;
-Landroidx/compose/foundation/IndicationKt$indication$2;
-Landroidx/compose/foundation/IndicationKt;
-Landroidx/compose/foundation/IndicationModifier;
-Landroidx/compose/foundation/MutatePriority;
-Landroidx/compose/foundation/MutatorMutex$Mutator;
-Landroidx/compose/foundation/MutatorMutex$mutateWith$2;
-Landroidx/compose/foundation/MutatorMutex;
-Landroidx/compose/foundation/OverscrollConfiguration;
-Landroidx/compose/foundation/OverscrollConfigurationKt$LocalOverscrollConfiguration$1;
-Landroidx/compose/foundation/OverscrollConfigurationKt;
-Landroidx/compose/foundation/OverscrollEffect;
-Landroidx/compose/foundation/OverscrollKt;
-Landroidx/compose/foundation/gestures/AndroidConfig;
-Landroidx/compose/foundation/gestures/AndroidScrollable_androidKt;
-Landroidx/compose/foundation/gestures/BringIntoViewRequestPriorityQueue;
-Landroidx/compose/foundation/gestures/ContentInViewModifier$Request;
-Landroidx/compose/foundation/gestures/ContentInViewModifier$WhenMappings;
-Landroidx/compose/foundation/gestures/ContentInViewModifier$modifier$1;
-Landroidx/compose/foundation/gestures/ContentInViewModifier;
-Landroidx/compose/foundation/gestures/DefaultDraggableState$drag$2;
-Landroidx/compose/foundation/gestures/DefaultDraggableState$dragScope$1;
-Landroidx/compose/foundation/gestures/DefaultDraggableState;
-Landroidx/compose/foundation/gestures/DefaultFlingBehavior;
-Landroidx/compose/foundation/gestures/DefaultScrollableState$scrollScope$1;
-Landroidx/compose/foundation/gestures/DefaultScrollableState;
-Landroidx/compose/foundation/gestures/DragGestureDetectorKt$HorizontalPointerDirectionConfig$1;
-Landroidx/compose/foundation/gestures/DragGestureDetectorKt$VerticalPointerDirectionConfig$1;
-Landroidx/compose/foundation/gestures/DragGestureDetectorKt;
-Landroidx/compose/foundation/gestures/DragLogic;
-Landroidx/compose/foundation/gestures/DragScope;
-Landroidx/compose/foundation/gestures/DraggableKt$awaitDownAndSlop$1;
-Landroidx/compose/foundation/gestures/DraggableKt$awaitDownAndSlop$postPointerSlop$1;
-Landroidx/compose/foundation/gestures/DraggableKt$draggable$1;
-Landroidx/compose/foundation/gestures/DraggableKt$draggable$3;
-Landroidx/compose/foundation/gestures/DraggableKt$draggable$4;
-Landroidx/compose/foundation/gestures/DraggableKt$draggable$5;
-Landroidx/compose/foundation/gestures/DraggableKt$draggable$6;
-Landroidx/compose/foundation/gestures/DraggableKt$draggable$9$1$1$invoke$$inlined$onDispose$1;
-Landroidx/compose/foundation/gestures/DraggableKt$draggable$9$1$1;
-Landroidx/compose/foundation/gestures/DraggableKt$draggable$9$2;
-Landroidx/compose/foundation/gestures/DraggableKt$draggable$9$3$1$1;
-Landroidx/compose/foundation/gestures/DraggableKt$draggable$9$3$1;
-Landroidx/compose/foundation/gestures/DraggableKt$draggable$9$3;
-Landroidx/compose/foundation/gestures/DraggableKt$draggable$9;
-Landroidx/compose/foundation/gestures/DraggableKt;
-Landroidx/compose/foundation/gestures/DraggableState;
-Landroidx/compose/foundation/gestures/FlingBehavior;
-Landroidx/compose/foundation/gestures/ForEachGestureKt$awaitAllPointersUp$3;
-Landroidx/compose/foundation/gestures/ForEachGestureKt$awaitEachGesture$2;
-Landroidx/compose/foundation/gestures/ForEachGestureKt;
-Landroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;
-Landroidx/compose/foundation/gestures/Orientation;
-Landroidx/compose/foundation/gestures/PointerDirectionConfig;
-Landroidx/compose/foundation/gestures/PressGestureScope;
-Landroidx/compose/foundation/gestures/PressGestureScopeImpl$reset$1;
-Landroidx/compose/foundation/gestures/PressGestureScopeImpl$tryAwaitRelease$1;
-Landroidx/compose/foundation/gestures/PressGestureScopeImpl;
-Landroidx/compose/foundation/gestures/ScrollConfig;
-Landroidx/compose/foundation/gestures/ScrollDraggableState;
-Landroidx/compose/foundation/gestures/ScrollScope;
-Landroidx/compose/foundation/gestures/ScrollableDefaults;
-Landroidx/compose/foundation/gestures/ScrollableKt$DefaultScrollMotionDurationScale$1;
-Landroidx/compose/foundation/gestures/ScrollableKt$ModifierLocalScrollableContainer$1;
-Landroidx/compose/foundation/gestures/ScrollableKt$NoOpScrollScope$1;
-Landroidx/compose/foundation/gestures/ScrollableKt$awaitScrollEvent$1;
-Landroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1$1;
-Landroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1;
-Landroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$1;
-Landroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$2$1;
-Landroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$3$1;
-Landroidx/compose/foundation/gestures/ScrollableKt$scrollable$2;
-Landroidx/compose/foundation/gestures/ScrollableKt$scrollableNestedScrollConnection$1;
-Landroidx/compose/foundation/gestures/ScrollableKt;
-Landroidx/compose/foundation/gestures/ScrollableState;
-Landroidx/compose/foundation/gestures/ScrollableStateKt;
-Landroidx/compose/foundation/gestures/ScrollingLogic;
-Landroidx/compose/foundation/gestures/TapGestureDetectorKt$NoPressGesture$1;
-Landroidx/compose/foundation/gestures/TapGestureDetectorKt$awaitFirstDown$2;
-Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$1;
-Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$2;
-Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$4;
-Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;
-Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2;
-Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2$1$1;
-Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2$1$3;
-Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2$1$5;
-Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2$1;
-Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2;
-Landroidx/compose/foundation/gestures/TapGestureDetectorKt$waitForUpOrCancellation$2;
-Landroidx/compose/foundation/gestures/TapGestureDetectorKt;
-Landroidx/compose/foundation/gestures/UpdatableAnimationState$Companion;
-Landroidx/compose/foundation/gestures/UpdatableAnimationState;
-Landroidx/compose/foundation/interaction/DragInteraction$Start;
-Landroidx/compose/foundation/interaction/FocusInteraction$Focus;
-Landroidx/compose/foundation/interaction/HoverInteraction$Enter;
-Landroidx/compose/foundation/interaction/Interaction;
-Landroidx/compose/foundation/interaction/InteractionSource;
-Landroidx/compose/foundation/interaction/InteractionSourceKt;
-Landroidx/compose/foundation/interaction/MutableInteractionSource;
-Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;
-Landroidx/compose/foundation/interaction/PressInteraction$Press;
-Landroidx/compose/foundation/interaction/PressInteraction$Release;
-Landroidx/compose/foundation/layout/AndroidWindowInsets;
-Landroidx/compose/foundation/layout/Arrangement$Bottom$1;
-Landroidx/compose/foundation/layout/Arrangement$Center$1;
-Landroidx/compose/foundation/layout/Arrangement$End$1;
-Landroidx/compose/foundation/layout/Arrangement$Horizontal;
-Landroidx/compose/foundation/layout/Arrangement$HorizontalOrVertical;
-Landroidx/compose/foundation/layout/Arrangement$SpaceAround$1;
-Landroidx/compose/foundation/layout/Arrangement$SpaceBetween$1;
-Landroidx/compose/foundation/layout/Arrangement$SpaceEvenly$1;
-Landroidx/compose/foundation/layout/Arrangement$SpacedAligned;
-Landroidx/compose/foundation/layout/Arrangement$Start$1;
-Landroidx/compose/foundation/layout/Arrangement$Top$1;
-Landroidx/compose/foundation/layout/Arrangement$Vertical;
-Landroidx/compose/foundation/layout/Arrangement$spacedBy$1;
-Landroidx/compose/foundation/layout/Arrangement;
-Landroidx/compose/foundation/layout/BoxChildData;
-Landroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1$measure$1;
-Landroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1;
-Landroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$2;
-Landroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$5;
-Landroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1;
-Landroidx/compose/foundation/layout/BoxKt;
-Landroidx/compose/foundation/layout/BoxScope;
-Landroidx/compose/foundation/layout/BoxScopeInstance;
-Landroidx/compose/foundation/layout/BoxWithConstraintsKt$BoxWithConstraints$1$1$measurables$1;
-Landroidx/compose/foundation/layout/BoxWithConstraintsKt$BoxWithConstraints$1$1;
-Landroidx/compose/foundation/layout/BoxWithConstraintsKt;
-Landroidx/compose/foundation/layout/BoxWithConstraintsScope;
-Landroidx/compose/foundation/layout/BoxWithConstraintsScopeImpl;
-Landroidx/compose/foundation/layout/ColumnKt$DefaultColumnMeasurePolicy$1;
-Landroidx/compose/foundation/layout/ColumnKt$columnMeasurePolicy$1$1;
-Landroidx/compose/foundation/layout/ColumnKt;
-Landroidx/compose/foundation/layout/ColumnScope;
-Landroidx/compose/foundation/layout/ColumnScopeInstance;
-Landroidx/compose/foundation/layout/CrossAxisAlignment$CenterCrossAxisAlignment;
-Landroidx/compose/foundation/layout/CrossAxisAlignment$Companion;
-Landroidx/compose/foundation/layout/CrossAxisAlignment$EndCrossAxisAlignment;
-Landroidx/compose/foundation/layout/CrossAxisAlignment$HorizontalCrossAxisAlignment;
-Landroidx/compose/foundation/layout/CrossAxisAlignment$StartCrossAxisAlignment;
-Landroidx/compose/foundation/layout/CrossAxisAlignment$VerticalCrossAxisAlignment;
-Landroidx/compose/foundation/layout/CrossAxisAlignment;
-Landroidx/compose/foundation/layout/Direction;
-Landroidx/compose/foundation/layout/ExcludeInsets;
-Landroidx/compose/foundation/layout/FillModifier$measure$1;
-Landroidx/compose/foundation/layout/FillModifier;
-Landroidx/compose/foundation/layout/FixedIntInsets;
-Landroidx/compose/foundation/layout/InsetsListener;
-Landroidx/compose/foundation/layout/InsetsPaddingModifier$measure$1;
-Landroidx/compose/foundation/layout/InsetsPaddingModifier;
-Landroidx/compose/foundation/layout/InsetsValues;
-Landroidx/compose/foundation/layout/LayoutOrientation;
-Landroidx/compose/foundation/layout/LayoutWeightImpl;
-Landroidx/compose/foundation/layout/LimitInsets;
-Landroidx/compose/foundation/layout/OffsetKt;
-Landroidx/compose/foundation/layout/OffsetPxModifier$measure$1;
-Landroidx/compose/foundation/layout/OffsetPxModifier;
-Landroidx/compose/foundation/layout/OrientationIndependentConstraints;
-Landroidx/compose/foundation/layout/PaddingKt;
-Landroidx/compose/foundation/layout/PaddingModifier$measure$1;
-Landroidx/compose/foundation/layout/PaddingModifier;
-Landroidx/compose/foundation/layout/PaddingValues;
-Landroidx/compose/foundation/layout/PaddingValuesImpl;
-Landroidx/compose/foundation/layout/PaddingValuesModifier$measure$2;
-Landroidx/compose/foundation/layout/PaddingValuesModifier;
-Landroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1$measure$1;
-Landroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1;
-Landroidx/compose/foundation/layout/RowColumnImplKt;
-Landroidx/compose/foundation/layout/RowColumnMeasureHelperResult;
-Landroidx/compose/foundation/layout/RowColumnMeasurementHelper;
-Landroidx/compose/foundation/layout/RowColumnParentData;
-Landroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;
-Landroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;
-Landroidx/compose/foundation/layout/RowKt;
-Landroidx/compose/foundation/layout/RowScope;
-Landroidx/compose/foundation/layout/RowScopeInstance;
-Landroidx/compose/foundation/layout/SizeKt$createFillHeightModifier$1;
-Landroidx/compose/foundation/layout/SizeKt$createFillSizeModifier$1;
-Landroidx/compose/foundation/layout/SizeKt$createFillWidthModifier$1;
-Landroidx/compose/foundation/layout/SizeKt$createWrapContentHeightModifier$1;
-Landroidx/compose/foundation/layout/SizeKt$createWrapContentHeightModifier$2;
-Landroidx/compose/foundation/layout/SizeKt$createWrapContentSizeModifier$1;
-Landroidx/compose/foundation/layout/SizeKt$createWrapContentSizeModifier$2;
-Landroidx/compose/foundation/layout/SizeKt$createWrapContentWidthModifier$1;
-Landroidx/compose/foundation/layout/SizeKt$createWrapContentWidthModifier$2;
-Landroidx/compose/foundation/layout/SizeKt;
-Landroidx/compose/foundation/layout/SizeMode;
-Landroidx/compose/foundation/layout/SizeModifier$measure$1;
-Landroidx/compose/foundation/layout/SizeModifier;
-Landroidx/compose/foundation/layout/SpacerKt;
-Landroidx/compose/foundation/layout/SpacerMeasurePolicy$measure$1$1;
-Landroidx/compose/foundation/layout/SpacerMeasurePolicy;
-Landroidx/compose/foundation/layout/UnionInsets;
-Landroidx/compose/foundation/layout/UnspecifiedConstraintsModifier$measure$1;
-Landroidx/compose/foundation/layout/UnspecifiedConstraintsModifier;
-Landroidx/compose/foundation/layout/ValueInsets;
-Landroidx/compose/foundation/layout/WindowInsets$Companion;
-Landroidx/compose/foundation/layout/WindowInsets;
-Landroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1$invoke$$inlined$onDispose$1;
-Landroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1;
-Landroidx/compose/foundation/layout/WindowInsetsHolder$Companion;
-Landroidx/compose/foundation/layout/WindowInsetsHolder;
-Landroidx/compose/foundation/layout/WindowInsetsKt;
-Landroidx/compose/foundation/layout/WindowInsetsPaddingKt$ModifierLocalConsumedWindowInsets$1;
-Landroidx/compose/foundation/layout/WindowInsetsPaddingKt;
-Landroidx/compose/foundation/layout/WindowInsetsSides$Companion;
-Landroidx/compose/foundation/layout/WindowInsetsSides;
-Landroidx/compose/foundation/layout/WindowInsets_androidKt;
-Landroidx/compose/foundation/layout/WrapContentModifier$measure$1;
-Landroidx/compose/foundation/layout/WrapContentModifier;
-Landroidx/compose/foundation/lazy/AwaitFirstLayoutModifier;
-Landroidx/compose/foundation/lazy/DataIndex;
-Landroidx/compose/foundation/lazy/EmptyLazyListLayoutInfo;
-Landroidx/compose/foundation/lazy/LazyBeyondBoundsModifierKt;
-Landroidx/compose/foundation/lazy/LazyDslKt;
-Landroidx/compose/foundation/lazy/LazyItemScope;
-Landroidx/compose/foundation/lazy/LazyItemScopeImpl;
-Landroidx/compose/foundation/lazy/LazyListAnimateScrollScope;
-Landroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo$Interval;
-Landroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo;
-Landroidx/compose/foundation/lazy/LazyListBeyondBoundsModifierLocal$Companion$emptyBeyondBoundsScope$1;
-Landroidx/compose/foundation/lazy/LazyListBeyondBoundsModifierLocal$Companion;
-Landroidx/compose/foundation/lazy/LazyListBeyondBoundsModifierLocal;
-Landroidx/compose/foundation/lazy/LazyListIntervalContent;
-Landroidx/compose/foundation/lazy/LazyListItemInfo;
-Landroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;
-Landroidx/compose/foundation/lazy/LazyListItemProvider;
-Landroidx/compose/foundation/lazy/LazyListItemProviderImpl$1$1;
-Landroidx/compose/foundation/lazy/LazyListItemProviderImpl$1;
-Landroidx/compose/foundation/lazy/LazyListItemProviderImpl;
-Landroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;
-Landroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$itemProviderState$1;
-Landroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$1$1;
-Landroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$2;
-Landroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$3;
-Landroidx/compose/foundation/lazy/LazyListItemProviderKt;
-Landroidx/compose/foundation/lazy/LazyListKt$ScrollPositionUpdater$1;
-Landroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$2;
-Landroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;
-Landroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1;
-Landroidx/compose/foundation/lazy/LazyListKt;
-Landroidx/compose/foundation/lazy/LazyListLayoutInfo;
-Landroidx/compose/foundation/lazy/LazyListMeasureKt$measureLazyList$5;
-Landroidx/compose/foundation/lazy/LazyListMeasureKt;
-Landroidx/compose/foundation/lazy/LazyListMeasureResult;
-Landroidx/compose/foundation/lazy/LazyListPlaceableWrapper;
-Landroidx/compose/foundation/lazy/LazyListPositionedItem;
-Landroidx/compose/foundation/lazy/LazyListScope;
-Landroidx/compose/foundation/lazy/LazyListScopeImpl$item$2;
-Landroidx/compose/foundation/lazy/LazyListScopeImpl$item$3;
-Landroidx/compose/foundation/lazy/LazyListScopeImpl;
-Landroidx/compose/foundation/lazy/LazyListScrollPosition;
-Landroidx/compose/foundation/lazy/LazyListState$Companion$Saver$1;
-Landroidx/compose/foundation/lazy/LazyListState$Companion$Saver$2;
-Landroidx/compose/foundation/lazy/LazyListState$Companion;
-Landroidx/compose/foundation/lazy/LazyListState$remeasurementModifier$1;
-Landroidx/compose/foundation/lazy/LazyListState$scrollableState$1;
-Landroidx/compose/foundation/lazy/LazyListState;
-Landroidx/compose/foundation/lazy/LazyListStateKt$rememberLazyListState$1$1;
-Landroidx/compose/foundation/lazy/LazyListStateKt;
-Landroidx/compose/foundation/lazy/LazyMeasuredItem;
-Landroidx/compose/foundation/lazy/LazyMeasuredItemProvider;
-Landroidx/compose/foundation/lazy/LazySemanticsKt$rememberLazyListSemanticState$1$1$scrollAxisRange$1;
-Landroidx/compose/foundation/lazy/LazySemanticsKt$rememberLazyListSemanticState$1$1$scrollAxisRange$2;
-Landroidx/compose/foundation/lazy/LazySemanticsKt$rememberLazyListSemanticState$1$1;
-Landroidx/compose/foundation/lazy/LazySemanticsKt;
-Landroidx/compose/foundation/lazy/MeasuredItemFactory;
-Landroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider$Item$1;
-Landroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider;
-Landroidx/compose/foundation/lazy/layout/DefaultLazyKey$Companion$CREATOR$1;
-Landroidx/compose/foundation/lazy/layout/DefaultLazyKey$Companion;
-Landroidx/compose/foundation/lazy/layout/DefaultLazyKey;
-Landroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider$generateKeyToIndexMap$1$1;
-Landroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider;
-Landroidx/compose/foundation/lazy/layout/IntervalList$Interval;
-Landroidx/compose/foundation/lazy/layout/IntervalList;
-Landroidx/compose/foundation/lazy/layout/IntervalListKt;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutIntervalContent;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$1;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2$invoke$$inlined$onDispose$1;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProviderKt;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1$2$1;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1$itemContentFactory$1$1;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutKt;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1$invoke$$inlined$onDispose$1;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList$PinnedItem;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState$PrefetchHandle;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState$Prefetcher;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$Companion;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$PrefetchRequest;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher_androidKt;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$1;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$indexForKeyMapping$1;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$scrollByAction$1;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$scrollToIndexAction$1;
-Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt;
-Landroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1$1;
-Landroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1$2;
-Landroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1;
-Landroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt;
-Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1;
-Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1;
-Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$2;
-Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion;
-Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1$invoke$$inlined$onDispose$1;
-Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1;
-Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2;
-Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;
-Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$1;
-Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$holder$1;
-Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt;
-Landroidx/compose/foundation/lazy/layout/Lazy_androidKt;
-Landroidx/compose/foundation/lazy/layout/MutableIntervalList;
-Landroidx/compose/foundation/relocation/AndroidBringIntoViewParent;
-Landroidx/compose/foundation/relocation/BringIntoViewChildModifier;
-Landroidx/compose/foundation/relocation/BringIntoViewKt$ModifierLocalBringIntoViewParent$1;
-Landroidx/compose/foundation/relocation/BringIntoViewKt;
-Landroidx/compose/foundation/relocation/BringIntoViewParent;
-Landroidx/compose/foundation/relocation/BringIntoViewRequester;
-Landroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;
-Landroidx/compose/foundation/relocation/BringIntoViewRequesterKt$bringIntoViewRequester$2$1$invoke$$inlined$onDispose$1;
-Landroidx/compose/foundation/relocation/BringIntoViewRequesterKt$bringIntoViewRequester$2$1;
-Landroidx/compose/foundation/relocation/BringIntoViewRequesterKt$bringIntoViewRequester$2;
-Landroidx/compose/foundation/relocation/BringIntoViewRequesterKt;
-Landroidx/compose/foundation/relocation/BringIntoViewRequesterModifier;
-Landroidx/compose/foundation/relocation/BringIntoViewResponder;
-Landroidx/compose/foundation/relocation/BringIntoViewResponderKt$bringIntoViewResponder$2;
-Landroidx/compose/foundation/relocation/BringIntoViewResponderKt;
-Landroidx/compose/foundation/relocation/BringIntoViewResponderModifier;
-Landroidx/compose/foundation/relocation/BringIntoViewResponder_androidKt;
-Landroidx/compose/foundation/shape/CornerBasedShape;
-Landroidx/compose/foundation/shape/CornerSize;
-Landroidx/compose/foundation/shape/CornerSizeKt$ZeroCornerSize$1;
-Landroidx/compose/foundation/shape/CornerSizeKt;
-Landroidx/compose/foundation/shape/DpCornerSize;
-Landroidx/compose/foundation/shape/PercentCornerSize;
-Landroidx/compose/foundation/shape/RoundedCornerShape;
-Landroidx/compose/foundation/shape/RoundedCornerShapeKt;
-Landroidx/compose/foundation/text/BasicTextKt$BasicText-4YKlhWE$$inlined$Layout$1;
-Landroidx/compose/foundation/text/BasicTextKt;
-Landroidx/compose/foundation/text/CoreTextKt;
-Landroidx/compose/foundation/text/HeightInLinesModifierKt$heightInLines$2;
-Landroidx/compose/foundation/text/HeightInLinesModifierKt;
-Landroidx/compose/foundation/text/TextController$coreModifiers$1;
-Landroidx/compose/foundation/text/TextController$createSemanticsModifierFor$1$1;
-Landroidx/compose/foundation/text/TextController$createSemanticsModifierFor$1;
-Landroidx/compose/foundation/text/TextController$drawTextAndSelectionBehind$1;
-Landroidx/compose/foundation/text/TextController$measurePolicy$1$measure$2;
-Landroidx/compose/foundation/text/TextController$measurePolicy$1;
-Landroidx/compose/foundation/text/TextController;
-Landroidx/compose/foundation/text/TextDelegate$Companion;
-Landroidx/compose/foundation/text/TextDelegate;
-Landroidx/compose/foundation/text/TextDelegateKt;
-Landroidx/compose/foundation/text/TextLayoutHelperKt;
-Landroidx/compose/foundation/text/TextState$onTextLayout$1;
-Landroidx/compose/foundation/text/TextState;
-Landroidx/compose/foundation/text/selection/SelectionRegistrarKt$LocalSelectionRegistrar$1;
-Landroidx/compose/foundation/text/selection/SelectionRegistrarKt;
-Landroidx/compose/foundation/text/selection/TextSelectionColors;
-Landroidx/compose/foundation/text/selection/TextSelectionColorsKt$LocalTextSelectionColors$1;
-Landroidx/compose/foundation/text/selection/TextSelectionColorsKt;
-Landroidx/compose/material/icons/Icons$Filled;
-Landroidx/compose/material/icons/Icons$Outlined;
-Landroidx/compose/material/icons/filled/ArrowBackKt;
-Landroidx/compose/material/icons/filled/CloseKt;
-Landroidx/compose/material/icons/outlined/LockKt;
-Landroidx/compose/material/icons/outlined/QrCodeScannerKt;
-Landroidx/compose/material/ripple/AndroidRippleIndicationInstance$onInvalidateRipple$1;
-Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;
-Landroidx/compose/material/ripple/PlatformRipple;
-Landroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1$1;
-Landroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1;
-Landroidx/compose/material/ripple/Ripple;
-Landroidx/compose/material/ripple/RippleAlpha;
-Landroidx/compose/material/ripple/RippleAnimationKt;
-Landroidx/compose/material/ripple/RippleContainer;
-Landroidx/compose/material/ripple/RippleHostMap;
-Landroidx/compose/material/ripple/RippleHostView$$ExternalSyntheticLambda0;
-Landroidx/compose/material/ripple/RippleHostView$Companion;
-Landroidx/compose/material/ripple/RippleHostView;
-Landroidx/compose/material/ripple/RippleIndicationInstance;
-Landroidx/compose/material/ripple/RippleKt;
-Landroidx/compose/material/ripple/RippleTheme;
-Landroidx/compose/material/ripple/RippleThemeKt$LocalRippleTheme$1;
-Landroidx/compose/material/ripple/RippleThemeKt;
-Landroidx/compose/material/ripple/StateLayer;
-Landroidx/compose/material/ripple/UnprojectedRipple$Companion;
-Landroidx/compose/material/ripple/UnprojectedRipple$MRadiusHelper;
-Landroidx/compose/material/ripple/UnprojectedRipple;
-Landroidx/compose/material3/AppBarKt$SingleRowTopAppBar$1$1;
-Landroidx/compose/material3/AppBarKt$SingleRowTopAppBar$2;
-Landroidx/compose/material3/AppBarKt$SingleRowTopAppBar$3;
-Landroidx/compose/material3/AppBarKt$SingleRowTopAppBar$actionsRow$1;
-Landroidx/compose/material3/AppBarKt$TopAppBarLayout$1$3$1;
-Landroidx/compose/material3/AppBarKt$TopAppBarLayout$2$measure$1;
-Landroidx/compose/material3/AppBarKt$TopAppBarLayout$2;
-Landroidx/compose/material3/AppBarKt;
-Landroidx/compose/material3/ButtonColors;
-Landroidx/compose/material3/ButtonDefaults;
-Landroidx/compose/material3/ButtonElevation$animateElevation$1$1$1;
-Landroidx/compose/material3/ButtonElevation$animateElevation$1$1;
-Landroidx/compose/material3/ButtonElevation$animateElevation$3;
-Landroidx/compose/material3/ButtonElevation;
-Landroidx/compose/material3/ButtonKt$Button$2$1$1;
-Landroidx/compose/material3/ButtonKt$Button$2$1;
-Landroidx/compose/material3/ButtonKt$Button$2;
-Landroidx/compose/material3/ButtonKt$Button$3;
-Landroidx/compose/material3/ButtonKt$TextButton$2;
-Landroidx/compose/material3/ButtonKt;
-Landroidx/compose/material3/CardColors;
-Landroidx/compose/material3/CardDefaults;
-Landroidx/compose/material3/CardElevation;
-Landroidx/compose/material3/CardKt$Card$1;
-Landroidx/compose/material3/CardKt$Card$2;
-Landroidx/compose/material3/CardKt;
-Landroidx/compose/material3/ChipBorder;
-Landroidx/compose/material3/ChipColors;
-Landroidx/compose/material3/ChipElevation$animateElevation$1$1$1;
-Landroidx/compose/material3/ChipElevation$animateElevation$1$1;
-Landroidx/compose/material3/ChipElevation$animateElevation$3;
-Landroidx/compose/material3/ChipElevation;
-Landroidx/compose/material3/ChipKt$Chip$1;
-Landroidx/compose/material3/ChipKt$Chip$2;
-Landroidx/compose/material3/ChipKt$ChipContent$1;
-Landroidx/compose/material3/ChipKt$SuggestionChip$2;
-Landroidx/compose/material3/ChipKt;
-Landroidx/compose/material3/ColorResourceHelper;
-Landroidx/compose/material3/ColorScheme;
-Landroidx/compose/material3/ColorSchemeKt$LocalColorScheme$1;
-Landroidx/compose/material3/ColorSchemeKt$WhenMappings;
-Landroidx/compose/material3/ColorSchemeKt;
-Landroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-1$1;
-Landroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-10$1;
-Landroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-11$1;
-Landroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-12$1;
-Landroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-2$1;
-Landroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-3$1;
-Landroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-4$1;
-Landroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-5$1;
-Landroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-6$1;
-Landroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-7$1;
-Landroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-8$1;
-Landroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-9$1;
-Landroidx/compose/material3/ComposableSingletons$AppBarKt;
-Landroidx/compose/material3/ContentColorKt$LocalContentColor$1;
-Landroidx/compose/material3/ContentColorKt;
-Landroidx/compose/material3/DividerKt;
-Landroidx/compose/material3/DynamicTonalPaletteKt;
-Landroidx/compose/material3/ElevationDefaults;
-Landroidx/compose/material3/ElevationKt;
-Landroidx/compose/material3/IconButtonColors;
-Landroidx/compose/material3/IconButtonDefaults;
-Landroidx/compose/material3/IconButtonKt$IconButton$3;
-Landroidx/compose/material3/IconButtonKt;
-Landroidx/compose/material3/IconKt$Icon$3;
-Landroidx/compose/material3/IconKt$Icon$semantics$1$1;
-Landroidx/compose/material3/IconKt;
-Landroidx/compose/material3/InteractiveComponentSizeKt$LocalMinimumInteractiveComponentEnforcement$1;
-Landroidx/compose/material3/InteractiveComponentSizeKt$minimumInteractiveComponentSize$2;
-Landroidx/compose/material3/InteractiveComponentSizeKt;
-Landroidx/compose/material3/MaterialRippleTheme;
-Landroidx/compose/material3/MaterialTheme;
-Landroidx/compose/material3/MaterialThemeKt$MaterialTheme$1;
-Landroidx/compose/material3/MaterialThemeKt$MaterialTheme$2;
-Landroidx/compose/material3/MaterialThemeKt;
-Landroidx/compose/material3/MinimumInteractiveComponentSizeModifier$measure$1;
-Landroidx/compose/material3/MinimumInteractiveComponentSizeModifier;
-Landroidx/compose/material3/ShapeDefaults;
-Landroidx/compose/material3/Shapes;
-Landroidx/compose/material3/ShapesKt$LocalShapes$1;
-Landroidx/compose/material3/ShapesKt$WhenMappings;
-Landroidx/compose/material3/ShapesKt;
-Landroidx/compose/material3/SuggestionChipDefaults;
-Landroidx/compose/material3/SurfaceKt$LocalAbsoluteTonalElevation$1;
-Landroidx/compose/material3/SurfaceKt$Surface$1$1;
-Landroidx/compose/material3/SurfaceKt$Surface$1$2;
-Landroidx/compose/material3/SurfaceKt$Surface$1;
-Landroidx/compose/material3/SurfaceKt$Surface$3;
-Landroidx/compose/material3/SurfaceKt;
-Landroidx/compose/material3/SystemBarsDefaultInsets_androidKt;
-Landroidx/compose/material3/TextKt$LocalTextStyle$1;
-Landroidx/compose/material3/TextKt$ProvideTextStyle$1;
-Landroidx/compose/material3/TextKt$Text$1;
-Landroidx/compose/material3/TextKt$Text$2;
-Landroidx/compose/material3/TextKt;
-Landroidx/compose/material3/TonalPalette;
-Landroidx/compose/material3/TopAppBarColors;
-Landroidx/compose/material3/TopAppBarDefaults;
-Landroidx/compose/material3/Typography;
-Landroidx/compose/material3/TypographyKt$LocalTypography$1;
-Landroidx/compose/material3/TypographyKt$WhenMappings;
-Landroidx/compose/material3/TypographyKt;
-Landroidx/compose/material3/tokens/ColorDarkTokens;
-Landroidx/compose/material3/tokens/ColorSchemeKeyTokens;
-Landroidx/compose/material3/tokens/ElevationTokens;
-Landroidx/compose/material3/tokens/FilledButtonTokens;
-Landroidx/compose/material3/tokens/FilledCardTokens;
-Landroidx/compose/material3/tokens/FilledTonalButtonTokens;
-Landroidx/compose/material3/tokens/IconButtonTokens;
-Landroidx/compose/material3/tokens/PaletteTokens;
-Landroidx/compose/material3/tokens/ShapeKeyTokens;
-Landroidx/compose/material3/tokens/ShapeTokens;
-Landroidx/compose/material3/tokens/SuggestionChipTokens;
-Landroidx/compose/material3/tokens/TextButtonTokens;
-Landroidx/compose/material3/tokens/TopAppBarSmallTokens;
-Landroidx/compose/material3/tokens/TypographyKeyTokens;
-Landroidx/compose/runtime/AbstractApplier;
-Landroidx/compose/runtime/ActualAndroid_androidKt$DefaultMonotonicFrameClock$2;
-Landroidx/compose/runtime/ActualAndroid_androidKt;
-Landroidx/compose/runtime/ActualJvm_jvmKt;
-Landroidx/compose/runtime/Anchor;
-Landroidx/compose/runtime/Applier;
-Landroidx/compose/runtime/BroadcastFrameClock$FrameAwaiter;
-Landroidx/compose/runtime/BroadcastFrameClock$withFrameNanos$2$1;
-Landroidx/compose/runtime/BroadcastFrameClock;
-Landroidx/compose/runtime/ComposableSingletons$CompositionKt$lambda-1$1;
-Landroidx/compose/runtime/ComposableSingletons$CompositionKt$lambda-2$1;
-Landroidx/compose/runtime/ComposableSingletons$CompositionKt;
-Landroidx/compose/runtime/ComposablesKt;
-Landroidx/compose/runtime/Composer$Companion$Empty$1;
-Landroidx/compose/runtime/Composer$Companion;
-Landroidx/compose/runtime/Composer;
-Landroidx/compose/runtime/ComposerImpl$CompositionContextHolder;
-Landroidx/compose/runtime/ComposerImpl$CompositionContextImpl;
-Landroidx/compose/runtime/ComposerImpl$apply$operation$1;
-Landroidx/compose/runtime/ComposerImpl$createNode$2;
-Landroidx/compose/runtime/ComposerImpl$createNode$3;
-Landroidx/compose/runtime/ComposerImpl$doCompose$2$3;
-Landroidx/compose/runtime/ComposerImpl$doCompose$2$4;
-Landroidx/compose/runtime/ComposerImpl$doCompose$2$5;
-Landroidx/compose/runtime/ComposerImpl$doCompose$lambda$37$$inlined$sortBy$1;
-Landroidx/compose/runtime/ComposerImpl$endRestartGroup$1$1;
-Landroidx/compose/runtime/ComposerImpl$realizeDowns$1;
-Landroidx/compose/runtime/ComposerImpl$realizeMovement$1;
-Landroidx/compose/runtime/ComposerImpl$realizeOperationLocation$2;
-Landroidx/compose/runtime/ComposerImpl$realizeUps$1;
-Landroidx/compose/runtime/ComposerImpl$recordInsert$1;
-Landroidx/compose/runtime/ComposerImpl$recordInsert$2;
-Landroidx/compose/runtime/ComposerImpl$recordSideEffect$1;
-Landroidx/compose/runtime/ComposerImpl$recordSlotEditing$1;
-Landroidx/compose/runtime/ComposerImpl$start$2;
-Landroidx/compose/runtime/ComposerImpl$startProviders$currentProviders$1;
-Landroidx/compose/runtime/ComposerImpl$startReaderGroup$1;
-Landroidx/compose/runtime/ComposerImpl$updateValue$1;
-Landroidx/compose/runtime/ComposerImpl$updateValue$2;
-Landroidx/compose/runtime/ComposerImpl;
-Landroidx/compose/runtime/ComposerKt$endGroupInstance$1;
-Landroidx/compose/runtime/ComposerKt$removeCurrentGroupInstance$1;
-Landroidx/compose/runtime/ComposerKt$resetSlotsInstance$1;
-Landroidx/compose/runtime/ComposerKt$skipToGroupEndInstance$1;
-Landroidx/compose/runtime/ComposerKt$startRootGroup$1;
-Landroidx/compose/runtime/ComposerKt;
-Landroidx/compose/runtime/Composition;
-Landroidx/compose/runtime/CompositionContext;
-Landroidx/compose/runtime/CompositionContextKt;
-Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;
-Landroidx/compose/runtime/CompositionImpl;
-Landroidx/compose/runtime/CompositionKt;
-Landroidx/compose/runtime/CompositionLocal;
-Landroidx/compose/runtime/CompositionLocalKt;
-Landroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;
-Landroidx/compose/runtime/ControlledComposition;
-Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord$Companion;
-Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord;
-Landroidx/compose/runtime/DerivedSnapshotState$currentRecord$result$1$result$1;
-Landroidx/compose/runtime/DerivedSnapshotState;
-Landroidx/compose/runtime/DerivedState;
-Landroidx/compose/runtime/DisposableEffectImpl;
-Landroidx/compose/runtime/DisposableEffectResult;
-Landroidx/compose/runtime/DisposableEffectScope;
-Landroidx/compose/runtime/DynamicProvidableCompositionLocal;
-Landroidx/compose/runtime/EffectsKt;
-Landroidx/compose/runtime/GroupInfo;
-Landroidx/compose/runtime/GroupKind$Companion;
-Landroidx/compose/runtime/GroupKind;
-Landroidx/compose/runtime/IntStack;
-Landroidx/compose/runtime/Invalidation;
-Landroidx/compose/runtime/InvalidationResult;
-Landroidx/compose/runtime/KeyInfo;
-Landroidx/compose/runtime/Latch;
-Landroidx/compose/runtime/LaunchedEffectImpl;
-Landroidx/compose/runtime/LazyValueHolder;
-Landroidx/compose/runtime/MonotonicFrameClock$DefaultImpls;
-Landroidx/compose/runtime/MonotonicFrameClock$Key;
-Landroidx/compose/runtime/MonotonicFrameClock;
-Landroidx/compose/runtime/MonotonicFrameClockKt;
-Landroidx/compose/runtime/MutableState;
-Landroidx/compose/runtime/NeverEqualPolicy;
-Landroidx/compose/runtime/OpaqueKey;
-Landroidx/compose/runtime/ParcelableSnapshotMutableState$Companion$CREATOR$1;
-Landroidx/compose/runtime/ParcelableSnapshotMutableState$Companion;
-Landroidx/compose/runtime/ParcelableSnapshotMutableState;
-Landroidx/compose/runtime/PausableMonotonicFrameClock$withFrameNanos$1;
-Landroidx/compose/runtime/PausableMonotonicFrameClock;
-Landroidx/compose/runtime/Pending$keyMap$2;
-Landroidx/compose/runtime/Pending;
-Landroidx/compose/runtime/PrioritySet;
-Landroidx/compose/runtime/ProvidableCompositionLocal;
-Landroidx/compose/runtime/ProvidedValue;
-Landroidx/compose/runtime/RecomposeScope;
-Landroidx/compose/runtime/RecomposeScopeImpl$end$1$2;
-Landroidx/compose/runtime/RecomposeScopeImpl;
-Landroidx/compose/runtime/RecomposeScopeImplKt;
-Landroidx/compose/runtime/Recomposer$Companion;
-Landroidx/compose/runtime/Recomposer$RecomposerErrorState;
-Landroidx/compose/runtime/Recomposer$RecomposerInfoImpl;
-Landroidx/compose/runtime/Recomposer$State;
-Landroidx/compose/runtime/Recomposer$broadcastFrameClock$1;
-Landroidx/compose/runtime/Recomposer$effectJob$1$1$1$1;
-Landroidx/compose/runtime/Recomposer$effectJob$1$1;
-Landroidx/compose/runtime/Recomposer$join$2;
-Landroidx/compose/runtime/Recomposer$performRecompose$1$1;
-Landroidx/compose/runtime/Recomposer$readObserverOf$1;
-Landroidx/compose/runtime/Recomposer$recompositionRunner$2$2;
-Landroidx/compose/runtime/Recomposer$recompositionRunner$2$unregisterApplyObserver$1;
-Landroidx/compose/runtime/Recomposer$recompositionRunner$2;
-Landroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2$2;
-Landroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;
-Landroidx/compose/runtime/Recomposer$writeObserverOf$1;
-Landroidx/compose/runtime/Recomposer;
-Landroidx/compose/runtime/ReferentialEqualityPolicy;
-Landroidx/compose/runtime/RememberManager;
-Landroidx/compose/runtime/RememberObserver;
-Landroidx/compose/runtime/ScopeUpdateScope;
-Landroidx/compose/runtime/SkippableUpdater;
-Landroidx/compose/runtime/SlotReader;
-Landroidx/compose/runtime/SlotTable;
-Landroidx/compose/runtime/SlotTableKt;
-Landroidx/compose/runtime/SlotWriter$Companion;
-Landroidx/compose/runtime/SlotWriter$groupSlots$1;
-Landroidx/compose/runtime/SlotWriter;
-Landroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;
-Landroidx/compose/runtime/SnapshotMutableStateImpl;
-Landroidx/compose/runtime/SnapshotMutationPolicy;
-Landroidx/compose/runtime/SnapshotStateKt;
-Landroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;
-Landroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$readObserver$1;
-Landroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$unregisterApplyObserver$1;
-Landroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;
-Landroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt;
-Landroidx/compose/runtime/SnapshotStateKt__SnapshotMutationPolicyKt;
-Landroidx/compose/runtime/SnapshotStateKt__SnapshotStateKt;
-Landroidx/compose/runtime/SnapshotThreadLocal;
-Landroidx/compose/runtime/Stack;
-Landroidx/compose/runtime/State;
-Landroidx/compose/runtime/StaticProvidableCompositionLocal;
-Landroidx/compose/runtime/StaticValueHolder;
-Landroidx/compose/runtime/StructuralEqualityPolicy;
-Landroidx/compose/runtime/Trace;
-Landroidx/compose/runtime/Updater;
-Landroidx/compose/runtime/collection/IdentityArrayIntMap;
-Landroidx/compose/runtime/collection/IdentityArrayMap;
-Landroidx/compose/runtime/collection/IdentityArraySet$iterator$1;
-Landroidx/compose/runtime/collection/IdentityArraySet;
-Landroidx/compose/runtime/collection/IdentityScopeMap;
-Landroidx/compose/runtime/collection/IntMap;
-Landroidx/compose/runtime/collection/MutableVector$MutableVectorList;
-Landroidx/compose/runtime/collection/MutableVector$VectorListIterator;
-Landroidx/compose/runtime/collection/MutableVector;
-Landroidx/compose/runtime/collection/MutableVectorKt;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/ExtensionsKt;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/ImmutableCollection;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/ImmutableList;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/ImmutableSet;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap$Builder;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentSet;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector$Companion;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/UtilsKt;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/MapEntry;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap$Companion;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntries;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntriesIterator;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode$Companion;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode$ModificationResult;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeEntriesIterator;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKt;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet$Companion;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/CommonFunctionsKt;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/EndOfChain;
-Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/MutabilityOwnership;
-Landroidx/compose/runtime/internal/ComposableLambda;
-Landroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$1;
-Landroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$2;
-Landroidx/compose/runtime/internal/ComposableLambdaImpl;
-Landroidx/compose/runtime/internal/ComposableLambdaKt;
-Landroidx/compose/runtime/internal/ThreadMap;
-Landroidx/compose/runtime/internal/ThreadMapKt;
-Landroidx/compose/runtime/saveable/ListSaverKt$listSaver$1;
-Landroidx/compose/runtime/saveable/ListSaverKt;
-Landroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$invoke$$inlined$onDispose$1;
-Landroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1$1$1;
-Landroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1;
-Landroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1;
-Landroidx/compose/runtime/saveable/RememberSaveableKt;
-Landroidx/compose/runtime/saveable/SaveableStateHolder;
-Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$1;
-Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$2;
-Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion;
-Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder$registry$1;
-Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;
-Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1$invoke$$inlined$onDispose$1;
-Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1;
-Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;
-Landroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1;
-Landroidx/compose/runtime/saveable/SaveableStateHolderKt;
-Landroidx/compose/runtime/saveable/SaveableStateRegistry$Entry;
-Landroidx/compose/runtime/saveable/SaveableStateRegistry;
-Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;
-Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl;
-Landroidx/compose/runtime/saveable/SaveableStateRegistryKt$LocalSaveableStateRegistry$1;
-Landroidx/compose/runtime/saveable/SaveableStateRegistryKt;
-Landroidx/compose/runtime/saveable/Saver;
-Landroidx/compose/runtime/saveable/SaverKt$AutoSaver$1;
-Landroidx/compose/runtime/saveable/SaverKt$AutoSaver$2;
-Landroidx/compose/runtime/saveable/SaverKt$Saver$1;
-Landroidx/compose/runtime/saveable/SaverKt;
-Landroidx/compose/runtime/saveable/SaverScope;
-Landroidx/compose/runtime/snapshots/GlobalSnapshot$1$1$1;
-Landroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedMutableSnapshot$1;
-Landroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedSnapshot$1;
-Landroidx/compose/runtime/snapshots/GlobalSnapshot;
-Landroidx/compose/runtime/snapshots/ListUtilsKt;
-Landroidx/compose/runtime/snapshots/MutableSnapshot;
-Landroidx/compose/runtime/snapshots/NestedMutableSnapshot;
-Landroidx/compose/runtime/snapshots/ObserverHandle;
-Landroidx/compose/runtime/snapshots/ReadonlySnapshot;
-Landroidx/compose/runtime/snapshots/Snapshot$Companion$registerApplyObserver$2;
-Landroidx/compose/runtime/snapshots/Snapshot$Companion$registerGlobalWriteObserver$2;
-Landroidx/compose/runtime/snapshots/Snapshot$Companion;
-Landroidx/compose/runtime/snapshots/Snapshot;
-Landroidx/compose/runtime/snapshots/SnapshotApplyResult$Failure;
-Landroidx/compose/runtime/snapshots/SnapshotApplyResult$Success;
-Landroidx/compose/runtime/snapshots/SnapshotApplyResult;
-Landroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;
-Landroidx/compose/runtime/snapshots/SnapshotIdSet$Companion;
-Landroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;
-Landroidx/compose/runtime/snapshots/SnapshotIdSet;
-Landroidx/compose/runtime/snapshots/SnapshotIdSetKt;
-Landroidx/compose/runtime/snapshots/SnapshotKt$advanceGlobalSnapshot$3;
-Landroidx/compose/runtime/snapshots/SnapshotKt$emptyLambda$1;
-Landroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;
-Landroidx/compose/runtime/snapshots/SnapshotKt$mergedWriteObserver$1;
-Landroidx/compose/runtime/snapshots/SnapshotKt$takeNewSnapshot$1;
-Landroidx/compose/runtime/snapshots/SnapshotKt;
-Landroidx/compose/runtime/snapshots/SnapshotMutableState;
-Landroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;
-Landroidx/compose/runtime/snapshots/SnapshotStateList;
-Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateEnterObserver$1;
-Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateExitObserver$1;
-Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;
-Landroidx/compose/runtime/snapshots/SnapshotStateObserver$applyObserver$1;
-Landroidx/compose/runtime/snapshots/SnapshotStateObserver$observeReads$1$1;
-Landroidx/compose/runtime/snapshots/SnapshotStateObserver$readObserver$1;
-Landroidx/compose/runtime/snapshots/SnapshotStateObserver$sendNotifications$1;
-Landroidx/compose/runtime/snapshots/SnapshotStateObserver;
-Landroidx/compose/runtime/snapshots/StateObject;
-Landroidx/compose/runtime/snapshots/StateRecord;
-Landroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;
-Landroidx/compose/runtime/tooling/CompositionData;
-Landroidx/compose/runtime/tooling/InspectionTablesKt$LocalInspectionTables$1;
-Landroidx/compose/runtime/tooling/InspectionTablesKt;
-Landroidx/compose/ui/ActualKt;
-Landroidx/compose/ui/Alignment$Companion;
-Landroidx/compose/ui/Alignment$Horizontal;
-Landroidx/compose/ui/Alignment$Vertical;
-Landroidx/compose/ui/Alignment;
-Landroidx/compose/ui/BiasAlignment$Horizontal;
-Landroidx/compose/ui/BiasAlignment$Vertical;
-Landroidx/compose/ui/BiasAlignment;
-Landroidx/compose/ui/CombinedModifier;
-Landroidx/compose/ui/ComposedModifier;
-Landroidx/compose/ui/ComposedModifierKt$materialize$1;
-Landroidx/compose/ui/ComposedModifierKt$materialize$result$1;
-Landroidx/compose/ui/ComposedModifierKt;
-Landroidx/compose/ui/Modifier$Companion;
-Landroidx/compose/ui/Modifier$Element;
-Landroidx/compose/ui/Modifier$Node;
-Landroidx/compose/ui/Modifier;
-Landroidx/compose/ui/MotionDurationScale$DefaultImpls;
-Landroidx/compose/ui/MotionDurationScale$Key;
-Landroidx/compose/ui/MotionDurationScale;
-Landroidx/compose/ui/R$id;
-Landroidx/compose/ui/autofill/AndroidAutofill;
-Landroidx/compose/ui/autofill/Autofill;
-Landroidx/compose/ui/autofill/AutofillCallback;
-Landroidx/compose/ui/autofill/AutofillTree;
-Landroidx/compose/ui/draw/BuildDrawCacheParams;
-Landroidx/compose/ui/draw/ClipKt;
-Landroidx/compose/ui/draw/DrawBackgroundModifier;
-Landroidx/compose/ui/draw/DrawCacheModifier;
-Landroidx/compose/ui/draw/DrawModifier;
-Landroidx/compose/ui/draw/DrawModifierKt$drawBehind$$inlined$modifierElementOf$1;
-Landroidx/compose/ui/draw/DrawModifierKt;
-Landroidx/compose/ui/draw/PainterModifier$measure$1;
-Landroidx/compose/ui/draw/PainterModifier;
-Landroidx/compose/ui/draw/PainterModifierKt;
-Landroidx/compose/ui/draw/ShadowKt$shadow$2$1;
-Landroidx/compose/ui/draw/ShadowKt;
-Landroidx/compose/ui/focus/FocusChangedModifierKt$onFocusChanged$$inlined$modifierElementOf$2;
-Landroidx/compose/ui/focus/FocusChangedModifierKt;
-Landroidx/compose/ui/focus/FocusChangedModifierNode;
-Landroidx/compose/ui/focus/FocusEventModifierNode;
-Landroidx/compose/ui/focus/FocusEventModifierNodeKt$WhenMappings;
-Landroidx/compose/ui/focus/FocusEventModifierNodeKt;
-Landroidx/compose/ui/focus/FocusInvalidationManager$invalidateNodes$1;
-Landroidx/compose/ui/focus/FocusInvalidationManager;
-Landroidx/compose/ui/focus/FocusManager;
-Landroidx/compose/ui/focus/FocusModifierKt;
-Landroidx/compose/ui/focus/FocusOwner;
-Landroidx/compose/ui/focus/FocusOwnerImpl$special$$inlined$modifierElementOf$2;
-Landroidx/compose/ui/focus/FocusOwnerImpl;
-Landroidx/compose/ui/focus/FocusProperties;
-Landroidx/compose/ui/focus/FocusPropertiesKt$focusProperties$$inlined$modifierElementOf$2;
-Landroidx/compose/ui/focus/FocusPropertiesKt;
-Landroidx/compose/ui/focus/FocusPropertiesModifierNode;
-Landroidx/compose/ui/focus/FocusPropertiesModifierNodeImpl;
-Landroidx/compose/ui/focus/FocusRequester$Companion;
-Landroidx/compose/ui/focus/FocusRequester;
-Landroidx/compose/ui/focus/FocusRequesterModifierKt$focusRequester$$inlined$modifierElementOf$2;
-Landroidx/compose/ui/focus/FocusRequesterModifierKt;
-Landroidx/compose/ui/focus/FocusRequesterModifierNode;
-Landroidx/compose/ui/focus/FocusRequesterModifierNodeImpl;
-Landroidx/compose/ui/focus/FocusState;
-Landroidx/compose/ui/focus/FocusStateImpl$WhenMappings;
-Landroidx/compose/ui/focus/FocusStateImpl;
-Landroidx/compose/ui/focus/FocusTargetModifierNode$Companion;
-Landroidx/compose/ui/focus/FocusTargetModifierNode$special$$inlined$modifierElementOf$2;
-Landroidx/compose/ui/focus/FocusTargetModifierNode;
-Landroidx/compose/ui/geometry/CornerRadius$Companion;
-Landroidx/compose/ui/geometry/CornerRadius;
-Landroidx/compose/ui/geometry/CornerRadiusKt;
-Landroidx/compose/ui/geometry/Offset$Companion;
-Landroidx/compose/ui/geometry/Offset;
-Landroidx/compose/ui/geometry/OffsetKt;
-Landroidx/compose/ui/geometry/Rect$Companion;
-Landroidx/compose/ui/geometry/Rect;
-Landroidx/compose/ui/geometry/RectKt;
-Landroidx/compose/ui/geometry/RoundRect$Companion;
-Landroidx/compose/ui/geometry/RoundRect;
-Landroidx/compose/ui/geometry/RoundRectKt;
-Landroidx/compose/ui/geometry/Size$Companion;
-Landroidx/compose/ui/geometry/Size;
-Landroidx/compose/ui/geometry/SizeKt;
-Landroidx/compose/ui/graphics/AndroidBlendMode_androidKt;
-Landroidx/compose/ui/graphics/AndroidCanvas;
-Landroidx/compose/ui/graphics/AndroidCanvas_androidKt;
-Landroidx/compose/ui/graphics/AndroidColorFilter_androidKt;
-Landroidx/compose/ui/graphics/AndroidImageBitmap;
-Landroidx/compose/ui/graphics/AndroidImageBitmap_androidKt;
-Landroidx/compose/ui/graphics/AndroidMatrixConversions_androidKt;
-Landroidx/compose/ui/graphics/AndroidPaint;
-Landroidx/compose/ui/graphics/AndroidPaint_androidKt;
-Landroidx/compose/ui/graphics/AndroidPath;
-Landroidx/compose/ui/graphics/AndroidPath_androidKt;
-Landroidx/compose/ui/graphics/Api26Bitmap;
-Landroidx/compose/ui/graphics/BlendMode$Companion;
-Landroidx/compose/ui/graphics/BlendMode;
-Landroidx/compose/ui/graphics/BlendModeColorFilterHelper;
-Landroidx/compose/ui/graphics/BlockGraphicsLayerModifier$measure$1;
-Landroidx/compose/ui/graphics/BlockGraphicsLayerModifier;
-Landroidx/compose/ui/graphics/Brush$Companion;
-Landroidx/compose/ui/graphics/Brush;
-Landroidx/compose/ui/graphics/Canvas;
-Landroidx/compose/ui/graphics/CanvasHolder;
-Landroidx/compose/ui/graphics/CanvasKt;
-Landroidx/compose/ui/graphics/CanvasUtils;
-Landroidx/compose/ui/graphics/CanvasZHelper;
-Landroidx/compose/ui/graphics/Color$Companion;
-Landroidx/compose/ui/graphics/Color;
-Landroidx/compose/ui/graphics/ColorFilter$Companion;
-Landroidx/compose/ui/graphics/ColorFilter;
-Landroidx/compose/ui/graphics/ColorKt;
-Landroidx/compose/ui/graphics/CompositingStrategy$Companion;
-Landroidx/compose/ui/graphics/CompositingStrategy;
-Landroidx/compose/ui/graphics/FilterQuality$Companion;
-Landroidx/compose/ui/graphics/FilterQuality;
-Landroidx/compose/ui/graphics/Float16$Companion;
-Landroidx/compose/ui/graphics/Float16;
-Landroidx/compose/ui/graphics/GraphicsLayerModifierKt$graphicsLayer$$inlined$modifierElementOf$1;
-Landroidx/compose/ui/graphics/GraphicsLayerModifierKt;
-Landroidx/compose/ui/graphics/GraphicsLayerModifierNodeElement;
-Landroidx/compose/ui/graphics/GraphicsLayerScope;
-Landroidx/compose/ui/graphics/GraphicsLayerScopeKt;
-Landroidx/compose/ui/graphics/ImageBitmap;
-Landroidx/compose/ui/graphics/ImageBitmapConfig$Companion;
-Landroidx/compose/ui/graphics/ImageBitmapConfig;
-Landroidx/compose/ui/graphics/ImageBitmapKt;
-Landroidx/compose/ui/graphics/Matrix$Companion;
-Landroidx/compose/ui/graphics/Matrix;
-Landroidx/compose/ui/graphics/MatrixKt;
-Landroidx/compose/ui/graphics/Outline$Rectangle;
-Landroidx/compose/ui/graphics/Outline$Rounded;
-Landroidx/compose/ui/graphics/Outline;
-Landroidx/compose/ui/graphics/OutlineKt;
-Landroidx/compose/ui/graphics/Paint;
-Landroidx/compose/ui/graphics/PaintingStyle$Companion;
-Landroidx/compose/ui/graphics/PaintingStyle;
-Landroidx/compose/ui/graphics/Path$Companion;
-Landroidx/compose/ui/graphics/Path;
-Landroidx/compose/ui/graphics/PathFillType$Companion;
-Landroidx/compose/ui/graphics/PathFillType;
-Landroidx/compose/ui/graphics/RectangleShapeKt$RectangleShape$1;
-Landroidx/compose/ui/graphics/RectangleShapeKt;
-Landroidx/compose/ui/graphics/ReusableGraphicsLayerScope;
-Landroidx/compose/ui/graphics/ShaderBrush;
-Landroidx/compose/ui/graphics/Shadow$Companion;
-Landroidx/compose/ui/graphics/Shadow;
-Landroidx/compose/ui/graphics/Shape;
-Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$layerBlock$1;
-Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$measure$1;
-Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;
-Landroidx/compose/ui/graphics/SolidColor;
-Landroidx/compose/ui/graphics/StrokeCap$Companion;
-Landroidx/compose/ui/graphics/StrokeCap;
-Landroidx/compose/ui/graphics/StrokeJoin$Companion;
-Landroidx/compose/ui/graphics/StrokeJoin;
-Landroidx/compose/ui/graphics/TransformOrigin$Companion;
-Landroidx/compose/ui/graphics/TransformOrigin;
-Landroidx/compose/ui/graphics/TransformOriginKt;
-Landroidx/compose/ui/graphics/WrapperVerificationHelperMethods;
-Landroidx/compose/ui/graphics/colorspace/Adaptation$Companion$Bradford$1;
-Landroidx/compose/ui/graphics/colorspace/Adaptation$Companion$Ciecat02$1;
-Landroidx/compose/ui/graphics/colorspace/Adaptation$Companion$VonKries$1;
-Landroidx/compose/ui/graphics/colorspace/Adaptation$Companion;
-Landroidx/compose/ui/graphics/colorspace/Adaptation;
-Landroidx/compose/ui/graphics/colorspace/ColorModel$Companion;
-Landroidx/compose/ui/graphics/colorspace/ColorModel;
-Landroidx/compose/ui/graphics/colorspace/ColorSpace$Companion;
-Landroidx/compose/ui/graphics/colorspace/ColorSpace;
-Landroidx/compose/ui/graphics/colorspace/ColorSpaceKt;
-Landroidx/compose/ui/graphics/colorspace/ColorSpaces$$ExternalSyntheticLambda0;
-Landroidx/compose/ui/graphics/colorspace/ColorSpaces$$ExternalSyntheticLambda1;
-Landroidx/compose/ui/graphics/colorspace/ColorSpaces;
-Landroidx/compose/ui/graphics/colorspace/Connector$Companion$identity$1;
-Landroidx/compose/ui/graphics/colorspace/Connector$Companion;
-Landroidx/compose/ui/graphics/colorspace/Connector;
-Landroidx/compose/ui/graphics/colorspace/DoubleFunction;
-Landroidx/compose/ui/graphics/colorspace/Illuminant;
-Landroidx/compose/ui/graphics/colorspace/Lab$Companion;
-Landroidx/compose/ui/graphics/colorspace/Lab;
-Landroidx/compose/ui/graphics/colorspace/Oklab$Companion;
-Landroidx/compose/ui/graphics/colorspace/Oklab;
-Landroidx/compose/ui/graphics/colorspace/RenderIntent$Companion;
-Landroidx/compose/ui/graphics/colorspace/RenderIntent;
-Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda0;
-Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda1;
-Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda2;
-Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda3;
-Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda5;
-Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda7;
-Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda8;
-Landroidx/compose/ui/graphics/colorspace/Rgb$Companion;
-Landroidx/compose/ui/graphics/colorspace/Rgb$eotf$1;
-Landroidx/compose/ui/graphics/colorspace/Rgb$oetf$1;
-Landroidx/compose/ui/graphics/colorspace/Rgb;
-Landroidx/compose/ui/graphics/colorspace/TransferParameters;
-Landroidx/compose/ui/graphics/colorspace/WhitePoint;
-Landroidx/compose/ui/graphics/colorspace/Xyz;
-Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;
-Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;
-Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;
-Landroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;
-Landroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt;
-Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;
-Landroidx/compose/ui/graphics/drawscope/DrawContext;
-Landroidx/compose/ui/graphics/drawscope/DrawScope$Companion;
-Landroidx/compose/ui/graphics/drawscope/DrawScope;
-Landroidx/compose/ui/graphics/drawscope/DrawStyle;
-Landroidx/compose/ui/graphics/drawscope/DrawTransform;
-Landroidx/compose/ui/graphics/drawscope/EmptyCanvas;
-Landroidx/compose/ui/graphics/drawscope/Fill;
-Landroidx/compose/ui/graphics/painter/BitmapPainter;
-Landroidx/compose/ui/graphics/painter/BitmapPainterKt;
-Landroidx/compose/ui/graphics/painter/Painter$drawLambda$1;
-Landroidx/compose/ui/graphics/painter/Painter;
-Landroidx/compose/ui/graphics/vector/DrawCache;
-Landroidx/compose/ui/graphics/vector/GroupComponent;
-Landroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;
-Landroidx/compose/ui/graphics/vector/ImageVector$Builder;
-Landroidx/compose/ui/graphics/vector/ImageVector$Companion;
-Landroidx/compose/ui/graphics/vector/ImageVector;
-Landroidx/compose/ui/graphics/vector/ImageVectorKt;
-Landroidx/compose/ui/graphics/vector/PathBuilder;
-Landroidx/compose/ui/graphics/vector/PathComponent$pathMeasure$2;
-Landroidx/compose/ui/graphics/vector/PathComponent;
-Landroidx/compose/ui/graphics/vector/PathNode$Close;
-Landroidx/compose/ui/graphics/vector/PathNode$CurveTo;
-Landroidx/compose/ui/graphics/vector/PathNode$HorizontalTo;
-Landroidx/compose/ui/graphics/vector/PathNode$LineTo;
-Landroidx/compose/ui/graphics/vector/PathNode$MoveTo;
-Landroidx/compose/ui/graphics/vector/PathNode$ReflectiveCurveTo;
-Landroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;
-Landroidx/compose/ui/graphics/vector/PathNode$RelativeHorizontalTo;
-Landroidx/compose/ui/graphics/vector/PathNode$RelativeLineTo;
-Landroidx/compose/ui/graphics/vector/PathNode$RelativeMoveTo;
-Landroidx/compose/ui/graphics/vector/PathNode$RelativeReflectiveCurveTo;
-Landroidx/compose/ui/graphics/vector/PathNode$RelativeVerticalTo;
-Landroidx/compose/ui/graphics/vector/PathNode$VerticalTo;
-Landroidx/compose/ui/graphics/vector/PathNode;
-Landroidx/compose/ui/graphics/vector/PathParser$PathPoint;
-Landroidx/compose/ui/graphics/vector/PathParser;
-Landroidx/compose/ui/graphics/vector/VNode;
-Landroidx/compose/ui/graphics/vector/VectorApplier;
-Landroidx/compose/ui/graphics/vector/VectorComponent$drawVectorBlock$1;
-Landroidx/compose/ui/graphics/vector/VectorComponent$invalidateCallback$1;
-Landroidx/compose/ui/graphics/vector/VectorComponent$root$1$1;
-Landroidx/compose/ui/graphics/vector/VectorComponent;
-Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$1;
-Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$10;
-Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$11;
-Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$12;
-Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$13;
-Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$14;
-Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;
-Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$2;
-Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$3;
-Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$4;
-Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$5;
-Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$6;
-Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$7;
-Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$8;
-Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$9;
-Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path-9cdaXJ4$$inlined$ComposeNode$1;
-Landroidx/compose/ui/graphics/vector/VectorComposeKt;
-Landroidx/compose/ui/graphics/vector/VectorConfig;
-Landroidx/compose/ui/graphics/vector/VectorGroup$iterator$1;
-Landroidx/compose/ui/graphics/vector/VectorGroup;
-Landroidx/compose/ui/graphics/vector/VectorKt;
-Landroidx/compose/ui/graphics/vector/VectorNode;
-Landroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2$invoke$$inlined$onDispose$1;
-Landroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2;
-Landroidx/compose/ui/graphics/vector/VectorPainter$composeVector$1;
-Landroidx/compose/ui/graphics/vector/VectorPainter$vector$1$1;
-Landroidx/compose/ui/graphics/vector/VectorPainter;
-Landroidx/compose/ui/graphics/vector/VectorPainterKt$RenderVectorGroup$config$1;
-Landroidx/compose/ui/graphics/vector/VectorPainterKt$rememberVectorPainter$3;
-Landroidx/compose/ui/graphics/vector/VectorPainterKt;
-Landroidx/compose/ui/graphics/vector/VectorPath;
-Landroidx/compose/ui/graphics/vector/VectorProperty$Fill;
-Landroidx/compose/ui/graphics/vector/VectorProperty$FillAlpha;
-Landroidx/compose/ui/graphics/vector/VectorProperty$PathData;
-Landroidx/compose/ui/graphics/vector/VectorProperty$Stroke;
-Landroidx/compose/ui/graphics/vector/VectorProperty$StrokeAlpha;
-Landroidx/compose/ui/graphics/vector/VectorProperty$StrokeLineWidth;
-Landroidx/compose/ui/graphics/vector/VectorProperty$TrimPathEnd;
-Landroidx/compose/ui/graphics/vector/VectorProperty$TrimPathOffset;
-Landroidx/compose/ui/graphics/vector/VectorProperty$TrimPathStart;
-Landroidx/compose/ui/graphics/vector/VectorProperty;
-Landroidx/compose/ui/hapticfeedback/HapticFeedback;
-Landroidx/compose/ui/hapticfeedback/PlatformHapticFeedback;
-Landroidx/compose/ui/input/InputMode$Companion;
-Landroidx/compose/ui/input/InputMode;
-Landroidx/compose/ui/input/InputModeManager;
-Landroidx/compose/ui/input/InputModeManagerImpl;
-Landroidx/compose/ui/input/key/KeyInputInputModifierNodeImpl;
-Landroidx/compose/ui/input/key/KeyInputModifierKt$onKeyEvent$$inlined$modifierElementOf$2;
-Landroidx/compose/ui/input/key/KeyInputModifierKt;
-Landroidx/compose/ui/input/key/KeyInputModifierNode;
-Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;
-Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher$calculateNestedScrollScope$1;
-Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;
-Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierKt$nestedScroll$2;
-Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierKt;
-Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal$1;
-Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;
-Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocalKt$ModifierLocalNestedScroll$1;
-Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocalKt;
-Landroidx/compose/ui/input/pointer/AndroidPointerIconType;
-Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;
-Landroidx/compose/ui/input/pointer/ConsumedData;
-Landroidx/compose/ui/input/pointer/HistoricalChange;
-Landroidx/compose/ui/input/pointer/HitPathTracker;
-Landroidx/compose/ui/input/pointer/InternalPointerEvent;
-Landroidx/compose/ui/input/pointer/MotionEventAdapter;
-Landroidx/compose/ui/input/pointer/Node;
-Landroidx/compose/ui/input/pointer/NodeParent;
-Landroidx/compose/ui/input/pointer/PointerButtons;
-Landroidx/compose/ui/input/pointer/PointerEvent;
-Landroidx/compose/ui/input/pointer/PointerEventKt;
-Landroidx/compose/ui/input/pointer/PointerEventPass;
-Landroidx/compose/ui/input/pointer/PointerEventTimeoutCancellationException;
-Landroidx/compose/ui/input/pointer/PointerEventType$Companion;
-Landroidx/compose/ui/input/pointer/PointerEventType;
-Landroidx/compose/ui/input/pointer/PointerEvent_androidKt;
-Landroidx/compose/ui/input/pointer/PointerIcon;
-Landroidx/compose/ui/input/pointer/PointerIconService;
-Landroidx/compose/ui/input/pointer/PointerId;
-Landroidx/compose/ui/input/pointer/PointerInputChange;
-Landroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData;
-Landroidx/compose/ui/input/pointer/PointerInputChangeEventProducer;
-Landroidx/compose/ui/input/pointer/PointerInputEvent;
-Landroidx/compose/ui/input/pointer/PointerInputEventData;
-Landroidx/compose/ui/input/pointer/PointerInputEventProcessor;
-Landroidx/compose/ui/input/pointer/PointerInputEventProcessorKt;
-Landroidx/compose/ui/input/pointer/PointerInputFilter;
-Landroidx/compose/ui/input/pointer/PointerInputModifier;
-Landroidx/compose/ui/input/pointer/PointerInputScope;
-Landroidx/compose/ui/input/pointer/PointerKeyboardModifiers;
-Landroidx/compose/ui/input/pointer/PointerType$Companion;
-Landroidx/compose/ui/input/pointer/PointerType;
-Landroidx/compose/ui/input/pointer/PositionCalculator;
-Landroidx/compose/ui/input/pointer/ProcessResult;
-Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine$withTimeout$1;
-Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine$withTimeout$job$1;
-Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;
-Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$WhenMappings;
-Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$awaitPointerEventScope$2$2;
-Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;
-Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$2$2$1;
-Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$2;
-Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$4$2$1;
-Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$4;
-Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$6$2$1;
-Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$6;
-Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;
-Landroidx/compose/ui/input/pointer/util/DataPointAtTime;
-Landroidx/compose/ui/input/pointer/util/VelocityTracker1D$Strategy;
-Landroidx/compose/ui/input/pointer/util/VelocityTracker1D$WhenMappings;
-Landroidx/compose/ui/input/pointer/util/VelocityTracker1D;
-Landroidx/compose/ui/input/pointer/util/VelocityTracker;
-Landroidx/compose/ui/input/pointer/util/VelocityTrackerKt;
-Landroidx/compose/ui/input/rotary/RotaryInputModifierKt$onRotaryScrollEvent$$inlined$modifierElementOf$2;
-Landroidx/compose/ui/input/rotary/RotaryInputModifierKt;
-Landroidx/compose/ui/input/rotary/RotaryInputModifierNode;
-Landroidx/compose/ui/input/rotary/RotaryInputModifierNodeImpl;
-Landroidx/compose/ui/layout/AlignmentLine$Companion;
-Landroidx/compose/ui/layout/AlignmentLine;
-Landroidx/compose/ui/layout/AlignmentLineKt$FirstBaseline$1;
-Landroidx/compose/ui/layout/AlignmentLineKt$LastBaseline$1;
-Landroidx/compose/ui/layout/AlignmentLineKt;
-Landroidx/compose/ui/layout/BeyondBoundsLayout$BeyondBoundsScope;
-Landroidx/compose/ui/layout/BeyondBoundsLayout;
-Landroidx/compose/ui/layout/BeyondBoundsLayoutKt$ModifierLocalBeyondBoundsLayout$1;
-Landroidx/compose/ui/layout/BeyondBoundsLayoutKt;
-Landroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt$lambda-1$1;
-Landroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt;
-Landroidx/compose/ui/layout/ContentScale$Companion$Crop$1;
-Landroidx/compose/ui/layout/ContentScale$Companion$FillBounds$1;
-Landroidx/compose/ui/layout/ContentScale$Companion$FillHeight$1;
-Landroidx/compose/ui/layout/ContentScale$Companion$FillWidth$1;
-Landroidx/compose/ui/layout/ContentScale$Companion$Fit$1;
-Landroidx/compose/ui/layout/ContentScale$Companion$Inside$1;
-Landroidx/compose/ui/layout/ContentScale$Companion;
-Landroidx/compose/ui/layout/ContentScale;
-Landroidx/compose/ui/layout/ContentScaleKt;
-Landroidx/compose/ui/layout/FixedScale;
-Landroidx/compose/ui/layout/HorizontalAlignmentLine;
-Landroidx/compose/ui/layout/IntrinsicMeasurable;
-Landroidx/compose/ui/layout/IntrinsicMeasureScope;
-Landroidx/compose/ui/layout/LayoutCoordinates;
-Landroidx/compose/ui/layout/LayoutId;
-Landroidx/compose/ui/layout/LayoutIdKt;
-Landroidx/compose/ui/layout/LayoutIdParentData;
-Landroidx/compose/ui/layout/LayoutInfo;
-Landroidx/compose/ui/layout/LayoutKt$materializerOf$1;
-Landroidx/compose/ui/layout/LayoutKt;
-Landroidx/compose/ui/layout/LayoutModifier;
-Landroidx/compose/ui/layout/LayoutModifierImpl;
-Landroidx/compose/ui/layout/LayoutModifierKt$layout$$inlined$modifierElementOf$2;
-Landroidx/compose/ui/layout/LayoutModifierKt;
-Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;
-Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;
-Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure$1;
-Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1;
-Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$subcompose$3$1$1;
-Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;
-Landroidx/compose/ui/layout/LookaheadLayoutCoordinates;
-Landroidx/compose/ui/layout/LookaheadLayoutCoordinatesImpl;
-Landroidx/compose/ui/layout/Measurable;
-Landroidx/compose/ui/layout/MeasurePolicy;
-Landroidx/compose/ui/layout/MeasureResult;
-Landroidx/compose/ui/layout/MeasureScope$layout$1;
-Landroidx/compose/ui/layout/MeasureScope;
-Landroidx/compose/ui/layout/Measured;
-Landroidx/compose/ui/layout/NoOpSubcomposeSlotReusePolicy;
-Landroidx/compose/ui/layout/OnGloballyPositionedModifier;
-Landroidx/compose/ui/layout/OnGloballyPositionedModifierImpl;
-Landroidx/compose/ui/layout/OnGloballyPositionedModifierKt;
-Landroidx/compose/ui/layout/OnPlacedModifier;
-Landroidx/compose/ui/layout/OnRemeasuredModifier;
-Landroidx/compose/ui/layout/OnRemeasuredModifierKt;
-Landroidx/compose/ui/layout/OnSizeChangedModifier;
-Landroidx/compose/ui/layout/ParentDataModifier;
-Landroidx/compose/ui/layout/PinnableContainer$PinnedHandle;
-Landroidx/compose/ui/layout/PinnableContainer;
-Landroidx/compose/ui/layout/PinnableContainerKt$LocalPinnableContainer$1;
-Landroidx/compose/ui/layout/PinnableContainerKt;
-Landroidx/compose/ui/layout/Placeable$PlacementScope$Companion;
-Landroidx/compose/ui/layout/Placeable$PlacementScope;
-Landroidx/compose/ui/layout/Placeable;
-Landroidx/compose/ui/layout/PlaceableKt$DefaultLayerBlock$1;
-Landroidx/compose/ui/layout/PlaceableKt;
-Landroidx/compose/ui/layout/Remeasurement;
-Landroidx/compose/ui/layout/RemeasurementModifier;
-Landroidx/compose/ui/layout/RootMeasurePolicy$measure$2;
-Landroidx/compose/ui/layout/RootMeasurePolicy;
-Landroidx/compose/ui/layout/ScaleFactor$Companion;
-Landroidx/compose/ui/layout/ScaleFactor;
-Landroidx/compose/ui/layout/ScaleFactorKt;
-Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$$inlined$ComposeNode$1;
-Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$4;
-Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1$invoke$$inlined$onDispose$1;
-Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1;
-Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$6;
-Landroidx/compose/ui/layout/SubcomposeLayoutKt;
-Landroidx/compose/ui/layout/SubcomposeLayoutState$setCompositionContext$1;
-Landroidx/compose/ui/layout/SubcomposeLayoutState$setMeasurePolicy$1;
-Landroidx/compose/ui/layout/SubcomposeLayoutState$setRoot$1;
-Landroidx/compose/ui/layout/SubcomposeLayoutState;
-Landroidx/compose/ui/layout/SubcomposeMeasureScope;
-Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;
-Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy;
-Landroidx/compose/ui/modifier/BackwardsCompatLocalMap;
-Landroidx/compose/ui/modifier/EmptyMap;
-Landroidx/compose/ui/modifier/ModifierLocal;
-Landroidx/compose/ui/modifier/ModifierLocalConsumer;
-Landroidx/compose/ui/modifier/ModifierLocalKt;
-Landroidx/compose/ui/modifier/ModifierLocalManager$invalidate$1;
-Landroidx/compose/ui/modifier/ModifierLocalManager;
-Landroidx/compose/ui/modifier/ModifierLocalMap;
-Landroidx/compose/ui/modifier/ModifierLocalNode;
-Landroidx/compose/ui/modifier/ModifierLocalNodeKt;
-Landroidx/compose/ui/modifier/ModifierLocalProvider;
-Landroidx/compose/ui/modifier/ModifierLocalReadScope;
-Landroidx/compose/ui/modifier/ProvidableModifierLocal;
-Landroidx/compose/ui/node/AlignmentLines$recalculate$1;
-Landroidx/compose/ui/node/AlignmentLines;
-Landroidx/compose/ui/node/AlignmentLinesOwner;
-Landroidx/compose/ui/node/BackwardsCompatNode$updateModifierLocalConsumer$1;
-Landroidx/compose/ui/node/BackwardsCompatNode;
-Landroidx/compose/ui/node/BackwardsCompatNodeKt$DetachedModifierLocalReadScope$1;
-Landroidx/compose/ui/node/BackwardsCompatNodeKt$onDrawCacheReadsChanged$1;
-Landroidx/compose/ui/node/BackwardsCompatNodeKt$updateModifierLocalConsumer$1;
-Landroidx/compose/ui/node/BackwardsCompatNodeKt;
-Landroidx/compose/ui/node/CanFocusChecker;
-Landroidx/compose/ui/node/CenteredArray;
-Landroidx/compose/ui/node/ComposeUiNode$Companion$SetDensity$1;
-Landroidx/compose/ui/node/ComposeUiNode$Companion$SetLayoutDirection$1;
-Landroidx/compose/ui/node/ComposeUiNode$Companion$SetMeasurePolicy$1;
-Landroidx/compose/ui/node/ComposeUiNode$Companion$SetModifier$1;
-Landroidx/compose/ui/node/ComposeUiNode$Companion$SetViewConfiguration$1;
-Landroidx/compose/ui/node/ComposeUiNode$Companion$VirtualConstructor$1;
-Landroidx/compose/ui/node/ComposeUiNode$Companion;
-Landroidx/compose/ui/node/ComposeUiNode;
-Landroidx/compose/ui/node/DelegatableNode;
-Landroidx/compose/ui/node/DelegatableNodeKt;
-Landroidx/compose/ui/node/DepthSortedSet$DepthComparator$1;
-Landroidx/compose/ui/node/DepthSortedSet$mapOfOriginalDepth$2;
-Landroidx/compose/ui/node/DepthSortedSet;
-Landroidx/compose/ui/node/DiffCallback;
-Landroidx/compose/ui/node/DistanceAndInLayer;
-Landroidx/compose/ui/node/DrawModifierNode;
-Landroidx/compose/ui/node/DrawModifierNodeKt;
-Landroidx/compose/ui/node/GlobalPositionAwareModifierNode;
-Landroidx/compose/ui/node/HitTestResult;
-Landroidx/compose/ui/node/HitTestResultKt;
-Landroidx/compose/ui/node/InnerNodeCoordinator$Companion;
-Landroidx/compose/ui/node/InnerNodeCoordinator$tail$1;
-Landroidx/compose/ui/node/InnerNodeCoordinator;
-Landroidx/compose/ui/node/IntStack;
-Landroidx/compose/ui/node/IntermediateLayoutModifierNode;
-Landroidx/compose/ui/node/IntrinsicsPolicy$Companion;
-Landroidx/compose/ui/node/IntrinsicsPolicy;
-Landroidx/compose/ui/node/LayerPositionalProperties;
-Landroidx/compose/ui/node/LayoutAwareModifierNode;
-Landroidx/compose/ui/node/LayoutModifierNode;
-Landroidx/compose/ui/node/LayoutModifierNodeCoordinator$Companion;
-Landroidx/compose/ui/node/LayoutModifierNodeCoordinator;
-Landroidx/compose/ui/node/LayoutModifierNodeCoordinatorKt;
-Landroidx/compose/ui/node/LayoutModifierNodeKt;
-Landroidx/compose/ui/node/LayoutNode$$ExternalSyntheticLambda0;
-Landroidx/compose/ui/node/LayoutNode$Companion$Constructor$1;
-Landroidx/compose/ui/node/LayoutNode$Companion$DummyViewConfiguration$1;
-Landroidx/compose/ui/node/LayoutNode$Companion$ErrorMeasurePolicy$1;
-Landroidx/compose/ui/node/LayoutNode$Companion;
-Landroidx/compose/ui/node/LayoutNode$LayoutState;
-Landroidx/compose/ui/node/LayoutNode$NoIntrinsicsMeasurePolicy;
-Landroidx/compose/ui/node/LayoutNode$UsageByParent;
-Landroidx/compose/ui/node/LayoutNode$WhenMappings;
-Landroidx/compose/ui/node/LayoutNode$_foldedChildren$1;
-Landroidx/compose/ui/node/LayoutNode;
-Landroidx/compose/ui/node/LayoutNodeAlignmentLines;
-Landroidx/compose/ui/node/LayoutNodeDrawScope;
-Landroidx/compose/ui/node/LayoutNodeDrawScopeKt;
-Landroidx/compose/ui/node/LayoutNodeKt;
-Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$WhenMappings;
-Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$childMeasurables$1;
-Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1$1;
-Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1$2;
-Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1;
-Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$placeOuterCoordinator$1;
-Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$remeasure$1;
-Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;
-Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2;
-Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;
-Landroidx/compose/ui/node/LayoutNodeLayoutDelegateKt;
-Landroidx/compose/ui/node/LayoutTreeConsistencyChecker;
-Landroidx/compose/ui/node/LookaheadCapablePlaceable;
-Landroidx/compose/ui/node/LookaheadDelegate;
-Landroidx/compose/ui/node/MeasureAndLayoutDelegate$PostponedRequest;
-Landroidx/compose/ui/node/MeasureAndLayoutDelegate$WhenMappings;
-Landroidx/compose/ui/node/MeasureAndLayoutDelegate;
-Landroidx/compose/ui/node/ModifierNodeElement;
-Landroidx/compose/ui/node/MutableVectorWithMutationTracking;
-Landroidx/compose/ui/node/MyersDiffKt;
-Landroidx/compose/ui/node/NodeChain$Differ;
-Landroidx/compose/ui/node/NodeChain;
-Landroidx/compose/ui/node/NodeChainKt$SentinelHead$1;
-Landroidx/compose/ui/node/NodeChainKt;
-Landroidx/compose/ui/node/NodeCoordinator$Companion$PointerInputSource$1;
-Landroidx/compose/ui/node/NodeCoordinator$Companion$SemanticsSource$1;
-Landroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayer$1;
-Landroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayerParams$1;
-Landroidx/compose/ui/node/NodeCoordinator$Companion;
-Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;
-Landroidx/compose/ui/node/NodeCoordinator$hit$1;
-Landroidx/compose/ui/node/NodeCoordinator$invalidateParentLayer$1;
-Landroidx/compose/ui/node/NodeCoordinator$invoke$1;
-Landroidx/compose/ui/node/NodeCoordinator$updateLayerParameters$1;
-Landroidx/compose/ui/node/NodeCoordinator;
-Landroidx/compose/ui/node/NodeCoordinatorKt;
-Landroidx/compose/ui/node/NodeKind;
-Landroidx/compose/ui/node/NodeKindKt;
-Landroidx/compose/ui/node/ObserverNode;
-Landroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;
-Landroidx/compose/ui/node/OnPositionedDispatcher$Companion;
-Landroidx/compose/ui/node/OnPositionedDispatcher;
-Landroidx/compose/ui/node/OwnedLayer;
-Landroidx/compose/ui/node/Owner$Companion;
-Landroidx/compose/ui/node/Owner$OnLayoutCompletedListener;
-Landroidx/compose/ui/node/Owner;
-Landroidx/compose/ui/node/OwnerScope;
-Landroidx/compose/ui/node/OwnerSnapshotObserver$clearInvalidObservations$1;
-Landroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayout$1;
-Landroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayoutModifier$1;
-Landroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayoutModifierInLookahead$1;
-Landroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLookaheadLayout$1;
-Landroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLookaheadMeasure$1;
-Landroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingMeasure$1;
-Landroidx/compose/ui/node/OwnerSnapshotObserver;
-Landroidx/compose/ui/node/ParentDataModifierNode;
-Landroidx/compose/ui/node/PointerInputModifierNode;
-Landroidx/compose/ui/node/PointerInputModifierNodeKt;
-Landroidx/compose/ui/node/RootForTest;
-Landroidx/compose/ui/node/SemanticsModifierNode;
-Landroidx/compose/ui/node/SemanticsModifierNodeKt;
-Landroidx/compose/ui/node/Snake;
-Landroidx/compose/ui/node/TreeSet;
-Landroidx/compose/ui/node/UiApplier;
-Landroidx/compose/ui/platform/AbstractComposeView$ensureCompositionCreated$1;
-Landroidx/compose/ui/platform/AbstractComposeView;
-Landroidx/compose/ui/platform/AccessibilityManager;
-Landroidx/compose/ui/platform/AndroidAccessibilityManager$Companion;
-Landroidx/compose/ui/platform/AndroidAccessibilityManager;
-Landroidx/compose/ui/platform/AndroidClipboardManager;
-Landroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda0;
-Landroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda1;
-Landroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda2;
-Landroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda3;
-Landroidx/compose/ui/platform/AndroidComposeView$Companion;
-Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;
-Landroidx/compose/ui/platform/AndroidComposeView$_inputModeManager$1;
-Landroidx/compose/ui/platform/AndroidComposeView$configurationChangeObserver$1;
-Landroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;
-Landroidx/compose/ui/platform/AndroidComposeView$keyInputModifier$1;
-Landroidx/compose/ui/platform/AndroidComposeView$pointerIconService$1;
-Landroidx/compose/ui/platform/AndroidComposeView$resendMotionEventOnLayout$1;
-Landroidx/compose/ui/platform/AndroidComposeView$resendMotionEventRunnable$1;
-Landroidx/compose/ui/platform/AndroidComposeView$rotaryInputModifier$1;
-Landroidx/compose/ui/platform/AndroidComposeView$semanticsModifier$1;
-Landroidx/compose/ui/platform/AndroidComposeView$snapshotObserver$1;
-Landroidx/compose/ui/platform/AndroidComposeView;
-Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda0;
-Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda1;
-Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda2;
-Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;
-Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Companion;
-Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider;
-Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$SemanticsNodeCopy;
-Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$boundsUpdatesEventLoop$1;
-Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sendScrollEventIfNeededLambda$1;
-Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;
-Landroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;
-Landroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsN;
-Landroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;
-Landroidx/compose/ui/platform/AndroidComposeView_androidKt$textInputServiceFactory$1;
-Landroidx/compose/ui/platform/AndroidComposeView_androidKt;
-Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalConfiguration$1;
-Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalContext$1;
-Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalImageVectorCache$1;
-Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalLifecycleOwner$1;
-Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalSavedStateRegistryOwner$1;
-Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalView$1;
-Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$1$1;
-Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2$invoke$$inlined$onDispose$1;
-Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2;
-Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$3;
-Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$4;
-Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1$invoke$$inlined$onDispose$1;
-Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1;
-Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1;
-Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;
-Landroidx/compose/ui/platform/AndroidFontResourceLoader;
-Landroidx/compose/ui/platform/AndroidTextToolbar$textActionModeCallback$1;
-Landroidx/compose/ui/platform/AndroidTextToolbar;
-Landroidx/compose/ui/platform/AndroidUiDispatcher$Companion$Main$2;
-Landroidx/compose/ui/platform/AndroidUiDispatcher$Companion$currentThread$1;
-Landroidx/compose/ui/platform/AndroidUiDispatcher$Companion;
-Landroidx/compose/ui/platform/AndroidUiDispatcher$dispatchCallback$1;
-Landroidx/compose/ui/platform/AndroidUiDispatcher;
-Landroidx/compose/ui/platform/AndroidUiDispatcher_androidKt;
-Landroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$1;
-Landroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$callback$1;
-Landroidx/compose/ui/platform/AndroidUiFrameClock;
-Landroidx/compose/ui/platform/AndroidUriHandler;
-Landroidx/compose/ui/platform/AndroidViewConfiguration;
-Landroidx/compose/ui/platform/CalculateMatrixToWindow;
-Landroidx/compose/ui/platform/CalculateMatrixToWindowApi29;
-Landroidx/compose/ui/platform/ClipboardManager;
-Landroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt$lambda-1$1;
-Landroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt;
-Landroidx/compose/ui/platform/ComposeView$Content$1;
-Landroidx/compose/ui/platform/ComposeView;
-Landroidx/compose/ui/platform/CompositionLocalsKt$LocalAccessibilityManager$1;
-Landroidx/compose/ui/platform/CompositionLocalsKt$LocalAutofill$1;
-Landroidx/compose/ui/platform/CompositionLocalsKt$LocalAutofillTree$1;
-Landroidx/compose/ui/platform/CompositionLocalsKt$LocalClipboardManager$1;
-Landroidx/compose/ui/platform/CompositionLocalsKt$LocalDensity$1;
-Landroidx/compose/ui/platform/CompositionLocalsKt$LocalFocusManager$1;
-Landroidx/compose/ui/platform/CompositionLocalsKt$LocalFontFamilyResolver$1;
-Landroidx/compose/ui/platform/CompositionLocalsKt$LocalFontLoader$1;
-Landroidx/compose/ui/platform/CompositionLocalsKt$LocalHapticFeedback$1;
-Landroidx/compose/ui/platform/CompositionLocalsKt$LocalInputModeManager$1;
-Landroidx/compose/ui/platform/CompositionLocalsKt$LocalLayoutDirection$1;
-Landroidx/compose/ui/platform/CompositionLocalsKt$LocalPointerIconService$1;
-Landroidx/compose/ui/platform/CompositionLocalsKt$LocalTextInputService$1;
-Landroidx/compose/ui/platform/CompositionLocalsKt$LocalTextToolbar$1;
-Landroidx/compose/ui/platform/CompositionLocalsKt$LocalUriHandler$1;
-Landroidx/compose/ui/platform/CompositionLocalsKt$LocalViewConfiguration$1;
-Landroidx/compose/ui/platform/CompositionLocalsKt$LocalWindowInfo$1;
-Landroidx/compose/ui/platform/CompositionLocalsKt$ProvideCommonCompositionLocals$1;
-Landroidx/compose/ui/platform/CompositionLocalsKt;
-Landroidx/compose/ui/platform/DeviceRenderNode;
-Landroidx/compose/ui/platform/DisposableSaveableStateRegistry;
-Landroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1;
-Landroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$registered$1;
-Landroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$saveableStateRegistry$1;
-Landroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt;
-Landroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1;
-Landroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$2;
-Landroidx/compose/ui/platform/GlobalSnapshotManager;
-Landroidx/compose/ui/platform/InspectableModifier$End;
-Landroidx/compose/ui/platform/InspectableModifier;
-Landroidx/compose/ui/platform/InspectableValueKt$NoInspectorInfo$1;
-Landroidx/compose/ui/platform/InspectableValueKt;
-Landroidx/compose/ui/platform/InspectorValueInfo;
-Landroidx/compose/ui/platform/InvertMatrixKt;
-Landroidx/compose/ui/platform/LayerMatrixCache;
-Landroidx/compose/ui/platform/MotionDurationScaleImpl;
-Landroidx/compose/ui/platform/OutlineResolver;
-Landroidx/compose/ui/platform/RenderNodeApi29;
-Landroidx/compose/ui/platform/RenderNodeApi29VerificationHelper;
-Landroidx/compose/ui/platform/RenderNodeLayer$Companion$getMatrix$1;
-Landroidx/compose/ui/platform/RenderNodeLayer$Companion;
-Landroidx/compose/ui/platform/RenderNodeLayer;
-Landroidx/compose/ui/platform/ShapeContainingUtilKt;
-Landroidx/compose/ui/platform/TextToolbar;
-Landroidx/compose/ui/platform/TextToolbarStatus;
-Landroidx/compose/ui/platform/UriHandler;
-Landroidx/compose/ui/platform/ViewCompositionStrategy$Companion;
-Landroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$1;
-Landroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$listener$1;
-Landroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$poolingContainerListener$1;
-Landroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool;
-Landroidx/compose/ui/platform/ViewCompositionStrategy;
-Landroidx/compose/ui/platform/ViewConfiguration;
-Landroidx/compose/ui/platform/ViewLayer$Companion$OutlineProvider$1;
-Landroidx/compose/ui/platform/ViewLayer$Companion$getMatrix$1;
-Landroidx/compose/ui/platform/ViewLayer$Companion;
-Landroidx/compose/ui/platform/ViewLayer;
-Landroidx/compose/ui/platform/ViewRootForTest$Companion;
-Landroidx/compose/ui/platform/ViewRootForTest;
-Landroidx/compose/ui/platform/WeakCache;
-Landroidx/compose/ui/platform/WindowInfo;
-Landroidx/compose/ui/platform/WindowInfoImpl$Companion;
-Landroidx/compose/ui/platform/WindowInfoImpl;
-Landroidx/compose/ui/platform/WindowRecomposerFactory$Companion$LifecycleAware$1;
-Landroidx/compose/ui/platform/WindowRecomposerFactory$Companion;
-Landroidx/compose/ui/platform/WindowRecomposerFactory;
-Landroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$1;
-Landroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;
-Landroidx/compose/ui/platform/WindowRecomposerPolicy;
-Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;
-Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$WhenMappings;
-Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1$1;
-Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1;
-Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;
-Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2;
-Landroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;
-Landroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$contentObserver$1;
-Landroidx/compose/ui/platform/WindowRecomposer_androidKt;
-Landroidx/compose/ui/platform/WrappedComposition$setContent$1$1$1;
-Landroidx/compose/ui/platform/WrappedComposition$setContent$1$1$2;
-Landroidx/compose/ui/platform/WrappedComposition$setContent$1$1$3;
-Landroidx/compose/ui/platform/WrappedComposition$setContent$1$1;
-Landroidx/compose/ui/platform/WrappedComposition$setContent$1;
-Landroidx/compose/ui/platform/WrappedComposition;
-Landroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods;
-Landroidx/compose/ui/platform/WrapperVerificationHelperMethods;
-Landroidx/compose/ui/platform/Wrapper_androidKt;
-Landroidx/compose/ui/platform/actionmodecallback/TextActionModeCallback;
-Landroidx/compose/ui/res/ImageVectorCache;
-Landroidx/compose/ui/res/Resources_androidKt;
-Landroidx/compose/ui/res/StringResources_androidKt;
-Landroidx/compose/ui/semantics/AccessibilityAction;
-Landroidx/compose/ui/semantics/CollectionInfo;
-Landroidx/compose/ui/semantics/Role$Companion;
-Landroidx/compose/ui/semantics/Role;
-Landroidx/compose/ui/semantics/ScrollAxisRange;
-Landroidx/compose/ui/semantics/SemanticsActions;
-Landroidx/compose/ui/semantics/SemanticsConfiguration;
-Landroidx/compose/ui/semantics/SemanticsConfigurationKt$getOrNull$1;
-Landroidx/compose/ui/semantics/SemanticsConfigurationKt;
-Landroidx/compose/ui/semantics/SemanticsModifier;
-Landroidx/compose/ui/semantics/SemanticsModifierCore$Companion;
-Landroidx/compose/ui/semantics/SemanticsModifierCore;
-Landroidx/compose/ui/semantics/SemanticsModifierKt;
-Landroidx/compose/ui/semantics/SemanticsNode;
-Landroidx/compose/ui/semantics/SemanticsNodeKt;
-Landroidx/compose/ui/semantics/SemanticsOwner;
-Landroidx/compose/ui/semantics/SemanticsProperties$ContentDescription$1;
-Landroidx/compose/ui/semantics/SemanticsProperties$InvisibleToUser$1;
-Landroidx/compose/ui/semantics/SemanticsProperties$IsDialog$1;
-Landroidx/compose/ui/semantics/SemanticsProperties$IsPopup$1;
-Landroidx/compose/ui/semantics/SemanticsProperties$PaneTitle$1;
-Landroidx/compose/ui/semantics/SemanticsProperties$Role$1;
-Landroidx/compose/ui/semantics/SemanticsProperties$TestTag$1;
-Landroidx/compose/ui/semantics/SemanticsProperties$Text$1;
-Landroidx/compose/ui/semantics/SemanticsProperties;
-Landroidx/compose/ui/semantics/SemanticsPropertiesKt$ActionPropertyKey$1;
-Landroidx/compose/ui/semantics/SemanticsPropertiesKt;
-Landroidx/compose/ui/semantics/SemanticsPropertyKey$1;
-Landroidx/compose/ui/semantics/SemanticsPropertyKey;
-Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;
-Landroidx/compose/ui/text/AndroidParagraph$wordBoundary$2;
-Landroidx/compose/ui/text/AndroidParagraph;
-Landroidx/compose/ui/text/AndroidParagraph_androidKt;
-Landroidx/compose/ui/text/AnnotatedString$Range;
-Landroidx/compose/ui/text/AnnotatedString;
-Landroidx/compose/ui/text/AnnotatedStringKt;
-Landroidx/compose/ui/text/EmojiSupportMatch$Companion;
-Landroidx/compose/ui/text/EmojiSupportMatch;
-Landroidx/compose/ui/text/MultiParagraph;
-Landroidx/compose/ui/text/MultiParagraphIntrinsics$maxIntrinsicWidth$2;
-Landroidx/compose/ui/text/MultiParagraphIntrinsics$minIntrinsicWidth$2;
-Landroidx/compose/ui/text/MultiParagraphIntrinsics;
-Landroidx/compose/ui/text/MultiParagraphIntrinsicsKt;
-Landroidx/compose/ui/text/Paragraph;
-Landroidx/compose/ui/text/ParagraphInfo;
-Landroidx/compose/ui/text/ParagraphIntrinsicInfo;
-Landroidx/compose/ui/text/ParagraphIntrinsics;
-Landroidx/compose/ui/text/ParagraphIntrinsicsKt;
-Landroidx/compose/ui/text/ParagraphKt;
-Landroidx/compose/ui/text/ParagraphStyle;
-Landroidx/compose/ui/text/ParagraphStyleKt;
-Landroidx/compose/ui/text/PlatformTextStyle;
-Landroidx/compose/ui/text/SpanStyle;
-Landroidx/compose/ui/text/SpanStyleKt$resolveSpanStyleDefaults$1;
-Landroidx/compose/ui/text/SpanStyleKt;
-Landroidx/compose/ui/text/TextLayoutInput;
-Landroidx/compose/ui/text/TextLayoutResult;
-Landroidx/compose/ui/text/TextPainter;
-Landroidx/compose/ui/text/TextRange$Companion;
-Landroidx/compose/ui/text/TextRange;
-Landroidx/compose/ui/text/TextRangeKt;
-Landroidx/compose/ui/text/TextStyle$Companion;
-Landroidx/compose/ui/text/TextStyle;
-Landroidx/compose/ui/text/TextStyleKt$WhenMappings;
-Landroidx/compose/ui/text/TextStyleKt;
-Landroidx/compose/ui/text/android/BoringLayoutFactory33;
-Landroidx/compose/ui/text/android/BoringLayoutFactory;
-Landroidx/compose/ui/text/android/LayoutIntrinsics$boringMetrics$2;
-Landroidx/compose/ui/text/android/LayoutIntrinsics$maxIntrinsicWidth$2;
-Landroidx/compose/ui/text/android/LayoutIntrinsics$minIntrinsicWidth$2;
-Landroidx/compose/ui/text/android/LayoutIntrinsics;
-Landroidx/compose/ui/text/android/LayoutIntrinsicsKt;
-Landroidx/compose/ui/text/android/SpannedExtensionsKt;
-Landroidx/compose/ui/text/android/StaticLayoutFactory23;
-Landroidx/compose/ui/text/android/StaticLayoutFactory26;
-Landroidx/compose/ui/text/android/StaticLayoutFactory28;
-Landroidx/compose/ui/text/android/StaticLayoutFactory33;
-Landroidx/compose/ui/text/android/StaticLayoutFactory;
-Landroidx/compose/ui/text/android/StaticLayoutFactoryImpl;
-Landroidx/compose/ui/text/android/StaticLayoutParams;
-Landroidx/compose/ui/text/android/TextAlignmentAdapter;
-Landroidx/compose/ui/text/android/TextAndroidCanvas;
-Landroidx/compose/ui/text/android/TextLayout$Companion;
-Landroidx/compose/ui/text/android/TextLayout$layoutHelper$2;
-Landroidx/compose/ui/text/android/TextLayout;
-Landroidx/compose/ui/text/android/TextLayoutKt;
-Landroidx/compose/ui/text/android/style/BaselineShiftSpan;
-Landroidx/compose/ui/text/android/style/IndentationFixSpanKt;
-Landroidx/compose/ui/text/android/style/LetterSpacingSpanEm;
-Landroidx/compose/ui/text/android/style/LetterSpacingSpanPx;
-Landroidx/compose/ui/text/android/style/LineHeightSpan;
-Landroidx/compose/ui/text/android/style/LineHeightStyleSpan;
-Landroidx/compose/ui/text/android/style/LineHeightStyleSpanKt;
-Landroidx/compose/ui/text/android/style/PlaceholderSpan;
-Landroidx/compose/ui/text/caches/ContainerHelpersKt;
-Landroidx/compose/ui/text/caches/LruCache;
-Landroidx/compose/ui/text/caches/SimpleArrayMap;
-Landroidx/compose/ui/text/font/AndroidFont$TypefaceLoader;
-Landroidx/compose/ui/text/font/AndroidFont;
-Landroidx/compose/ui/text/font/AndroidFontLoader;
-Landroidx/compose/ui/text/font/AndroidFontResolveInterceptor;
-Landroidx/compose/ui/text/font/AndroidFontResolveInterceptor_androidKt;
-Landroidx/compose/ui/text/font/AsyncTypefaceCache$AsyncTypefaceResult;
-Landroidx/compose/ui/text/font/AsyncTypefaceCache$Key;
-Landroidx/compose/ui/text/font/AsyncTypefaceCache;
-Landroidx/compose/ui/text/font/DefaultFontFamily;
-Landroidx/compose/ui/text/font/DeviceFontFamilyName;
-Landroidx/compose/ui/text/font/DeviceFontFamilyNameFont;
-Landroidx/compose/ui/text/font/DeviceFontFamilyNameFontKt;
-Landroidx/compose/ui/text/font/FileBasedFontFamily;
-Landroidx/compose/ui/text/font/Font$ResourceLoader;
-Landroidx/compose/ui/text/font/Font;
-Landroidx/compose/ui/text/font/FontFamily$Companion;
-Landroidx/compose/ui/text/font/FontFamily$Resolver;
-Landroidx/compose/ui/text/font/FontFamily;
-Landroidx/compose/ui/text/font/FontFamilyKt;
-Landroidx/compose/ui/text/font/FontFamilyResolverImpl$createDefaultTypeface$1;
-Landroidx/compose/ui/text/font/FontFamilyResolverImpl$resolve$result$1;
-Landroidx/compose/ui/text/font/FontFamilyResolverImpl;
-Landroidx/compose/ui/text/font/FontFamilyResolverKt;
-Landroidx/compose/ui/text/font/FontFamilyResolver_androidKt;
-Landroidx/compose/ui/text/font/FontListFontFamily;
-Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter$Companion;
-Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter$special$$inlined$CoroutineExceptionHandler$1;
-Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;
-Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapterKt;
-Landroidx/compose/ui/text/font/FontLoadingStrategy$Companion;
-Landroidx/compose/ui/text/font/FontLoadingStrategy;
-Landroidx/compose/ui/text/font/FontMatcher;
-Landroidx/compose/ui/text/font/FontStyle$Companion;
-Landroidx/compose/ui/text/font/FontStyle;
-Landroidx/compose/ui/text/font/FontSynthesis$Companion;
-Landroidx/compose/ui/text/font/FontSynthesis;
-Landroidx/compose/ui/text/font/FontSynthesis_androidKt;
-Landroidx/compose/ui/text/font/FontVariation$Setting;
-Landroidx/compose/ui/text/font/FontVariation$Settings;
-Landroidx/compose/ui/text/font/FontWeight$Companion;
-Landroidx/compose/ui/text/font/FontWeight;
-Landroidx/compose/ui/text/font/GenericFontFamily;
-Landroidx/compose/ui/text/font/NamedFontLoader;
-Landroidx/compose/ui/text/font/PlatformFontFamilyTypefaceAdapter;
-Landroidx/compose/ui/text/font/PlatformFontLoader;
-Landroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion$Default$1;
-Landroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion;
-Landroidx/compose/ui/text/font/PlatformResolveInterceptor;
-Landroidx/compose/ui/text/font/PlatformTypefaces;
-Landroidx/compose/ui/text/font/PlatformTypefacesApi28;
-Landroidx/compose/ui/text/font/PlatformTypefacesKt;
-Landroidx/compose/ui/text/font/SystemFontFamily;
-Landroidx/compose/ui/text/font/TypefaceCompatApi26;
-Landroidx/compose/ui/text/font/TypefaceHelperMethodsApi28;
-Landroidx/compose/ui/text/font/TypefaceRequest;
-Landroidx/compose/ui/text/font/TypefaceRequestCache$runCached$currentTypefaceResult$1;
-Landroidx/compose/ui/text/font/TypefaceRequestCache;
-Landroidx/compose/ui/text/font/TypefaceResult$Immutable;
-Landroidx/compose/ui/text/font/TypefaceResult;
-Landroidx/compose/ui/text/input/ImeAction$Companion;
-Landroidx/compose/ui/text/input/ImeAction;
-Landroidx/compose/ui/text/input/ImeOptions$Companion;
-Landroidx/compose/ui/text/input/ImeOptions;
-Landroidx/compose/ui/text/input/ImmHelper30;
-Landroidx/compose/ui/text/input/ImmHelper;
-Landroidx/compose/ui/text/input/InputMethodManager;
-Landroidx/compose/ui/text/input/InputMethodManagerImpl$imm$2;
-Landroidx/compose/ui/text/input/InputMethodManagerImpl;
-Landroidx/compose/ui/text/input/KeyboardCapitalization$Companion;
-Landroidx/compose/ui/text/input/KeyboardCapitalization;
-Landroidx/compose/ui/text/input/KeyboardType$Companion;
-Landroidx/compose/ui/text/input/KeyboardType;
-Landroidx/compose/ui/text/input/PlatformTextInputService;
-Landroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$1;
-Landroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$2;
-Landroidx/compose/ui/text/input/TextFieldValue$Companion;
-Landroidx/compose/ui/text/input/TextFieldValue;
-Landroidx/compose/ui/text/input/TextInputService;
-Landroidx/compose/ui/text/input/TextInputServiceAndroid$baseInputConnection$2;
-Landroidx/compose/ui/text/input/TextInputServiceAndroid$onEditCommand$1;
-Landroidx/compose/ui/text/input/TextInputServiceAndroid$onImeActionPerformed$1;
-Landroidx/compose/ui/text/input/TextInputServiceAndroid$textInputCommandEventLoop$1;
-Landroidx/compose/ui/text/input/TextInputServiceAndroid;
-Landroidx/compose/ui/text/intl/AndroidLocale;
-Landroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24;
-Landroidx/compose/ui/text/intl/AndroidPlatformLocale_androidKt;
-Landroidx/compose/ui/text/intl/Locale$Companion;
-Landroidx/compose/ui/text/intl/Locale;
-Landroidx/compose/ui/text/intl/LocaleList$Companion;
-Landroidx/compose/ui/text/intl/LocaleList;
-Landroidx/compose/ui/text/intl/PlatformLocale;
-Landroidx/compose/ui/text/intl/PlatformLocaleDelegate;
-Landroidx/compose/ui/text/intl/PlatformLocaleKt;
-Landroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt$NoopSpan$1;
-Landroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt;
-Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics$resolveTypeface$1;
-Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;
-Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics_androidKt;
-Landroidx/compose/ui/text/platform/AndroidParagraph_androidKt;
-Landroidx/compose/ui/text/platform/AndroidTextPaint;
-Landroidx/compose/ui/text/platform/DefaultImpl$getFontLoadState$initCallback$1;
-Landroidx/compose/ui/text/platform/DefaultImpl;
-Landroidx/compose/ui/text/platform/EmojiCompatStatus;
-Landroidx/compose/ui/text/platform/EmojiCompatStatusDelegate;
-Landroidx/compose/ui/text/platform/ImmutableBool;
-Landroidx/compose/ui/text/platform/Synchronization_jvmKt;
-Landroidx/compose/ui/text/platform/SynchronizedObject;
-Landroidx/compose/ui/text/platform/extensions/PlaceholderExtensions_androidKt;
-Landroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt$setFontAttributes$1;
-Landroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;
-Landroidx/compose/ui/text/platform/extensions/TextPaintExtensions_androidKt;
-Landroidx/compose/ui/text/platform/style/ShaderBrushSpan;
-Landroidx/compose/ui/text/style/BaselineShift$Companion;
-Landroidx/compose/ui/text/style/BaselineShift;
-Landroidx/compose/ui/text/style/BrushStyle;
-Landroidx/compose/ui/text/style/ColorStyle;
-Landroidx/compose/ui/text/style/Hyphens$Companion;
-Landroidx/compose/ui/text/style/Hyphens;
-Landroidx/compose/ui/text/style/LineBreak$Companion;
-Landroidx/compose/ui/text/style/LineBreak$Strategy$Companion;
-Landroidx/compose/ui/text/style/LineBreak$Strategy;
-Landroidx/compose/ui/text/style/LineBreak$Strictness$Companion;
-Landroidx/compose/ui/text/style/LineBreak$Strictness;
-Landroidx/compose/ui/text/style/LineBreak$WordBreak$Companion;
-Landroidx/compose/ui/text/style/LineBreak$WordBreak;
-Landroidx/compose/ui/text/style/LineBreak;
-Landroidx/compose/ui/text/style/LineBreak_androidKt;
-Landroidx/compose/ui/text/style/LineHeightStyle;
-Landroidx/compose/ui/text/style/TextAlign$Companion;
-Landroidx/compose/ui/text/style/TextAlign;
-Landroidx/compose/ui/text/style/TextDecoration$Companion;
-Landroidx/compose/ui/text/style/TextDecoration;
-Landroidx/compose/ui/text/style/TextDirection$Companion;
-Landroidx/compose/ui/text/style/TextDirection;
-Landroidx/compose/ui/text/style/TextForegroundStyle$Companion;
-Landroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;
-Landroidx/compose/ui/text/style/TextForegroundStyle$merge$2;
-Landroidx/compose/ui/text/style/TextForegroundStyle;
-Landroidx/compose/ui/text/style/TextGeometricTransform$Companion;
-Landroidx/compose/ui/text/style/TextGeometricTransform;
-Landroidx/compose/ui/text/style/TextIndent$Companion;
-Landroidx/compose/ui/text/style/TextIndent;
-Landroidx/compose/ui/text/style/TextMotion$Companion;
-Landroidx/compose/ui/text/style/TextMotion$Linearity$Companion;
-Landroidx/compose/ui/text/style/TextMotion$Linearity;
-Landroidx/compose/ui/text/style/TextMotion;
-Landroidx/compose/ui/text/style/TextOverflow$Companion;
-Landroidx/compose/ui/text/style/TextOverflow;
-Landroidx/compose/ui/unit/AndroidDensity_androidKt;
-Landroidx/compose/ui/unit/Constraints$Companion;
-Landroidx/compose/ui/unit/Constraints;
-Landroidx/compose/ui/unit/ConstraintsKt;
-Landroidx/compose/ui/unit/Density;
-Landroidx/compose/ui/unit/DensityImpl;
-Landroidx/compose/ui/unit/DensityKt;
-Landroidx/compose/ui/unit/Dp$Companion;
-Landroidx/compose/ui/unit/Dp;
-Landroidx/compose/ui/unit/DpKt;
-Landroidx/compose/ui/unit/DpOffset$Companion;
-Landroidx/compose/ui/unit/DpOffset;
-Landroidx/compose/ui/unit/DpSize$Companion;
-Landroidx/compose/ui/unit/DpSize;
-Landroidx/compose/ui/unit/IntOffset$Companion;
-Landroidx/compose/ui/unit/IntOffset;
-Landroidx/compose/ui/unit/IntOffsetKt;
-Landroidx/compose/ui/unit/IntSize$Companion;
-Landroidx/compose/ui/unit/IntSize;
-Landroidx/compose/ui/unit/IntSizeKt;
-Landroidx/compose/ui/unit/LayoutDirection;
-Landroidx/compose/ui/unit/TextUnit$Companion;
-Landroidx/compose/ui/unit/TextUnit;
-Landroidx/compose/ui/unit/TextUnitKt;
-Landroidx/compose/ui/unit/TextUnitType$Companion;
-Landroidx/compose/ui/unit/TextUnitType;
-Landroidx/compose/ui/util/MathHelpersKt;
-Landroidx/core/R$id;
-Landroidx/core/app/ComponentActivity;
-Landroidx/core/app/CoreComponentFactory;
-Landroidx/core/graphics/Insets;
-Landroidx/core/graphics/TypefaceCompat;
-Landroidx/core/graphics/TypefaceCompatApi29Impl;
-Landroidx/core/graphics/TypefaceCompatBaseImpl;
-Landroidx/core/graphics/TypefaceCompatUtil$Api19Impl;
-Landroidx/core/graphics/TypefaceCompatUtil;
-Landroidx/core/graphics/drawable/DrawableKt;
-Landroidx/core/os/BuildCompat$Extensions30Impl;
-Landroidx/core/os/BuildCompat;
-Landroidx/core/os/HandlerCompat$Api28Impl;
-Landroidx/core/os/HandlerCompat;
-Landroidx/core/os/TraceCompat$Api18Impl;
-Landroidx/core/os/TraceCompat;
-Landroidx/core/provider/FontProvider$$ExternalSyntheticLambda0;
-Landroidx/core/provider/FontProvider$Api16Impl;
-Landroidx/core/provider/FontProvider;
-Landroidx/core/provider/FontRequest;
-Landroidx/core/provider/FontsContractCompat$FontFamilyResult;
-Landroidx/core/provider/FontsContractCompat$FontInfo;
-Landroidx/core/provider/FontsContractCompat;
-Landroidx/core/util/Preconditions;
-Landroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;
-Landroidx/core/view/AccessibilityDelegateCompat;
-Landroidx/core/view/KeyEventDispatcher$Component;
-Landroidx/core/view/MenuHostHelper;
-Landroidx/core/view/OnApplyWindowInsetsListener;
-Landroidx/core/view/OnReceiveContentViewBehavior;
-Landroidx/core/view/ViewCompat$$ExternalSyntheticLambda0;
-Landroidx/core/view/ViewCompat$AccessibilityPaneVisibilityManager;
-Landroidx/core/view/ViewCompat$Api21Impl$1;
-Landroidx/core/view/ViewCompat$Api21Impl;
-Landroidx/core/view/ViewCompat;
-Landroidx/core/view/ViewKt$ancestors$1;
-Landroidx/core/view/ViewKt;
-Landroidx/core/view/WindowCompat;
-Landroidx/core/view/WindowInsetsAnimationCompat$Callback;
-Landroidx/core/view/WindowInsetsAnimationCompat$Impl30$ProxyCallback;
-Landroidx/core/view/WindowInsetsAnimationCompat$Impl30;
-Landroidx/core/view/WindowInsetsAnimationCompat$Impl;
-Landroidx/core/view/WindowInsetsAnimationCompat;
-Landroidx/core/view/WindowInsetsCompat$Type;
-Landroidx/core/view/WindowInsetsCompat;
-Landroidx/core/view/WindowInsetsControllerCompat$Impl30;
-Landroidx/core/view/WindowInsetsControllerCompat$Impl;
-Landroidx/core/view/WindowInsetsControllerCompat;
-Landroidx/core/view/accessibility/AccessibilityNodeProviderCompat;
-Landroidx/credentials/provider/Action$Companion;
-Landroidx/credentials/provider/Action;
-Landroidx/credentials/provider/AuthenticationAction$Companion;
-Landroidx/credentials/provider/AuthenticationAction;
-Landroidx/credentials/provider/RemoteEntry$Companion;
-Landroidx/credentials/provider/RemoteEntry;
-Landroidx/customview/poolingcontainer/PoolingContainer;
-Landroidx/customview/poolingcontainer/PoolingContainerListener;
-Landroidx/customview/poolingcontainer/PoolingContainerListenerHolder;
-Landroidx/customview/poolingcontainer/R$id;
-Landroidx/emoji2/text/ConcurrencyHelpers$$ExternalSyntheticLambda0;
-Landroidx/emoji2/text/ConcurrencyHelpers$Handler28Impl;
-Landroidx/emoji2/text/ConcurrencyHelpers;
-Landroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;
-Landroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper;
-Landroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API19;
-Landroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API28;
-Landroidx/emoji2/text/DefaultEmojiCompatConfig;
-Landroidx/emoji2/text/DefaultGlyphChecker;
-Landroidx/emoji2/text/EmojiCompat$CompatInternal19$1;
-Landroidx/emoji2/text/EmojiCompat$CompatInternal19;
-Landroidx/emoji2/text/EmojiCompat$CompatInternal;
-Landroidx/emoji2/text/EmojiCompat$Config;
-Landroidx/emoji2/text/EmojiCompat$DefaultSpanFactory;
-Landroidx/emoji2/text/EmojiCompat$GlyphChecker;
-Landroidx/emoji2/text/EmojiCompat$InitCallback;
-Landroidx/emoji2/text/EmojiCompat$ListenerDispatcher;
-Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoader;
-Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;
-Landroidx/emoji2/text/EmojiCompat$SpanFactory;
-Landroidx/emoji2/text/EmojiCompat;
-Landroidx/emoji2/text/EmojiCompatInitializer$1;
-Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultConfig;
-Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$$ExternalSyntheticLambda0;
-Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$1;
-Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader;
-Landroidx/emoji2/text/EmojiCompatInitializer$LoadEmojiCompatRunnable;
-Landroidx/emoji2/text/EmojiCompatInitializer;
-Landroidx/emoji2/text/EmojiExclusions$EmojiExclusions_Api34;
-Landroidx/emoji2/text/EmojiExclusions$EmojiExclusions_Reflections;
-Landroidx/emoji2/text/EmojiExclusions;
-Landroidx/emoji2/text/EmojiProcessor$EmojiProcessAddSpanCallback;
-Landroidx/emoji2/text/EmojiProcessor$EmojiProcessCallback;
-Landroidx/emoji2/text/EmojiProcessor$ProcessorSm;
-Landroidx/emoji2/text/EmojiProcessor;
-Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontProviderHelper;
-Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$$ExternalSyntheticLambda0;
-Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;
-Landroidx/emoji2/text/FontRequestEmojiCompatConfig;
-Landroidx/emoji2/text/MetadataListReader$ByteBufferReader;
-Landroidx/emoji2/text/MetadataListReader$OffsetInfo;
-Landroidx/emoji2/text/MetadataListReader$OpenTypeReader;
-Landroidx/emoji2/text/MetadataListReader;
-Landroidx/emoji2/text/MetadataRepo$Node;
-Landroidx/emoji2/text/MetadataRepo;
-Landroidx/emoji2/text/SpannableBuilder;
-Landroidx/emoji2/text/TypefaceEmojiRasterizer;
-Landroidx/emoji2/text/UnprecomputeTextOnModificationSpannable;
-Landroidx/emoji2/text/flatbuffer/MetadataItem;
-Landroidx/emoji2/text/flatbuffer/MetadataList;
-Landroidx/emoji2/text/flatbuffer/Table;
-Landroidx/emoji2/text/flatbuffer/Utf8;
-Landroidx/emoji2/text/flatbuffer/Utf8Safe;
-Landroidx/lifecycle/DefaultLifecycleObserver;
-Landroidx/lifecycle/EmptyActivityLifecycleCallbacks;
-Landroidx/lifecycle/FullLifecycleObserver;
-Landroidx/lifecycle/FullLifecycleObserverAdapter$1;
-Landroidx/lifecycle/FullLifecycleObserverAdapter;
-Landroidx/lifecycle/HasDefaultViewModelProviderFactory;
-Landroidx/lifecycle/Lifecycle$1;
-Landroidx/lifecycle/Lifecycle$Event;
-Landroidx/lifecycle/Lifecycle$State;
-Landroidx/lifecycle/Lifecycle;
-Landroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;
-Landroidx/lifecycle/LifecycleDispatcher;
-Landroidx/lifecycle/LifecycleEventObserver;
-Landroidx/lifecycle/LifecycleObserver;
-Landroidx/lifecycle/LifecycleOwner;
-Landroidx/lifecycle/LifecycleRegistry$ObserverWithState;
-Landroidx/lifecycle/LifecycleRegistry;
-Landroidx/lifecycle/Lifecycling;
-Landroidx/lifecycle/ProcessLifecycleInitializer;
-Landroidx/lifecycle/ProcessLifecycleOwner$1;
-Landroidx/lifecycle/ProcessLifecycleOwner$2;
-Landroidx/lifecycle/ProcessLifecycleOwner$3$1;
-Landroidx/lifecycle/ProcessLifecycleOwner$3;
-Landroidx/lifecycle/ProcessLifecycleOwner$Api29Impl;
-Landroidx/lifecycle/ProcessLifecycleOwner;
-Landroidx/lifecycle/ReportFragment$ActivityInitializationListener;
-Landroidx/lifecycle/ReportFragment$LifecycleCallbacks;
-Landroidx/lifecycle/ReportFragment;
-Landroidx/lifecycle/SavedStateHandleAttacher;
-Landroidx/lifecycle/SavedStateHandleSupport$DEFAULT_ARGS_KEY$1;
-Landroidx/lifecycle/SavedStateHandleSupport$SAVED_STATE_REGISTRY_OWNER_KEY$1;
-Landroidx/lifecycle/SavedStateHandleSupport$VIEW_MODEL_STORE_OWNER_KEY$1;
-Landroidx/lifecycle/SavedStateHandleSupport$savedStateHandlesVM$1$1;
-Landroidx/lifecycle/SavedStateHandleSupport;
-Landroidx/lifecycle/SavedStateHandlesProvider$viewModel$2;
-Landroidx/lifecycle/SavedStateHandlesProvider;
-Landroidx/lifecycle/SavedStateHandlesVM;
-Landroidx/lifecycle/ViewModel;
-Landroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory$Companion$ApplicationKeyImpl;
-Landroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory$Companion;
-Landroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory;
-Landroidx/lifecycle/ViewModelProvider$Factory$Companion;
-Landroidx/lifecycle/ViewModelProvider$Factory;
-Landroidx/lifecycle/ViewModelProvider$NewInstanceFactory$Companion$ViewModelKeyImpl;
-Landroidx/lifecycle/ViewModelProvider$NewInstanceFactory$Companion;
-Landroidx/lifecycle/ViewModelProvider$NewInstanceFactory;
-Landroidx/lifecycle/ViewModelProvider$OnRequeryFactory;
-Landroidx/lifecycle/ViewModelProvider;
-Landroidx/lifecycle/ViewModelProviderGetKt;
-Landroidx/lifecycle/ViewModelStore;
-Landroidx/lifecycle/ViewModelStoreOwner;
-Landroidx/lifecycle/ViewTreeLifecycleOwner;
-Landroidx/lifecycle/ViewTreeViewModelStoreOwner;
-Landroidx/lifecycle/runtime/R$id;
-Landroidx/lifecycle/viewmodel/CreationExtras$Empty;
-Landroidx/lifecycle/viewmodel/CreationExtras$Key;
-Landroidx/lifecycle/viewmodel/CreationExtras;
-Landroidx/lifecycle/viewmodel/InitializerViewModelFactory;
-Landroidx/lifecycle/viewmodel/InitializerViewModelFactoryBuilder;
-Landroidx/lifecycle/viewmodel/MutableCreationExtras;
-Landroidx/lifecycle/viewmodel/R$id;
-Landroidx/lifecycle/viewmodel/ViewModelInitializer;
-Landroidx/lifecycle/viewmodel/compose/LocalViewModelStoreOwner$LocalViewModelStoreOwner$1;
-Landroidx/lifecycle/viewmodel/compose/LocalViewModelStoreOwner;
-Landroidx/lifecycle/viewmodel/compose/ViewModelKt;
-Landroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda0;
-Landroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda1;
-Landroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl$$ExternalSyntheticLambda0;
-Landroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl;
-Landroidx/profileinstaller/ProfileInstallerInitializer$Handler28Impl;
-Landroidx/profileinstaller/ProfileInstallerInitializer$Result;
-Landroidx/profileinstaller/ProfileInstallerInitializer;
-Landroidx/savedstate/R$id;
-Landroidx/savedstate/Recreator$Companion;
-Landroidx/savedstate/Recreator;
-Landroidx/savedstate/SavedStateRegistry$$ExternalSyntheticLambda0;
-Landroidx/savedstate/SavedStateRegistry$Companion;
-Landroidx/savedstate/SavedStateRegistry$SavedStateProvider;
-Landroidx/savedstate/SavedStateRegistry;
-Landroidx/savedstate/SavedStateRegistryController$Companion;
-Landroidx/savedstate/SavedStateRegistryController;
-Landroidx/savedstate/SavedStateRegistryOwner;
-Landroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$1;
-Landroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$2;
-Landroidx/savedstate/ViewTreeSavedStateRegistryOwner;
-Landroidx/startup/AppInitializer;
-Landroidx/startup/InitializationProvider;
-Landroidx/startup/Initializer;
-Landroidx/startup/R$string;
-Landroidx/tracing/Trace;
-Landroidx/tracing/TraceApi18Impl;
-Landroidx/tracing/TraceApi29Impl;
-Lcom/android/compose/AndroidSystemUiController;
-Lcom/android/compose/SystemUiController;
-Lcom/android/compose/SystemUiControllerKt$BlackScrimmed$1;
-Lcom/android/compose/SystemUiControllerKt;
-Lcom/android/credentialmanager/CancelUiRequestState;
-Lcom/android/credentialmanager/CredentialManagerRepo$Companion;
-Lcom/android/credentialmanager/CredentialManagerRepo;
-Lcom/android/credentialmanager/CredentialSelectorActivity$Companion;
-Lcom/android/credentialmanager/CredentialSelectorActivity$CredentialManagerBottomSheet$1;
-Lcom/android/credentialmanager/CredentialSelectorActivity$CredentialManagerBottomSheet$3;
-Lcom/android/credentialmanager/CredentialSelectorActivity$CredentialManagerBottomSheet$launcher$1;
-Lcom/android/credentialmanager/CredentialSelectorActivity$CredentialManagerBottomSheet$viewModel$1;
-Lcom/android/credentialmanager/CredentialSelectorActivity$onCreate$1$1;
-Lcom/android/credentialmanager/CredentialSelectorActivity$onCreate$1;
-Lcom/android/credentialmanager/CredentialSelectorActivity$onCreate$backPressedCallback$1;
-Lcom/android/credentialmanager/CredentialSelectorActivity;
-Lcom/android/credentialmanager/CredentialSelectorViewModel;
-Lcom/android/credentialmanager/DataConverterKt;
-Lcom/android/credentialmanager/GetFlowUtils$Companion;
-Lcom/android/credentialmanager/GetFlowUtils;
-Lcom/android/credentialmanager/UiState;
-Lcom/android/credentialmanager/UserConfigRepo$Companion;
-Lcom/android/credentialmanager/UserConfigRepo;
-Lcom/android/credentialmanager/common/BaseEntry;
-Lcom/android/credentialmanager/common/CredentialType;
-Lcom/android/credentialmanager/common/DialogState;
-Lcom/android/credentialmanager/common/ProviderActivityState;
-Lcom/android/credentialmanager/common/StartBalIntentSenderForResultContract;
-Lcom/android/credentialmanager/common/material/ModalBottomSheetDefaults;
-Lcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$1$1$1;
-Lcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$1$1;
-Lcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$2$1$1;
-Lcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$2$2$1;
-Lcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$2$3$1;
-Lcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$2$3;
-Lcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$2$4;
-Lcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1;
-Lcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$2;
-Lcom/android/credentialmanager/common/material/ModalBottomSheetKt$Scrim$1$1;
-Lcom/android/credentialmanager/common/material/ModalBottomSheetKt$Scrim$2;
-Lcom/android/credentialmanager/common/material/ModalBottomSheetKt$Scrim$dismissModifier$1$1$1;
-Lcom/android/credentialmanager/common/material/ModalBottomSheetKt$Scrim$dismissModifier$1$1;
-Lcom/android/credentialmanager/common/material/ModalBottomSheetKt$Scrim$dismissModifier$2$1$1;
-Lcom/android/credentialmanager/common/material/ModalBottomSheetKt$Scrim$dismissModifier$2$1;
-Lcom/android/credentialmanager/common/material/ModalBottomSheetKt$rememberModalBottomSheetState$1;
-Lcom/android/credentialmanager/common/material/ModalBottomSheetKt$rememberModalBottomSheetState$2;
-Lcom/android/credentialmanager/common/material/ModalBottomSheetKt;
-Lcom/android/credentialmanager/common/material/ModalBottomSheetState$Companion$Saver$1;
-Lcom/android/credentialmanager/common/material/ModalBottomSheetState$Companion$Saver$2;
-Lcom/android/credentialmanager/common/material/ModalBottomSheetState$Companion;
-Lcom/android/credentialmanager/common/material/ModalBottomSheetState;
-Lcom/android/credentialmanager/common/material/ModalBottomSheetValue;
-Lcom/android/credentialmanager/common/material/ResistanceConfig;
-Lcom/android/credentialmanager/common/material/SwipeableDefaults;
-Lcom/android/credentialmanager/common/material/SwipeableKt$PreUpPostDownNestedScrollConnection$1;
-Lcom/android/credentialmanager/common/material/SwipeableKt$swipeable$1;
-Lcom/android/credentialmanager/common/material/SwipeableKt$swipeable$3$3$1;
-Lcom/android/credentialmanager/common/material/SwipeableKt$swipeable$3$3;
-Lcom/android/credentialmanager/common/material/SwipeableKt$swipeable$3$4$1;
-Lcom/android/credentialmanager/common/material/SwipeableKt$swipeable$3;
-Lcom/android/credentialmanager/common/material/SwipeableKt;
-Lcom/android/credentialmanager/common/material/SwipeableState$Companion;
-Lcom/android/credentialmanager/common/material/SwipeableState$animateInternalToOffset$2$1;
-Lcom/android/credentialmanager/common/material/SwipeableState$animateInternalToOffset$2;
-Lcom/android/credentialmanager/common/material/SwipeableState$animateTo$2$emit$1;
-Lcom/android/credentialmanager/common/material/SwipeableState$animateTo$2;
-Lcom/android/credentialmanager/common/material/SwipeableState$draggableState$1;
-Lcom/android/credentialmanager/common/material/SwipeableState$latestNonEmptyAnchorsFlow$1;
-Lcom/android/credentialmanager/common/material/SwipeableState$processNewAnchors$1;
-Lcom/android/credentialmanager/common/material/SwipeableState$snapInternalToOffset$2;
-Lcom/android/credentialmanager/common/material/SwipeableState$special$$inlined$filter$1$2$1;
-Lcom/android/credentialmanager/common/material/SwipeableState$special$$inlined$filter$1$2;
-Lcom/android/credentialmanager/common/material/SwipeableState$special$$inlined$filter$1;
-Lcom/android/credentialmanager/common/material/SwipeableState$thresholds$2;
-Lcom/android/credentialmanager/common/material/SwipeableState;
-Lcom/android/credentialmanager/common/ui/ActionButtonKt$ActionButton$1;
-Lcom/android/credentialmanager/common/ui/ActionButtonKt$ActionButton$2;
-Lcom/android/credentialmanager/common/ui/ActionButtonKt;
-Lcom/android/credentialmanager/common/ui/BottomSheetKt$ModalBottomSheet$1$1;
-Lcom/android/credentialmanager/common/ui/BottomSheetKt$ModalBottomSheet$1;
-Lcom/android/credentialmanager/common/ui/BottomSheetKt$ModalBottomSheet$2;
-Lcom/android/credentialmanager/common/ui/BottomSheetKt;
-Lcom/android/credentialmanager/common/ui/CardsKt$CredentialContainerCard$1;
-Lcom/android/credentialmanager/common/ui/CardsKt$SheetContainerCard$1;
-Lcom/android/credentialmanager/common/ui/CardsKt$SheetContainerCard$2;
-Lcom/android/credentialmanager/common/ui/CardsKt;
-Lcom/android/credentialmanager/common/ui/ComposableSingletons$BottomSheetKt$lambda-1$1;
-Lcom/android/credentialmanager/common/ui/ComposableSingletons$BottomSheetKt;
-Lcom/android/credentialmanager/common/ui/ComposableSingletons$EntryKt$lambda-1$1;
-Lcom/android/credentialmanager/common/ui/ComposableSingletons$EntryKt;
-Lcom/android/credentialmanager/common/ui/ComposableSingletons$SnackBarKt$lambda-1$1;
-Lcom/android/credentialmanager/common/ui/ComposableSingletons$SnackBarKt;
-Lcom/android/credentialmanager/common/ui/ConfirmButtonKt$ConfirmButton$1;
-Lcom/android/credentialmanager/common/ui/ConfirmButtonKt$ConfirmButton$2;
-Lcom/android/credentialmanager/common/ui/ConfirmButtonKt;
-Lcom/android/credentialmanager/common/ui/EntryKt$ActionEntry$1;
-Lcom/android/credentialmanager/common/ui/EntryKt$ActionEntry$2;
-Lcom/android/credentialmanager/common/ui/EntryKt$ActionEntry$3;
-Lcom/android/credentialmanager/common/ui/EntryKt$Entry$1;
-Lcom/android/credentialmanager/common/ui/EntryKt$Entry$3;
-Lcom/android/credentialmanager/common/ui/EntryKt$Entry$4;
-Lcom/android/credentialmanager/common/ui/EntryKt$Entry$6;
-Lcom/android/credentialmanager/common/ui/EntryKt$Entry$7;
-Lcom/android/credentialmanager/common/ui/EntryKt$MoreOptionTopAppBar$1;
-Lcom/android/credentialmanager/common/ui/EntryKt$MoreOptionTopAppBar$2;
-Lcom/android/credentialmanager/common/ui/EntryKt$MoreOptionTopAppBar$3;
-Lcom/android/credentialmanager/common/ui/EntryKt$autoMirrored$1$WhenMappings;
-Lcom/android/credentialmanager/common/ui/EntryKt$autoMirrored$1;
-Lcom/android/credentialmanager/common/ui/EntryKt;
-Lcom/android/credentialmanager/common/ui/HeadlineIconKt;
-Lcom/android/credentialmanager/common/ui/SectionHeaderKt;
-Lcom/android/credentialmanager/common/ui/SnackBarKt$Snackbar$1$2$1;
-Lcom/android/credentialmanager/common/ui/SnackBarKt$Snackbar$1;
-Lcom/android/credentialmanager/common/ui/SnackBarKt$Snackbar$2;
-Lcom/android/credentialmanager/common/ui/SnackBarKt;
-Lcom/android/credentialmanager/common/ui/SystemUiControllerUtilsKt$setBottomSheetSystemBarsColor$1;
-Lcom/android/credentialmanager/common/ui/SystemUiControllerUtilsKt;
-Lcom/android/credentialmanager/common/ui/TextsKt$BodySmallText$1;
-Lcom/android/credentialmanager/common/ui/TextsKt$SmallTitleText$1;
-Lcom/android/credentialmanager/common/ui/TextsKt$SnackbarActionText$1;
-Lcom/android/credentialmanager/common/ui/TextsKt$SnackbarContentText$1;
-Lcom/android/credentialmanager/common/ui/TextsKt;
-Lcom/android/credentialmanager/createflow/CreateCredentialUiState;
-Lcom/android/credentialmanager/getflow/ActionEntryInfo;
-Lcom/android/credentialmanager/getflow/AuthenticationEntryInfo;
-Lcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt$lambda-1$1;
-Lcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt$lambda-2$1;
-Lcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt$lambda-3$1;
-Lcom/android/credentialmanager/getflow/ComposableSingletons$GetCredentialComponentsKt;
-Lcom/android/credentialmanager/getflow/CredentialEntryInfoComparatorByTypeThenTimestamp;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$ActionChips$2;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$ActionChips$3;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$ActionEntryRow$1;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$1;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$2$2;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$2$3;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$2$4;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$2$invoke$$inlined$items$default$1;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$2$invoke$$inlined$items$default$3;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$2$invoke$$inlined$items$default$4;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AllSignInOptionCard$2;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AuthenticationEntryRow$2;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$AuthenticationEntryRow$3;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$10;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$1;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$2;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$3;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$7;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$8;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9$1;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9$2;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9$3;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9$4;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9$5;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9$6;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9$7;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9$8;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9$9;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9$WhenMappings;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$9;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$LockedCredentials$1;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$LockedCredentials$2;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1$2;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1$3;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1$4$1;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1$4;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1$5$1;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1$5$3;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1$5;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$PrimarySelectionCard$1;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$RemoteCredentialSnackBarScreen$1$1$1;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$RemoteCredentialSnackBarScreen$1;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$RemoteCredentialSnackBarScreen$2;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$RemoteEntryCard$1$1$1$1;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$RemoteEntryCard$1;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt$RemoteEntryCard$2;
-Lcom/android/credentialmanager/getflow/GetCredentialComponentsKt;
-Lcom/android/credentialmanager/getflow/GetCredentialUiState;
-Lcom/android/credentialmanager/getflow/GetModelKt$toProviderDisplayInfo$$inlined$compareByDescending$1;
-Lcom/android/credentialmanager/getflow/GetModelKt;
-Lcom/android/credentialmanager/getflow/GetScreenState;
-Lcom/android/credentialmanager/getflow/PerUserNameCredentialEntryList;
-Lcom/android/credentialmanager/getflow/ProviderDisplayInfo;
-Lcom/android/credentialmanager/getflow/ProviderInfo;
-Lcom/android/credentialmanager/getflow/RemoteEntryInfo;
-Lcom/android/credentialmanager/getflow/RequestDisplayInfo;
-Lcom/android/credentialmanager/getflow/TopBrandingContent;
-Lcom/android/credentialmanager/logging/GetCredentialEvent;
-Lcom/android/credentialmanager/logging/LifecycleEvent;
-Lcom/android/credentialmanager/logging/UIMetrics$log$1;
-Lcom/android/credentialmanager/logging/UIMetrics$log$3;
-Lcom/android/credentialmanager/logging/UIMetrics;
-Lcom/android/credentialmanager/ui/theme/AndroidColorScheme$Companion;
-Lcom/android/credentialmanager/ui/theme/AndroidColorScheme;
-Lcom/android/credentialmanager/ui/theme/AndroidColorSchemeKt$LocalAndroidColorScheme$1;
-Lcom/android/credentialmanager/ui/theme/AndroidColorSchemeKt;
-Lcom/android/credentialmanager/ui/theme/EntryShape;
-Lcom/android/credentialmanager/ui/theme/PlatformThemeKt$PlatformTheme$1$1;
-Lcom/android/credentialmanager/ui/theme/PlatformThemeKt$PlatformTheme$1;
-Lcom/android/credentialmanager/ui/theme/PlatformThemeKt$PlatformTheme$2;
-Lcom/android/credentialmanager/ui/theme/PlatformThemeKt;
-Lcom/android/credentialmanager/ui/theme/ShapeKt;
-Lcom/android/credentialmanager/ui/theme/typography/PlatformTypographyKt;
-Lcom/android/credentialmanager/ui/theme/typography/TypeScaleTokens;
-Lcom/android/credentialmanager/ui/theme/typography/TypefaceNames$Companion;
-Lcom/android/credentialmanager/ui/theme/typography/TypefaceNames$Config;
-Lcom/android/credentialmanager/ui/theme/typography/TypefaceNames;
-Lcom/android/credentialmanager/ui/theme/typography/TypefaceTokens$Companion;
-Lcom/android/credentialmanager/ui/theme/typography/TypefaceTokens;
-Lcom/android/credentialmanager/ui/theme/typography/TypographyTokens;
-Lkotlin/Function;
-Lkotlin/KotlinNothingValueException;
-Lkotlin/Lazy;
-Lkotlin/LazyKt;
-Lkotlin/LazyKt__LazyJVMKt$WhenMappings;
-Lkotlin/LazyKt__LazyJVMKt;
-Lkotlin/LazyKt__LazyKt;
-Lkotlin/LazyThreadSafetyMode;
-Lkotlin/Pair;
-Lkotlin/Result$Companion;
-Lkotlin/Result$Failure;
-Lkotlin/Result;
-Lkotlin/ResultKt;
-Lkotlin/SynchronizedLazyImpl;
-Lkotlin/Triple;
-Lkotlin/TuplesKt;
-Lkotlin/ULong$Companion;
-Lkotlin/ULong;
-Lkotlin/UNINITIALIZED_VALUE;
-Lkotlin/Unit;
-Lkotlin/UnsafeLazyImpl;
-Lkotlin/UnsignedKt;
-Lkotlin/collections/AbstractCollection;
-Lkotlin/collections/AbstractList$Companion;
-Lkotlin/collections/AbstractList;
-Lkotlin/collections/AbstractMap$Companion;
-Lkotlin/collections/AbstractMap;
-Lkotlin/collections/AbstractMutableList;
-Lkotlin/collections/AbstractMutableMap;
-Lkotlin/collections/AbstractSet$Companion;
-Lkotlin/collections/AbstractSet;
-Lkotlin/collections/ArrayDeque$Companion;
-Lkotlin/collections/ArrayDeque;
-Lkotlin/collections/ArraysKt;
-Lkotlin/collections/ArraysKt__ArraysJVMKt;
-Lkotlin/collections/ArraysKt__ArraysKt;
-Lkotlin/collections/ArraysKt___ArraysJvmKt;
-Lkotlin/collections/ArraysKt___ArraysKt;
-Lkotlin/collections/ArraysUtilJVM;
-Lkotlin/collections/CollectionsKt;
-Lkotlin/collections/CollectionsKt__CollectionsJVMKt;
-Lkotlin/collections/CollectionsKt__CollectionsKt;
-Lkotlin/collections/CollectionsKt__IterablesKt;
-Lkotlin/collections/CollectionsKt__IteratorsJVMKt;
-Lkotlin/collections/CollectionsKt__IteratorsKt;
-Lkotlin/collections/CollectionsKt__MutableCollectionsJVMKt;
-Lkotlin/collections/CollectionsKt__MutableCollectionsKt;
-Lkotlin/collections/CollectionsKt__ReversedViewsKt;
-Lkotlin/collections/CollectionsKt___CollectionsJvmKt;
-Lkotlin/collections/CollectionsKt___CollectionsKt;
-Lkotlin/collections/EmptyIterator;
-Lkotlin/collections/EmptyList;
-Lkotlin/collections/EmptyMap;
-Lkotlin/collections/EmptySet;
-Lkotlin/collections/IntIterator;
-Lkotlin/collections/MapsKt;
-Lkotlin/collections/MapsKt__MapWithDefaultKt;
-Lkotlin/collections/MapsKt__MapsJVMKt;
-Lkotlin/collections/MapsKt__MapsKt;
-Lkotlin/collections/MapsKt___MapsJvmKt;
-Lkotlin/collections/MapsKt___MapsKt;
-Lkotlin/comparisons/ComparisonsKt;
-Lkotlin/comparisons/ComparisonsKt__ComparisonsKt;
-Lkotlin/comparisons/ComparisonsKt___ComparisonsJvmKt;
-Lkotlin/comparisons/ComparisonsKt___ComparisonsKt;
-Lkotlin/coroutines/AbstractCoroutineContextElement;
-Lkotlin/coroutines/AbstractCoroutineContextKey;
-Lkotlin/coroutines/CombinedContext;
-Lkotlin/coroutines/Continuation;
-Lkotlin/coroutines/ContinuationInterceptor$DefaultImpls;
-Lkotlin/coroutines/ContinuationInterceptor$Key;
-Lkotlin/coroutines/ContinuationInterceptor;
-Lkotlin/coroutines/ContinuationKt;
-Lkotlin/coroutines/CoroutineContext$DefaultImpls;
-Lkotlin/coroutines/CoroutineContext$Element$DefaultImpls;
-Lkotlin/coroutines/CoroutineContext$Element;
-Lkotlin/coroutines/CoroutineContext$Key;
-Lkotlin/coroutines/CoroutineContext$plus$1;
-Lkotlin/coroutines/CoroutineContext;
-Lkotlin/coroutines/EmptyCoroutineContext;
-Lkotlin/coroutines/SafeContinuation$Companion;
-Lkotlin/coroutines/SafeContinuation;
-Lkotlin/coroutines/intrinsics/CoroutineSingletons;
-Lkotlin/coroutines/intrinsics/IntrinsicsKt;
-Lkotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt;
-Lkotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsKt;
-Lkotlin/coroutines/jvm/internal/BaseContinuationImpl;
-Lkotlin/coroutines/jvm/internal/Boxing;
-Lkotlin/coroutines/jvm/internal/CompletedContinuation;
-Lkotlin/coroutines/jvm/internal/ContinuationImpl;
-Lkotlin/coroutines/jvm/internal/CoroutineStackFrame;
-Lkotlin/coroutines/jvm/internal/DebugProbesKt;
-Lkotlin/coroutines/jvm/internal/RestrictedContinuationImpl;
-Lkotlin/coroutines/jvm/internal/RestrictedSuspendLambda;
-Lkotlin/coroutines/jvm/internal/SuspendLambda;
-Lkotlin/internal/ProgressionUtilKt;
-Lkotlin/jvm/JvmClassMappingKt;
-Lkotlin/jvm/functions/Function0;
-Lkotlin/jvm/functions/Function10;
-Lkotlin/jvm/functions/Function11;
-Lkotlin/jvm/functions/Function12;
-Lkotlin/jvm/functions/Function13;
-Lkotlin/jvm/functions/Function14;
-Lkotlin/jvm/functions/Function15;
-Lkotlin/jvm/functions/Function16;
-Lkotlin/jvm/functions/Function17;
-Lkotlin/jvm/functions/Function18;
-Lkotlin/jvm/functions/Function19;
-Lkotlin/jvm/functions/Function1;
-Lkotlin/jvm/functions/Function20;
-Lkotlin/jvm/functions/Function21;
-Lkotlin/jvm/functions/Function22;
-Lkotlin/jvm/functions/Function2;
-Lkotlin/jvm/functions/Function3;
-Lkotlin/jvm/functions/Function4;
-Lkotlin/jvm/functions/Function5;
-Lkotlin/jvm/functions/Function6;
-Lkotlin/jvm/functions/Function7;
-Lkotlin/jvm/functions/Function8;
-Lkotlin/jvm/functions/Function9;
-Lkotlin/jvm/internal/CallableReference$NoReceiver;
-Lkotlin/jvm/internal/CallableReference;
-Lkotlin/jvm/internal/ClassBasedDeclarationContainer;
-Lkotlin/jvm/internal/ClassReference$Companion;
-Lkotlin/jvm/internal/ClassReference;
-Lkotlin/jvm/internal/FloatCompanionObject;
-Lkotlin/jvm/internal/FunctionBase;
-Lkotlin/jvm/internal/FunctionReference;
-Lkotlin/jvm/internal/FunctionReferenceImpl;
-Lkotlin/jvm/internal/InlineMarker;
-Lkotlin/jvm/internal/IntCompanionObject;
-Lkotlin/jvm/internal/Intrinsics;
-Lkotlin/jvm/internal/Lambda;
-Lkotlin/jvm/internal/MutablePropertyReference1;
-Lkotlin/jvm/internal/MutablePropertyReference1Impl;
-Lkotlin/jvm/internal/MutablePropertyReference;
-Lkotlin/jvm/internal/PropertyReference;
-Lkotlin/jvm/internal/Ref$BooleanRef;
-Lkotlin/jvm/internal/Ref$FloatRef;
-Lkotlin/jvm/internal/Ref$IntRef;
-Lkotlin/jvm/internal/Ref$LongRef;
-Lkotlin/jvm/internal/Ref$ObjectRef;
-Lkotlin/jvm/internal/Reflection;
-Lkotlin/jvm/internal/ReflectionFactory;
-Lkotlin/jvm/internal/SpreadBuilder;
-Lkotlin/jvm/internal/TypeIntrinsics;
-Lkotlin/jvm/internal/markers/KMappedMarker;
-Lkotlin/jvm/internal/markers/KMutableCollection;
-Lkotlin/jvm/internal/markers/KMutableIterable;
-Lkotlin/jvm/internal/markers/KMutableMap;
-Lkotlin/jvm/internal/markers/KMutableSet;
-Lkotlin/math/MathKt;
-Lkotlin/math/MathKt__MathHKt;
-Lkotlin/math/MathKt__MathJVMKt;
-Lkotlin/ranges/ClosedRange;
-Lkotlin/ranges/IntProgression$Companion;
-Lkotlin/ranges/IntProgression;
-Lkotlin/ranges/IntProgressionIterator;
-Lkotlin/ranges/IntRange$Companion;
-Lkotlin/ranges/IntRange;
-Lkotlin/ranges/RangesKt;
-Lkotlin/ranges/RangesKt__RangesKt;
-Lkotlin/ranges/RangesKt___RangesKt;
-Lkotlin/reflect/KCallable;
-Lkotlin/reflect/KClass;
-Lkotlin/reflect/KDeclarationContainer;
-Lkotlin/reflect/KFunction;
-Lkotlin/reflect/KMutableProperty1;
-Lkotlin/reflect/KProperty1;
-Lkotlin/reflect/KProperty;
-Lkotlin/sequences/ConstrainedOnceSequence;
-Lkotlin/sequences/FilteringSequence$iterator$1;
-Lkotlin/sequences/FilteringSequence;
-Lkotlin/sequences/GeneratorSequence$iterator$1;
-Lkotlin/sequences/GeneratorSequence;
-Lkotlin/sequences/Sequence;
-Lkotlin/sequences/SequenceBuilderIterator;
-Lkotlin/sequences/SequenceScope;
-Lkotlin/sequences/SequencesKt;
-Lkotlin/sequences/SequencesKt__SequenceBuilderKt$sequence$$inlined$Sequence$1;
-Lkotlin/sequences/SequencesKt__SequenceBuilderKt;
-Lkotlin/sequences/SequencesKt__SequencesJVMKt;
-Lkotlin/sequences/SequencesKt__SequencesKt$asSequence$$inlined$Sequence$1;
-Lkotlin/sequences/SequencesKt__SequencesKt$generateSequence$2;
-Lkotlin/sequences/SequencesKt__SequencesKt;
-Lkotlin/sequences/SequencesKt___SequencesJvmKt;
-Lkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1;
-Lkotlin/sequences/SequencesKt___SequencesKt;
-Lkotlin/sequences/TransformingSequence$iterator$1;
-Lkotlin/sequences/TransformingSequence;
-Lkotlin/text/CharsKt;
-Lkotlin/text/CharsKt__CharJVMKt;
-Lkotlin/text/CharsKt__CharKt;
-Lkotlin/text/StringsKt;
-Lkotlin/text/StringsKt__AppendableKt;
-Lkotlin/text/StringsKt__IndentKt;
-Lkotlin/text/StringsKt__RegexExtensionsJVMKt;
-Lkotlin/text/StringsKt__RegexExtensionsKt;
-Lkotlin/text/StringsKt__StringBuilderJVMKt;
-Lkotlin/text/StringsKt__StringBuilderKt;
-Lkotlin/text/StringsKt__StringNumberConversionsJVMKt;
-Lkotlin/text/StringsKt__StringNumberConversionsKt;
-Lkotlin/text/StringsKt__StringsJVMKt;
-Lkotlin/text/StringsKt__StringsKt;
-Lkotlin/text/StringsKt___StringsJvmKt;
-Lkotlin/text/StringsKt___StringsKt;
-Lkotlinx/atomicfu/AtomicArray;
-Lkotlinx/atomicfu/AtomicBoolean$Companion;
-Lkotlinx/atomicfu/AtomicBoolean;
-Lkotlinx/atomicfu/AtomicFU;
-Lkotlinx/atomicfu/AtomicFU_commonKt;
-Lkotlinx/atomicfu/AtomicInt$Companion;
-Lkotlinx/atomicfu/AtomicInt;
-Lkotlinx/atomicfu/AtomicLong$Companion;
-Lkotlinx/atomicfu/AtomicLong;
-Lkotlinx/atomicfu/AtomicRef$Companion;
-Lkotlinx/atomicfu/AtomicRef;
-Lkotlinx/atomicfu/TraceBase$None;
-Lkotlinx/atomicfu/TraceBase;
-Lkotlinx/coroutines/AbstractCoroutine;
-Lkotlinx/coroutines/AbstractTimeSourceKt;
-Lkotlinx/coroutines/Active;
-Lkotlinx/coroutines/BeforeResumeCancelHandler;
-Lkotlinx/coroutines/BlockingEventLoop;
-Lkotlinx/coroutines/BuildersKt;
-Lkotlinx/coroutines/BuildersKt__Builders_commonKt;
-Lkotlinx/coroutines/CancelHandler;
-Lkotlinx/coroutines/CancelHandlerBase;
-Lkotlinx/coroutines/CancellableContinuation$DefaultImpls;
-Lkotlinx/coroutines/CancellableContinuation;
-Lkotlinx/coroutines/CancellableContinuationImpl;
-Lkotlinx/coroutines/CancellableContinuationImplKt;
-Lkotlinx/coroutines/CancellableContinuationKt;
-Lkotlinx/coroutines/CancelledContinuation;
-Lkotlinx/coroutines/ChildContinuation;
-Lkotlinx/coroutines/ChildHandle;
-Lkotlinx/coroutines/ChildHandleNode;
-Lkotlinx/coroutines/ChildJob;
-Lkotlinx/coroutines/CompletableJob;
-Lkotlinx/coroutines/CompletedContinuation;
-Lkotlinx/coroutines/CompletedExceptionally;
-Lkotlinx/coroutines/CompletionHandlerBase;
-Lkotlinx/coroutines/CompletionStateKt;
-Lkotlinx/coroutines/CoroutineContextKt$hasCopyableElements$1;
-Lkotlinx/coroutines/CoroutineContextKt;
-Lkotlinx/coroutines/CoroutineDispatcher$Key$1;
-Lkotlinx/coroutines/CoroutineDispatcher$Key;
-Lkotlinx/coroutines/CoroutineDispatcher;
-Lkotlinx/coroutines/CoroutineExceptionHandler$Key;
-Lkotlinx/coroutines/CoroutineExceptionHandler;
-Lkotlinx/coroutines/CoroutineScope;
-Lkotlinx/coroutines/CoroutineScopeKt;
-Lkotlinx/coroutines/CoroutineStart$WhenMappings;
-Lkotlinx/coroutines/CoroutineStart;
-Lkotlinx/coroutines/DebugStringsKt;
-Lkotlinx/coroutines/DefaultExecutor;
-Lkotlinx/coroutines/DefaultExecutorKt;
-Lkotlinx/coroutines/Delay;
-Lkotlinx/coroutines/DelayKt;
-Lkotlinx/coroutines/DispatchedTask;
-Lkotlinx/coroutines/DispatchedTaskKt;
-Lkotlinx/coroutines/Dispatchers;
-Lkotlinx/coroutines/DisposableHandle;
-Lkotlinx/coroutines/DisposeOnCancel;
-Lkotlinx/coroutines/Empty;
-Lkotlinx/coroutines/EventLoop;
-Lkotlinx/coroutines/EventLoopImplBase$DelayedResumeTask;
-Lkotlinx/coroutines/EventLoopImplBase$DelayedTask;
-Lkotlinx/coroutines/EventLoopImplBase$DelayedTaskQueue;
-Lkotlinx/coroutines/EventLoopImplBase;
-Lkotlinx/coroutines/EventLoopImplPlatform;
-Lkotlinx/coroutines/EventLoopKt;
-Lkotlinx/coroutines/EventLoop_commonKt;
-Lkotlinx/coroutines/ExceptionsKt;
-Lkotlinx/coroutines/ExecutorCoroutineDispatcher$Key$1;
-Lkotlinx/coroutines/ExecutorCoroutineDispatcher$Key;
-Lkotlinx/coroutines/ExecutorCoroutineDispatcher;
-Lkotlinx/coroutines/GlobalScope;
-Lkotlinx/coroutines/InactiveNodeList;
-Lkotlinx/coroutines/Incomplete;
-Lkotlinx/coroutines/IncompleteStateBox;
-Lkotlinx/coroutines/InvokeOnCancel;
-Lkotlinx/coroutines/InvokeOnCompletion;
-Lkotlinx/coroutines/Job$DefaultImpls;
-Lkotlinx/coroutines/Job$Key;
-Lkotlinx/coroutines/Job;
-Lkotlinx/coroutines/JobCancellationException;
-Lkotlinx/coroutines/JobCancellingNode;
-Lkotlinx/coroutines/JobImpl;
-Lkotlinx/coroutines/JobKt;
-Lkotlinx/coroutines/JobKt__JobKt;
-Lkotlinx/coroutines/JobNode;
-Lkotlinx/coroutines/JobSupport$ChildCompletion;
-Lkotlinx/coroutines/JobSupport$Finishing;
-Lkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;
-Lkotlinx/coroutines/JobSupport;
-Lkotlinx/coroutines/JobSupportKt;
-Lkotlinx/coroutines/MainCoroutineDispatcher;
-Lkotlinx/coroutines/NodeList;
-Lkotlinx/coroutines/NonDisposableHandle;
-Lkotlinx/coroutines/NotCompleted;
-Lkotlinx/coroutines/ParentJob;
-Lkotlinx/coroutines/RemoveOnCancel;
-Lkotlinx/coroutines/ResumeOnCompletion;
-Lkotlinx/coroutines/StandaloneCoroutine;
-Lkotlinx/coroutines/SupervisorJobImpl;
-Lkotlinx/coroutines/SupervisorKt;
-Lkotlinx/coroutines/ThreadContextElement;
-Lkotlinx/coroutines/ThreadLocalEventLoop;
-Lkotlinx/coroutines/TimeoutCancellationException;
-Lkotlinx/coroutines/Unconfined;
-Lkotlinx/coroutines/UndispatchedCoroutine;
-Lkotlinx/coroutines/UndispatchedMarker;
-Lkotlinx/coroutines/android/AndroidDispatcherFactory;
-Lkotlinx/coroutines/android/HandlerContext;
-Lkotlinx/coroutines/android/HandlerDispatcher;
-Lkotlinx/coroutines/android/HandlerDispatcherKt;
-Lkotlinx/coroutines/channels/AbstractChannel$Itr;
-Lkotlinx/coroutines/channels/AbstractChannel$ReceiveElement;
-Lkotlinx/coroutines/channels/AbstractChannel$ReceiveHasNext;
-Lkotlinx/coroutines/channels/AbstractChannel$RemoveReceiveOnCancel;
-Lkotlinx/coroutines/channels/AbstractChannel$enqueueReceiveInternal$$inlined$addLastIfPrevAndIf$1;
-Lkotlinx/coroutines/channels/AbstractChannel$receiveCatching$1;
-Lkotlinx/coroutines/channels/AbstractChannel;
-Lkotlinx/coroutines/channels/AbstractChannelKt;
-Lkotlinx/coroutines/channels/AbstractSendChannel$SendBuffered;
-Lkotlinx/coroutines/channels/AbstractSendChannel;
-Lkotlinx/coroutines/channels/ArrayChannel;
-Lkotlinx/coroutines/channels/BufferOverflow;
-Lkotlinx/coroutines/channels/Channel$Factory;
-Lkotlinx/coroutines/channels/Channel;
-Lkotlinx/coroutines/channels/ChannelCoroutine;
-Lkotlinx/coroutines/channels/ChannelIterator;
-Lkotlinx/coroutines/channels/ChannelKt;
-Lkotlinx/coroutines/channels/ChannelResult$Closed;
-Lkotlinx/coroutines/channels/ChannelResult$Companion;
-Lkotlinx/coroutines/channels/ChannelResult$Failed;
-Lkotlinx/coroutines/channels/ChannelResult;
-Lkotlinx/coroutines/channels/Closed;
-Lkotlinx/coroutines/channels/ConflatedChannel;
-Lkotlinx/coroutines/channels/LinkedListChannel;
-Lkotlinx/coroutines/channels/ProduceKt;
-Lkotlinx/coroutines/channels/ProducerCoroutine;
-Lkotlinx/coroutines/channels/ProducerScope;
-Lkotlinx/coroutines/channels/Receive;
-Lkotlinx/coroutines/channels/ReceiveChannel;
-Lkotlinx/coroutines/channels/ReceiveOrClosed;
-Lkotlinx/coroutines/channels/RendezvousChannel;
-Lkotlinx/coroutines/channels/Send;
-Lkotlinx/coroutines/channels/SendChannel;
-Lkotlinx/coroutines/flow/AbstractFlow$collect$1;
-Lkotlinx/coroutines/flow/AbstractFlow;
-Lkotlinx/coroutines/flow/DistinctFlowImpl$collect$2$emit$1;
-Lkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;
-Lkotlinx/coroutines/flow/DistinctFlowImpl;
-Lkotlinx/coroutines/flow/Flow;
-Lkotlinx/coroutines/flow/FlowCollector;
-Lkotlinx/coroutines/flow/FlowKt;
-Lkotlinx/coroutines/flow/FlowKt__BuildersKt;
-Lkotlinx/coroutines/flow/FlowKt__ChannelsKt$emitAllImpl$1;
-Lkotlinx/coroutines/flow/FlowKt__ChannelsKt;
-Lkotlinx/coroutines/flow/FlowKt__CollectKt;
-Lkotlinx/coroutines/flow/FlowKt__ContextKt;
-Lkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1;
-Lkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultKeySelector$1;
-Lkotlinx/coroutines/flow/FlowKt__DistinctKt;
-Lkotlinx/coroutines/flow/FlowKt__EmittersKt;
-Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$$inlined$unsafeFlow$1;
-Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1$emit$1;
-Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;
-Lkotlinx/coroutines/flow/FlowKt__LimitKt$emitAbort$1;
-Lkotlinx/coroutines/flow/FlowKt__LimitKt$take$$inlined$unsafeFlow$1$1;
-Lkotlinx/coroutines/flow/FlowKt__LimitKt$take$$inlined$unsafeFlow$1;
-Lkotlinx/coroutines/flow/FlowKt__LimitKt$take$2$1$emit$1;
-Lkotlinx/coroutines/flow/FlowKt__LimitKt$take$2$1;
-Lkotlinx/coroutines/flow/FlowKt__LimitKt;
-Lkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;
-Lkotlinx/coroutines/flow/FlowKt__MergeKt;
-Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2$1;
-Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;
-Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$3;
-Lkotlinx/coroutines/flow/FlowKt__ReduceKt;
-Lkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2$WhenMappings;
-Lkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;
-Lkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;
-Lkotlinx/coroutines/flow/FlowKt__ShareKt;
-Lkotlinx/coroutines/flow/MutableSharedFlow;
-Lkotlinx/coroutines/flow/MutableStateFlow;
-Lkotlinx/coroutines/flow/ReadonlyStateFlow;
-Lkotlinx/coroutines/flow/SafeFlow;
-Lkotlinx/coroutines/flow/SharedFlow;
-Lkotlinx/coroutines/flow/SharedFlowImpl$Emitter;
-Lkotlinx/coroutines/flow/SharedFlowImpl$collect$1;
-Lkotlinx/coroutines/flow/SharedFlowImpl;
-Lkotlinx/coroutines/flow/SharedFlowKt;
-Lkotlinx/coroutines/flow/SharedFlowSlot;
-Lkotlinx/coroutines/flow/SharingCommand;
-Lkotlinx/coroutines/flow/SharingConfig;
-Lkotlinx/coroutines/flow/SharingStarted$Companion;
-Lkotlinx/coroutines/flow/SharingStarted;
-Lkotlinx/coroutines/flow/StartedEagerly;
-Lkotlinx/coroutines/flow/StartedLazily;
-Lkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;
-Lkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;
-Lkotlinx/coroutines/flow/StartedWhileSubscribed;
-Lkotlinx/coroutines/flow/StateFlow;
-Lkotlinx/coroutines/flow/StateFlowImpl$collect$1;
-Lkotlinx/coroutines/flow/StateFlowImpl;
-Lkotlinx/coroutines/flow/StateFlowKt;
-Lkotlinx/coroutines/flow/StateFlowSlot;
-Lkotlinx/coroutines/flow/internal/AbortFlowException;
-Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;
-Lkotlinx/coroutines/flow/internal/AbstractSharedFlowKt;
-Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;
-Lkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;
-Lkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1;
-Lkotlinx/coroutines/flow/internal/ChannelFlow;
-Lkotlinx/coroutines/flow/internal/ChannelFlowOperator;
-Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;
-Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$emit$1;
-Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;
-Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;
-Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;
-Lkotlinx/coroutines/flow/internal/ChildCancelledException;
-Lkotlinx/coroutines/flow/internal/DownstreamExceptionContext;
-Lkotlinx/coroutines/flow/internal/FlowExceptions_commonKt;
-Lkotlinx/coroutines/flow/internal/FusibleFlow$DefaultImpls;
-Lkotlinx/coroutines/flow/internal/FusibleFlow;
-Lkotlinx/coroutines/flow/internal/NoOpContinuation;
-Lkotlinx/coroutines/flow/internal/NopCollector;
-Lkotlinx/coroutines/flow/internal/NullSurrogateKt;
-Lkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1;
-Lkotlinx/coroutines/flow/internal/SafeCollector;
-Lkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1;
-Lkotlinx/coroutines/flow/internal/SafeCollectorKt;
-Lkotlinx/coroutines/flow/internal/SafeCollector_commonKt$checkContext$result$1;
-Lkotlinx/coroutines/flow/internal/SafeCollector_commonKt;
-Lkotlinx/coroutines/flow/internal/SendingCollector;
-Lkotlinx/coroutines/flow/internal/SubscriptionCountStateFlow;
-Lkotlinx/coroutines/internal/AtomicKt;
-Lkotlinx/coroutines/internal/AtomicOp;
-Lkotlinx/coroutines/internal/ContextScope;
-Lkotlinx/coroutines/internal/DispatchedContinuation;
-Lkotlinx/coroutines/internal/DispatchedContinuationKt;
-Lkotlinx/coroutines/internal/LimitedDispatcher;
-Lkotlinx/coroutines/internal/LimitedDispatcherKt;
-Lkotlinx/coroutines/internal/LockFreeLinkedListHead;
-Lkotlinx/coroutines/internal/LockFreeLinkedListKt;
-Lkotlinx/coroutines/internal/LockFreeLinkedListNode$CondAddOp;
-Lkotlinx/coroutines/internal/LockFreeLinkedListNode;
-Lkotlinx/coroutines/internal/LockFreeTaskQueue;
-Lkotlinx/coroutines/internal/LockFreeTaskQueueCore$Companion;
-Lkotlinx/coroutines/internal/LockFreeTaskQueueCore;
-Lkotlinx/coroutines/internal/MainDispatcherFactory;
-Lkotlinx/coroutines/internal/MainDispatcherLoader;
-Lkotlinx/coroutines/internal/MainDispatchersKt;
-Lkotlinx/coroutines/internal/OpDescriptor;
-Lkotlinx/coroutines/internal/Removed;
-Lkotlinx/coroutines/internal/ResizableAtomicArray;
-Lkotlinx/coroutines/internal/ScopeCoroutine;
-Lkotlinx/coroutines/internal/Symbol;
-Lkotlinx/coroutines/internal/SystemPropsKt;
-Lkotlinx/coroutines/internal/SystemPropsKt__SystemPropsKt;
-Lkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt;
-Lkotlinx/coroutines/internal/ThreadContextKt$countAll$1;
-Lkotlinx/coroutines/internal/ThreadContextKt$findOne$1;
-Lkotlinx/coroutines/internal/ThreadContextKt$updateState$1;
-Lkotlinx/coroutines/internal/ThreadContextKt;
-Lkotlinx/coroutines/internal/ThreadSafeHeap;
-Lkotlinx/coroutines/internal/ThreadSafeHeapNode;
-Lkotlinx/coroutines/internal/ThreadState;
-Lkotlinx/coroutines/intrinsics/CancellableKt;
-Lkotlinx/coroutines/intrinsics/UndispatchedKt;
-Lkotlinx/coroutines/scheduling/CoroutineScheduler$Companion;
-Lkotlinx/coroutines/scheduling/CoroutineScheduler;
-Lkotlinx/coroutines/scheduling/DefaultIoScheduler;
-Lkotlinx/coroutines/scheduling/DefaultScheduler;
-Lkotlinx/coroutines/scheduling/GlobalQueue;
-Lkotlinx/coroutines/scheduling/NanoTimeSource;
-Lkotlinx/coroutines/scheduling/SchedulerCoroutineDispatcher;
-Lkotlinx/coroutines/scheduling/SchedulerTimeSource;
-Lkotlinx/coroutines/scheduling/Task;
-Lkotlinx/coroutines/scheduling/TaskContext;
-Lkotlinx/coroutines/scheduling/TaskContextImpl;
-Lkotlinx/coroutines/scheduling/TasksKt;
-Lkotlinx/coroutines/scheduling/UnlimitedIoScheduler;
-Lkotlinx/coroutines/sync/Empty;
-Lkotlinx/coroutines/sync/Mutex$DefaultImpls;
-Lkotlinx/coroutines/sync/Mutex;
-Lkotlinx/coroutines/sync/MutexImpl$LockCont$tryResumeLockWaiter$1;
-Lkotlinx/coroutines/sync/MutexImpl$LockCont;
-Lkotlinx/coroutines/sync/MutexImpl$LockWaiter;
-Lkotlinx/coroutines/sync/MutexImpl$LockedQueue;
-Lkotlinx/coroutines/sync/MutexImpl;
-Lkotlinx/coroutines/sync/MutexKt;
-PLandroidx/compose/foundation/MutatorMutex$Mutator;->canInterrupt(Landroidx/compose/foundation/MutatorMutex$Mutator;)Z
-PLandroidx/compose/foundation/MutatorMutex$Mutator;->cancel()V
-PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2$1$1;-><init>(Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V
-PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2$1$3;-><init>(Lkotlin/coroutines/Continuation;)V
-PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2$1$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2$1$3;->invoke(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2$1$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2$1$5;-><init>(Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V
-PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2$1$5;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapGestures$2$1$5;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/runtime/BroadcastFrameClock$withFrameNanos$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/runtime/BroadcastFrameClock$withFrameNanos$2$1;->invoke(Ljava/lang/Throwable;)V
-PLandroidx/compose/runtime/RecomposeScopeImpl;->rereadTrackedInstances()V
-PLandroidx/compose/runtime/RecomposeScopeImpl;->setRereading(Z)V
-PLandroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;-><init>(Landroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/coroutines/Continuation;)V
-PLandroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-PLandroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/runtime/snapshots/SnapshotIdSet;->access$getBelowBound$p(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)[I
-PLandroidx/compose/runtime/snapshots/SnapshotIdSet;->access$getLowerBound$p(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)I
-PLandroidx/compose/runtime/snapshots/SnapshotIdSet;->access$getLowerSet$p(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)J
-PLandroidx/compose/runtime/snapshots/SnapshotIdSet;->access$getUpperSet$p(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)J
-PLandroidx/compose/runtime/snapshots/SnapshotIdSet;->iterator()Ljava/util/Iterator;
-PLandroidx/compose/ui/geometry/Offset;->getDistanceSquared-impl(J)F
-PLandroidx/compose/ui/input/pointer/HistoricalChange;-><clinit>()V
-PLandroidx/compose/ui/input/pointer/HistoricalChange;-><init>(JJ)V
-PLandroidx/compose/ui/input/pointer/HistoricalChange;-><init>(JJLkotlin/jvm/internal/DefaultConstructorMarker;)V
-PLandroidx/compose/ui/input/pointer/HistoricalChange;->getPosition-F1C5BW0()J
-PLandroidx/compose/ui/input/pointer/HistoricalChange;->getUptimeMillis()J
-PLandroidx/compose/ui/input/pointer/Node;->hasPositionChanged(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEvent;)Z
-PLandroidx/compose/ui/input/pointer/PointerEventKt;->isOutOfBounds-jwHxaWs(Landroidx/compose/ui/input/pointer/PointerInputChange;JJ)Z
-PLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine$withTimeout$1;-><init>(Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;Lkotlin/coroutines/Continuation;)V
-PLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine$withTimeout$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine$withTimeout$job$1;-><init>(JLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;Lkotlin/coroutines/Continuation;)V
-PLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine$withTimeout$job$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-PLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine$withTimeout$job$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;->getExtendedTouchPadding-NH-jbRc()J
-PLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;->getSize-YbymL2g()J
-PLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;->withTimeout(JLkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;->access$getBoundsSize$p(Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;)J
-PLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;->getCoroutineScope()Lkotlinx/coroutines/CoroutineScope;
-PLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;->getExtendedTouchPadding-NH-jbRc()J
-PLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;->getInterceptOutOfBoundsChildEvents()Z
-PLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;->toSize-XkaWNTQ(J)J
-PLandroidx/compose/ui/node/BackwardsCompatNode;->interceptOutOfBoundsChildEvents()Z
-PLandroidx/compose/ui/node/HitTestResult;->isHitInMinimumTouchTargetBetter(FZ)Z
-PLandroidx/compose/ui/node/NodeChain$Differ;->remove(I)V
-PLandroidx/compose/ui/node/NodeChain$Differ;->setAfter(Landroidx/compose/runtime/collection/MutableVector;)V
-PLandroidx/compose/ui/node/NodeChain$Differ;->setAggregateChildKindSet(I)V
-PLandroidx/compose/ui/node/NodeChain$Differ;->setBefore(Landroidx/compose/runtime/collection/MutableVector;)V
-PLandroidx/compose/ui/node/NodeChain$Differ;->setNode(Landroidx/compose/ui/Modifier$Node;)V
-PLandroidx/compose/ui/node/NodeChain;->access$disposeAndRemoveNode(Landroidx/compose/ui/node/NodeChain;Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;
-PLandroidx/compose/ui/node/NodeChain;->disposeAndRemoveNode(Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;
-PLandroidx/compose/ui/node/NodeChain;->removeNode(Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node;
-PLandroidx/compose/ui/node/NodeCoordinator$Companion$PointerInputSource$1;->interceptOutOfBoundsChildEvents(Landroidx/compose/ui/node/DelegatableNode;)Z
-PLandroidx/compose/ui/node/NodeCoordinator$Companion$PointerInputSource$1;->interceptOutOfBoundsChildEvents(Landroidx/compose/ui/node/PointerInputModifierNode;)Z
-PLandroidx/compose/ui/node/NodeCoordinator$hitNear$1;-><init>(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/node/DelegatableNode;Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZF)V
-PLandroidx/compose/ui/node/NodeCoordinator$hitNear$1;->invoke()Ljava/lang/Object;
-PLandroidx/compose/ui/node/NodeCoordinator$hitNear$1;->invoke()V
-PLandroidx/compose/ui/node/NodeCoordinator;->access$hitNear-JHbHoSQ(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/node/DelegatableNode;Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZF)V
-PLandroidx/compose/ui/node/NodeCoordinator;->hitNear-JHbHoSQ(Landroidx/compose/ui/node/DelegatableNode;Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZF)V
-PLandroidx/compose/ui/node/NodeCoordinator;->speculativeHit-JHbHoSQ(Landroidx/compose/ui/node/DelegatableNode;Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZF)V
-PLandroidx/compose/ui/node/NodeKindKt;->autoInvalidateRemovedNode(Landroidx/compose/ui/Modifier$Node;)V
-PLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1;->onTrimMemory(I)V
-PLandroidx/compose/ui/res/ImageVectorCache;->clear()V
-PLandroidx/compose/ui/text/font/DeviceFontFamilyName;->equals-impl0(Ljava/lang/String;Ljava/lang/String;)Z
-PLandroidx/compose/ui/text/font/DeviceFontFamilyNameFont;->equals(Ljava/lang/Object;)Z
-PLandroidx/compose/ui/text/font/FontVariation$Settings;->equals(Ljava/lang/Object;)Z
-PLandroidx/concurrent/futures/AbstractResolvableFuture$AtomicHelper;-><init>()V
-PLandroidx/concurrent/futures/AbstractResolvableFuture$AtomicHelper;-><init>(Landroidx/concurrent/futures/AbstractResolvableFuture$1;)V
-PLandroidx/concurrent/futures/AbstractResolvableFuture$Listener;-><clinit>()V
-PLandroidx/concurrent/futures/AbstractResolvableFuture$Listener;-><init>(Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)V
-PLandroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper;-><init>(Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;)V
-PLandroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper;->casListeners(Landroidx/concurrent/futures/AbstractResolvableFuture;Landroidx/concurrent/futures/AbstractResolvableFuture$Listener;Landroidx/concurrent/futures/AbstractResolvableFuture$Listener;)Z
-PLandroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper;->casValue(Landroidx/concurrent/futures/AbstractResolvableFuture;Ljava/lang/Object;Ljava/lang/Object;)Z
-PLandroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper;->casWaiters(Landroidx/concurrent/futures/AbstractResolvableFuture;Landroidx/concurrent/futures/AbstractResolvableFuture$Waiter;Landroidx/concurrent/futures/AbstractResolvableFuture$Waiter;)Z
-PLandroidx/concurrent/futures/AbstractResolvableFuture$Waiter;-><clinit>()V
-PLandroidx/concurrent/futures/AbstractResolvableFuture$Waiter;-><init>(Z)V
-PLandroidx/concurrent/futures/AbstractResolvableFuture;-><clinit>()V
-PLandroidx/concurrent/futures/AbstractResolvableFuture;-><init>()V
-PLandroidx/concurrent/futures/AbstractResolvableFuture;->afterDone()V
-PLandroidx/concurrent/futures/AbstractResolvableFuture;->clearListeners(Landroidx/concurrent/futures/AbstractResolvableFuture$Listener;)Landroidx/concurrent/futures/AbstractResolvableFuture$Listener;
-PLandroidx/concurrent/futures/AbstractResolvableFuture;->complete(Landroidx/concurrent/futures/AbstractResolvableFuture;)V
-PLandroidx/concurrent/futures/AbstractResolvableFuture;->releaseWaiters()V
-PLandroidx/concurrent/futures/AbstractResolvableFuture;->set(Ljava/lang/Object;)Z
-PLandroidx/concurrent/futures/ResolvableFuture;-><init>()V
-PLandroidx/concurrent/futures/ResolvableFuture;->create()Landroidx/concurrent/futures/ResolvableFuture;
-PLandroidx/concurrent/futures/ResolvableFuture;->set(Ljava/lang/Object;)Z
-PLandroidx/profileinstaller/DeviceProfileWriter$$ExternalSyntheticLambda0;-><init>(Landroidx/profileinstaller/DeviceProfileWriter;ILjava/lang/Object;)V
-PLandroidx/profileinstaller/DeviceProfileWriter$$ExternalSyntheticLambda0;->run()V
-PLandroidx/profileinstaller/DeviceProfileWriter;->$r8$lambda$ERhlvXCSfTRq-n5iULYjO-Ntn-w(Landroidx/profileinstaller/DeviceProfileWriter;ILjava/lang/Object;)V
-PLandroidx/profileinstaller/DeviceProfileWriter;-><init>(Landroid/content/res/AssetManager;Ljava/util/concurrent/Executor;Landroidx/profileinstaller/ProfileInstaller$DiagnosticsCallback;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/io/File;)V
-PLandroidx/profileinstaller/DeviceProfileWriter;->desiredVersion()[B
-PLandroidx/profileinstaller/DeviceProfileWriter;->deviceAllowsProfileInstallerAotWrites()Z
-PLandroidx/profileinstaller/DeviceProfileWriter;->lambda$result$0(ILjava/lang/Object;)V
-PLandroidx/profileinstaller/DeviceProfileWriter;->result(ILjava/lang/Object;)V
-PLandroidx/profileinstaller/ProfileInstallReceiver$$ExternalSyntheticLambda0;-><init>()V
-PLandroidx/profileinstaller/ProfileInstallReceiver$$ExternalSyntheticLambda0;->execute(Ljava/lang/Runnable;)V
-PLandroidx/profileinstaller/ProfileInstaller$1;-><init>()V
-PLandroidx/profileinstaller/ProfileInstaller$1;->onResultReceived(ILjava/lang/Object;)V
-PLandroidx/profileinstaller/ProfileInstaller$2;-><init>()V
-PLandroidx/profileinstaller/ProfileInstaller;-><clinit>()V
-PLandroidx/profileinstaller/ProfileInstaller;->hasAlreadyWrittenProfileForThisInstall(Landroid/content/pm/PackageInfo;Ljava/io/File;Landroidx/profileinstaller/ProfileInstaller$DiagnosticsCallback;)Z
-PLandroidx/profileinstaller/ProfileInstaller;->transcodeAndWrite(Landroid/content/res/AssetManager;Ljava/lang/String;Landroid/content/pm/PackageInfo;Ljava/io/File;Ljava/lang/String;Ljava/util/concurrent/Executor;Landroidx/profileinstaller/ProfileInstaller$DiagnosticsCallback;)Z
-PLandroidx/profileinstaller/ProfileInstaller;->writeProfile(Landroid/content/Context;)V
-PLandroidx/profileinstaller/ProfileInstaller;->writeProfile(Landroid/content/Context;Ljava/util/concurrent/Executor;Landroidx/profileinstaller/ProfileInstaller$DiagnosticsCallback;)V
-PLandroidx/profileinstaller/ProfileInstaller;->writeProfile(Landroid/content/Context;Ljava/util/concurrent/Executor;Landroidx/profileinstaller/ProfileInstaller$DiagnosticsCallback;Z)V
-PLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda1;->run()V
-PLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda2;-><init>(Landroid/content/Context;)V
-PLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda2;->run()V
-PLandroidx/profileinstaller/ProfileInstallerInitializer;->$r8$lambda$nkOIpN4NfyreWbcXjHv0xCvwgTY(Landroid/content/Context;)V
-PLandroidx/profileinstaller/ProfileInstallerInitializer;->$r8$lambda$nvFqT5BztGB-MvszW9GUTUoI9rw(Landroid/content/Context;)V
-PLandroidx/profileinstaller/ProfileInstallerInitializer;->lambda$installAfterDelay$1(Landroid/content/Context;)V
-PLandroidx/profileinstaller/ProfileInstallerInitializer;->lambda$writeInBackground$2(Landroid/content/Context;)V
-PLandroidx/profileinstaller/ProfileInstallerInitializer;->writeInBackground(Landroid/content/Context;)V
-PLandroidx/profileinstaller/ProfileVerifier$Api33Impl;->getPackageInfo(Landroid/content/pm/PackageManager;Landroid/content/Context;)Landroid/content/pm/PackageInfo;
-PLandroidx/profileinstaller/ProfileVerifier$Cache;-><init>(IIJJ)V
-PLandroidx/profileinstaller/ProfileVerifier$Cache;->equals(Ljava/lang/Object;)Z
-PLandroidx/profileinstaller/ProfileVerifier$Cache;->readFromFile(Ljava/io/File;)Landroidx/profileinstaller/ProfileVerifier$Cache;
-PLandroidx/profileinstaller/ProfileVerifier$CompilationStatus;-><init>(IZZ)V
-PLandroidx/profileinstaller/ProfileVerifier;-><clinit>()V
-PLandroidx/profileinstaller/ProfileVerifier;->getPackageLastUpdateTime(Landroid/content/Context;)J
-PLandroidx/profileinstaller/ProfileVerifier;->setCompilationStatus(IZZ)Landroidx/profileinstaller/ProfileVerifier$CompilationStatus;
-PLandroidx/profileinstaller/ProfileVerifier;->writeProfileVerification(Landroid/content/Context;Z)Landroidx/profileinstaller/ProfileVerifier$CompilationStatus;
-PLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$1$1$1;-><init>(Lcom/android/credentialmanager/common/material/ModalBottomSheetState;Lkotlin/coroutines/Continuation;)V
-PLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
-PLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$1$1;->invoke()Ljava/lang/Object;
-PLcom/android/credentialmanager/common/material/ModalBottomSheetKt$ModalBottomSheetLayout$1$1$1;->invoke()V
-PLcom/android/credentialmanager/common/material/ModalBottomSheetKt$Scrim$dismissModifier$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/common/material/ModalBottomSheetKt$Scrim$dismissModifier$1$1$1;->invoke-k-4lQ0M(J)V
-PLcom/android/credentialmanager/common/material/ModalBottomSheetKt$rememberModalBottomSheetState$1;->invoke(Lcom/android/credentialmanager/common/material/ModalBottomSheetValue;)Ljava/lang/Boolean;
-PLcom/android/credentialmanager/common/material/ModalBottomSheetKt$rememberModalBottomSheetState$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
-PLcom/android/credentialmanager/common/material/ModalBottomSheetState;->hide(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLcom/android/credentialmanager/common/material/SwipeableState;->getConfirmStateChange$frameworks__base__packages__CredentialManager__android_common__CredentialManager()Lkotlin/jvm/functions/Function1;
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$7;->invoke()Ljava/lang/Object;
-PLcom/android/credentialmanager/getflow/GetCredentialComponentsKt$GetCredentialScreen$7;->invoke()V
-PLkotlin/coroutines/jvm/internal/Boxing;->boxInt(I)Ljava/lang/Integer;
-PLkotlin/sequences/SequenceBuilderIterator;-><init>()V
-PLkotlin/sequences/SequenceBuilderIterator;->getContext()Lkotlin/coroutines/CoroutineContext;
-PLkotlin/sequences/SequenceBuilderIterator;->hasNext()Z
-PLkotlin/sequences/SequenceBuilderIterator;->next()Ljava/lang/Object;
-PLkotlin/sequences/SequenceBuilderIterator;->resumeWith(Ljava/lang/Object;)V
-PLkotlin/sequences/SequenceBuilderIterator;->setNextStep(Lkotlin/coroutines/Continuation;)V
-PLkotlin/sequences/SequenceBuilderIterator;->yield(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
-PLkotlin/sequences/SequenceScope;-><init>()V
-PLkotlin/sequences/SequencesKt;->sequence(Lkotlin/jvm/functions/Function2;)Lkotlin/sequences/Sequence;
-PLkotlin/sequences/SequencesKt__SequenceBuilderKt$sequence$$inlined$Sequence$1;-><init>(Lkotlin/jvm/functions/Function2;)V
-PLkotlin/sequences/SequencesKt__SequenceBuilderKt$sequence$$inlined$Sequence$1;->iterator()Ljava/util/Iterator;
-PLkotlin/sequences/SequencesKt__SequenceBuilderKt;->iterator(Lkotlin/jvm/functions/Function2;)Ljava/util/Iterator;
-PLkotlin/sequences/SequencesKt__SequenceBuilderKt;->sequence(Lkotlin/jvm/functions/Function2;)Lkotlin/sequences/Sequence;
-PLkotlinx/coroutines/DelayKt;->getDelay(Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/Delay;
-PLkotlinx/coroutines/EventLoopImplBase;->scheduleResumeAfterDelay(JLkotlinx/coroutines/CancellableContinuation;)V
-PLkotlinx/coroutines/EventLoop_commonKt;-><clinit>()V
-PLkotlinx/coroutines/EventLoop_commonKt;->delayToNanos(J)J
-PLkotlinx/coroutines/internal/LockFreeLinkedListHead;->isEmpty()Z
-PLkotlinx/coroutines/sync/MutexImpl$UnlockOp;-><init>(Lkotlinx/coroutines/sync/MutexImpl$LockedQueue;)V
-PLkotlinx/coroutines/sync/MutexImpl$UnlockOp;->complete(Ljava/lang/Object;Ljava/lang/Object;)V
-PLkotlinx/coroutines/sync/MutexImpl$UnlockOp;->complete(Lkotlinx/coroutines/sync/MutexImpl;Ljava/lang/Object;)V
-PLkotlinx/coroutines/sync/MutexImpl$UnlockOp;->prepare(Ljava/lang/Object;)Ljava/lang/Object;
-PLkotlinx/coroutines/sync/MutexImpl$UnlockOp;->prepare(Lkotlinx/coroutines/sync/MutexImpl;)Ljava/lang/Object;
-[Landroidx/compose/animation/core/AnimationEndReason;
-[Landroidx/compose/animation/core/MutatePriority;
-[Landroidx/compose/foundation/MutatePriority;
-[Landroidx/compose/foundation/gestures/ContentInViewModifier$Request;
-[Landroidx/compose/foundation/gestures/Orientation;
-[Landroidx/compose/foundation/layout/Direction;
-[Landroidx/compose/foundation/layout/LayoutOrientation;
-[Landroidx/compose/foundation/layout/RowColumnParentData;
-[Landroidx/compose/foundation/layout/SizeMode;
-[Landroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo$Interval;
-[Landroidx/compose/foundation/lazy/layout/IntervalList$Interval;
-[Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$PrefetchRequest;
-[Landroidx/compose/foundation/relocation/BringIntoViewRequesterModifier;
-[Landroidx/compose/material3/tokens/ColorSchemeKeyTokens;
-[Landroidx/compose/material3/tokens/ShapeKeyTokens;
-[Landroidx/compose/material3/tokens/TypographyKeyTokens;
-[Landroidx/compose/runtime/InvalidationResult;
-[Landroidx/compose/runtime/ProvidedValue;
-[Landroidx/compose/runtime/Recomposer$State;
-[Landroidx/compose/runtime/collection/IdentityArraySet;
-[Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;
-[Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;
-[Landroidx/compose/ui/Modifier$Element;
-[Landroidx/compose/ui/Modifier$Node;
-[Landroidx/compose/ui/Modifier;
-[Landroidx/compose/ui/focus/FocusRequesterModifierNode;
-[Landroidx/compose/ui/focus/FocusStateImpl;
-[Landroidx/compose/ui/graphics/colorspace/ColorSpace;
-[Landroidx/compose/ui/input/pointer/Node;
-[Landroidx/compose/ui/input/pointer/PointerEventPass;
-[Landroidx/compose/ui/input/pointer/PointerId;
-[Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;
-[Landroidx/compose/ui/input/pointer/util/DataPointAtTime;
-[Landroidx/compose/ui/input/pointer/util/VelocityTracker1D$Strategy;
-[Landroidx/compose/ui/layout/Measurable;
-[Landroidx/compose/ui/layout/Placeable;
-[Landroidx/compose/ui/modifier/ModifierLocal;
-[Landroidx/compose/ui/node/BackwardsCompatNode;
-[Landroidx/compose/ui/node/LayoutNode$LayoutState;
-[Landroidx/compose/ui/node/LayoutNode$UsageByParent;
-[Landroidx/compose/ui/node/LayoutNode;
-[Landroidx/compose/ui/node/MeasureAndLayoutDelegate$PostponedRequest;
-[Landroidx/compose/ui/node/Owner$OnLayoutCompletedListener;
-[Landroidx/compose/ui/platform/TextToolbarStatus;
-[Landroidx/compose/ui/text/android/style/LineHeightStyleSpan;
-[Landroidx/compose/ui/text/android/style/PlaceholderSpan;
-[Landroidx/compose/ui/text/font/Font;
-[Landroidx/compose/ui/text/font/FontVariation$Setting;
-[Landroidx/compose/ui/text/font/FontWeight;
-[Landroidx/compose/ui/text/platform/style/ShaderBrushSpan;
-[Landroidx/compose/ui/unit/LayoutDirection;
-[Landroidx/compose/ui/unit/TextUnitType;
-[Landroidx/core/provider/FontsContractCompat$FontInfo;
-[Landroidx/lifecycle/Lifecycle$Event;
-[Landroidx/lifecycle/Lifecycle$State;
-[Landroidx/lifecycle/viewmodel/ViewModelInitializer;
-[Lcom/android/credentialmanager/common/CredentialType;
-[Lcom/android/credentialmanager/common/DialogState;
-[Lcom/android/credentialmanager/common/ProviderActivityState;
-[Lcom/android/credentialmanager/common/material/ModalBottomSheetValue;
-[Lcom/android/credentialmanager/getflow/GetScreenState;
-[Lcom/android/credentialmanager/logging/GetCredentialEvent;
-[Lcom/android/credentialmanager/logging/LifecycleEvent;
-[Lcom/android/credentialmanager/ui/theme/typography/TypefaceNames$Config;
-[Lkotlin/LazyThreadSafetyMode;
-[Lkotlin/Pair;
-[Lkotlin/coroutines/Continuation;
-[Lkotlin/coroutines/intrinsics/CoroutineSingletons;
-[Lkotlin/jvm/functions/Function0;
-[Lkotlin/reflect/KClass;
-[Lkotlin/reflect/KProperty;
-[Lkotlinx/atomicfu/AtomicRef;
-[Lkotlinx/coroutines/CoroutineStart;
-[Lkotlinx/coroutines/channels/BufferOverflow;
-[Lkotlinx/coroutines/flow/SharedFlowSlot;
-[Lkotlinx/coroutines/flow/SharingCommand;
-[Lkotlinx/coroutines/flow/StateFlowSlot;
-[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;
-[Lkotlinx/coroutines/internal/ThreadSafeHeapNode;
\ No newline at end of file
+# TODO(b/335418838): Restore when build support for rewriting profiles lands.
diff --git a/packages/CredentialManager/res/values-af/strings.xml b/packages/CredentialManager/res/values-af/strings.xml
index b17293d..b0bac45 100644
--- a/packages/CredentialManager/res/values-af/strings.xml
+++ b/packages/CredentialManager/res/values-af/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Skep toegangsleutel om by <xliff:g id="APP_NAME">%1$s</xliff:g> aan te meld?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"Stoor wagwoord om by <xliff:g id="APP_NAME">%1$s</xliff:g> aan te meld?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Stoor aanmeldinligting vir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Gebruik jou skermslot om ’n toegangsleutel vir <xliff:g id="APP_NAME">%1$s</xliff:g> te skep?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Gebruik jou skermslot om ’n wagwoord vir <xliff:g id="APP_NAME">%1$s</xliff:g> te skep?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Gebruik jou skermslot om aanmeldinligting vir <xliff:g id="APP_NAME">%1$s</xliff:g> te stoor?"</string>
<string name="passkey" msgid="632353688396759522">"toegangsleutel"</string>
<string name="password" msgid="6738570945182936667">"wagwoord"</string>
<string name="passkeys" msgid="5733880786866559847">"toegangsleutels"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Gaan terug na die vorige bladsy"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Maak toe"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Maak toe"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Gebruik jou gestoorde toegangsleutel vir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Gebruik jou gestoorde wagwoord vir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Gebruik jou skermslot om met <xliff:g id="USERNAME">%2$s</xliff:g> by <xliff:g id="APP_NAME">%1$s</xliff:g> aan te meld"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Gebruik jou aanmelding vir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Ontsluit aanmeldingopsies vir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Gebruik jou gestoorde toegangsleutel vir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Gebruik jou gestoorde wagwoord vir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Gebruik jou rekening vir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Ontsluit aanmeldingopsies vir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Kies ’n gestoorde toegangsleutel vir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Kies ’n gestoorde wagwoord vir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Kies ’n gestoorde aanmelding vir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Kies ’n aanmelding vir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Kies ’n rekening vir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Kies ’n opsie vir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Gebruik hierdie inligting op <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Meld op ’n ander manier aan"</string>
diff --git a/packages/CredentialManager/res/values-am/strings.xml b/packages/CredentialManager/res/values-am/strings.xml
index 4ee0788..dcf98a0 100644
--- a/packages/CredentialManager/res/values-am/strings.xml
+++ b/packages/CredentialManager/res/values-am/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"áá° <xliff:g id="APP_NAME">%1$s</xliff:g> áááá£áµ ášááá ááá ááá á?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"áá° <xliff:g id="APP_NAME">%1$s</xliff:g> áááá£áµ ášááá áá áááá¥?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"áš<xliff:g id="APP_NAME">%1$s</xliff:g> ášááá¢á« áášá áááá¥?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"á<xliff:g id="APP_NAME">%1$s</xliff:g> ášááá ááá áááá á ášáá« áᜠááááá«áá áá áá ááááá?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"á<xliff:g id="APP_NAME">%1$s</xliff:g> ášááá áá áááá á ášáá« áᜠááááá«áá áá áá ááááá?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"áš<xliff:g id="APP_NAME">%1$s</xliff:g> ááá¢á« áášáá áááµááᥠášáá« áᜠááááá«áá áá áá ááááá?"</string>
<string name="passkey" msgid="632353688396759522">"ášááá ááá"</string>
<string name="password" msgid="6738570945182936667">"ášááá áá"</string>
<string name="passkeys" msgid="5733880786866559847">"ášááá ááááœ"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"áá° áá³áá áá
áááá±"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"áá"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"á á°áá¥áµ"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"ášá°ááá ášááá ááááá á<xliff:g id="APP_NAME">%1$s</xliff:g> áá áá?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"á<xliff:g id="APP_NAME">%1$s</xliff:g> ášá°ááá áá ášááá áááá áá áá?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"á <xliff:g id="USERNAME">%2$s</xliff:g> áá° <xliff:g id="APP_NAME">%1$s</xliff:g> áááá£áµ ášáá« áᜠááááá«áá áá áá"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"á<xliff:g id="APP_NAME">%1$s</xliff:g> ááá¢á«á á¥á
á áá ááá?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"á<xliff:g id="APP_NAME">%1$s</xliff:g> ášááá¢á« á áá«á®áœ áášáá±?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"ášá°ááá ášááá ááááá á<xliff:g id="APP_NAME">%1$s</xliff:g> áá áá"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"á<xliff:g id="APP_NAME">%1$s</xliff:g> ášá°ááá áá ášááá ááá áá áá"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"ááá«áá á<xliff:g id="APP_NAME">%1$s</xliff:g> áá áá"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"á<xliff:g id="APP_NAME">%1$s</xliff:g> ášááá¢á« á áá«á®áœá áášáá±"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"á<xliff:g id="APP_NAME">%1$s</xliff:g> ášá°ááá ášááá ááá ááášá¡"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"á<xliff:g id="APP_NAME">%1$s</xliff:g> ášá°ááá ášááá áá ááášá¡"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"á<xliff:g id="APP_NAME">%1$s</xliff:g> ášá°ááá ááá¢á« áá áá"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"á<xliff:g id="APP_NAME">%1$s</xliff:g> ááá¢á« ááášá¡"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"á<xliff:g id="APP_NAME">%1$s</xliff:g> ááá«á ááášá¡"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"á<xliff:g id="APP_NAME">%1$s</xliff:g> á áá«á ááášá¥?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"áá
á áášá á <xliff:g id="APP_NAME">%1$s</xliff:g> áá áá ááá?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"á áá ááááµ ááá¡"</string>
diff --git a/packages/CredentialManager/res/values-ar/strings.xml b/packages/CredentialManager/res/values-ar/strings.xml
index 7e141c2..4a632b7 100644
--- a/packages/CredentialManager/res/values-ar/strings.xml
+++ b/packages/CredentialManager/res/values-ar/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"ÙÙ ØªØ±ÙØ¯ Ø¥ÙØŽØ§Ø¡ Ù
ÙØªØ§Ø Ù
Ø±ÙØ± ÙØªØ³Ø¬ÙÙ Ø§ÙØ¯Ø®Ù٠إÙÙ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"Ø"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"ÙÙ ØªØ±ÙØ¯ ØÙØž ÙÙÙ
Ø© اÙÙ
Ø±ÙØ± ÙØªØ³Ø¬ÙÙ Ø§ÙØ¯Ø®Ù٠إÙÙ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"Ø"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"ÙÙ ØªØ±ÙØ¯ ØÙØž Ù
عÙÙÙ
ات تسجÙÙ Ø§ÙØ¯Ø®Ù٠إÙÙ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"Ø"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"ÙÙ ØªØ±ÙØ¯ استخداÙ
ÙÙÙ Ø§ÙØŽØ§ØŽØ© ÙØ¥Ù؎اء Ù
ÙØªØ§Ø Ù
Ø±ÙØ± ÙØªØ·ØšÙÙ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"Ø"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"ÙÙ ØªØ±ÙØ¯ استخداÙ
ÙÙÙ Ø§ÙØŽØ§ØŽØ© ÙØ¥Ù؎اء ÙÙÙ
Ø© Ù
Ø±ÙØ± ÙØªØ·ØšÙÙ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"Ø"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"ÙÙ ØªØ±ÙØ¯ استخداÙ
ÙÙÙ Ø§ÙØŽØ§ØŽØ© ÙØÙØž Ù
عÙÙÙ
ات تسجÙÙ Ø§ÙØ¯Ø®ÙÙ ÙØªØ·ØšÙÙ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"Ø"</string>
<string name="passkey" msgid="632353688396759522">"Ù
ÙØªØ§Ø اÙÙ
Ø±ÙØ±"</string>
<string name="password" msgid="6738570945182936667">"ÙÙÙ
Ø© اÙÙ
Ø±ÙØ±"</string>
<string name="passkeys" msgid="5733880786866559847">"Ù
ÙØ§ØªÙØ Ø§ÙÙ
Ø±ÙØ±"</string>
@@ -71,15 +68,15 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Ø§ÙØ¹Ùدة Ø¥ÙÙ Ø§ÙØµÙØØ© Ø§ÙØ³Ø§ØšÙØ©"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Ø¥ØºÙØ§Ù"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Ø¥ØºÙØ§Ù"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"ÙÙ ØªØ±ÙØ¯ استخداÙ
Ù
ÙØªØ§Ø اÙÙ
Ø±ÙØ± اÙÙ
ØÙÙØž ÙØªØ·ØšÙÙ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"Ø"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"ÙÙ ØªØ±ÙØ¯ استخداÙ
ÙÙÙ
Ø© اÙÙ
Ø±ÙØ± اÙÙ
ØÙÙØžØ© ÙØªØ·ØšÙÙ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"Ø"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"استخدÙÙ
ÙÙÙ Ø§ÙØŽØ§ØŽØ© ÙØªØ³Ø¬ÙÙ Ø§ÙØ¯Ø®Ù٠إÙÙ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" ؚاستخداÙ
<xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"ÙÙ ØªØ±ÙØ¯ استخداÙ
Ù
عÙÙÙ
ات تسجÙ٠دخÙÙÙ ÙØªØ·ØšÙÙ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"Ø"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"ÙÙ ØªØ±ÙØ¯ ÙØªØ اÙÙÙÙ ÙØ§Ø³ØªØ¹Ø§Ø¯Ø© Ø®ÙØ§Ø±Ø§Øª تسجÙÙ Ø§ÙØ¯Ø®ÙÙ ÙØªØ·ØšÙÙ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"Ø"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"استخداÙ
Ù
ÙØªØ§Ø اÙÙ
Ø±ÙØ± اÙÙ
ØÙÙØž ÙØªØ³Ø¬ÙÙ Ø§ÙØ¯Ø®Ù٠إÙÙ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"استخداÙ
ÙÙÙ
Ø© اÙÙ
Ø±ÙØ± اÙÙ
ØÙÙØžØ© ÙØªØ³Ø¬ÙÙ Ø§ÙØ¯Ø®Ù٠إÙÙ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"استخداÙ
ØØ³Ø§ØšÙ ÙØªØ³Ø¬ÙÙ Ø§ÙØ¯Ø®Ù٠إÙÙ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
+ <string name="get_dialog_description_single_tap" msgid="2797059565126030879">"استخدÙÙ
ÙÙÙ Ø§ÙØŽØ§ØŽØ© ÙØªØ³Ø¬ÙÙ Ø§ÙØ¯Ø®Ù٠إÙÙ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" ؚاستخداÙ
<xliff:g id="USERNAME">%2$s</xliff:g>"</string>
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"ÙØªØ اÙÙÙÙ ÙØ§Ø³ØªØ¹Ø§Ø¯Ø© Ø®ÙØ§Ø±Ø§Øª تسجÙÙ Ø§ÙØ¯Ø®Ù٠إÙÙ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Ø§Ø®ØªÙØ§Ø± Ù
ÙØªØ§Ø Ù
Ø±ÙØ± Ù
ØÙÙØž ÙØªØ·ØšÙÙ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Ø§Ø®ØªÙØ§Ø± ÙÙÙ
Ø© Ù
Ø±ÙØ± Ù
ØÙÙØžØ© ÙØªØ·ØšÙÙ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Ø§Ø®ØªÙØ§Ø± ØšÙØ§Ùات اعتÙ
اد تسجÙ٠دخÙÙ Ù
ØÙÙØžØ© ÙØªØ·ØšÙÙ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Ø§Ø®ØªÙØ§Ø± Ù
عÙÙÙ
ات تسجÙÙ Ø§ÙØ¯Ø®ÙÙ ÙØªØ·ØšÙÙ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Ø§Ø®ØªÙØ§Ø± ØØ³Ø§Øš ÙØªØ³Ø¬ÙÙ Ø§ÙØ¯Ø®Ù٠إÙÙ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"ÙÙ ØªØ±ÙØ¯ Ø§Ø®ØªÙØ§Ø± ØšÙØ§Ùات Ø§ÙØ§Ø¹ØªÙ
اد ÙØªØ·ØšÙÙ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"Ø"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"ÙÙ ØªØ±ÙØ¯ استخداÙ
ØšÙØ§Ùات Ø§ÙØ§Ø¹ØªÙ
اد ÙØ°Ù ÙÙ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"Ø"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"تسجÙÙ Ø§ÙØ¯Ø®Ù٠ؚطرÙÙØ© أخرÙ"</string>
diff --git a/packages/CredentialManager/res/values-as/strings.xml b/packages/CredentialManager/res/values-as/strings.xml
index cde9112..c5939da 100644
--- a/packages/CredentialManager/res/values-as/strings.xml
+++ b/packages/CredentialManager/res/values-as/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"<xliff:g id="APP_NAME">%1$s</xliff:g>àŠ€ àŠàŠŸàŠàŠš àŠàŠš àŠà§°àŠ¿àŠ¬àŠ²à§ àŠªàŠŸàŠàŠà§ àŠžà§àŠ·à§àŠàŠ¿ àŠà§°àŠ¿àŠ¬àŠšà§?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"<xliff:g id="APP_NAME">%1$s</xliff:g>àŠ€ àŠàŠŸàŠàŠš àŠàŠš àŠà§°àŠ¿àŠ¬àŠ²à§ àŠªàŠŸàŠà§±à§°à§àŠ¡ àŠà§àŠ àŠà§°àŠ¿àŠ¬àŠšà§?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"<xliff:g id="APP_NAME">%1$s</xliff:g>à§° àŠ¬àŠŸàŠ¬à§ àŠàŠŸàŠàŠš àŠàŠšà§° àŠ€àŠ¥à§àН àŠà§àŠ àŠà§°àŠ¿àŠ¬àŠšà§?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"<xliff:g id="APP_NAME">%1$s</xliff:g>à§° àŠ¬àŠŸàŠ¬à§ àŠªàŠŸàŠàŠà§ àŠžà§àŠ·à§àŠàŠ¿ àŠà§°àŠ¿àŠ¬àŠ²à§ àŠàŠªà§àŠšàŠŸà§° àŠžà§àŠà§à§°à§àŠš àŠ²àŠ àŠ¬à§àŠ¯à§±àŠ¹àŠŸà§° àŠà§°àŠ¿àŠ¬àŠšà§?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"<xliff:g id="APP_NAME">%1$s</xliff:g>à§° àŠ¬àŠŸàŠ¬à§ àŠªàŠŸàŠà§±à§°à§àŠ¡ àŠžà§àŠ·à§àŠàŠ¿ àŠà§°àŠ¿àŠ¬àŠ²à§ àŠàŠªà§àŠšàŠŸà§° àŠžà§àŠà§à§°à§àŠš àŠ²àŠ àŠ¬à§àŠ¯à§±àŠ¹àŠŸà§° àŠà§°àŠ¿àŠ¬àŠšà§?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"<xliff:g id="APP_NAME">%1$s</xliff:g>à§° àŠ¬àŠŸàŠ¬à§ àŠàŠŸàŠàŠš àŠàŠšà§° àŠ€àŠ¥à§àН àŠà§àŠ àŠà§°àŠ¿àŠ¬àŠ²à§ àŠàŠªà§àŠšàŠŸà§° àŠžà§àŠà§à§°à§àŠš àŠ²àŠ àŠ¬à§àŠ¯à§±àŠ¹àŠŸà§° àŠà§°àŠ¿àŠ¬àŠšà§?"</string>
<string name="passkey" msgid="632353688396759522">"àŠªàŠŸàŠàŠà§"</string>
<string name="password" msgid="6738570945182936667">"àŠªàŠŸàŠà§±à§°à§àŠ¡"</string>
<string name="passkeys" msgid="5733880786866559847">"àŠªàŠŸàŠàŠà§"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"àŠªà§à§°à§àŠ¬à§±à§°à§àŠ€à§ àŠªà§àŠ·à§àŠ àŠŸàŠ²à§ àŠà§à§°àŠ¿ àŠ¯àŠŸàŠàŠ"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"àŠ¬àŠšà§àЧ àŠà§°àŠ"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"àŠ
àŠà§à§°àŠŸàŠ¹à§àН àŠà§°àŠ"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g>à§° àŠ¬àŠŸàŠ¬à§ àŠàŠªà§àŠšàŠŸà§° àŠà§àŠ àŠ¹à§ àŠ¥àŠàŠŸ àŠªàŠŸàŠàŠà§ àŠ¬à§àŠ¯à§±àŠ¹àŠŸà§° àŠà§°àŠ¿àŠ¬àŠšà§?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g>à§° àŠ¬àŠŸàŠ¬à§ àŠàŠªà§àŠšàŠŸà§° àŠà§àŠ àŠà§°àŠ¿ àŠ¥à§à§±àŠŸ àŠªàŠŸàŠà§±à§°à§àŠ¡ àŠ¬à§àŠ¯à§±àŠ¹àŠŸà§° àŠà§°àŠ¿àŠ¬àŠšà§?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"<xliff:g id="USERNAME">%2$s</xliff:g>à§° àŠà§°àŠ¿àŠ¯àŠŒàŠ€à§ <xliff:g id="APP_NAME">%1$s</xliff:g>àŠ€ àŠàŠŸàŠàŠš àŠàŠš àŠà§°àŠ¿àŠ¬àŠ²à§ àŠàŠªà§àŠšàŠŸà§° àŠžà§àŠà§à§°à§àŠš àŠ²àŠ àŠ¬à§àŠ¯à§±àŠ¹àŠŸà§° àŠà§°àŠ"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g>à§° àŠ¬àŠŸàŠ¬à§ àŠàŠŸàŠàŠš àŠàŠš àŠà§°àŠ¿àŠ¬àŠ²à§ àŠàŠªà§àŠšàŠŸà§° àŠà§à§°àŠ¿àŠ¡à§àŠšàŠ¶à§àŠ¬àŠ¿àŠ¯àŠŒà§àв àŠ¬à§àŠ¯à§±àŠ¹àŠŸà§° àŠà§°àŠ¿àŠ¬àŠšà§?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g>à§° àŠ¬àŠŸàŠ¬à§ àŠàŠŸàŠàŠš àŠàŠšà§° àŠ¬àŠ¿àŠàвà§àŠªàŠžàŠ®à§àй àŠàŠšàŠ²àŠ àŠà§°àŠ¿àŠ¬àŠšà§?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"àŠàŠªà§àŠšàŠ¿ <xliff:g id="APP_NAME">%1$s</xliff:g>à§° àŠ¬àŠŸàŠ¬à§ àŠà§àŠ àŠà§°àŠ¿ àŠ¥à§à§±àŠŸ àŠªàŠŸàŠàŠà§ àŠ¬à§àŠ¯à§±àŠ¹àŠŸà§° àŠà§°àŠ"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"àŠàŠªà§àŠšàŠ¿ <xliff:g id="APP_NAME">%1$s</xliff:g>à§° àŠ¬àŠŸàŠ¬à§ àŠà§àŠ àŠà§°àŠ¿ àŠ¥à§à§±àŠŸ àŠªàŠŸàŠà§±à§°à§àŠ¡ àŠ¬à§àŠ¯à§±àŠ¹àŠŸà§° àŠà§°àŠ"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"<xliff:g id="APP_NAME">%1$s</xliff:g>à§° àŠ¬àŠŸàŠ¬à§ àŠ¥àŠàŠŸ àŠàŠªà§àŠšàŠŸà§° àŠàŠàŠŸàŠàŠ£à§àŠ àŠ¬à§àŠ¯à§±àŠ¹àŠŸà§° àŠà§°àŠ"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g>à§° àŠ¬àŠŸàŠ¬à§ àŠàŠŸàŠàŠš àŠàŠšà§° àŠ¬àŠ¿àŠàвà§àŠªàŠžàŠ®à§àй àŠàŠšàŠ²àŠ àŠà§°àŠ"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g>à§° àŠ¬àŠŸàŠ¬à§ àŠà§àŠ àŠ¹à§ àŠ¥àŠàŠŸ àŠàŠàŠŸ àŠªàŠŸàŠàŠà§ àŠ¬àŠŸàŠàŠšàŠ¿ àŠà§°àŠ"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g>à§° àŠ¬àŠŸàŠ¬à§ àŠà§àŠ àŠ¹à§ àŠ¥àŠàŠŸ àŠàŠàŠŸ àŠªàŠŸàŠà§±à§°à§àŠ¡ àŠ¬àŠŸàŠàŠšàŠ¿ àŠà§°àŠ"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g>à§° àŠ¬àŠŸàŠ¬à§ àŠà§àŠ àŠ¹à§ àŠ¥àŠàŠŸ àŠàŠàŠŸ àŠàŠŸàŠàŠš àŠàŠš àŠ¬àŠŸàŠàŠšàŠ¿ àŠà§°àŠ"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g>à§° àŠ¬àŠŸàŠ¬à§ àŠàŠŸàŠàŠš àŠàŠš àŠà§°àŠ¿àŠ¬àŠ²à§ àŠàŠàŠŸ àŠà§à§°àŠ¿àŠ¡à§àŠšàŠ¶à§àŠ¬àŠ¿àŠ¯àŠŒà§àв àŠ¬àŠŸàŠàŠšàŠ¿ àŠà§°àŠ"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g>à§° àŠ¬àŠŸàŠ¬à§ àŠàŠàŠŸ àŠàŠàŠŸàŠàŠ£à§àŠ àŠ¬àŠŸàŠàŠšàŠ¿ àŠà§°àŠ"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g>à§° àŠ¬àŠŸàŠ¬à§ àŠàŠàŠŸ àŠ¬àŠ¿àŠàвà§àŠª àŠ¬àŠŸàŠàŠšàŠ¿ àŠà§°àŠ¿àŠ¬àŠšà§?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g>àŠ€ àŠàŠ àŠ€àŠ¥à§àН àŠ¬à§àŠ¯à§±àŠ¹àŠŸà§° àŠà§°àŠ¿àŠ¬àŠšà§?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"àŠ
àŠšà§àН àŠàŠªàŠŸàŠ¯àŠŒà§à§°à§ àŠàŠŸàŠàŠš àŠàŠš àŠà§°àŠ"</string>
diff --git a/packages/CredentialManager/res/values-az/strings.xml b/packages/CredentialManager/res/values-az/strings.xml
index 1623ec4..db7b8b5 100644
--- a/packages/CredentialManager/res/values-az/strings.xml
+++ b/packages/CredentialManager/res/values-az/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"<xliff:g id="APP_NAME">%1$s</xliff:g> tÉtbiqinÉ daxil olmaq üçün giriÅ açarı yaradılsın?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"<xliff:g id="APP_NAME">%1$s</xliff:g> tÉtbiqinÉ daxil olmaq üçün parol yadda saxlansın?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün giriÅ mÉlumatları yadda saxlansın?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün giriÅ açarı yaratmaq mÉqsÉdilÉ ekran kilidi istifadÉ edilsin?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün parol yaratmaq mÉqsÉdilÉ ekran kilidi istifadÉ edilsin?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün giriÅ mÉlumatını yadda saxlamaq mÉqsÉdilÉ ekran kilidi istifadÉ edilsin?"</string>
<string name="passkey" msgid="632353688396759522">"açar"</string>
<string name="password" msgid="6738570945182936667">"parol"</string>
<string name="passkeys" msgid="5733880786866559847">"açarlar"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"ÆvvÉlki sÉhifÉyÉ qayıdın"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"BaÄlayın"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"İmtina edin"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün yadda saxlanmıŠgiriÅ açarı istifadÉ edilsin?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün yadda saxlanmıŠparol istifadÉ edilsin?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"<xliff:g id="APP_NAME">%1$s</xliff:g> tÉtbiqinÉ <xliff:g id="USERNAME">%2$s</xliff:g> ilÉ daxil olmaq üçün ekran kilidindÉn istifadÉ edin"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün giriÅ istifadÉ edilsin?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün giriÅ seçimlÉri kiliddÉn çıxarılsın?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün yadda saxlanılmıŠgiriÅ açarından istifadÉ edin"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün yadda saxlanılmıŠparoldan istifadÉ edin"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün hesabınızdan istifadÉ edin"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün giriÅ seçimlÉrini kiliddÉn çıxarın"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün yadda saxlanmıŠgiriÅ açarı seçin"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün yadda saxlanmıŠparol seçin"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün yadda saxlanmıŠgiriÅ seçin"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün giriÅ seçin"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün hesab seçin"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> üçün seçim edilsin?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"MÉlumat <xliff:g id="APP_NAME">%1$s</xliff:g> tÉtbiqindÉ istifadÉ edilsin?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"BaÅqa üsulla daxil olun"</string>
diff --git a/packages/CredentialManager/res/values-b+sr+Latn/strings.xml b/packages/CredentialManager/res/values-b+sr+Latn/strings.xml
index 23c021e..ddc8304 100644
--- a/packages/CredentialManager/res/values-b+sr+Latn/strings.xml
+++ b/packages/CredentialManager/res/values-b+sr+Latn/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Åœelite da napravite pristupni kljuÄ da biste se prijavili u <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"Åœelite da saÄuvate lozinku da biste se prijavili u <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Åœelite da saÄuvate podatke za prijavljivanje za: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Åœelite da koristite otkljuÄavanje ekrana da biste napravili pristupni kljuÄ za: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Åœelite da koristite otkljuÄavanje ekrana da biste napravili lozinku za: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Åœelite da koristite otkljuÄavanje ekrana da biste saÄuvali podatke za prijavljivanje za: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="passkey" msgid="632353688396759522">"pristupni kôd"</string>
<string name="password" msgid="6738570945182936667">"lozinka"</string>
<string name="passkeys" msgid="5733880786866559847">"pristupni kodovi"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Vratite se na prethodnu stranicu"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Zatvorite"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Odbaci"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Åœelite da koristite saÄuvani pristupni kôd za: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Åœelite da koristite saÄuvanu lozinku za: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Koristite otkljuÄavanje ekrana da biste se prijavili u <xliff:g id="APP_NAME">%1$s</xliff:g> kao <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Åœelite li da koristite svoje podatke za prijavljivanje za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Åœelite da otkljuÄate opcije prijavljivanja za: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Koristite saÄuvani pristupni kljuÄ za: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Koristite saÄuvanu lozinku za: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Koristite nalog za: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"OtkljuÄajte opcije prijavljivanja za: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Izaberite saÄuvan pristupni kljuÄ za: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Izaberite saÄuvanu lozinku za: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Izaberite saÄuvane podatke za prijavljivanje za: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Odaberite podatke za prijavljivanje za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Odaberite nalog za: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Åœelite da odaberete opciju za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Åœelite da koristite te podatke u aplikaciji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Prijavite se na drugi naÄin"</string>
diff --git a/packages/CredentialManager/res/values-be/strings.xml b/packages/CredentialManager/res/values-be/strings.xml
index 0b8ade7..c302ea2 100644
--- a/packages/CredentialManager/res/values-be/strings.xml
+++ b/packages/CredentialManager/res/values-be/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"СÑваÑÑÑÑ ÐºÐ»ÑÑ ÐŽÐŸÑÑÑÐ¿Ñ ÐŽÐ»Ñ ÑваÑ
ÐŸÐŽÑ Ñ Ð¿ÑагÑÐ°ÐŒÑ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"ÐаÑ
аваÑÑ Ð¿Ð°ÑÐŸÐ»Ñ ÐŽÐ»Ñ ÑваÑ
ÐŸÐŽÑ Ñ Ð¿ÑагÑÐ°ÐŒÑ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"ÐаÑ
аваÑÑ ÐŽÐ°ÐœÑÑ ÐŽÐ»Ñ ÑваÑ
ÐŸÐŽÑ Ñ Ð¿ÑагÑÐ°ÐŒÑ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"ÐÑкаÑÑÑÑаÑÑ ÑÑПЎак ÑазблакÑÑПÑÐºÑ ÑкÑаМа, каб ÑÑваÑÑÑÑ ÐºÐ»ÑÑ ÐŽÐŸÑÑÑÐ¿Ñ ÐŽÐ»Ñ Ð¿ÑагÑÐ°ÐŒÑ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"ÐÑкаÑÑÑÑаÑÑ ÑÑПЎак ÑазблакÑÑПÑÐºÑ ÑкÑаМа, каб ÑÑваÑÑÑÑ Ð¿Ð°ÑÐŸÐ»Ñ ÐŽÐ»Ñ Ð¿ÑагÑÐ°ÐŒÑ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"ÐÑкаÑÑÑÑаÑÑ ÑÑПЎак ÑазблакÑÑПÑÐºÑ ÑкÑаМа, каб заÑ
аваÑÑ ÐŽÐ°ÐœÑÑ ÐŽÐ»Ñ ÑваÑ
ÐŸÐŽÑ ÐŽÐ»Ñ Ð¿ÑагÑÐ°ÐŒÑ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string>
<string name="passkey" msgid="632353688396759522">"клÑÑ ÐŽÐŸÑÑÑпÑ"</string>
<string name="password" msgid="6738570945182936667">"паÑПлÑ"</string>
<string name="passkeys" msgid="5733880786866559847">"клÑÑÑ ÐŽÐŸÑÑÑпÑ"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"ÐÑÑМÑÑÑа Ўа папÑÑÑЎМÑй ÑÑаÑПМкÑ"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"ÐакÑÑÑÑ"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"ÐакÑÑÑÑ"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"СкаÑÑÑÑаÑÑ Ð·Ð°Ñ
Ð°Ð²Ð°ÐœÑ ÐºÐ»ÑÑ ÐŽÐŸÑÑÑÐ¿Ñ ÐŽÐ»Ñ Ð¿ÑагÑÐ°ÐŒÑ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"ÐÑкаÑÑÑÑПÑваÑÑ Ð¿Ð°ÑПлÑ, заÑ
Ð°Ð²Ð°ÐœÑ ÐŽÐ»Ñ Ð¿ÑагÑÐ°ÐŒÑ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"ÐÑкаÑÑÑÑайÑе ÑÑПЎак ÑазблакÑÑПÑÐºÑ ÑкÑаМа ÐŽÐ»Ñ ÑваÑ
ÐŸÐŽÑ Ñ Ð¿ÑагÑÐ°ÐŒÑ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" Ñк <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"СкаÑÑÑÑаÑÑ Ð²Ð°Ñ ÑпПÑаб ÑваÑ
ÐŸÐŽÑ ÐŽÐ»Ñ Ð¿ÑагÑÐ°ÐŒÑ <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"РазблакÑÑаваÑÑ Ð²Ð°ÑÑÑМÑÑ ÑваÑ
ÐŸÐŽÑ ÐŽÐ»Ñ Ð¿ÑагÑаЌÑ\"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"ÐÑкаÑÑÑÑайÑе заÑ
Ð°Ð²Ð°ÐœÑ ÐºÐ»ÑÑ ÐŽÐŸÑÑÑÐ¿Ñ ÐŽÐ»Ñ Ð¿ÑагÑÐ°ÐŒÑ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"ÐÑкаÑÑÑÑайÑе заÑ
Ð°Ð²Ð°ÐœÑ Ð¿Ð°ÑÐŸÐ»Ñ ÐŽÐ»Ñ Ð¿ÑагÑÐ°ÐŒÑ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"ÐÑкаÑÑÑÑайÑе ÑлÑÐºÐŸÐ²Ñ Ð·Ð°Ð¿ÑÑ ÐŽÐ»Ñ ÑваÑ
ÐŸÐŽÑ Ñ Ð¿ÑагÑÐ°ÐŒÑ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"РазблакÑÑÑйÑе ÑпПÑÐ°Ð±Ñ ÑваÑ
ÐŸÐŽÑ ÐŽÐ»Ñ Ð¿ÑагÑÐ°ÐŒÑ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"ÐÑбеÑÑÑе заÑ
Ð°Ð²Ð°ÐœÑ ÐºÐ»ÑÑ ÐŽÐŸÑÑÑÐ¿Ñ ÐŽÐ»Ñ Ð¿ÑагÑÐ°ÐŒÑ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"ÐÑбеÑÑÑе заÑ
Ð°Ð²Ð°ÐœÑ Ð¿Ð°ÑÐŸÐ»Ñ ÐŽÐ»Ñ Ð¿ÑагÑÐ°ÐŒÑ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"ÐÑбеÑÑÑе заÑ
Ð°Ð²Ð°ÐœÑ ÑпПÑаб ÑваÑ
ÐŸÐŽÑ ÐŽÐ»Ñ Ð¿ÑагÑÐ°ÐŒÑ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"ÐÑбеÑÑÑе ÑпПÑаб ÑваÑ
ÐŸÐŽÑ ÐŽÐ»Ñ Ð¿ÑагÑÐ°ÐŒÑ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"ÐÑбеÑÑÑе ÑлÑÐºÐŸÐ²Ñ Ð·Ð°Ð¿ÑÑ ÐŽÐ»Ñ Ð¿ÑагÑÐ°ÐŒÑ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"ÐÑбеÑÑÑе ÑлÑкПвÑÑ ÐŽÐ°ÐœÑÑ ÐŽÐ»Ñ ÑваÑ
ÐŸÐŽÑ Ñ Ð¿ÑагÑÐ°ÐŒÑ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"ÐÑкаÑÑÑÑПÑваÑÑ Ð³ÑÑÑÑ ÑМÑаÑЌаÑÑÑ ÐœÐ° пÑÑлаЎзе <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"УвайÑÑÑ ÑМÑÑÐŒ ÑпПÑабаЌ"</string>
diff --git a/packages/CredentialManager/res/values-bg/strings.xml b/packages/CredentialManager/res/values-bg/strings.xml
index 6a79b11..e97cc94 100644
--- a/packages/CredentialManager/res/values-bg/strings.xml
+++ b/packages/CredentialManager/res/values-bg/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"ÐÑкаÑе лО Ўа ÑÑзЎаЎеÑе клÑÑ Ð·Ð° ЎПÑÑÑп, Ñ ÐºÐŸÐ¹ÑП Ўа влОзаÑе в(Ñв) <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"ÐÑкаÑе лО Ўа запазОÑе паÑПлаÑа за влОзаМе в(Ñв) <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"ÐÑкаÑе лО Ўа запазОÑе ЎаММОÑе за вÑ
ПЎ за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"ÐÑкаÑе лО Ўа ОзпПлзваÑе ПпÑОÑÑа ÑО за заклÑÑваМе Ма екÑаМа, за Ўа ÑÑзЎаЎеÑе клÑÑ Ð·Ð° ЎПÑÑÑп за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"ÐÑкаÑе лО Ўа ОзпПлзваÑе ПпÑОÑÑа ÑО за заклÑÑваМе Ма екÑаМа, за Ўа ÑÑзЎаЎеÑе паÑПла за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"ÐÑкаÑе лО Ўа ОзпПлзваÑе ПпÑОÑÑа ÑО за заклÑÑваМе Ма екÑаМа, за Ўа запазОÑе ЎаММОÑе за вÑ
ПЎ за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="passkey" msgid="632353688396759522">"кПЎ за ЎПÑÑÑп"</string>
<string name="password" msgid="6738570945182936667">"паÑПла"</string>
<string name="passkeys" msgid="5733880786866559847">"клÑÑПве за ЎПÑÑÑп"</string>
@@ -71,15 +68,15 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"ÐазаЎ кÑÐŒ пÑеЎОÑМаÑа ÑÑÑаМОÑа"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"ÐаÑваÑÑМе"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"ÐÑÑ
вÑÑлÑМе"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Ðа Ñе ОзпПлзва лО запазеМОÑÑ Ð²Ðž кПЎ за ЎПÑÑÑп за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"ÐÑкаÑе лО Ўа ОзпПлзваÑе запазеМаÑа ÑО паÑПла за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"ÐзпПлзвайÑе ПпÑОÑÑа ÑО за заклÑÑваМе Ма екÑаМа, за Ўа влОзаÑе в(Ñв) <xliff:g id="APP_NAME">%1$s</xliff:g> Ñ Ð¿ÑПÑОла <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Ðа Ñе ÐžÐ·Ð¿ÐŸÐ»Ð·Ð²Ð°Ñ Ð»Ðž ваÑОÑе ЎаММО за вÑ
ПЎ за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"ÐÑкаÑе лО Ўа ПÑклÑÑОÑе ПпÑООÑе за влОзаМе в пÑПÑОла за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"ÐзпПлзваМе Ма Ð·Ð°Ð¿Ð°Ð·ÐµÐœÐžÑ Ð²Ðž клÑÑ Ð·Ð° ЎПÑÑÑп за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"ÐзпПлзваМе Ма запазеМаÑа вО паÑПла за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"ÐзпПлзваМе Ма пÑПÑОла вО за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_description_single_tap" msgid="2797059565126030879">"ÐзпПлзвайÑе ПпÑОÑÑа ÑО за заклÑÑваМе Ма екÑаМа, за Ўа влОзаÑе в(Ñв) <xliff:g id="APP_NAME">%1$s</xliff:g> Ñ Ð¿ÑПÑОла <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"ÐÑкаÑе лО Ўа ПÑклÑÑОÑе ПпÑООÑе за влОзаМе в пÑПÑОла за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"ÐзбеÑеÑе запазеМ клÑÑ Ð·Ð° ЎПÑÑÑп за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"ÐзбеÑеÑе запазеМа паÑПла за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"ÐзбеÑеÑе запазеМО ЎаММО за вÑ
ПЎ за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"ÐзбОÑаМе Ма ЎаММО за вÑ
ПЎ за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"ÐзбеÑеÑе пÑПÑОл за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"ÐÑкаÑе лО Ўа ОзбеÑеÑе ПпÑÐžÑ Ð·Ð° <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Ðа Ñе ОзпПлзва лО ÑазО ОМÑПÑЌаÑÐžÑ Ð·Ð° <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"ÐлОзаМе в пÑПÑОла пП ÐŽÑÑг МаÑОМ"</string>
diff --git a/packages/CredentialManager/res/values-bn/strings.xml b/packages/CredentialManager/res/values-bn/strings.xml
index 76fc0a7..46ec564 100644
--- a/packages/CredentialManager/res/values-bn/strings.xml
+++ b/packages/CredentialManager/res/values-bn/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"<xliff:g id="APP_NAME">%1$s</xliff:g> àŠ
à§àŠ¯àŠŸàŠªà§ àŠžàŠŸàŠàŠš-àŠàŠš àŠàŠ°àŠŸàŠ° àŠàŠšà§àН àŠªàŠŸàŠžàŠà§ àŠ€à§àŠ°àŠ¿ àŠàŠ°àŠ¬à§àŠš?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"<xliff:g id="APP_NAME">%1$s</xliff:g> àŠ
à§àŠ¯àŠŸàŠªà§ àŠžàŠŸàŠàŠš-àŠàŠš àŠàŠ°àŠŸàŠ° àŠàŠšà§àН àŠªàŠŸàŠžàŠàŠ¯àŠŒàŠŸàŠ°à§àŠ¡ àŠžà§àŠ àŠàŠ°àŠ¬à§àŠš?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"<xliff:g id="APP_NAME">%1$s</xliff:g> àŠ
à§àŠ¯àŠŸàŠªà§àа àŠàŠšà§àН àŠžàŠŸàŠàŠš-àŠàŠš àŠžàŠàŠà§àŠ°àŠŸàŠšà§àŠ€ àŠ€àŠ¥à§àН àŠžà§àŠ àŠàŠ°àŠ¬à§àŠš?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"<xliff:g id="APP_NAME">%1$s</xliff:g> àŠ
à§àŠ¯àŠŸàŠªà§àа àŠàŠšà§àН àŠªàŠŸàŠžàŠà§ àŠ€à§àŠ°àŠ¿ àŠàŠ°àŠ€à§ àŠàŠªàŠšàŠŸàŠ° àŠžà§àŠà§àŠ°àŠ¿àŠš àŠ²àŠ àŠ¬à§àŠ¯àŠ¬àŠ¹àŠŸàŠ° àŠàŠ°àŠ€à§ àŠàŠŸàŠš?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"<xliff:g id="APP_NAME">%1$s</xliff:g> àŠ
à§àŠ¯àŠŸàŠªà§àа àŠàŠšà§àН àŠªàŠŸàŠžàŠàŠ¯àŠŒàŠŸàŠ°à§àŠ¡ àŠ€à§àŠ°àŠ¿ àŠàŠ°àŠ€à§ àŠàŠªàŠšàŠŸàŠ° àŠžà§àŠà§àŠ°àŠ¿àŠš àŠ²àŠ àŠ¬à§àŠ¯àŠ¬àŠ¹àŠŸàŠ° àŠàŠ°àŠ€à§ àŠàŠŸàŠš?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"<xliff:g id="APP_NAME">%1$s</xliff:g> àŠ
à§àŠ¯àŠŸàŠªà§àа àŠàŠšà§àН àŠžàŠŸàŠàŠš-àŠàŠš àŠžàŠàŠà§àŠ°àŠŸàŠšà§àŠ€ àŠ€àŠ¥à§àН àŠžà§àŠ àŠàŠ°àŠ€à§ àŠàŠªàŠšàŠŸàŠ° àŠžà§àŠà§àŠ°àŠ¿àŠš àŠ²àŠ àŠ¬à§àŠ¯àŠ¬àŠ¹àŠŸàŠ° àŠàŠ°àŠ€à§ àŠàŠŸàŠš?"</string>
<string name="passkey" msgid="632353688396759522">"àŠªàŠŸàŠžàŠà§"</string>
<string name="password" msgid="6738570945182936667">"àŠªàŠŸàŠžàŠàŠ¯àŠŒàŠŸàŠ°à§àŠ¡"</string>
<string name="passkeys" msgid="5733880786866559847">"àŠªàŠŸàŠžàŠà§"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"àŠàŠà§àа àŠªà§àŠ·à§àŠ àŠŸàŠ¯àŠŒ àŠ«àŠ¿àŠ°à§ àŠ¯àŠŸàŠš"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"àŠ¬àŠšà§àЧ àŠàаà§àŠš"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"àŠ¬àŠŸàŠ€àŠ¿àŠ² àŠàаà§àŠš"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g>-àŠàа àŠàŠšà§àН àŠàŠªàŠšàŠŸàŠ° àŠžà§àŠ àŠàŠ°àŠŸ àŠªàŠŸàŠžàŠà§ àŠ¬à§àŠ¯àŠ¬àŠ¹àŠŸàŠ° àŠàŠ°àŠ¬à§àŠš?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"àŠàŠªàŠšàŠŸàŠ° àŠžà§àŠ àŠàŠ°àŠŸ àŠªàŠŸàŠžàŠàŠ¯àŠŒàŠŸàŠ°à§àŠ¡ <xliff:g id="APP_NAME">%1$s</xliff:g>-àŠàа àŠàŠšà§àН àŠ¬à§àŠ¯àŠ¬àŠ¹àŠŸàŠ° àŠàŠ°àŠ¬à§àŠš?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"àŠàŠªàŠšàŠŸàŠ° àŠžà§àŠà§àŠ°àŠ¿àŠš àŠ²àŠ àŠ¬à§àŠ¯àŠ¬àŠ¹àŠŸàŠ° àŠàŠ°à§ <xliff:g id="USERNAME">%2$s</xliff:g>-àŠàа àŠ®àŠŸàŠ§à§àŠ¯àŠ®à§ <xliff:g id="APP_NAME">%1$s</xliff:g> àŠ
à§àŠ¯àŠŸàŠªà§ àŠžàŠŸàŠàŠš-àŠàŠš àŠàаà§àŠš"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g>-àŠàа àŠàŠšà§àН àŠàŠªàŠšàŠŸàŠ° àŠžàŠŸàŠàŠš-àŠàŠš àŠà§àаà§àŠ¡à§àŠšàŠ¶àŠ¿àŠ¯àŠŒàŠŸàŠ² àŠ¬à§àŠ¯àŠ¬àŠ¹àŠŸàŠ° àŠàŠ°àŠ¬à§àŠš?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g>-àŠàа àŠàŠšà§àН àŠžàŠŸàŠàŠš-àŠàŠš àŠàŠ°àŠŸàŠ° àŠ¬àŠ¿àŠàвà§àŠª àŠàŠšàŠ²àŠ àŠàŠ°àŠ€à§ àŠàŠŸàŠš?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"<xliff:g id="APP_NAME">%1$s</xliff:g>-àŠàа àŠàŠšà§àН àŠàŠªàŠšàŠŸàŠ° àŠžà§àŠ àŠàŠ°àŠŸ àŠªàŠŸàŠžàŠà§ àŠ¬à§àŠ¯àŠ¬àŠ¹àŠŸàŠ° àŠàаà§àŠš"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"<xliff:g id="APP_NAME">%1$s</xliff:g>-àŠàа àŠàŠšà§àН àŠàŠªàŠšàŠŸàŠ° àŠžà§àŠ àŠàŠ°àŠŸ àŠªàŠŸàŠžàŠàŠ¯àŠŒàŠŸàŠ°à§àŠ¡ àŠ¬à§àŠ¯àŠ¬àŠ¹àŠŸàŠ° àŠàаà§àŠš"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"<xliff:g id="APP_NAME">%1$s</xliff:g>-àŠàа àŠàŠšà§àН àŠàŠªàŠšàŠŸàŠ° àŠ
à§àŠ¯àŠŸàŠàŠŸàŠàŠšà§àŠ àŠ¬à§àŠ¯àŠ¬àŠ¹àŠŸàŠ° àŠàаà§àŠš"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g>-àŠàа àŠàŠšà§àН àŠžàŠŸàŠàŠš-àŠàŠš àŠàŠ°àŠŸàŠ° àŠ¬àŠ¿àŠàвà§àŠªàŠà§àŠ²àŠ¿ àŠàŠšàŠ²àŠ àŠàаà§àŠš"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g>-àŠàа àŠàŠšà§àН àŠžà§àŠ àŠàŠ°àŠŸ àŠªàŠŸàŠžàŠà§ àŠ¬à§àŠà§ àŠšàŠ¿àŠš"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g>-àŠàа àŠàŠšà§àН àŠžà§àŠ àŠàŠ°àŠŸ àŠªàŠŸàŠžàŠà§ àŠ¬à§àŠà§ àŠšàŠ¿àŠš"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g>-àŠàа àŠàŠšà§àН àŠžà§àŠ àŠàŠ°àŠŸ àŠà§àаà§àŠ¡à§àŠšàŠ¶àŠ¿àŠ¯àŠŒàŠŸàŠ² àŠ¬à§àŠà§ àŠšàŠ¿àŠš"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g>-àŠàа àŠàŠšà§àН àŠžàŠŸàŠàŠš-àŠàŠš àŠà§àаà§àŠ¡à§àŠšàŠ¶àŠ¿àŠ¯àŠŒàŠŸàŠ² àŠ¬à§àŠà§ àŠšàŠ¿àŠš"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g>-àŠàа àŠàŠšà§àН àŠàŠàŠàŠ¿ àŠ
à§àŠ¯àŠŸàŠàŠŸàŠàŠšà§àŠ àŠ¬à§àŠà§ àŠšàŠ¿àŠš"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g>-àŠàа àŠàŠšà§àН àŠ¬àŠ¿àŠàвà§àŠª àŠ¬à§àŠà§ àŠšà§àЬà§àŠš?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g>-àŠ àŠžàŠŸàŠàŠš-àŠàŠš àŠàŠ°àŠ€à§ àŠàŠ àŠ€àŠ¥à§àН àŠ¬à§àŠ¯àŠ¬àŠ¹àŠŸàŠ° àŠàŠ°àŠ¬à§àŠš?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"àŠ
àŠšà§àНàŠàŠŸàŠ¬à§ àŠžàŠŸàŠàŠš-àŠàŠš àŠàаà§àŠš"</string>
diff --git a/packages/CredentialManager/res/values-bs/strings.xml b/packages/CredentialManager/res/values-bs/strings.xml
index 6d3a676..23ed34c1 100644
--- a/packages/CredentialManager/res/values-bs/strings.xml
+++ b/packages/CredentialManager/res/values-bs/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Kreirati pristupni kljuÄ da se prijavite u aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"SaÄuvati lozinku da se prijavite u aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"SaÄuvati podatke za prijavu u aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Koristiti zakljuÄavanje ekrana da kreirate pristupni kljuÄ za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Koristiti zakljuÄavanje ekrana da kreirate lozinku za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Koristiti zakljuÄavanje ekrana da saÄuvate podatke za prijavu za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="passkey" msgid="632353688396759522">"pristupni kljuÄ"</string>
<string name="password" msgid="6738570945182936667">"lozinka"</string>
<string name="passkeys" msgid="5733880786866559847">"pristupni kljuÄevi"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Povratak na prethodnu stranicu"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Zatvaranje"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Odbacivanje"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Koristiti saÄuvani pristupni kljuÄ za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Koristiti saÄuvanu lozinku za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Koristite zakljuÄavanje ekrana da se prijavite u aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g> s korisniÄkim imenom <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Koristiti prijavu za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"OtkljuÄati opcije prijave za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Koristite saÄuvani pristupni kljuÄ za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Koristite saÄuvanu lozinku za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Koristite raÄun za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"OtkljuÄajte naÄine prijave za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Odaberite saÄuvani pristupni kljuÄ za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Odaberite saÄuvanu lozinku za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Odaberite saÄuvanu prijavu za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Odaberite prijavu za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Odaberite raÄun za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Odabrati opciju za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Koristiti ove informacije u aplikaciji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Prijavite se na drugi naÄin"</string>
diff --git a/packages/CredentialManager/res/values-ca/strings.xml b/packages/CredentialManager/res/values-ca/strings.xml
index 28762e7..0f96a9c 100644
--- a/packages/CredentialManager/res/values-ca/strings.xml
+++ b/packages/CredentialManager/res/values-ca/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Vols crear una clau d\'accés per iniciar la sessió a <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"Vols desar la contrasenya per iniciar la sessió a <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Vols desar la informació d\'inici de sessió per a <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Vols fer servir el bloqueig de pantalla per crear una clau d\'accés per a <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Vols fer servir el bloqueig de pantalla per crear una contrasenya per a <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Vols fer servir el bloqueig de pantalla per desar la informació d\'inici de sessió de <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="passkey" msgid="632353688396759522">"clau d\'accés"</string>
<string name="password" msgid="6738570945182936667">"contrasenya"</string>
<string name="passkeys" msgid="5733880786866559847">"claus d\'accés"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Torna a la pàgina anterior"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Tanca"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Ignora"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Vols utilitzar la clau d\'accés desada per a <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Vols utilitzar la contrasenya desada per a <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Utilitza el bloqueig de pantalla per iniciar sessió a <xliff:g id="APP_NAME">%1$s</xliff:g> amb <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Vols utilitzar el teu inici de sessió per a <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Vols desbloquejar les opcions d\'inici de sessió per a <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Utilitza la clau d\'accés desada per a <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Utilitza la contrasenya desada per a <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Utilitza el teu compte per a <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Desbloqueja les opcions d\'inici de sessió per a <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Tria una clau d\'accés desada per a <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Tria una clau d\'accés desada per a <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Tria un inici de sessió desat per a <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Tria un inici de sessió per a <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Selecciona un compte per a <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Vols triar una opció per a <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Vols utilitzar aquesta informació a <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Inicia la sessió d\'una altra manera"</string>
diff --git a/packages/CredentialManager/res/values-cs/strings.xml b/packages/CredentialManager/res/values-cs/strings.xml
index a3ff390..64f52cd 100644
--- a/packages/CredentialManager/res/values-cs/strings.xml
+++ b/packages/CredentialManager/res/values-cs/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"VytvoÅit pÅístupový klíÄ k pÅihlašování do aplikace <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"UloÅŸit heslo k pÅihlašování do aplikace <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"UloÅŸit pÅihlašovací údaje pro aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Chcete pomocí zámku obrazovky vytvoÅit pÅístupový klíÄ pro aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Chcete pomocí zámku obrazovky vytvoÅit heslo pro aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Chcete pomocí zámku obrazovky uloÅŸit pÅihlašovací údaje pro aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="passkey" msgid="632353688396759522">"pÅístupový klíÄ"</string>
<string name="password" msgid="6738570945182936667">"heslo"</string>
<string name="passkeys" msgid="5733880786866559847">"pÅístupové klíÄe"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"ZpÄt na pÅedchozí stránku"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"ZavÅít"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"ZavÅít"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"PouÅŸít uloÅŸený pÅístupový klíÄ pro aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"PouÅŸít pro aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g> uloÅŸené heslo?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"PÅihlašovat se do aplikace <xliff:g id="APP_NAME">%1$s</xliff:g> uÅŸivatelským jménem <xliff:g id="USERNAME">%2$s</xliff:g> pomocí zámku obrazovky"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"PouÅŸít pÅihlášení pro <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Odemknout moÅŸnosti pÅihlášení pro aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"PouÅŸijte pro aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g> uloÅŸený pÅístupový klíÄ"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"PouÅŸijte pro aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g> uloÅŸené heslo"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"PouÅŸijte pro aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g> svůj úÄet"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"OdemknÄte moÅŸnosti pÅihlášení pro aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Vyberte uloÅŸený pÅístupový klíÄ pro aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Vyberte uloÅŸené heslo pro aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Vyberte uloÅŸené pÅihlášení pro aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Vyberte pÅihlášení pro <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Vyberte úÄet pro aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Vybrat moÅŸnost pro aplikaci <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"PouÅŸít tyto informace na <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"PÅihlásit se jinak"</string>
diff --git a/packages/CredentialManager/res/values-da/strings.xml b/packages/CredentialManager/res/values-da/strings.xml
index b61b81c..14e68a1 100644
--- a/packages/CredentialManager/res/values-da/strings.xml
+++ b/packages/CredentialManager/res/values-da/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Vil du oprette en adgangsnøgle for at logge ind på <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"Vil du gemme adgangskoden for at logge ind på <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Vil du gemme loginoplysningerne til <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Vil du bruge din skærmlås til at oprette en adgangsnøgle til <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Vil du bruge din skærmlås til at oprette en adgangskode til <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Vil du bruge din skærmlås til at gemme loginoplysningerne til <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="passkey" msgid="632353688396759522">"adgangsnøgle"</string>
<string name="password" msgid="6738570945182936667">"adgangskode"</string>
<string name="passkeys" msgid="5733880786866559847">"adgangsnøgler"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Gå tilbage til den forrige side"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Luk"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Luk"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Vil du bruge din gemte adgangsnøgle til <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Vil du bruge din gemte adgangskode til <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Brug din skærmlås til at logge ind på <xliff:g id="APP_NAME">%1$s</xliff:g> med <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Vil du bruge dine loginoplysninger til <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Vil du låse enheden op for at se loginmetoder for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Brug din gemte adgangsnøgle til <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Brug din gemte adgangskode til <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Brug din konto til <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Lås loginmetoder for <xliff:g id="APP_NAME">%1$s</xliff:g> op"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Vælg en gemt adgangsnøgle til <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Vælg en gemt adgangskode til <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Vælg en gemt loginmetode til <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Vælg loginoplysninger til <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Vælg en konto til <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Vil du vælge en mulighed for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Vil du bruge disse oplysninger i <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Log ind på en anden måde"</string>
diff --git a/packages/CredentialManager/res/values-de/strings.xml b/packages/CredentialManager/res/values-de/strings.xml
index 9897443..fbcdc94 100644
--- a/packages/CredentialManager/res/values-de/strings.xml
+++ b/packages/CredentialManager/res/values-de/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Passkey zur Anmeldung in <xliff:g id="APP_NAME">%1$s</xliff:g> erstellen?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"Passwort zur Anmeldung in <xliff:g id="APP_NAME">%1$s</xliff:g> speichern?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Anmeldedaten für <xliff:g id="APP_NAME">%1$s</xliff:g> speichern?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Displaysperre verwenden, um einen Passkey für <xliff:g id="APP_NAME">%1$s</xliff:g> zu erstellen?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Displaysperre verwenden, um ein Passwort für <xliff:g id="APP_NAME">%1$s</xliff:g> zu erstellen?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Displaysperre verwenden, um Anmeldedaten für <xliff:g id="APP_NAME">%1$s</xliff:g> zu speichern?"</string>
<string name="passkey" msgid="632353688396759522">"Passkey"</string>
<string name="password" msgid="6738570945182936667">"Passwort"</string>
<string name="passkeys" msgid="5733880786866559847">"Passkeys"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Zurück zur vorherigen Seite"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Schließen"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Schließen"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Gespeicherten Passkey für <xliff:g id="APP_NAME">%1$s</xliff:g> verwenden?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Soll dein gespeichertes Passwort für <xliff:g id="APP_NAME">%1$s</xliff:g> verwendet werden?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Du kannst die Displaysperre verwenden, um dich in <xliff:g id="APP_NAME">%1$s</xliff:g> als <xliff:g id="USERNAME">%2$s</xliff:g> anzumelden"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Anmeldedaten für <xliff:g id="APP_NAME">%1$s</xliff:g> verwenden?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Anmeldeoptionen für <xliff:g id="APP_NAME">%1$s</xliff:g> freischalten?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Gespeicherten Passkey für <xliff:g id="APP_NAME">%1$s</xliff:g> verwenden"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Gespeichertes Passwort für <xliff:g id="APP_NAME">%1$s</xliff:g> verwenden"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Dein Konto für <xliff:g id="APP_NAME">%1$s</xliff:g> verwenden"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Anmeldeoptionen für <xliff:g id="APP_NAME">%1$s</xliff:g> freischalten"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Einen gespeicherten Passkey für <xliff:g id="APP_NAME">%1$s</xliff:g> auswählen"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Ein gespeichertes Passwort für <xliff:g id="APP_NAME">%1$s</xliff:g> auswählen"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Gespeicherte Anmeldedaten für <xliff:g id="APP_NAME">%1$s</xliff:g> auswählen"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Anmeldedaten für <xliff:g id="APP_NAME">%1$s</xliff:g> auswählen"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Konto für <xliff:g id="APP_NAME">%1$s</xliff:g> auswählen"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Option für <xliff:g id="APP_NAME">%1$s</xliff:g> auswählen?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Diese Infos für <xliff:g id="APP_NAME">%1$s</xliff:g> verwenden?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Andere Anmeldeoption auswählen"</string>
diff --git a/packages/CredentialManager/res/values-el/strings.xml b/packages/CredentialManager/res/values-el/strings.xml
index b1c3506..2f3aa0b 100644
--- a/packages/CredentialManager/res/values-el/strings.xml
+++ b/packages/CredentialManager/res/values-el/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Δημιουργία κλειδιοÏ πρÏσβασης για σÏνδεση στην εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>;"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"Αποθήκευση κωδικοÏ πρÏσβασης για σÏνδεση στην εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>;"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Αποθήκευση πληροφοριÏν σÏνδεσης για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>;"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"ΘÎλετε να χρησιμοποιήσετε το κλείδωμα οθÏνης για τη δημιουργία ενÏς κλειδιοÏ πρÏσβασης για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>;"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"ΘÎλετε να χρησιμοποιήσετε το κλείδωμα οθÏνης για τη δημιουργία ενÏς κωδικοÏ πρÏσβασης για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>;"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"ΘÎλετε να χρησιμοποιήσετε το κλείδωμα οθÏνης για την αποθήκευση πληροφοριÏν σÏνδεσης για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>;"</string>
<string name="passkey" msgid="632353688396759522">"κλειδί πρÏσβασης"</string>
<string name="password" msgid="6738570945182936667">"κωδικÏς πρÏσβασης"</string>
<string name="passkeys" msgid="5733880786866559847">"κλειδιά πρÏσβασης"</string>
@@ -71,15 +68,15 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Επιστροφή στην προηγοÏμενη σελίδα"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Κλείσιμο"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Παράβλεψη"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Να χρησιμοποιηθεί το αποθηκευμÎνο κλειδί πρÏσβασης για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>;"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Χρήση του αποθηκευμÎνου κωδικοÏ πρÏσβασης για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>;"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Χρησιμοποιήστε το κλείδωμα οθÏνης για να συνδεθείτε στην εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> με το Ïνομα χρήστη <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Χρήση της σÏνδεσής σας για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>;"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Ξεκλείδωμα των επιλογÏν σÏνδεσης για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>;"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Χρήση του αποθηκευμÎνου κλειδιοÏ πρÏσβασης για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Χρήση του αποθηκευμÎνου κωδικοÏ πρÏσβασης για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Χρήση του λογαριασμοÏ για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_description_single_tap" msgid="2797059565126030879">"Χρησιμοποιήστε το κλείδωμα οθÏνης για να συνδεθείτε στην εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g> με το Ïνομα χρήστη <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Ξεκλείδωμα των επιλογÏν σÏνδεσης για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Επιλογή αποθηκευμÎνου κλειδιοÏ πρÏσβασης για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Επιλογή αποθηκευμÎνου κωδικοÏ πρÏσβασης για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Επιλογή αποθηκευμÎνων στοιχείων σÏνδεσης για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"ΕπιλÎξτε μια σÏνδεση για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Επιλογή ενÏς λογαριασμοÏ για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Επιλογή ενÎργειας για την εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>;"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Να χρησιμοποιηθοÏν αυτÎς οι πληροφορίες στην εφαρμογή <xliff:g id="APP_NAME">%1$s</xliff:g>;"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"ΣÏνδεση με άλλον τρÏπο"</string>
diff --git a/packages/CredentialManager/res/values-en-rAU/strings.xml b/packages/CredentialManager/res/values-en-rAU/strings.xml
index 1afd5f6..d94c6e1 100644
--- a/packages/CredentialManager/res/values-en-rAU/strings.xml
+++ b/packages/CredentialManager/res/values-en-rAU/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Create passkey to sign in to <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"Save password to sign in to <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Save sign-in info for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Use your screen lock to create a passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Use your screen lock to create a password for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Use your screen lock to save sign-in info for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="passkey" msgid="632353688396759522">"passkey"</string>
<string name="password" msgid="6738570945182936667">"password"</string>
<string name="passkeys" msgid="5733880786866559847">"passkeys"</string>
@@ -71,15 +68,15 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Go back to the previous page"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Close"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Dismiss"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Use your saved passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Use your saved password for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Use your screen lock to sign in to <xliff:g id="APP_NAME">%1$s</xliff:g> with <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Use your sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Unlock sign-in options for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Use your saved passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Use your saved password for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Use your account for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_description_single_tap" msgid="2797059565126030879">"Use your screen lock to sign in to <xliff:g id="APP_NAME">%1$s</xliff:g> with <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Unlock sign-in options for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Choose a saved passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Choose a saved password for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Choose a saved sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Choose a sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Choose an account for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Choose an option for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Use this info for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Sign in another way"</string>
diff --git a/packages/CredentialManager/res/values-en-rCA/strings.xml b/packages/CredentialManager/res/values-en-rCA/strings.xml
index 3fb3d55..f5cb357 100644
--- a/packages/CredentialManager/res/values-en-rCA/strings.xml
+++ b/packages/CredentialManager/res/values-en-rCA/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Create passkey to sign in to <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"Save password to sign in to <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Save sign-in info for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Use your screen lock to create a passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Use your screen lock to create a password for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Use your screen lock to save sign in info for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="passkey" msgid="632353688396759522">"passkey"</string>
<string name="password" msgid="6738570945182936667">"password"</string>
<string name="passkeys" msgid="5733880786866559847">"passkeys"</string>
@@ -71,15 +68,15 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Go back to the previous page"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Close"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Dismiss"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Use your saved passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Use your saved password for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Use your screen lock to sign in to <xliff:g id="APP_NAME">%1$s</xliff:g> with <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Use your sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Unlock sign-in options for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Use your saved passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Use your saved password for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Use your account for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_description_single_tap" msgid="2797059565126030879">"Use your screen lock to sign in to <xliff:g id="APP_NAME">%1$s</xliff:g> with <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Unlock sign-in options for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Choose a saved passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Choose a saved password for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Choose a saved sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Choose a sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Choose an account for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Choose an option for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Use this info on <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Sign in another way"</string>
diff --git a/packages/CredentialManager/res/values-en-rGB/strings.xml b/packages/CredentialManager/res/values-en-rGB/strings.xml
index 1afd5f6..d94c6e1 100644
--- a/packages/CredentialManager/res/values-en-rGB/strings.xml
+++ b/packages/CredentialManager/res/values-en-rGB/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Create passkey to sign in to <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"Save password to sign in to <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Save sign-in info for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Use your screen lock to create a passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Use your screen lock to create a password for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Use your screen lock to save sign-in info for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="passkey" msgid="632353688396759522">"passkey"</string>
<string name="password" msgid="6738570945182936667">"password"</string>
<string name="passkeys" msgid="5733880786866559847">"passkeys"</string>
@@ -71,15 +68,15 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Go back to the previous page"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Close"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Dismiss"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Use your saved passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Use your saved password for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Use your screen lock to sign in to <xliff:g id="APP_NAME">%1$s</xliff:g> with <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Use your sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Unlock sign-in options for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Use your saved passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Use your saved password for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Use your account for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_description_single_tap" msgid="2797059565126030879">"Use your screen lock to sign in to <xliff:g id="APP_NAME">%1$s</xliff:g> with <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Unlock sign-in options for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Choose a saved passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Choose a saved password for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Choose a saved sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Choose a sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Choose an account for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Choose an option for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Use this info for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Sign in another way"</string>
diff --git a/packages/CredentialManager/res/values-en-rIN/strings.xml b/packages/CredentialManager/res/values-en-rIN/strings.xml
index 1afd5f6..d94c6e1 100644
--- a/packages/CredentialManager/res/values-en-rIN/strings.xml
+++ b/packages/CredentialManager/res/values-en-rIN/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Create passkey to sign in to <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"Save password to sign in to <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Save sign-in info for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Use your screen lock to create a passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Use your screen lock to create a password for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Use your screen lock to save sign-in info for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="passkey" msgid="632353688396759522">"passkey"</string>
<string name="password" msgid="6738570945182936667">"password"</string>
<string name="passkeys" msgid="5733880786866559847">"passkeys"</string>
@@ -71,15 +68,15 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Go back to the previous page"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Close"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Dismiss"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Use your saved passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Use your saved password for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Use your screen lock to sign in to <xliff:g id="APP_NAME">%1$s</xliff:g> with <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Use your sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Unlock sign-in options for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Use your saved passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Use your saved password for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Use your account for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_description_single_tap" msgid="2797059565126030879">"Use your screen lock to sign in to <xliff:g id="APP_NAME">%1$s</xliff:g> with <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Unlock sign-in options for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Choose a saved passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Choose a saved password for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Choose a saved sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Choose a sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Choose an account for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Choose an option for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Use this info for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Sign in another way"</string>
diff --git a/packages/CredentialManager/res/values-en-rXC/strings.xml b/packages/CredentialManager/res/values-en-rXC/strings.xml
index b642c87..9841f19 100644
--- a/packages/CredentialManager/res/values-en-rXC/strings.xml
+++ b/packages/CredentialManager/res/values-en-rXC/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Create passkey to sign in to <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"Save password to sign in to <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Save sign-in info for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Use your screen lock to create a passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Use your screen lock to create a password for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Use your screen lock to save sign in info for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="passkey" msgid="632353688396759522">"passkey"</string>
<string name="password" msgid="6738570945182936667">"password"</string>
<string name="passkeys" msgid="5733880786866559847">"passkeys"</string>
@@ -71,15 +68,15 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Go back to the previous page"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Close"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Dismiss"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Use your saved passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Use your saved password for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Use your screen lock to sign in to <xliff:g id="APP_NAME">%1$s</xliff:g> with <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Use your sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Unlock sign-in options for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Use your saved passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Use your saved password for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Use your account for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_description_single_tap" msgid="2797059565126030879">"Use your screen lock to sign in to <xliff:g id="APP_NAME">%1$s</xliff:g> with <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Unlock sign-in options for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Choose a saved passkey for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Choose a saved password for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Choose a saved sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Choose a sign-in for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Choose an account for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Choose an option for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Use this info on <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Sign in another way"</string>
diff --git a/packages/CredentialManager/res/values-es-rUS/strings.xml b/packages/CredentialManager/res/values-es-rUS/strings.xml
index e007ab7..2a190a4 100644
--- a/packages/CredentialManager/res/values-es-rUS/strings.xml
+++ b/packages/CredentialManager/res/values-es-rUS/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"¿Quieres crear una llave de acceso para acceder a <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"¿Quieres guardar la contraseña para acceder a <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"¿Quieres guardar la información de acceso para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"¿Quieres usar el bloqueo de pantalla para crear una llave de acceso para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"¿Quieres usar el bloqueo de pantalla para crear una contraseña para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"¿Quieres usar el bloqueo de pantalla para guardar la información de acceso para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="passkey" msgid="632353688396759522">"llave de acceso"</string>
<string name="password" msgid="6738570945182936667">"contraseña"</string>
<string name="passkeys" msgid="5733880786866559847">"llaves de acceso"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Volver a la página anterior"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Cerrar"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Descartar"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"¿Quieres usar tu llave de acceso guardada para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"¿Quieres usar la contraseña guardada para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Usar el bloqueo de pantalla para acceder a <xliff:g id="APP_NAME">%1$s</xliff:g> con <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"¿Quieres usar tu acceso para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"¿Quieres desbloquear las opciones de acceso para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Usar la llave de acceso guardada para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Usar la contraseña guardada para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Usar tu cuenta para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Desbloquear las opciones para acceder para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Elige una llave de acceso guardada para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Elige una contraseña guardada para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Elige un acceso guardado para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Elige un acceso para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Elige una cuenta para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"¿Quieres una opción para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"¿Quieres usar esta información en <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Acceder de otra forma"</string>
diff --git a/packages/CredentialManager/res/values-es/strings.xml b/packages/CredentialManager/res/values-es/strings.xml
index e82f331..ef54dcb 100644
--- a/packages/CredentialManager/res/values-es/strings.xml
+++ b/packages/CredentialManager/res/values-es/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"¿Crear llave de acceso para iniciar sesión en <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"¿Guardar contraseña para iniciar sesión en <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"¿Guardar la información de inicio de sesión de <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"¿Usar tu bloqueo de pantalla para crear una llave de acceso para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"¿Usar tu bloqueo de pantalla para crear una contraseña para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"¿Usar tu bloqueo de pantalla para guardar tu información de inicio de sesión para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="passkey" msgid="632353688396759522">"llave de acceso"</string>
<string name="password" msgid="6738570945182936667">"contraseña"</string>
<string name="passkeys" msgid="5733880786866559847">"llaves de acceso"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Volver a la página anterior"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Cerrar"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Cerrar"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"¿Usar la llave de acceso guardada para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"¿Usar la contraseña que tienes guardada para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Usa tu bloqueo de pantalla para iniciar sesión en <xliff:g id="APP_NAME">%1$s</xliff:g> con el usuario <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"¿Usar tu inicio de sesión en <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"¿Desbloquear las opciones de inicio de sesión de <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Usa la llave de acceso guardada para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Usa la contraseña que tienes guardada para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Usa tu cuenta para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Desbloquea las opciones de inicio de sesión para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Elige una llave de acceso guardada para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Elige una contraseña guardada para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Elige un inicio de sesión guardado para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Elige un inicio de sesión para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Elige la cuenta que usar en <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"¿Elegir una opción para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"¿Usar esta información en <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Iniciar sesión de otra manera"</string>
diff --git a/packages/CredentialManager/res/values-et/strings.xml b/packages/CredentialManager/res/values-et/strings.xml
index a4c3438..582a0d0 100644
--- a/packages/CredentialManager/res/values-et/strings.xml
+++ b/packages/CredentialManager/res/values-et/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Kas luua rakendusse <xliff:g id="APP_NAME">%1$s</xliff:g> sisselogimiseks pääsuvõti?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"Kas salvestada rakendusse <xliff:g id="APP_NAME">%1$s</xliff:g> sisselogimiseks parool?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Kas salvestada rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> jaoks sisselogimisteave?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Kas kasutada ekraanilukku, et luua rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> jaoks pääsuvõti?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Kas kasutada ekraanilukku, et luua rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> jaoks parool?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Kas kasutada ekraanilukku, et salvestada rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> jaoks sisselogimisteave?"</string>
<string name="passkey" msgid="632353688396759522">"pääsuvõti"</string>
<string name="password" msgid="6738570945182936667">"parool"</string>
<string name="passkeys" msgid="5733880786866559847">"pääsuvõtmed"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Minge tagasi eelmisele lehele"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Sule"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Loobu"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Kas kasutada rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> jaoks salvestatud pääsuvõtit?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Kas kasutada rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> puhul salvestatud parooli?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Kasutage rakendusse <xliff:g id="APP_NAME">%1$s</xliff:g> kasutajanimega <xliff:g id="USERNAME">%2$s</xliff:g> sisselogimiseks ekraanilukku"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Kas soovite rakendusse <xliff:g id="APP_NAME">%1$s</xliff:g> sisselogimiseks kasutada oma mandaati?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Kas avada rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> jaoks sisselogimisvalikud?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Kasutage rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> jaoks salvestatud pääsuvõtit"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Kasutage rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> jaoks salvestatud parooli"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Kasutage rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> jaoks kontot"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Avage rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> jaoks sisselogimisviisid"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Valige rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> jaoks salvestatud pääsuvõti"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Valige rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> jaoks salvestatud parool"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Valige rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> jaoks salvestatud sisselogimisandmed"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Valige rakendusse <xliff:g id="APP_NAME">%1$s</xliff:g> sisselogimiseks mandaat"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Valige rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> jaoks konto"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Kas teha valik rakendusele <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Kas soovite kasutada seda teavet rakenduses <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Logige sisse muul viisil"</string>
diff --git a/packages/CredentialManager/res/values-eu/strings.xml b/packages/CredentialManager/res/values-eu/strings.xml
index 2f62ba3..4edf87d 100644
--- a/packages/CredentialManager/res/values-eu/strings.xml
+++ b/packages/CredentialManager/res/values-eu/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioan saioa hasteko sarbide-gako bat sortu nahi duzu?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioan saioa hasteko pasahitza gorde nahi duzu?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioan saioa hasteko informazioa gorde nahi duzu?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Pantailaren blokeoa erabili nahi duzu <xliff:g id="APP_NAME">%1$s</xliff:g> aplikaziorako sarbide-gako bat sortzeko?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Pantailaren blokeoa erabili nahi duzu <xliff:g id="APP_NAME">%1$s</xliff:g> aplikaziorako pasahitz bat sortzeko?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Pantailaren blokeoa erabili nahi duzu <xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioan saioa hasteko informazioa gordetzeko?"</string>
<string name="passkey" msgid="632353688396759522">"sarbide-gakoa"</string>
<string name="password" msgid="6738570945182936667">"pasahitza"</string>
<string name="passkeys" msgid="5733880786866559847">"sarbide-gakoak"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Itzuli aurreko orrira"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Itxi"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Baztertu"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikaziorako gorde duzun sarbide-gakoa erabili nahi duzu?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikaziorako gordetako pasahitza erabili nahi duzu?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Erabili pantailaren blokeoa <xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioan <xliff:g id="USERNAME">%2$s</xliff:g> kontuarekin saioa hasteko"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> zerbitzuan saioa hasteko kredentzialak erabili nahi dituzu?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioan saioa hasteko aukerak desblokeatu nahi dituzu?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Erabili <xliff:g id="APP_NAME">%1$s</xliff:g> aplikaziorako gordetako sarbide-gakoa"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Erabili <xliff:g id="APP_NAME">%1$s</xliff:g> aplikaziorako gordetako pasahitza"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Erabili zure kontua <xliff:g id="APP_NAME">%1$s</xliff:g> aplikaziorako"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Desblokeatu <xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioan saioa hasteko aukerak"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Aukeratu <xliff:g id="APP_NAME">%1$s</xliff:g> aplikaziorako gordetako sarbide-gakoa"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Aukeratu <xliff:g id="APP_NAME">%1$s</xliff:g> aplikaziorako gordetako pasahitza"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Aukeratu <xliff:g id="APP_NAME">%1$s</xliff:g> aplikaziorako gordetako saioa hasteko moduak"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Aukeratu <xliff:g id="APP_NAME">%1$s</xliff:g> zerbitzuan saioa hasteko kredentzialak"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Aukeratu <xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioan erabili nahi duzun kontua"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikaziorako aukera bat hautatu nahi duzu?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioan erabili nahi duzu informazio hori?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Hasi saioa beste modu batean"</string>
diff --git a/packages/CredentialManager/res/values-fa/strings.xml b/packages/CredentialManager/res/values-fa/strings.xml
index 6266ed2..6147ccc 100644
--- a/packages/CredentialManager/res/values-fa/strings.xml
+++ b/packages/CredentialManager/res/values-fa/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"ØšØ±Ø§Û ÙØ±Ùد ØšÙ Ø³ÛØ³ØªÙ
<xliff:g id="APP_NAME">%1$s</xliff:g>Ø Ú¯Ø°Ø±Ú©ÙÛØ¯ Ø§ÛØ¬Ø§Ø¯ ØŽÙØ¯Ø"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"ØšØ±Ø§Û ÙØ±Ùد ØšÙ Ø³ÛØ³ØªÙ
<xliff:g id="APP_NAME">%1$s</xliff:g>Ø Ú¯Ø°Ø±ÙØ§ÚÙ Ø°Ø®ÛØ±Ù ØŽÙØ¯Ø"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Ø§Ø·ÙØ§Ø¹Ø§Øª ÙØ±Ùد ØšÙ Ø³ÛØ³ØªÙ
<xliff:g id="APP_NAME">%1$s</xliff:g> Ø°Ø®ÛØ±Ù ØŽÙØ¯Ø"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"ØšØ±Ø§Û Ø§ÛØ¬Ø§Ø¯ گذرکÙÛØ¯ ØšØ±Ø§Û <xliff:g id="APP_NAME">%1$s</xliff:g> از ÙÙÙ ØµÙØÙ Ø§Ø³ØªÙØ§Ø¯Ù ØŽÙØ¯Ø"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"ØšØ±Ø§Û Ø§ÛØ¬Ø§Ø¯ Ú¯Ø°Ø±ÙØ§ÚÙ ØšØ±Ø§Û <xliff:g id="APP_NAME">%1$s</xliff:g> از ÙÙÙ ØµÙØÙ Ø§Ø³ØªÙØ§Ø¯Ù ØŽÙØ¯Ø"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"ØšØ±Ø§Û Ø°Ø®ÛØ±ÙØ³Ø§Ø²Û Ø§Ø·ÙØ§Ø¹Ø§Øª ÙØ±Ùد ØšÙ Ø³ÛØ³ØªÙ
<xliff:g id="APP_NAME">%1$s</xliff:g> از ÙÙÙ ØµÙØÙ Ø§Ø³ØªÙØ§Ø¯Ù ØŽÙØ¯Ø"</string>
<string name="passkey" msgid="632353688396759522">"گذرکÙÛØ¯"</string>
<string name="password" msgid="6738570945182936667">"Ú¯Ø°Ø±ÙØ§ÚÙ"</string>
<string name="passkeys" msgid="5733880786866559847">"گذرکÙÛØ¯Ùا"</string>
@@ -71,15 +68,15 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"ØšØ±Ú¯ØŽØªÙ ØšÙ ØµÙØÙ ÙØšÙÛ"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"ؚستÙ"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"ؚستÙ"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"از گذرکÙÛØ¯ Ø°Ø®ÛØ±ÙØŽØ¯Ù ØšØ±Ø§Û «<xliff:g id="APP_NAME">%1$s</xliff:g>» Ø§Ø³ØªÙØ§Ø¯Ù ØŽÙØ¯Ø"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"از Ú¯Ø°Ø±ÙØ§ÚÙ Ø°Ø®ÛØ±ÙØŽØ¯ÙØªØ§Ù ØšØ±Ø§Û <xliff:g id="APP_NAME">%1$s</xliff:g> Ø§Ø³ØªÙØ§Ø¯Ù ØŽÙØ¯Ø"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"ØšØ±Ø§Û ÙØ±Ùد ØšÙ Ø³ÛØ³ØªÙ
<xliff:g id="APP_NAME">%1$s</xliff:g> ؚا <xliff:g id="USERNAME">%2$s</xliff:g> از ÙÙÙ ØµÙØÙ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"از Ø±ÙØŽ ÙØ±Ùد ØšÙ Ø³ÛØ³ØªÙ
ØŽÙ
ا ØšØ±Ø§Û <xliff:g id="APP_NAME">%1$s</xliff:g> Ø§Ø³ØªÙØ§Ø¯Ù ØŽÙØ¯Ø"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"گزÛÙÙÙØ§Û ÙØ±Ùد ØšÙ Ø³ÛØ³ØªÙ
ØšØ±Ø§Û <xliff:g id="APP_NAME">%1$s</xliff:g> ؚاز ØŽÙØ¯Ø"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"از گذرکÙÛØ¯ Ø°Ø®ÛØ±ÙØŽØ¯Ù ØšØ±Ø§Û <xliff:g id="APP_NAME">%1$s</xliff:g> Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"از Ú¯Ø°Ø±ÙØ§ÚÙ Ø°Ø®ÛØ±ÙØŽØ¯Ù ØšØ±Ø§Û <xliff:g id="APP_NAME">%1$s</xliff:g> Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"از ØØ³Ø§Øš <xliff:g id="APP_NAME">%1$s</xliff:g> Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯"</string>
+ <string name="get_dialog_description_single_tap" msgid="2797059565126030879">"ØšØ±Ø§Û ÙØ±Ùد ØšÙ Ø³ÛØ³ØªÙ
<xliff:g id="APP_NAME">%1$s</xliff:g> ؚا <xliff:g id="USERNAME">%2$s</xliff:g> از ÙÙÙ ØµÙØÙ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯"</string>
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"ÙÙ٠را ازطرÛ٠گزÛÙÙÙØ§Û ÙØ±Ùد ØšÙ Ø³ÛØ³ØªÙ
<xliff:g id="APP_NAME">%1$s</xliff:g> ؚاز Ú©ÙÛØ¯"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"گذرکÙÛØ¯ Ø°Ø®ÛØ±ÙØŽØ¯ÙØ§Û را ØšØ±Ø§Û <xliff:g id="APP_NAME">%1$s</xliff:g> Ø§ÙØªØ®Ø§Øš Ú©ÙÛØ¯"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Ú¯Ø°Ø±ÙØ§ÚÙ Ø°Ø®ÛØ±ÙØŽØ¯ÙØ§Û را ØšØ±Ø§Û <xliff:g id="APP_NAME">%1$s</xliff:g> Ø§ÙØªØ®Ø§Øš Ú©ÙÛØ¯"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Ø§Ø·ÙØ§Ø¹Ø§Øª ÙØ±Ùد ØšÙ Ø³ÛØ³ØªÙ
Ø°Ø®ÛØ±ÙØŽØ¯ÙØ§Û را ØšØ±Ø§Û <xliff:g id="APP_NAME">%1$s</xliff:g> Ø§ÙØªØ®Ø§Øš Ú©ÙÛØ¯"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Ø§ÙØªØ®Ø§Øš Ø±ÙØŽ ÙØ±Ùد ØšÙ Ø³ÛØ³ØªÙ
ØšØ±Ø§Û <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"ØØ³Ø§ØšÛ ØšØ±Ø§Û <xliff:g id="APP_NAME">%1$s</xliff:g> Ø§ÙØªØ®Ø§Øš Ú©ÙÛØ¯"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"گزÛÙÙØ§Û را ØšØ±Ø§Û <xliff:g id="APP_NAME">%1$s</xliff:g> Ø§ÙØªØ®Ø§Øš Ú©ÙÛØ¯Ø"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"از اÛÙ Ø§Ø·ÙØ§Ø¹Ø§Øª در <xliff:g id="APP_NAME">%1$s</xliff:g> Ø§Ø³ØªÙØ§Ø¯Ù ØŽÙØ¯Ø"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"ÙØ±Ùد ØšÙ Ø³ÛØ³ØªÙ
ØšÙ ÛÚ© Ø±ÙØŽ Ø¯Ûگر"</string>
diff --git a/packages/CredentialManager/res/values-fi/strings.xml b/packages/CredentialManager/res/values-fi/strings.xml
index 838d6d9..806085a 100644
--- a/packages/CredentialManager/res/values-fi/strings.xml
+++ b/packages/CredentialManager/res/values-fi/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Luodaanko avainkoodi sisäänkirjautumista (<xliff:g id="APP_NAME">%1$s</xliff:g>) varten?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"Tallennetaanko salasana sisäänkirjautumista (<xliff:g id="APP_NAME">%1$s</xliff:g>) varten?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Tallennetaanko kirjautumistiedot (<xliff:g id="APP_NAME">%1$s</xliff:g>)?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Käytetäänkö näytön lukitusta aivankoodin luomiseen sovellukselle (<xliff:g id="APP_NAME">%1$s</xliff:g>)?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Käytetäänkö näytön lukitusta salasanan luomiseen sovellukselle (<xliff:g id="APP_NAME">%1$s</xliff:g>)?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Käytetäänkö näytön lukitusta sovelluksen (<xliff:g id="APP_NAME">%1$s</xliff:g>) sisäänkirjautumistietojen tallentamiseen?"</string>
<string name="passkey" msgid="632353688396759522">"avainkoodi"</string>
<string name="password" msgid="6738570945182936667">"salasana"</string>
<string name="passkeys" msgid="5733880786866559847">"avainkoodit"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Takaisin edelliselle sivulle"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Sulje"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Sulje"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Käytetäänkö tallennettua avainkoodiasi täällä: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Käytetäänkö tallennettua salasanaasi sovelluksessa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Kirjaudu sisään (<xliff:g id="APP_NAME">%1$s</xliff:g>) käyttämällä näytön lukitusta tilillä <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Käytetäänkö kirjautumistapaa: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Avataanko kirjautumisvaihtoehdot (<xliff:g id="APP_NAME">%1$s</xliff:g>)?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Käytä tallennettua avainkoodia: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Käytetä tallennettua salasanaa: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Käytä tiliä: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Avaa kirjautumisvaihtoehdot: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g>: valitse tallennettu avainkoodi"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g>: valitse tallennettu salasana"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g>: valitse tallennetut kirjautumistiedot"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Valitse kirjautumistapa: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Valitse tili: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Valitaanko vaihtoehto, jota <xliff:g id="APP_NAME">%1$s</xliff:g> käyttää?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Saako <xliff:g id="APP_NAME">%1$s</xliff:g> käyttää näitä tietoja?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Kirjaudu sisään toisella tavalla"</string>
diff --git a/packages/CredentialManager/res/values-fr-rCA/strings.xml b/packages/CredentialManager/res/values-fr-rCA/strings.xml
index 834dffe..7b8093e 100644
--- a/packages/CredentialManager/res/values-fr-rCA/strings.xml
+++ b/packages/CredentialManager/res/values-fr-rCA/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Créer une clé d\'accès pour se connecter à <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"Enregistrer un mot de passe pour se connecter à <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Enregistrer les renseignements de connexion pour <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Utiliser le Verrouillage de l\'écran pour créer une clé d\'accès pour <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Utiliser le Verrouillage de l\'écran pour créer un mot de passe pour <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Utiliser le Verrouillage de l\'écran pour enregistrer les renseignements de connexion pour <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="passkey" msgid="632353688396759522">"clé d\'accès"</string>
<string name="password" msgid="6738570945182936667">"mot de passe"</string>
<string name="passkeys" msgid="5733880786866559847">"clés d\'accès"</string>
@@ -71,15 +68,15 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Retourner à la page précédente"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Fermer"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Fermer"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Utiliser votre clé d\'accès enregistrée pour <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Utiliser votre mot de passe enregistré pour <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Utilisez votre verrouillage d\'écran pour vous connecter à <xliff:g id="APP_NAME">%1$s</xliff:g> avec <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Utiliser votre identifiant de connexion pour <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Déverrouiller les options de connexion pour <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Utiliser votre clé d\'accès enregistrée pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Utiliser votre mot de passe enregistré pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Utiliser votre compte pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_description_single_tap" msgid="2797059565126030879">"Utilisez le verrouillage de l\'écran pour vous connecter à <xliff:g id="APP_NAME">%1$s</xliff:g> avec <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Déverrouiller les options de connexion pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Choisissez une clé d\'accès enregistrée pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Choisissez un mot de passe enregistré pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Choisissez une connexion enregistrée pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Choisissez un identifiant de connexion pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Choisir un compte pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Choisir une option pour <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Utiliser ces renseignements dans <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Se connecter d\'une autre manière"</string>
diff --git a/packages/CredentialManager/res/values-fr/strings.xml b/packages/CredentialManager/res/values-fr/strings.xml
index 1c86c9b..05c3473 100644
--- a/packages/CredentialManager/res/values-fr/strings.xml
+++ b/packages/CredentialManager/res/values-fr/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Créer une clé d\'accès pour se connecter à <xliff:g id="APP_NAME">%1$s</xliff:g> ?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"Enregistrer un mot de passe pour se connecter à <xliff:g id="APP_NAME">%1$s</xliff:g> ?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Enregistrer les informations de connexion pour <xliff:g id="APP_NAME">%1$s</xliff:g> ?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Utiliser le verrouillage de l\'écran afin de créer une clé d\'accès pour <xliff:g id="APP_NAME">%1$s</xliff:g> ?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Utiliser le verrouillage de l\'écran afin de créer un mot de passe pour <xliff:g id="APP_NAME">%1$s</xliff:g> ?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Utiliser le verrouillage de l\'écran afin d\'enregistrer les informations de connexion pour <xliff:g id="APP_NAME">%1$s</xliff:g> ?"</string>
<string name="passkey" msgid="632353688396759522">"clé d\'accès"</string>
<string name="password" msgid="6738570945182936667">"mot de passe"</string>
<string name="passkeys" msgid="5733880786866559847">"clés d\'accès"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Revenir à la page précédente"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Fermer"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Fermer"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Utiliser votre clé d\'accès enregistrée pour <xliff:g id="APP_NAME">%1$s</xliff:g> ?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Utiliser votre mot de passe enregistré pour <xliff:g id="APP_NAME">%1$s</xliff:g> ?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Utiliser le verrouillage de l\'écran pour se connecter à <xliff:g id="APP_NAME">%1$s</xliff:g> avec <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Utiliser vos infos de connexion pour <xliff:g id="APP_NAME">%1$s</xliff:g> ?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Déverrouiller les options de connexion pour <xliff:g id="APP_NAME">%1$s</xliff:g> ?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Utiliser votre clé d\'accès enregistrée pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Utiliser votre mot de passe enregistré pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Utiliser votre compte pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Déverrouiller les options de connexion pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Choisir une clé d\'accès enregistrée pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Choisir un mot de passe enregistré pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Choisissez les identifiants à utiliser pour la connexion à <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Choisir des infos de connexion pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Sélectionnez un compte pour <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Choisir une option pour <xliff:g id="APP_NAME">%1$s</xliff:g> ?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Utiliser ces informations dans <xliff:g id="APP_NAME">%1$s</xliff:g> ?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Se connecter d\'une autre manière"</string>
diff --git a/packages/CredentialManager/res/values-gl/strings.xml b/packages/CredentialManager/res/values-gl/strings.xml
index a95f6b9..9a3430f 100644
--- a/packages/CredentialManager/res/values-gl/strings.xml
+++ b/packages/CredentialManager/res/values-gl/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Queres crear unha clave de acceso para iniciar sesión en <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"Queres gardar o contrasinal para iniciar sesión en <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Queres gardar a información de inicio de sesión de <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Queres usar o bloqueo de pantalla para crear unha clave de acceso para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Queres usar o bloqueo de pantalla para crear un contrasinal para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Queres usar o bloqueo de pantalla para gardar a información de inicio de sesión para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="passkey" msgid="632353688396759522">"clave de acceso"</string>
<string name="password" msgid="6738570945182936667">"contrasinal"</string>
<string name="passkeys" msgid="5733880786866559847">"claves de acceso"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Volver á páxina anterior"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Pechar"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Pechar"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Queres usar a clave de acceso gardada para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Queres usar o contrasinal gardado para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Usa o bloqueo de pantalla para iniciar sesión en <xliff:g id="APP_NAME">%1$s</xliff:g> con <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Queres usar o teu inicio de sesión para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Queres desbloquear as opcións de inicio de sesión para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Usa a clave de acceso gardada para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Usa o contrasinal gardado para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Usa a túa conta para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Desbloquea as opcións de inicio de sesión para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Escolle unha clave de acceso gardada para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Escolle un contrasinal gardado para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Escolle un inicio de sesión gardado para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Escolle un inicio de sesión para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Escolle unha conta para <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Queres escoller unha opción para <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Queres usar esta información en <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Iniciar sesión doutra forma"</string>
diff --git a/packages/CredentialManager/res/values-gu/strings.xml b/packages/CredentialManager/res/values-gu/strings.xml
index ed08128..23204c8 100644
--- a/packages/CredentialManager/res/values-gu/strings.xml
+++ b/packages/CredentialManager/res/values-gu/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"<xliff:g id="APP_NAME">%1$s</xliff:g>મટઠઞટàªàªš àªàªš àªàª°àªµàªŸ મટàªà« પટઞàªà« બચટવà«àª?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"<xliff:g id="APP_NAME">%1$s</xliff:g>મટઠઞટàªàªš àªàªš àªàª°àªµàªŸ મટàªà« પટઞવરà«àª¡ ઞટàªàªµà«àª?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"<xliff:g id="APP_NAME">%1$s</xliff:g> મટàªà« ઞટàªàªš-àªàªš àªàª°àªµàªŸàªšà« મટહિ઀ૠઞટàªàªµà«àª?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"<xliff:g id="APP_NAME">%1$s</xliff:g> મટàªà« àªà«àª પટઞàªà« બચટવવટ મટàªà«, શà«àª ઀મટરટ ઞà«àªà«àª°à«àªš લà«àªàªšà« àªàªªàª¯à«àª àªàª°à«àª?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"<xliff:g id="APP_NAME">%1$s</xliff:g> મટàªà« àªà«àª પટઞવરà«àª¡ બચટવવટ મટàªà«, શà«àª ઀મટરટ ઞà«àªà«àª°à«àªš લà«àªàªšà« àªàªªàª¯à«àª àªàª°à«àª?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"<xliff:g id="APP_NAME">%1$s</xliff:g> મટàªà« ઞટàªàªš àªàªšàªšà« મટહિ઀ૠઞટàªàªµàªµàªŸ મટàªà«, શà«àª ઀મટરટ ઞà«àªà«àª°à«àªš લà«àªàªšà« àªàªªàª¯à«àª àªàª°à«àª?"</string>
<string name="passkey" msgid="632353688396759522">"પટઞàªà«"</string>
<string name="password" msgid="6738570945182936667">"પટઞવરà«àª¡"</string>
<string name="passkeys" msgid="5733880786866559847">"પટઞàªà«"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"પટàªàª²àªŸ પà«àª પર પર઀ àªàªŸàª"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"બàªàª§ àªàª°à«"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"àªà«àª¡à« ઊà«"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> મટàªà« શà«àª ઀મટરૠઞટàªàªµà«àª²à« પટઞàªà«àªšà« àªàªªàª¯à«àª àªàª°à«àª?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"શà«àª <xliff:g id="APP_NAME">%1$s</xliff:g> મટàªà« ઀મટરટ ઞટàªàªµà«àª²àªŸ પટઞવરà«àª¡àªšà« àªàªªàª¯à«àª àªàª°à«àª?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"<xliff:g id="USERNAME">%2$s</xliff:g> વડૠ<xliff:g id="APP_NAME">%1$s</xliff:g>મટઠઞટàªàªš àªàªš àªàª°àªµàªŸ મટàªà« ઀મટરટ ઞà«àªà«àª°à«àªš લà«àªàªšà« àªàªªàª¯à«àª àªàª°à«"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"શà«àª <xliff:g id="APP_NAME">%1$s</xliff:g>મટઠઞટàªàªš àªàªš àªàª°àªµàªŸ મટàªà« ઀મટરૠઠલà«àª àªàªš વિàªàª€à«àªšà« àªàªªàª¯à«àª àªàª°à«àª?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> મટàªà« ઞટàªàªš àªàªš વિàªàª²à«àªªà« àª
ચલà«àª àªàª°à«àª?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"<xliff:g id="APP_NAME">%1$s</xliff:g> મટàªà« ઀મટરૠઞટàªàªµà«àª²à« પટઞàªà«àªšà« àªàªªàª¯à«àª àªàª°à«"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"<xliff:g id="APP_NAME">%1$s</xliff:g> મટàªà« ઀મટરટ ઞટàªàªµà«àª²àªŸ પટઞવરà«àª¡àªšà« àªàªªàª¯à«àª àªàª°à«"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"<xliff:g id="APP_NAME">%1$s</xliff:g> મટàªà« ઀મટરટ àªàªàªŸàªàªšà«àªàªšà« àªàªªàª¯à«àª àªàª°à«"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g> મટàªà« ઞટàªàªš àªàªš વિàªàª²à«àªªà« àª
ચલà«àª àªàª°à«"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> મટàªà« àªà«àª ઞટàªàªµà«àª²à« પટઞàªà« પઞàªàªŠ àªàª°à«"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> મટàªà« àªà«àª ઞટàªàªµà«àª²à« પટઞવરà«àª¡ પઞàªàªŠ àªàª°à«"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> મટàªà« àªà«àª ઞટàªàªµà«àª²à«àª ઞટàªàªš-àªàªš પઞàªàªŠ àªàª°à«"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g>મટઠઞટàªàªš àªàªš àªàª°àªµàªŸàªšà« àªà«àª રà«àª€ પઞàªàªŠ àªàª°à«"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g> મટàªà« àªà«àª àªàªàªŸàªàªšà«àª પઞàªàªŠ àªàª°à«"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g>ચૠવિàªàª²à«àªª પઞàªàªŠ àªàª°à«àª?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g> પર ઠમટહિ઀à«àªšà« àªàªªàª¯à«àª àªàª°à«àª?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"àªà«àª àª
ચà«àª¯ રà«àª€à« ઞટàªàªš àªàªš àªàª°à«"</string>
diff --git a/packages/CredentialManager/res/values-hi/strings.xml b/packages/CredentialManager/res/values-hi/strings.xml
index 16f04c5..c829c6b 100644
--- a/packages/CredentialManager/res/values-hi/strings.xml
+++ b/packages/CredentialManager/res/values-hi/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"à€à¥à€¯à€Ÿ à€à€ªà€à¥ <xliff:g id="APP_NAME">%1$s</xliff:g> à€®à¥à€ à€žà€Ÿà€à€š à€à€š à€à€°à€šà¥ à€à¥ à€²à€¿à€ à€ªà€Ÿà€žà€à¥ à€¬à€šà€Ÿà€šà¥ à€¹à¥?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"à€à¥à€¯à€Ÿ à€à€ªà€à¥ <xliff:g id="APP_NAME">%1$s</xliff:g> à€®à¥à€ à€žà€Ÿà€à€š à€à€š à€à€°à€šà¥ à€à¥ à€²à€¿à€ à€ªà€Ÿà€žà€µà€°à¥à€¡ à€žà¥à€µ à€à€°à€šà€Ÿ à€¹à¥?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"à€à¥à€¯à€Ÿ à€à€ªà€à¥ <xliff:g id="APP_NAME">%1$s</xliff:g> à€à¥ à€²à€¿à€ à€žà€Ÿà€à€š-à€à€š à€à¥ à€à€Ÿà€šà€à€Ÿà€°à¥ à€žà¥à€µ à€à€°à€šà¥ à€¹à¥?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"à€à¥à€¯à€Ÿ à€žà¥à€à¥à€°à¥à€š à€²à¥à€ à€à€Ÿ à€à€žà¥à€€à¥à€®à€Ÿà€² à€à€°à€à¥, <xliff:g id="APP_NAME">%1$s</xliff:g> à€à¥ à€²à€¿à€ à€ªà€Ÿà€žà€à¥ à€¬à€šà€Ÿà€šà¥ à€¹à¥?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"à€à¥à€¯à€Ÿ à€žà¥à€à¥à€°à¥à€š à€²à¥à€ à€à€Ÿ à€à€žà¥à€€à¥à€®à€Ÿà€² à€à€°à€à¥, <xliff:g id="APP_NAME">%1$s</xliff:g> à€à¥ à€²à€¿à€ à€ªà€Ÿà€žà€µà€°à¥à€¡ à€¬à€šà€Ÿà€šà€Ÿ à€¹à¥?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"à€à¥à€¯à€Ÿ à€žà¥à€à¥à€°à¥à€š à€²à¥à€ à€à€Ÿ à€à€žà¥à€€à¥à€®à€Ÿà€² à€à€°à€à¥, <xliff:g id="APP_NAME">%1$s</xliff:g> à€®à¥à€ à€žà€Ÿà€à€š à€à€š à€à€°à€šà¥ à€à¥ à€à€Ÿà€šà€à€Ÿà€°à¥ à€žà¥à€µ à€à€°à€šà¥ à€¹à¥?"</string>
<string name="passkey" msgid="632353688396759522">"à€ªà€Ÿà€žà€à¥"</string>
<string name="password" msgid="6738570945182936667">"à€ªà€Ÿà€žà€µà€°à¥à€¡"</string>
<string name="passkeys" msgid="5733880786866559847">"à€ªà€Ÿà€žà€à¥"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"à€ªà€¿à€à€²à¥ à€ªà¥à€ à€ªà€° à€µà€Ÿà€ªà€ž à€à€Ÿà€à€"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"à€¬à€à€Š à€à€°à¥à€"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"à€à€Ÿà€°à€¿à€ à€à€°à¥à€"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"à€à¥à€¯à€Ÿ à€à€ªà€à¥ <xliff:g id="APP_NAME">%1$s</xliff:g> à€ªà€° à€žà€Ÿà€à€š à€à€š à€à€°à€šà¥ à€à¥ à€²à€¿à€, à€žà¥à€µ à€à¥ à€à€ à€ªà€Ÿà€žà€à¥ à€à€Ÿ à€à€žà¥à€€à¥à€®à€Ÿà€² à€à€°à€šà€Ÿ à€¹à¥?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"à€à¥à€¯à€Ÿ à€à€ªà€à¥ <xliff:g id="APP_NAME">%1$s</xliff:g> à€à¥ à€²à€¿à€ à€žà¥à€µ à€à€¿à€¯à€Ÿ à€¹à¥à€ à€ªà€Ÿà€žà€µà€°à¥à€¡ à€à€žà¥à€€à¥à€®à€Ÿà€² à€à€°à€šà€Ÿ à€¹à¥?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"<xliff:g id="USERNAME">%2$s</xliff:g> à€žà¥ <xliff:g id="APP_NAME">%1$s</xliff:g> à€®à¥à€ à€žà€Ÿà€à€š à€à€š à€à€°à€šà¥ à€à¥ à€²à€¿à€, à€žà¥à€à¥à€°à¥à€š à€²à¥à€ à€à€Ÿ à€à€žà¥à€€à¥à€®à€Ÿà€² à€à€°à¥à€"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"à€à¥à€¯à€Ÿ à€à€ªà€à¥ <xliff:g id="APP_NAME">%1$s</xliff:g> à€à¥ à€²à€¿à€ à€
à€ªà€šà¥ à€žà€Ÿà€à€š-à€à€š à€à¥à€°à¥à€¡à¥à€à€¶à€¿à€¯à€² à€à€Ÿ à€à€žà¥à€€à¥à€®à€Ÿà€² à€à€°à€šà€Ÿ à€¹à¥?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"à€à¥à€¯à€Ÿ à€à€ªà€à¥ <xliff:g id="APP_NAME">%1$s</xliff:g> à€®à¥à€ à€žà€Ÿà€à€š à€à€š à€à€°à€šà¥ à€à¥ à€µà€¿à€à€²à¥à€ªà¥à€ à€à¥ à€
à€šà€²à¥à€ à€à€°à€šà€Ÿ à€¹à¥?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€®à¥à€ à€žà€Ÿà€à€š à€à€š à€à€°à€šà¥ à€à¥ à€²à€¿à€, à€žà¥à€µ à€à¥ à€à€ à€ªà€Ÿà€žà€à¥ à€à€Ÿ à€à€žà¥à€€à¥à€®à€Ÿà€² à€à€°à¥à€"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€®à¥à€ à€žà€Ÿà€à€š à€à€š à€à€°à€šà¥ à€à¥ à€²à€¿à€ à€žà¥à€µ à€à€¿à€¯à€Ÿ à€¹à¥à€ à€ªà€Ÿà€žà€µà€°à¥à€¡ à€à€žà¥à€€à¥à€®à€Ÿà€² à€à€°à¥à€"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€®à¥à€ à€žà€Ÿà€à€š à€à€°à€šà¥ à€à¥ à€²à€¿à€ à€
à€ªà€šà¥ à€à€Ÿà€€à¥ à€à€Ÿ à€à€žà¥à€€à¥à€®à€Ÿà€² à€à€°à¥à€"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€®à¥à€ à€žà€Ÿà€à€š à€à€š à€à€°à€šà¥ à€à¥ à€²à€¿à€, à€µà€¿à€à€²à¥à€ªà¥à€ à€à¥ à€
à€šà€²à¥à€ à€à€°à¥à€"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€à¥ à€²à€¿à€ à€žà¥à€µ à€à¥ à€à€ à€ªà€Ÿà€žà€à¥ à€à¥à€šà¥à€"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€à¥ à€²à€¿à€ à€žà¥à€µ à€à€¿à€¯à€Ÿ à€à€¯à€Ÿ à€ªà€Ÿà€žà€µà€°à¥à€¡ à€à¥à€šà¥à€"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€à¥ à€²à€¿à€ à€žà¥à€µ à€à€¿à€¯à€Ÿ à€à€¯à€Ÿ à€à¥à€°à¥à€¡à¥à€à€¶à€¿à€¯à€² à€à¥à€šà¥à€"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€à¥ à€²à€¿à€ à€žà€Ÿà€à€š-à€à€š à€à¥à€°à¥à€¡à¥à€à€¶à€¿à€¯à€² à€à¥à€šà¥à€"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€®à¥à€ à€žà€Ÿà€à€š à€à€š à€à€°à€šà¥ à€à¥ à€²à€¿à€ à€à¥à€ à€à€Ÿà€€à€Ÿ à€à¥à€šà¥à€"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€®à¥à€ à€žà€Ÿà€à€š à€à€š à€à€°à€šà¥ à€à¥ à€²à€¿à€ à€žà¥à€µ à€à€¿à€ à€à€ à€µà€¿à€à€²à¥à€ªà¥à€ à€®à¥à€ à€žà¥ à€à€¿à€žà¥ à€à¥ à€à¥à€šà€šà€Ÿ à€¹à¥?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€à¥ à€²à€¿à€, à€à¥à€¯à€Ÿ à€à€ž à€à€Ÿà€šà€à€Ÿà€°à¥ à€à€Ÿ à€à€žà¥à€€à¥à€®à€Ÿà€² à€à€°à€šà€Ÿ à€¹à¥?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"à€à€¿à€žà¥ à€Šà¥à€žà€°à¥ à€€à€°à¥à€à¥ à€žà¥ à€žà€Ÿà€à€š à€à€š à€à€°à¥à€"</string>
diff --git a/packages/CredentialManager/res/values-hr/strings.xml b/packages/CredentialManager/res/values-hr/strings.xml
index 2c10c21..5facb15 100644
--- a/packages/CredentialManager/res/values-hr/strings.xml
+++ b/packages/CredentialManager/res/values-hr/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Åœelite li izraditi pristupni kljuÄ za prijavu u aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"Åœelite li spremiti zaporku za prijavu u aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Åœelite li spremiti informacije o prijavi za <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Åœelite li upotrijebiti zakljuÄavanje zaslona za izradu pristupnog kljuÄa za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Åœelite li upotrijebiti zakljuÄavanje zaslona za izradu zaporke za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Åœelite li upotrijebiti zakljuÄavanje zaslona za spremanje podataka za prijavu za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="passkey" msgid="632353688396759522">"pristupni kljuÄ"</string>
<string name="password" msgid="6738570945182936667">"zaporka"</string>
<string name="passkeys" msgid="5733880786866559847">"pristupni kljuÄevi"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Vratite se na prethodnu stranicu"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Zatvori"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Odbaci"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Åœelite li upotrijebiti spremljeni pristupni kljuÄ za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Åœelite li upotrijebiti spremljenu zaporku za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Upotrijebite zakljuÄavanje zaslona da biste se prijavili u aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g> korisniÄkim imenom <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Åœelite li upotrijebiti prijavu za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Åœelite li otkljuÄati opcije za prijavu za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Upotrijebite spremljeni pristupni kljuÄ za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Upotrijebite spremljenu zaporku za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Upotrijebite raÄun za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"OtkljuÄajte opcije za prijavu za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Odaberite spremljeni pristupni kljuÄ za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Odaberite spremljenu zaporku za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Odaberite spremljene podatke za prijavu za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Odaberite prijavu za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Odaberite raÄun za aplikaciju <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Åœelite li odabrati opciju za <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Åœelite li koristiti te podatke u aplikaciji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Prijavite se na neki drugi naÄin"</string>
diff --git a/packages/CredentialManager/res/values-hu/strings.xml b/packages/CredentialManager/res/values-hu/strings.xml
index 46b80da..14153c0 100644
--- a/packages/CredentialManager/res/values-hu/strings.xml
+++ b/packages/CredentialManager/res/values-hu/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Létrehoz azonosítókulcsot a következÅbe való bejelentkezéshez: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"Menti a jelszót a következÅbe való bejelentkezéshez: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Menti a bejelentkezési adatokat a következÅhöz: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"KépernyÅzár használatával hoz létre azonosítókulcsot a következÅhöz: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"KépernyÅzár használatával hoz létre jelszót a következÅhöz: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"KépernyÅzár használatával menti a bejelentkezési adatokat a következÅhöz: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="passkey" msgid="632353688396759522">"azonosítókulcs"</string>
<string name="password" msgid="6738570945182936667">"jelszó"</string>
<string name="passkeys" msgid="5733880786866559847">"azonosítókulcsait"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Vissza az elÅzÅ oldalra"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Bezárás"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Elvetés"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Szeretné a(z) <xliff:g id="APP_NAME">%1$s</xliff:g> alkalmazáshoz mentett azonosítókulcsot használni?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Szeretné az elmentett jelszavát használni a(z) <xliff:g id="APP_NAME">%1$s</xliff:g> alkalmazáshoz?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"A képernyÅzár használata a(z) <xliff:g id="APP_NAME">%1$s</xliff:g> alkalmazásba való bejelentkezéshez a következÅ felhasználónévvel: <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Szeretné használni bejelentkezési adatait a következÅhöz: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Feloldja a(z) <xliff:g id="APP_NAME">%1$s</xliff:g> bejelentkezési lehetÅségeit?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Mentett azonosítókulcs használata a(z) <xliff:g id="APP_NAME">%1$s</xliff:g> alkalmazáshoz"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Mentett jelszó használata a(z) <xliff:g id="APP_NAME">%1$s</xliff:g> alkalmazáshoz"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Fiók használata a(z) <xliff:g id="APP_NAME">%1$s</xliff:g> alkalmazáshoz"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Feloldja a(z) <xliff:g id="APP_NAME">%1$s</xliff:g> bejelentkezési lehetÅségeit?"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Mentett azonosítókulcs kiválasztása a(z) <xliff:g id="APP_NAME">%1$s</xliff:g> alkalmazáshoz"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Mentett jelszó kiválasztása a(z) <xliff:g id="APP_NAME">%1$s</xliff:g> alkalmazáshoz"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Mentett bejelentkezési adatok kiválasztása – <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Válasszon bejelentkezési adatokat – <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Válasszon fiókot a(z) <xliff:g id="APP_NAME">%1$s</xliff:g> alkalmazáshoz"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Kiválaszt egy lehetÅséget a következÅbe való bejelentkezéshez: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Használni szeretná ezt az információt a(z) <xliff:g id="APP_NAME">%1$s</xliff:g> alkalmazásban?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Bejelentkezés más módon"</string>
diff --git a/packages/CredentialManager/res/values-hy/strings.xml b/packages/CredentialManager/res/values-hy/strings.xml
index 2a8784c..af97aa7 100644
--- a/packages/CredentialManager/res/values-hy/strings.xml
+++ b/packages/CredentialManager/res/values-hy/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"ÕÕ¿Õ¥Õ²Õ®Õ¥ÕÕ¬ Õ¡Õ¶ÖÕ¡Õ¢Õ¡ÕŒÕ <xliff:g id="APP_NAME">%1$s</xliff:g> Õ°Õ¡ÕŸÕ¥Õ¬ÕŸÕ¡Õ® ÕŽÕžÖÕ¿Ö Õ£ÕžÖÕ®Õ¥Õ¬ÕžÖ Õ°Õ¡ÕŽÕ¡Ö"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"ÕÕ¡Õ°Õ¥ÕÕ¬ Õ£Õ¡Õ²Õ¿Õ¶Õ¡Õ¢Õ¡ÕŒÕšÕ <xliff:g id="APP_NAME">%1$s</xliff:g> Õ°Õ¡ÕŸÕ¥Õ¬ÕŸÕ¡Õ® ÕŽÕžÖÕ¿Ö Õ£ÕžÖÕ®Õ¥Õ¬ÕžÖ Õ°Õ¡ÕŽÕ¡Ö"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"ÕÕ¡Õ°Õ¥ÕÕ¬ «<xliff:g id="APP_NAME">%1$s</xliff:g>» Õ°Õ¡ÕŸÕ¥Õ¬ÕŸÕ¡Õ®Õ« ÕŽÕžÖÕ¿ÖÕ« Õ¿ÕŸÕµÕ¡Õ¬Õ¶Õ¥ÖÕš"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"ÕÕ£Õ¿Õ¡Õ£ÕžÖÕ®Õ¥ÕÕ¬ Õ§Õ¯ÖÕ¡Õ¶Õ« Õ¯ÕžÕ²ÕºÕžÖÕŽÕšÕ <xliff:g id="APP_NAME">%1$s</xliff:g> Õ°Õ¡ÕŸÕ¥Õ¬ÕŸÕ¡Õ®Õ« ÕŽÕžÖÕ¿ÖÕ« Õ¢Õ¡Õ¶Õ¡Õ¬Õ« ÕœÕ¿Õ¥Õ²Õ®Õ¥Õ¬ÕžÖ Õ°Õ¡ÕŽÕ¡Ö"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"ÕÕ£Õ¿Õ¡Õ£ÕžÖÕ®Õ¥ÕÕ¬ Õ§Õ¯ÖÕ¡Õ¶Õ« Õ¯ÕžÕ²ÕºÕžÖÕŽÕšÕ <xliff:g id="APP_NAME">%1$s</xliff:g> Õ°Õ¡ÕŸÕ¥Õ¬ÕŸÕ¡Õ®Õ« Õ£Õ¡Õ²Õ¿Õ¶Õ¡Õ¢Õ¡ÕŒ ÕœÕ¿Õ¥Õ²Õ®Õ¥Õ¬ÕžÖ Õ°Õ¡ÕŽÕ¡Ö"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"ÕÕ£Õ¿Õ¡Õ£ÕžÖÕ®Õ¥ÕÕ¬ Õ§Õ¯ÖÕ¡Õ¶Õ« Õ¯ÕžÕ²ÕºÕžÖÕŽÕšÕ <xliff:g id="APP_NAME">%1$s</xliff:g> Õ°Õ¡ÕŸÕ¥Õ¬ÕŸÕ¡Õ®Õ« ÕŽÕžÖÕ¿ÖÕ« Õ¿ÕŸÕµÕ¡Õ¬Õ¶Õ¥ÖÕš ÕºÕ¡Õ°Õ¥Õ¬ÕžÖ Õ°Õ¡ÕŽÕ¡Ö"</string>
<string name="passkey" msgid="632353688396759522">"Õ¡Õ¶ÖÕ¡Õ¢Õ¡ÕŒ"</string>
<string name="password" msgid="6738570945182936667">"գաղտնաբաՌ"</string>
<string name="passkeys" msgid="5733880786866559847">"Õ¡Õ¶ÖաբաՌեÖ"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Ô±Õ¶ÖÕ¶Õ¥Õ¬ Õ¶Õ¡ÕÕžÖÕ€ Õ§Õ»"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"ÕÕ¡Õ¯Õ¥Õ¬"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"ÕÕ¡Õ¯Õ¥Õ¬"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"ÕÕ£Õ¿Õ¡Õ£ÕžÖÕ®Õ¥ÕÕ¬ ÕºÕ¡Õ°ÕŸÕ¡Õ® Õ¡Õ¶ÖաբաՌ՚ <xliff:g id="APP_NAME">%1$s</xliff:g> Õ°Õ¡ÕŸÕ¥Õ¬ÕŸÕ¡Õ®Õ« Õ°Õ¡ÕŽÕ¡Ö"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"ÕÕ£Õ¿Õ¡Õ£ÕžÖÕ®Õ¥ÕÕ¬ <xliff:g id="APP_NAME">%1$s</xliff:g> Õ°Õ¡ÕŸÕ¥Õ¬ÕŸÕ¡Õ®Õ« Õ°Õ¡ÕŽÕ¡Ö ÕºÕ¡Õ°ÕŸÕ¡Õ® Õ±Õ¥Ö Õ£Õ¡Õ²Õ¿Õ¶Õ¡Õ¢Õ¡ÕŒÕš"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"ÕÕ£Õ¿Õ¡Õ£ÕžÖÕ®Õ¥Ö Õ±Õ¥Ö Õ§Õ¯ÖÕ¡Õ¶Õ« Õ¯ÕžÕ²ÕºÕžÖÕŽÕšÕ <xliff:g id="USERNAME">%2$s</xliff:g> Õ°Õ¡Õ·ÕŸÕ« ÕŽÕ«Õ»ÕžÖÕžÕŸ <xliff:g id="APP_NAME">%1$s</xliff:g> Õ°Õ¡ÕŸÕ¥Õ¬ÕŸÕ¡Õ® ÕŽÕžÖÕ¿Ö Õ£ÕžÖÕ®Õ¥Õ¬ÕžÖ Õ°Õ¡ÕŽÕ¡Ö"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"ÕÕ£Õ¿Õ¡Õ£ÕžÖÕ®Õ¥ÕÕ¬ Õ¡ÕµÕœ Õ¿ÕŸÕµÕ¡Õ¬Õ¶Õ¥ÖÕš <xliff:g id="APP_NAME">%1$s</xliff:g> Õ°Õ¡ÕŸÕ¥Õ¬ÕŸÕ¡Õ® ÕŽÕžÖÕ¿Ö Õ£ÕžÖÕ®Õ¥Õ¬ÕžÖ Õ°Õ¡ÕŽÕ¡Ö"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Ô±ÕºÕ¡Õ¯ÕžÕ²ÕºÕ¥ÕÕ¬ ÕŽÕžÖÕ¿ÖÕ« Õ¿Õ¡ÖÕ¢Õ¥ÖÕ¡Õ¯Õ¶Õ¥Ö <xliff:g id="APP_NAME">%1$s</xliff:g> Õ°Õ¡ÕŸÕ¥Õ¬ÕŸÕ¡Õ®Õ« Õ°Õ¡ÕŽÕ¡Ö"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"ÕÕ£Õ¿Õ¡Õ£ÕžÖÕ®Õ¥Ö <xliff:g id="APP_NAME">%1$s</xliff:g> Õ°Õ¡ÕŸÕ¥Õ¬ÕŸÕ¡Õ®Õ« Õ°Õ¡ÕŽÕ¡Ö ÕºÕ¡Õ°ÕŸÕ¡Õ® Õ±Õ¥Ö ÕŽÕžÖÕ¿ÖÕ« Õ¢Õ¡Õ¶Õ¡Õ¬Õ«Õ¶"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"ÕÕ£Õ¿Õ¡Õ£ÕžÖÕ®Õ¥Ö <xliff:g id="APP_NAME">%1$s</xliff:g> Õ°Õ¡ÕŸÕ¥Õ¬ÕŸÕ¡Õ®Õ« Õ°Õ¡ÕŽÕ¡Ö ÕºÕ¡Õ°ÕŸÕ¡Õ® Õ±Õ¥Ö Õ£Õ¡Õ²Õ¿Õ¶Õ¡Õ¢Õ¡ÕŒÕš"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"ÕÕ£Õ¿Õ¡Õ£ÕžÖÕ®Õ¥Ö Õ±Õ¥Ö Õ°Õ¡Õ·Õ«ÕŸÕšÕ <xliff:g id="APP_NAME">%1$s</xliff:g> Õ°Õ¡ÕŸÕ¥Õ¬ÕŸÕ¡Õ® ÕŽÕžÖÕ¿Ö Õ£ÕžÖÕ®Õ¥Õ¬ÕžÖ Õ°Õ¡ÕŽÕ¡Ö"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Ô±ÕºÕ¡Õ¯ÕžÕ²ÕºÕ¥Ö ÕŽÕžÖÕ¿Ö Õ£ÕžÖÕ®Õ¥Õ¬ÕžÖ Õ¿Õ¡ÖÕ¢Õ¥ÖÕ¡Õ¯Õ¶Õ¥Ö <xliff:g id="APP_NAME">%1$s</xliff:g> Õ°Õ¡ÕŸÕ¥Õ¬ÕŸÕ¡Õ®Õ« Õ°Õ¡ÕŽÕ¡Ö"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"ÔžÕ¶Õ¿ÖÕ¥Ö ÕºÕ¡Õ°ÕŸÕ¡Õ® Õ¡Õ¶ÖÕ¡Õ¢Õ¡ÕŒ <xliff:g id="APP_NAME">%1$s</xliff:g> Õ°Õ¡ÕŸÕ¥Õ¬ÕŸÕ¡Õ®Õ« Õ°Õ¡ÕŽÕ¡Ö"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"ÔžÕ¶Õ¿ÖÕ¥Ö ÕºÕ¡Õ°ÕŸÕ¡Õ® Õ£Õ¡Õ²Õ¿Õ¶Õ¡Õ¢Õ¡ÕŒ <xliff:g id="APP_NAME">%1$s</xliff:g> Õ°Õ¡ÕŸÕ¥Õ¬ÕŸÕ¡Õ®Õ« Õ°Õ¡ÕŽÕ¡Ö"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"ÔžÕ¶Õ¿ÖÕ¥Ö ÕŽÕžÖÕ¿ÖÕ« ÕºÕ¡Õ°ÕŸÕ¡Õ® Õ¿ÕŸÕµÕ¡Õ¬Õ¶Õ¥Ö <xliff:g id="APP_NAME">%1$s</xliff:g> Õ°Õ¡ÕŸÕ¥Õ¬ÕŸÕ¡Õ®Õ« Õ°Õ¡ÕŽÕ¡Ö"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"ÔžÕ¶Õ¿ÖÕ¥Ö, Õ©Õ¥ Õ«Õ¶Õ¹ÕºÕ¥Õœ Õ¥Ö ÕžÖÕŠÕžÖÕŽ ÕŽÕžÖÕ¿Ö Õ£ÕžÖÕ®Õ¥Õ¬ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"ÔžÕ¶Õ¿ÖÕ¥Ö Õ°Õ¡Õ·Õ«ÕŸ <xliff:g id="APP_NAME">%1$s</xliff:g> Õ°Õ¡ÕŸÕ¥Õ¬ÕŸÕ¡Õ®Õ« Õ°Õ¡ÕŽÕ¡Ö"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"ÔžÕ¶Õ¿ÖÕ¥ÕÕ¬ Õ¿Õ¡ÖÕ¢Õ¥ÖÕ¡Õ¯ <xliff:g id="APP_NAME">%1$s</xliff:g> Õ°Õ¡ÕŸÕ¥Õ¬ÕŸÕ¡Õ®Õ« Õ°Õ¡ÕŽÕ¡Ö"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"ÕÕ£Õ¿Õ¡Õ£ÕžÖÕ®Õ¥ÕÕ¬ Õ¡ÕµÕœ Õ¿Õ¥Õ²Õ¥Õ¯ÕžÖÕ©ÕµÕžÖÕ¶Õ¶Õ¥ÖÕš <xliff:g id="APP_NAME">%1$s</xliff:g> ÕŽÕ¿Õ¶Õ¥Õ¬ÕžÖ Õ°Õ¡ÕŽÕ¡Ö"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"ÕÕžÖÕ¿Ö Õ£ÕžÖÕ®Õ¥Õ¬ Õ¡ÕµÕ¬ Õ¥Õ²Õ¡Õ¶Õ¡Õ¯ÕžÕŸ"</string>
diff --git a/packages/CredentialManager/res/values-in/strings.xml b/packages/CredentialManager/res/values-in/strings.xml
index 3eac6e9..7564afa 100644
--- a/packages/CredentialManager/res/values-in/strings.xml
+++ b/packages/CredentialManager/res/values-in/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Buat kunci sandi untuk login ke <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"Simpan sandi untuk login ke <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Simpan info login untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Gunakan kunci layar Anda untuk membuat kunci sandi untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Gunakan kunci layar Anda untuk membuat sandi untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Gunakan kunci layar Anda untuk menyimpan info login untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="passkey" msgid="632353688396759522">"kunci sandi"</string>
<string name="password" msgid="6738570945182936667">"sandi"</string>
<string name="passkeys" msgid="5733880786866559847">"kunci sandi"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Kembali ke halaman sebelumnya"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Tutup"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Tutup"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Gunakan kunci sandi tersimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Gunakan sandi tersimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Gunakan kunci layar untuk login ke <xliff:g id="APP_NAME">%1$s</xliff:g> dengan <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Gunakan login Anda untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Autentikasi opsi login untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Gunakan kunci sandi tersimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Gunakan sandi tersimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Gunakan akun Anda untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Autentikasi opsi login untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Pilih kunci sandi tersimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Pilih sandi tersimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Pilih info login tersimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Pilih login untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Pilih akun untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Pilih opsi untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Gunakan info ini di <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Login dengan cara lain"</string>
diff --git a/packages/CredentialManager/res/values-is/strings.xml b/packages/CredentialManager/res/values-is/strings.xml
index 9fd552b..cc405b4 100644
--- a/packages/CredentialManager/res/values-is/strings.xml
+++ b/packages/CredentialManager/res/values-is/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Búa til aðgangslykil til að skrá þig inn á <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"Vista aðgangsorð til að skrá þig inn á <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Viltu vista innskráningarupplýsingar fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Nota skjálásinn til að búa til aðgangslykil fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Nota skjálásinn til að búa til aðgangsorð fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Nota skjálásinn til að vista innskráningarupplýsingar fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="passkey" msgid="632353688396759522">"aðgangslykill"</string>
<string name="password" msgid="6738570945182936667">"aðgangsorð"</string>
<string name="passkeys" msgid="5733880786866559847">"aðgangslykla"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Fara aftur á fyrri síðu"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Loka"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Hunsa"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Nota vistaðan aðgangslykil fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Nota vistaða aðgangsorðið þitt fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Notaðu skjálásinn þinn til að skrá þig inn á <xliff:g id="APP_NAME">%1$s</xliff:g> með <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Nota innskráningu fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Opna fyrir innskráningarvalkosti fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Nota vistaðan aðgangslykil fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Nota vistað aðgangsorð fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Nota reikninginn þinn fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Opna innskráningaraðferð fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Veldu vistaðan aðgangslykil fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Veldu vistað aðgangsorð fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Veldu vistaða innskráningu fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Veldu innskráningu fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Veldu reikning fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Velja valkost fyrir <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Nota þessar upplýsingar í <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Skrá inn með öðrum hætti"</string>
diff --git a/packages/CredentialManager/res/values-it/strings.xml b/packages/CredentialManager/res/values-it/strings.xml
index 0d6f839..94f90e2b 100644
--- a/packages/CredentialManager/res/values-it/strings.xml
+++ b/packages/CredentialManager/res/values-it/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Creare passkey per accedere all\'app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"Salvare password per accedere all\'app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Vuoi salvare i dati di accesso di <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Usare il blocco schermo per creare una passkey per <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Usare il blocco schermo per creare una password per <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Usare il blocco schermo per salvare le informazioni di accesso per <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="passkey" msgid="632353688396759522">"passkey"</string>
<string name="password" msgid="6738570945182936667">"password"</string>
<string name="passkeys" msgid="5733880786866559847">"passkey"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Torna alla pagina precedente"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Chiudi"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Chiudi"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Vuoi usare la passkey salvata per <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Vuoi usare la password salvata per <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Usa il blocco schermo per accedere a <xliff:g id="APP_NAME">%1$s</xliff:g> con <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Vuoi usare il tuo accesso per <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Vuoi sbloccare le opzioni di accesso per <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Usa la passkey salvata per <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Usa la password salvata per <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Usa il tuo account per <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Sblocca le opzioni di accesso per <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Scegli una passkey salvata per <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Scegli una password salvata per <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Scegli un accesso salvato per <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Scegli un accesso per <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Scegli un account per <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Vuoi scegliere un\'opzione per <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Vuoi usare questi dati su <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Accedi in un altro modo"</string>
diff --git a/packages/CredentialManager/res/values-iw/strings.xml b/packages/CredentialManager/res/values-iw/strings.xml
index 7d24825..46ad865 100644
--- a/packages/CredentialManager/res/values-iw/strings.xml
+++ b/packages/CredentialManager/res/values-iw/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"××׊×ך ××€×ª× ×××©× ××× ××××× ×¡ ××ש××× ×-<xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"×ש××ך ×ת ×ס×ס×× ××× ××××× ×¡ ××ש××× ×-<xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"×ש××ך ×ת ׀ך×× ××× ××¡× ×©× <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"××שת×ש ×× ×¢××ת ×××¡× ××× ××׊×ך ××€×ª× ×××©× ×ש××× <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"××שת×ש ×× ×¢××ת ×××¡× ××× ××׊×ך ס×ס×× ×ש××× <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"××שת×ש ×× ×¢××ת ×××¡× ××× ×ש××ך ×ת ׀ך×× ××× ××¡× ×ש××× <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="passkey" msgid="632353688396759522">"××€×ª× ××ש×"</string>
<string name="password" msgid="6738570945182936667">"ס×ס××"</string>
<string name="passkeys" msgid="5733880786866559847">"×׀ת××ת ××ש×"</string>
@@ -71,15 +68,15 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"×××š× ×××£ ××§×××"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"ס××ך×"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"ס××ך×"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"××שת×ש ×××€×ª× ×××©× ×©× ×©×ך ×¢××ך <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"××שת×ש ×ס×ס×× ×ש×××š× ×©× <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"ש×××ש ×ש××× ×××××× × ×¢××ת ×××¡× ××× ××××× ×¡ ××ש××× ×©× <xliff:g id="USERNAME">%2$s</xliff:g> ×-<xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"××שת×ש ××ש××× ×©×× ××× ××××× ×¡ ×× <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"×××× ×ת ×× ×¢××× ×©× ×׀שך×××ת ××× ××¡× ×× <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"ש×××ש ×××€×ª× ××××©× ×ש××ך ×©× <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"ש×××ש ×ס×ס×× ×ש×××š× ×©× <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"ש×××ש ××ש××× ×©× <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_description_single_tap" msgid="2797059565126030879">"ש×××ש ×ש××× ×××××× × ×¢××ת ×××¡× ××× ××××× ×¡ ××ש××× ×©× <xliff:g id="USERNAME">%2$s</xliff:g> ×-<xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"××××× ×× ×¢××× ×©× ×××Š×¢× ××× ××¡× ×× <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"×××ךת ××€×ª× ×××©× ×©××ך ×-<xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"×××ךת ס×ס×× ×©×××š× ×-<xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"×××ךת ׀ך×× ×× ××¡× ×©××ך×× ×-<xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"×××ךת ×ש××× ××× ××¡× ×× <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"׊ך×× ××××ך ×ש××× ××× ××¡× ×× <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"ך××Š× ××××ך ×׀שך×ת ×¢××ך <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"××שת×ש ×××××¢ ××× ×ש××× <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"×× ××¡× ×××š× ××ךת"</string>
diff --git a/packages/CredentialManager/res/values-ja/strings.xml b/packages/CredentialManager/res/values-ja/strings.xml
index 16e3195..afe11361 100644
--- a/packages/CredentialManager/res/values-ja/strings.xml
+++ b/packages/CredentialManager/res/values-ja/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"<xliff:g id="APP_NAME">%1$s</xliff:g> ã«ãã°ã€ã³ããããã«ãã¹ããŒãäœæããŸããïŒ"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"<xliff:g id="APP_NAME">%1$s</xliff:g> ã«ãã°ã€ã³ããããã«ãã¹ã¯ãŒããä¿åããŸããïŒ"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"<xliff:g id="APP_NAME">%1$s</xliff:g> ã®ãã°ã€ã³æ
å ±ãä¿åããŸããïŒ"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"ç»é¢ããã¯ã䜿çšã㊠<xliff:g id="APP_NAME">%1$s</xliff:g> ã®ãã¹ããŒãäœæããŸããïŒ"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"ç»é¢ããã¯ã䜿çšã㊠<xliff:g id="APP_NAME">%1$s</xliff:g> ã®ãã¹ã¯ãŒããäœæããŸããïŒ"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"ç»é¢ããã¯ã䜿çšã㊠<xliff:g id="APP_NAME">%1$s</xliff:g> ã®ãã°ã€ã³æ
å ±ãä¿åããŸããïŒ"</string>
<string name="passkey" msgid="632353688396759522">"ãã¹ããŒ"</string>
<string name="password" msgid="6738570945182936667">"ãã¹ã¯ãŒã"</string>
<string name="passkeys" msgid="5733880786866559847">"ãã¹ããŒ"</string>
@@ -71,15 +68,15 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"åã®ããŒãžã«æ»ããŸã"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"éãã"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"éãã"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> ã®ä¿åãããã¹ããŒã䜿çšããŸããïŒ"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> ã®ä¿åãããã¹ã¯ãŒãã䜿çšããŸããïŒ"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"ç»é¢ããã¯ã䜿çšã㊠<xliff:g id="USERNAME">%2$s</xliff:g> ã§ <xliff:g id="APP_NAME">%1$s</xliff:g> ã«ãã°ã€ã³ã§ããŸã"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"ãã®èªèšŒæ
å ±ã䜿çšã㊠<xliff:g id="APP_NAME">%1$s</xliff:g> ã«ãã°ã€ã³ããŸããïŒ"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> ããã°ã€ã³æ¹æ³ã䜿çšã§ããããã«ããŸããïŒ"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"ä¿åãããã¹ããŒã <xliff:g id="APP_NAME">%1$s</xliff:g> ã«äœ¿çšãã"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"ä¿åãããã¹ã¯ãŒãã <xliff:g id="APP_NAME">%1$s</xliff:g> ã«äœ¿çšãã"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"ã¢ã«ãŠã³ãã <xliff:g id="APP_NAME">%1$s</xliff:g> ã«äœ¿çšãã"</string>
+ <string name="get_dialog_description_single_tap" msgid="2797059565126030879">"ç»é¢ããã¯ã䜿çšã㊠<xliff:g id="USERNAME">%2$s</xliff:g> ã§ <xliff:g id="APP_NAME">%1$s</xliff:g> ã«ãã°ã€ã³ã§ããŸã"</string>
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g> ããã°ã€ã³æ¹æ³ã䜿çšã§ããããã«ãã"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> ã«äœ¿çšãããã¹ããŒãéžæããŠãã ãã"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> ã«äœ¿çšãããã¹ã¯ãŒããéžæããŠãã ãã"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> ã«äœ¿çšãããã°ã€ã³æ
å ±ãéžæããŠãã ãã"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> ã®ãã°ã€ã³ã«äœ¿çšããèªèšŒæ
å ±ã®éžæ"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g> çšã®ã¢ã«ãŠã³ããéžæãã"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> ã®ãªãã·ã§ã³ãéžæããŸããïŒ"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g> ã§ãã®æ
å ±ã䜿çšããŸããïŒ"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"å¥ã®æ¹æ³ã§ãã°ã€ã³"</string>
diff --git a/packages/CredentialManager/res/values-ka/strings.xml b/packages/CredentialManager/res/values-ka/strings.xml
index a852f1c..4224da6 100644
--- a/packages/CredentialManager/res/values-ka/strings.xml
+++ b/packages/CredentialManager/res/values-ka/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"ášáá¡áá¡áááááá á¬áááááá¡ ááá¡ááŠáááá¡ ášáá¥ááá: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"ášáá¡áá¡ááááá ááá áááá¡ ášáááá®áá: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"ááášá ášáá¡áááá¡ ááá€áá áááªááá¡ ášáááá®áá: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"áá¡á£á á áá¥áááá ááá áááá¡ ááááááááá¡ ááááá§ááááá <xliff:g id="APP_NAME">%1$s</xliff:g>-áá¡áááá¡ á¬áááááá¡ ááá¡ááŠáááá¡ ášáá¡áá¥áááááá?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"áá¡á£á á áá¥áááá ááá áááá¡ ááááááááá¡ ááááá§ááááá <xliff:g id="APP_NAME">%1$s</xliff:g>-áá¡áááá¡ ááá áááá¡ ášáá¡áá¥áááááá?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"áá¡á£á á áá¥áááá ááá áááá¡ ááááááááá¡ ááááá§ááááá ášáá¡áááá¡ ááá€áá áááªááá¡ ášáá¡áááá®áá <xliff:g id="APP_NAME">%1$s</xliff:g>-áá¡áááá¡?"</string>
<string name="passkey" msgid="632353688396759522">"á¬áááááá¡ ááá¡ááŠááá"</string>
<string name="password" msgid="6738570945182936667">"ááá ááá"</string>
<string name="passkeys" msgid="5733880786866559847">"á¬áááááá¡ ááá¡ááŠááá"</string>
@@ -71,15 +68,15 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"á¬ááá áááá ááá áááá á£áááá"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"ááá®á£á áá"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"ááá®á£á áá"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"áá¡á£á á áá¥áááá ááááá®á¡ááá ááá£áá á¬áááááá¡ ááá¡ááŠáááá¡ ááááá§ááááá áááá¡áááá¡: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"áááááá§ááááá ášáááá®á£á ááá ááá¡ <xliff:g id="APP_NAME">%1$s</xliff:g>-á¡áááá¡?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"áááááá§áááá áá¥áááá ááá áááá¡ ááááááááá¡ á€á£áá¥áªáá <xliff:g id="APP_NAME">%1$s</xliff:g>-ášá <xliff:g id="USERNAME">%2$s</xliff:g>-áá ášáá¡áá¡áááááá"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"áá¡á£á á ášáá¡áááá¡ <xliff:g id="APP_NAME">%1$s</xliff:g>-áá¡áááá¡ ááááá§ááááá?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"áá¡á£á á ášáá¡áááá¡ ááá áááá¢áááá¡ ááááááááá <xliff:g id="APP_NAME">%1$s</xliff:g>-á¡áááá¡?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"áá¥áááá ááááá®á¡ááá ááá£áá á¬áááááá¡ ááá¡ááŠáááá¡ ááááá§ááááá <xliff:g id="APP_NAME">%1$s</xliff:g>-áá¡áááá¡"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"áááááá§áááá ášáááá®á£áá ááá ááá <xliff:g id="APP_NAME">%1$s</xliff:g>-áá¡áááá¡"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"áááááá§áááá áá¥áááá ááááá áášá <xliff:g id="APP_NAME">%1$s</xliff:g>-áá¡áááá¡"</string>
+ <string name="get_dialog_description_single_tap" msgid="2797059565126030879">"áááááá§áááá áá¥áááá ááá áááá¡ ááááááááá¡ á€á£áá¥áªáá <xliff:g id="APP_NAME">%1$s</xliff:g>-ášá <xliff:g id="USERNAME">%2$s</xliff:g>-áá ášáá¡áá¡áááááá"</string>
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"ášáá¡áááá¡ ááá áááá¢áááá¡ ááááááááá <xliff:g id="APP_NAME">%1$s</xliff:g>-áá¡áááá¡"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"ááá á©ááá ášáááá®á£áá á¬áááááá¡ ááá¡ááŠááá <xliff:g id="APP_NAME">%1$s</xliff:g>-á¡áááá¡"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"ááá á©ááá ášáááá®á£áá ááá ááá <xliff:g id="APP_NAME">%1$s</xliff:g>-á¡áááá¡"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"ááá á©ááá á¡áá¡á¢áááášá ášáá¡áááá¡ ááá€áá áááªáá <xliff:g id="APP_NAME">%1$s</xliff:g>-á¡áááá¡"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"ááá á©ááá ášáá¡ááá <xliff:g id="APP_NAME">%1$s</xliff:g>-áá¡áááá¡"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"ááá á©ááá ááááá áášá <xliff:g id="APP_NAME">%1$s</xliff:g>-áá¡áááá¡"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"áá¡á£á á ááá á©ááá ááá áááá¢á <xliff:g id="APP_NAME">%1$s</xliff:g>-áá¡áááá¡?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"áá¡á£á á áá ááá€áá áááªááá¡ ááááá§ááááá <xliff:g id="APP_NAME">%1$s</xliff:g>-ášá?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"á¡á®áá á®áá á®áá ášáá¡ááá"</string>
diff --git a/packages/CredentialManager/res/values-kk/strings.xml b/packages/CredentialManager/res/values-kk/strings.xml
index 03eb9d2..97506ec 100644
--- a/packages/CredentialManager/res/values-kk/strings.xml
+++ b/packages/CredentialManager/res/values-kk/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"<xliff:g id="APP_NAME">%1$s</xliff:g> ÒПлЎаМбаÑÑМа кÑÑÑ Ò¯ÑÑМ кÑÑÑ ÐºÑлÑÑ Ð¶Ð°ÑалÑÑМ ба?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"<xliff:g id="APP_NAME">%1$s</xliff:g> ÒПлЎаМбаÑÑМа кÑÑÑ Ò¯ÑÑМ ÒÒ±Ð¿ÐžÑ Ñөз ÑаÒÑалÑÑМ ба?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"<xliff:g id="APP_NAME">%1$s</xliff:g> Ò¯ÑÑМ кÑÑÑ ÐŒÓлÑЌеÑÑМ ÑаÒÑÐ°Ñ ÐºÐµÑек пе?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"<xliff:g id="APP_NAME">%1$s</xliff:g> кÑÑÑ ÐºÑлÑÑМ жаÑÐ°Ñ Ò¯ÑÑМ ÑкÑаМ ÒұлпÑМ пайЎалаМаÑÑз ба?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"<xliff:g id="APP_NAME">%1$s</xliff:g> ÒÒ±Ð¿ÐžÑ ÑөзÑМ жаÑÐ°Ñ Ò¯ÑÑМ ÑкÑаМ ÒұлпÑМ пайЎалаМаÑÑз ба?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"<xliff:g id="APP_NAME">%1$s</xliff:g> ÒПлЎаМбаÑÑМЎаÒÑ Ð°ÐºÐºÐ°ÑМÑÒа кÑÑÑ Ð°ÒпаÑаÑÑМ ÑаÒÑÐ°Ñ Ò¯ÑÑМ ÑкÑаМ ÒұлпÑМ пайЎалаМаÑÑз ба?"</string>
<string name="passkey" msgid="632353688396759522">"ÐÑÑÑ ÐºÑлÑÑ"</string>
<string name="password" msgid="6738570945182936667">"ÒÒ±Ð¿ÐžÑ Ñөз"</string>
<string name="passkeys" msgid="5733880786866559847">"кÑÑÑ ÐºÑлÑÑеÑÑ"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"ÐлЎÑÒ£ÒÑ Ð±ÐµÑке ПÑалÑ"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"ÐабÑ"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"ÐабÑ"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> Ò¯ÑÑМ ÑаÒÑалÒаМ кÑÑÑ ÐºÑлÑÑ Ð¿Ð°Ð¹ÐŽÐ°Ð»Ð°ÐœÑлÑÑМ ба?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> Ò¯ÑÑМ ÑаÒÑалÒаМ ÒÒ±Ð¿ÐžÑ ÑөзÑÒ£ÑÐ·ÐŽÑ Ð¿Ð°Ð¹ÐŽÐ°Ð»Ð°ÐœÐ°ÑÑз ба?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"<xliff:g id="APP_NAME">%1$s</xliff:g> ÒПлЎаМбаÑÑМа <xliff:g id="USERNAME">%2$s</xliff:g> аккаÑМÑÑЌеМ кÑÑÑ Ò¯ÑÑМ ÑкÑаМ ÒұлпÑМ ÒПлЎаМÑÒ£Ñз."</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> ÒПлЎаМбаÑÑМа кÑÑÑ ÐŽÐµÑекÑеÑÑМ пайЎалаМаÑÑз ба?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> Ò¯ÑÑМ кÑÑÑ ÐŸÐ¿ÑОÑлаÑÑ Ð°ÑÑлÑÑМ ба?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"<xliff:g id="APP_NAME">%1$s</xliff:g> Ò¯ÑÑМ ÑаÒÑалÒаМ кÑÑÑ ÐºÑлÑÑ Ð¿Ð°Ð¹ÐŽÐ°Ð»Ð°ÐœÑÒ£Ñз"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"<xliff:g id="APP_NAME">%1$s</xliff:g> Ò¯ÑÑМ ÑаÒÑалÒаМ ÒÒ±Ð¿ÐžÑ ÑÓ©Ð·ÐŽÑ Ð¿Ð°Ð¹ÐŽÐ°Ð»Ð°ÐœÑÒ£Ñз"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"<xliff:g id="APP_NAME">%1$s</xliff:g> Ò¯ÑÑМ аккаÑМÑÑÒ£ÑÐ·ÐŽÑ Ð¿Ð°Ð¹ÐŽÐ°Ð»Ð°ÐœÑÒ£Ñз"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g> Ò¯ÑÑМ аккаÑМÑÒа кÑÑÑ ÓÐŽÑÑÑеÑÑМ аÑÑÒ£Ñз"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> Ò¯ÑÑМ ÑаÒÑалÒаМ кÑÑÑ ÐºÑлÑÑМ ÑаңЎаңÑз"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> Ò¯ÑÑМ ÑаÒÑалÒаМ ÒÒ±Ð¿ÐžÑ ÑÓ©Ð·ÐŽÑ ÑаңЎаңÑз"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> Ò¯ÑÑМ ÑаÒÑалÒаМ кÑÑÑ ÐŽÐµÑекÑеÑÑМ ÑаңЎаңÑз"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> ÒПлЎаМбаÑÑМа кÑÑÑ ÐŽÐµÑекÑеÑÑМ ÑаңЎаңÑз"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g> Ò¯ÑÑМ аккаÑÐœÑ ÑаңЎаңÑз"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> Ò¯ÑÑМ ПпÑÐžÑ ÑаңЎайÑÑз ба?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Ðұл аÒпаÑÐ°Ñ <xliff:g id="APP_NAME">%1$s</xliff:g> ÒПлЎаМбаÑÑМЎа ÑаÒÑалÑÑМ ба?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"ÐаÑÒаÑа кÑÑÑ"</string>
diff --git a/packages/CredentialManager/res/values-km/strings.xml b/packages/CredentialManager/res/values-km/strings.xml
index 279474f..64b0376 100644
--- a/packages/CredentialManager/res/values-km/strings.xml
+++ b/packages/CredentialManager/res/values-km/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"áááááŸáááŒáááááá¶áá ááŸáááážá
áŒáááááž <xliff:g id="APP_NAME">%1$s</xliff:g> á¬?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"ááááá¶áá»ááá¶áááááááá¶áá ááŸáááážá
áŒáááááž <xliff:g id="APP_NAME">%1$s</xliff:g> á¬?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"ááááá¶áá»áâáááááá¶áá
áŒááááážááááá¶áá <xliff:g id="APP_NAME">%1$s</xliff:g> á¬?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"ááááŸáá»ááá¶áá
á¶ááááá¢ááááááááááá¢ááá ááŸáááážáááááŸáááŒáááááá¶ááááááá¶áá <xliff:g id="APP_NAME">%1$s</xliff:g> á¬?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"ááááŸáá»ááá¶áá
á¶ááááá¢ááááááááááá¢ááá ááŸáááážáááááŸááá¶áááááááá¶ááááááá¶áá <xliff:g id="APP_NAME">%1$s</xliff:g> á¬?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"ááááŸáá»ááá¶áá
á¶ááááá¢ááááááááááá¢ááá ááŸáááážááááá¶áá»ááááááá¶áá
áŒááááážááááá¶áá <xliff:g id="APP_NAME">%1$s</xliff:g> á¬?"</string>
<string name="passkey" msgid="632353688396759522">"ááŒáááááá¶áá"</string>
<string name="password" msgid="6738570945182936667">"áá¶áááááááá¶áá"</string>
<string name="passkeys" msgid="5733880786866559847">"ááŒáááááá¶áá"</string>
@@ -71,15 +68,15 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"áááá¡áááá
âáááááâáá»ááá·á"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"áá·á"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"á
ááá¶áá
áá"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"ááááŸááŒáááááá¶ááááááá¶áááááá¶áá»áááááá¢áááááááá¶áá <xliff:g id="APP_NAME">%1$s</xliff:g> á¬?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"ááááŸáá¶áááááááá¶ááâáááá¢ááááá¶áâááááá¶áá»áááááá¶áá <xliff:g id="APP_NAME">%1$s</xliff:g> á¬?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"ááááŸáá»ááá¶áá
á¶ááááá¢ááááááááááá¢ááá ááŸáááážá
áŒá <xliff:g id="APP_NAME">%1$s</xliff:g> áááááá០<xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"ááááŸáá¶áá
áŒááááážááááá¢áááááááá¶áá <xliff:g id="APP_NAME">%1$s</xliff:g> á¬?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"áááâáááááááŸáá
áŒáâáááážááááá¶áá <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"ááááŸááŒáááááá¶áááááá¢ááááá¶áááááá¶áá»áááááá¶áá <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"ááááŸáá¶áááááááá¶ááâáááá¢ááááá¶áâááááá¶áá»áááááá¶áá <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"ááááŸáááážááááá¢áááááááá¶áá <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_description_single_tap" msgid="2797059565126030879">"ááááŸáá»ááá¶áá
á¶ááááá¢ááááááááááá¢ááá ááŸáááážá
áŒá <xliff:g id="APP_NAME">%1$s</xliff:g> áááááá០<xliff:g id="USERNAME">%2$s</xliff:g>"</string>
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"áááâáááááááŸáá
áŒáâáááážááááá¶áá <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"ááááŸáááŸáááŒáááááá¶ááááááá¶áááááá¶áá»áááááá¶áá <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"ááááŸáááŸááá¶áááâááááá¶ááááááá¶áááááá¶áá»áááááá¶áá <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"ááááŸáááŸááá¶áá
áŒááááážááááá¶áááááá¶áá»áááááá¶áá <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"ááááŸáááŸááá¶áá
áŒááááážááááá¶áá <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"ááááŸáááŸááááážâááááá¶áá <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"ááááŸáááŸááááááŸáááááá¶áá <xliff:g id="APP_NAME">%1$s</xliff:g> á¬?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"ááááŸáááááá¶ááááâáá
á០<xliff:g id="APP_NAME">%1$s</xliff:g> á¬?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"á
áŒááááážáááááááŸáá·áážáááááááá"</string>
diff --git a/packages/CredentialManager/res/values-kn/strings.xml b/packages/CredentialManager/res/values-kn/strings.xml
index 2f090e4..2d46093 100644
--- a/packages/CredentialManager/res/values-kn/strings.xml
+++ b/packages/CredentialManager/res/values-kn/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"<xliff:g id="APP_NAME">%1$s</xliff:g> à²à³ ಞà³à²šà³ à²à²šà³ ಮಟಡಲೠಪಟಞà³à²à³ ಯಚà³à²šà³ ರà²à²¿à²žà²¬à³à²à³?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"<xliff:g id="APP_NAME">%1$s</xliff:g> à²à³ ಞà³à²šà³ à²à²šà³ ಮಟಡಲೠಪಟಞà³à²µà²°à³à²¡à³ à²
ಚà³à²šà³ ಞà³à²µà³ ಮಟಡಬà³à²à³?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"<xliff:g id="APP_NAME">%1$s</xliff:g> à²à²Ÿà²à²¿ ಞà³à²šà³-à²à²šà³ ಮಟಹಿಀಿಯಚà³à²šà³ ಞà³à²µà³ ಮಟಡಬà³à²à³?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"<xliff:g id="APP_NAME">%1$s</xliff:g> à²à²Ÿà²à²¿ ಪಟಞà³à²à³à²¯à²šà³à²šà³ ರà²à²¿à²žà²²à³ ಚಿಮà³à²® ಞà³à²à³à²°à³à²šà³ ಲಟà²à³ à²
ಚà³à²šà³ ಬಳಞà³à²µà³à²Šà³?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"<xliff:g id="APP_NAME">%1$s</xliff:g> à²à²Ÿà²à²¿ ಪಟಞà³à²µà²°à³à²¡à³ à²
ಚà³à²šà³ ರà²à²¿à²žà²²à³ ಚಿಮà³à²® ಞà³à²à³à²°à³à²šà³ ಲಟà²à³ à²
ಚà³à²šà³ ಬಳಞà³à²µà³à²Šà³?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"<xliff:g id="APP_NAME">%1$s</xliff:g> à²à²Ÿà²à²¿ ಞà³à²šà³ à²à²šà³ ಮಟಹಿಀಿಯಚà³à²šà³ ಞà³à²µà³ ಮಟಡಲೠಚಿಮà³à²® ಞà³à²à³à²°à³à²šà³ ಲಟà²à³ à²
ಚà³à²šà³ ಬಳಞà³à²µà³à²Šà³?"</string>
<string name="passkey" msgid="632353688396759522">"ಪಟಞà³à²à³"</string>
<string name="password" msgid="6738570945182936667">"ಪಟಞà³à²µà²°à³à²¡à³"</string>
<string name="passkeys" msgid="5733880786866559847">"ಪಟಞà³à²à³à²à²³à³"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"ಹಿà²à²Šà²¿à²š ಪà³à²à²à³à²à³ ಹಿà²à²Šà²¿à²°à³à²à²¿"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"ಮà³à²à³à²à²¿à²°à²¿"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"ವà²à²Ÿà²à³à²³à²¿à²žà²¿"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> à²à²Ÿà²à²¿ à²à²³à²¿à²žà²²à²Ÿà²Š ಚಿಮà³à²® ಪಟಞà³à²à³ à²
ಚà³à²šà³ ಬಳಞಬà³à²à³?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> à²à²Ÿà²à²¿ ಚಿಮà³à²® à²à²³à²¿à²žà²²à²Ÿà²Š ಪಟಞà³à²µà²°à³à²¡à³ à²
ಚà³à²šà³ ಬಳಞಬà³à²à³?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"<xliff:g id="APP_NAME">%1$s</xliff:g> à²à³ <xliff:g id="USERNAME">%2$s</xliff:g> ಮà³à²²à² ಞà³à²šà³ à²à²šà³ ಮಟಡಲೠಚಿಮà³à²® ಞà³à²à³à²°à³à²šà³ ಲಟà²à³ à²
ಚà³à²šà³ ಬಳಞಿ"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> à²à²Ÿà²à²¿ ಚಿಮà³à²® ಞà³à²šà³ à²à²šà³ à²
ಚà³à²šà³ ಬಳಞಬà³à²à³?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> à²à²Ÿà²à²¿ ಞà³à²šà³-à²à²šà³ à²à²¯à³à²à³à²à²³à²šà³à²šà³ à²
ಚà³à²²à²Ÿà²à³ ಮಟಡಬà³à²à³?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"<xliff:g id="APP_NAME">%1$s</xliff:g> à²à²Ÿà²à²¿ ಞà³à²µà³ ಮಟಡಿಊ ಚಿಮà³à²® ಪಟಞà³à²à³ à²
ಚà³à²šà³ ಬಳಞಿ"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"<xliff:g id="APP_NAME">%1$s</xliff:g> à²à²Ÿà²à²¿ ಞà³à²µà³ ಮಟಡಿಊ ಚಿಮà³à²® ಪಟಞà³à²µà²°à³à²¡à³ à²
ಚà³à²šà³ ಬಳಞಿ"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"<xliff:g id="APP_NAME">%1$s</xliff:g> à²à²Ÿà²à²¿ ಚಿಮà³à²® à²à²Ÿà²€à³à²¯à²šà³à²šà³ ಬಳಞಿ"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g> à²à²Ÿà²à²¿ ಞà³à²šà³ à²à²šà³ à²à²¯à³à²à³à²à²³à²šà³à²šà³ à²
ಚà³à²²à²Ÿà²à³ ಮಟಡಿ"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> à²à²Ÿà²à²¿ à²à²³à²¿à²žà²²à²Ÿà²Š ಪಟಞà³à²à³ à²
ಚà³à²šà³ à²à²°à²¿à²žà²¿"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> à²à²Ÿà²à²¿ à²à²³à²¿à²žà²²à²Ÿà²Š ಪಟಞà³à²µà²°à³à²¡à³ à²
ಚà³à²šà³ à²à²°à²¿à²žà²¿"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> à²à²Ÿà²à²¿ à²à²³à²¿à²žà²²à²Ÿà²Š ಞà³à²šà³-à²à²šà³ ಮಟಹಿಀಿಯಚà³à²šà³ à²à²¯à³à²à³à²®à²Ÿà²¡à²¿"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> à²à²Ÿà²à²¿ ಞà³à²šà³ à²à²šà³ à²
ಚà³à²šà³ à²à²°à²¿à²žà²¿"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g> à²à²Ÿà²à²¿ à²à²à²Šà³ à²à²Ÿà²€à³à²¯à²šà³à²šà³ à²à²¯à³à²à³à²®à²Ÿà²¡à²¿"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> à²à²Ÿà²à²¿ à²à²¯à³à²à³à²¯à²šà³à²šà³ à²à²°à²¿à²žà²¬à³à²à³?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"ಠಮಟಹಿಀಿಯಚà³à²šà³ <xliff:g id="APP_NAME">%1$s</xliff:g> ಚಲà³à²²à²¿ ಬಳಞಬà³à²à³?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"ಬà³à²°à³ ವಿಧಟಚಊಲà³à²²à²¿ ಞà³à²šà³ à²à²šà³ ಮಟಡಿ"</string>
diff --git a/packages/CredentialManager/res/values-ko/strings.xml b/packages/CredentialManager/res/values-ko/strings.xml
index f2ead85..0465c13 100644
--- a/packages/CredentialManager/res/values-ko/strings.xml
+++ b/packages/CredentialManager/res/values-ko/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"<xliff:g id="APP_NAME">%1$s</xliff:g>ì íšì€í€ë¥Œ ìì±í ê¹ì?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"ë¹ë°ë²ížë¥Œ ì ì¥íì¬ <xliff:g id="APP_NAME">%1$s</xliff:g>ì ë¡ê·žìžíìê² ìµëê¹?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"<xliff:g id="APP_NAME">%1$s</xliff:g>ì ë¡ê·žìž ì 볎륌 ì ì¥íìê² ìµëê¹?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"<xliff:g id="APP_NAME">%1$s</xliff:g>ì© íšì€í€ë¥Œ ìì±íêž° ìíŽ í멎 ì êžì ì¬ì©íìê² ìµëê¹?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"<xliff:g id="APP_NAME">%1$s</xliff:g>ì© íšì€í€ë¥Œ ìì±íêž° ìíŽ ë¹ë°ë²ížë¥Œ ì¬ì©íìê² ìµëê¹?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"<xliff:g id="APP_NAME">%1$s</xliff:g>ì© ë¡ê·žìž ì 볎륌 ì ì¥íêž° ìíŽ í멎 ì êžì ì¬ì©íìê² ìµëê¹?"</string>
<string name="passkey" msgid="632353688396759522">"íšì€í€"</string>
<string name="password" msgid="6738570945182936667">"ë¹ë°ë²íž"</string>
<string name="passkeys" msgid="5733880786866559847">"íšì€í€"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"ìŽì íìŽì§ë¡ ëìê°êž°"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"ë«êž°"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"ë«êž°"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> ì±ì©ìŒë¡ ì ì¥ë íšì€í€ë¥Œ ì¬ì©íìê² ìµëê¹?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"ì ì¥ë ë¹ë°ë²ížë¥Œ <xliff:g id="APP_NAME">%1$s</xliff:g>ì ì¬ì©í ê¹ì?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"í멎 ì êžì ì¬ì©íì¬ <xliff:g id="USERNAME">%2$s</xliff:g> ê³ì ìŒë¡ <xliff:g id="APP_NAME">%1$s</xliff:g>ì ë¡ê·žìží©ëë€."</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g>ì ë¡ê·žìžì ì¬ì©íìê² ìµëê¹?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g>ì ëíŽ ë¡ê·žìž ìµì
ì ì êž íŽì íìê² ìµëê¹?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"<xliff:g id="APP_NAME">%1$s</xliff:g> ì±ì ëíŽ ì ì¥ë íšì€í€ë¥Œ ì¬ì©íìê² ìµëê¹?"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"<xliff:g id="APP_NAME">%1$s</xliff:g> ì±ì ëíŽ ì ì¥ë ë¹ë°ë²ížë¥Œ ì¬ì©íìê² ìµëê¹?"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"<xliff:g id="APP_NAME">%1$s</xliff:g> ì±ì ê³ì ì ì¬ì©íìê² ìµëê¹?"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g> ì±ì ëíŽ ë¡ê·žìž ìµì
ì ì êž íŽì íìê² ìµëê¹?"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g>ì ëíŽ ì ì¥ë íšì€í€ ì í"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g>ì ëíŽ ì ì¥ë ë¹ë°ë²íž ì í"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g>ì ëíŽ ì ì¥ë ë¡ê·žìž ì 볎 ì í"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g>ì ì¬ì©í ë¡ê·žìž ì í"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g> ì±ì ì¬ì©í ê³ì ì í"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> ì±ì ìµì
ì ì ííìê² ìµëê¹?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g>ìì ìŽ ì 볎륌 ì¬ì©íìëì?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"ë€ë¥ž ë°©ë²ìŒë¡ ë¡ê·žìž"</string>
diff --git a/packages/CredentialManager/res/values-ky/strings.xml b/packages/CredentialManager/res/values-ky/strings.xml
index 4e3fed1..49f946d 100644
--- a/packages/CredentialManager/res/values-ky/strings.xml
+++ b/packages/CredentialManager/res/values-ky/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"<xliff:g id="APP_NAME">%1$s</xliff:g> кПлЎПМЌПÑÑМа кОÑÒ¯Ò¯ Ò¯ÑүМ кОÑгОзүүÑÒ¯ аÑкÑÑÑÑ ÑүзөÑүзбү?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"<xliff:g id="APP_NAME">%1$s</xliff:g> кПлЎПМЌПÑÑМа кОÑÒ¯Ò¯ Ò¯ÑүМ ÑÑÑÑөзЎү ÑакÑайÑÑзбÑ?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"<xliff:g id="APP_NAME">%1$s</xliff:g> Ò¯ÑүМ кОÑÒ¯Ò¯ ЌаалÑЌаÑÑ ÑакÑалÑÑМбÑ?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"<xliff:g id="APP_NAME">%1$s</xliff:g> кПлЎПМЌПÑÑ Ò¯ÑүМ кОÑгОзүүÑÒ¯ аÑкÑÑ ÐºÐ°ÑаÑÑ ÑкÑаМЎÑМ кÑлпÑÑÑМ кПлЎПМПÑÑзбÑ?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"<xliff:g id="APP_NAME">%1$s</xliff:g> кПлЎПМЌПÑÑ Ò¯ÑүМ ÑÑÑÑөз каÑаÑÑ ÑкÑаМЎÑМ кÑлпÑÑÑМ кПлЎПМПÑÑзбÑ?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"<xliff:g id="APP_NAME">%1$s</xliff:g> кПлЎПМЌПÑÑ Ò¯ÑүМ кОÑÒ¯Ò¯ ЌаалÑЌаÑÑ ÐºÐ°ÑаÑÑ ÑкÑаМЎÑМ кÑлпÑÑÑМ кПлЎПМПÑÑзбÑ?"</string>
<string name="passkey" msgid="632353688396759522">"кОÑгОзүүÑÒ¯ аÑкÑÑ"</string>
<string name="password" msgid="6738570945182936667">"ÑÑÑÑөз"</string>
<string name="passkeys" msgid="5733880786866559847">"кОÑгОзүүÑÒ¯ аÑкÑÑÑаÑ"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"ÐÑÑÑÐœÐºÑ Ð±ÐµÑке кайÑÑÑ"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"ÐабÑÑ"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"ÐабÑÑ"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> кПлЎПМЌПÑÑМа кОÑÒ¯Ò¯ Ò¯ÑүМ ÑакÑалгаМ аÑкÑÑÑÑ ÐºÐŸÐ»ÐŽÐŸÐœÐŸÑÑзбÑ?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> Ò¯ÑүМ ÑакÑалгаМ ÑÑÑÑөзЎү кПлЎПМПÑÑзбÑ?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"<xliff:g id="APP_NAME">%1$s</xliff:g> кПлЎПМЌПÑÑМа <xliff:g id="USERNAME">%2$s</xliff:g> аккаÑМÑÑ ÐŒÐµÐœÐµÐœ кОÑÒ¯Ò¯ Ò¯ÑүМ ÑкÑаМЎÑМ кÑлпÑÑÑМ кПлЎПМÑÒ£Ñз"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> кПлЎПМЌПÑÑМа ÑөЌөМкү аккаÑÐœÑ ÐŒÐµÐœÐµÐœ кОÑеÑОзбО?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> Ò¯ÑүМ кОÑÒ¯Ò¯ паÑаЌеÑÑлеÑОМОМ кÑлпÑÑÑ Ð°ÑÑлÑÑМбÑ?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"<xliff:g id="APP_NAME">%1$s</xliff:g> Ò¯ÑүМ ÑакÑалгаМ кОÑгОзүүÑÒ¯ аÑкÑÑÑÑ ÐºÐŸÐ»ÐŽÐŸÐœÑÒ£Ñз"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"<xliff:g id="APP_NAME">%1$s</xliff:g> Ò¯ÑүМ ÑакÑалгаМ ÑÑÑÑөзЎү кПлЎПМÑÒ£Ñз"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"<xliff:g id="APP_NAME">%1$s</xliff:g> Ò¯ÑүМ аккаÑМÑÑÒ£ÑÐ·ÐŽÑ ÐºÐŸÐ»ÐŽÐŸÐœÑÒ£Ñз"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g> Ò¯ÑүМ кОÑÒ¯Ò¯ паÑаЌеÑÑлеÑОМОМ кÑлпÑÑÑМ аÑÑÒ£Ñз"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> Ò¯ÑүМ ÑакÑалгаМ кОÑгОзүүÑÒ¯ аÑкÑÑÑÑ ÑаМЎаңÑз"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> Ò¯ÑүМ ÑакÑалгаМ ÑÑÑÑөзЎү ÑаМЎаңÑз"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> Ò¯ÑүМ кОÑÒ¯Ò¯ ЌаалÑЌаÑÑМ ÑаМЎаңÑз"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> кПлЎПМЌПÑÑМа кайÑÑ Ð°ÐºÐºÐ°ÑÐœÑ ÐŒÐµÐœÐµÐœ кОÑеÑОз:"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g> Ò¯ÑүМ аккаÑÐœÑ ÑаМЎаңÑз"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> Ò¯ÑүМ паÑаЌеÑÑ ÑаМЎайÑÑзбÑ?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"ÐÑл ЌаалÑЌаÑÑÑ <xliff:g id="APP_NAME">%1$s</xliff:g> кПлЎПМЌПÑÑМЎа пайЎалаМаÑÑзбÑ?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"ÐаÑка жПл ЌеМеМ кОÑÒ¯Ò¯"</string>
diff --git a/packages/CredentialManager/res/values-lo/strings.xml b/packages/CredentialManager/res/values-lo/strings.xml
index e0f8839..de5b810 100644
--- a/packages/CredentialManager/res/values-lo/strings.xml
+++ b/packages/CredentialManager/res/values-lo/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"ສà»àº²àºàºàº°à»àºàºà»àº²àºà»àºàº·à»àºà»àºàº»à»àº²àºªàº¹à»àº¥àº°àºàº»àº <xliff:g id="APP_NAME">%1$s</xliff:g> àºà»?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"àºàº±àºàºàº¶àºàº¥àº°àº«àº±àºàºà»àº²àºà»àºàº·à»àºà»àºàº»à»àº²àºªàº¹à»àº¥àº°àºàº»àº <xliff:g id="APP_NAME">%1$s</xliff:g> àºà»?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"àºàº±àºàºàº¶àºàºà»à»àº¡àº¹àºàºàº²àºà»àºàº»à»àº²àºªàº¹à»àº¥àº°àºàº»àºàºªàº³àº¥àº±àº <xliff:g id="APP_NAME">%1$s</xliff:g> àºà»?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"à»àºà»àº¥àº±àºàºà»à»àº²àºà»àºàºàºàºà»àº²àºà»àºàº·à»àºàºªà»àº²àºàºàº°à»àºàºà»àº²àºàºªàº³àº¥àº±àº <xliff:g id="APP_NAME">%1$s</xliff:g> àºà»?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"à»àºà»àº¥àº±àºàºà»à»àº²àºà»àºàºàºàºà»àº²àºà»àºàº·à»àºàºªà»àº²àºàº¥àº°àº«àº±àºàºà»àº²àºàºªàº³àº¥àº±àº <xliff:g id="APP_NAME">%1$s</xliff:g> àºà»?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"à»àºà»àº¥àº±àºàºà»à»àº²àºà»àºàºàºàºà»àº²àºà»àºàº·à»àºàºàº±àºàºàº¶àºàºà»à»àº¡àº¹àºàºàº²àºà»àºàº»à»àº²àºªàº¹à»àº¥àº°àºàº»àºàºªàº³àº¥àº±àº<xliff:g id="APP_NAME">%1$s</xliff:g> àºà»?"</string>
<string name="passkey" msgid="632353688396759522">"àºàº°à»àºàºà»àº²àº"</string>
<string name="password" msgid="6738570945182936667">"ລະຫັàºàºà»àº²àº"</string>
<string name="passkeys" msgid="5733880786866559847">"àºàº°à»àºàºà»àº²àº"</string>
@@ -71,15 +68,15 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"àºàº±àºàºàº·àºà»àºàº«àº²à»à»àº²àºà»àºàºà»à»àº²àºàºµà»"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"àºàºŽàº"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"àºàºŽàºà»àº§à»"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"à»àºà»àºàº°à»àºàºà»àº²àºàºàºµà»àºàº±àºàºàº¶àºà»àº§à»àºàºàºàºà»àº²àºàºªàº³àº¥àº±àº <xliff:g id="APP_NAME">%1$s</xliff:g> àºà»?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"à»àºà»àº¥àº°àº«àº±àºàºà»àº²àºàºàºµà»àºàº±àºàºàº¶àºà»àº§à»àºàºàºàºà»àº²àºàºªàº³àº¥àº±àº <xliff:g id="APP_NAME">%1$s</xliff:g> àºà»?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"à»àºà»àºàº²àºàº¥àº±àºàºà»à»àº²àºà»àºàºàºàºà»àº²àºà»àºàº·à»àºà»àºàº»à»àº²àºªàº¹à»àº¥àº°àºàº»àº <xliff:g id="APP_NAME">%1$s</xliff:g> àºà»àº§àº <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"à»àº¥àº·àºàºàºàº²àºà»àºàº»à»àº²àºªàº¹à»àº¥àº°àºàº»àºàºàºàºàºà»àº²àºàºªàº³àº¥àº±àº <xliff:g id="APP_NAME">%1$s</xliff:g> àºà»?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"àºàº»àºàº¥àº±àºàºàºàº»àº§à»àº¥àº·àºàºàºàº²àºà»àºàº»à»àº²àºªàº¹à»àº¥àº°àºàº»àºàºªàº³àº¥àº±àº <xliff:g id="APP_NAME">%1$s</xliff:g> àºà»?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"à»àºà»àºàº°à»àºàºà»àº²àºàºàºµà»àºàº±àºàºàº¶àºà»àº§à»àºàºàºàºà»àº²àºàºªàº³àº¥àº±àº <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"à»àºà»àº¥àº°àº«àº±àºàºà»àº²àºàºàºµà»àºàº±àºàºàº¶àºà»àº§à»àºàºàºàºà»àº²àºàºªàº³àº¥àº±àº <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"à»àºà»àºàº±àºàºàºµàºàºàºàºà»àº²àºàºªàº³àº¥àº±àº <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_description_single_tap" msgid="2797059565126030879">"à»àºà»àºàº²àºàº¥àº±àºàºà»à»àº²àºà»àºàºàºàºà»àº²àºà»àºàº·à»àºà»àºàº»à»àº²àºªàº¹à»àº¥àº°àºàº»àº <xliff:g id="APP_NAME">%1$s</xliff:g> àºà»àº§àº <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"àºàº»àºàº¥àº±àºàºàºàº»àº§à»àº¥àº·àºàºàºàº²àºà»àºàº»à»àº²àºªàº¹à»àº¥àº°àºàº»àºàºªàº³àº¥àº±àº <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"à»àº¥àº·àºàºàºàº°à»àºàºà»àº²àºàºàºµà»àºàº±àºàºàº¶àºà»àº§à»àºªàº³àº¥àº±àº <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"à»àº¥àº·àºàºàº¥àº°àº«àº±àºàºà»àº²àºàºàºµà»àºàº±àºàºàº¶àºà»àº§à»àºªàº³àº¥àº±àº <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"à»àº¥àº·àºàºàºàº²àºà»àºàº»à»àº²àºªàº¹à»àº¥àº°àºàº»àºàºàºµà»àºàº±àºàºàº¶àºà»àº§à»àºªàº³àº¥àº±àº <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"à»àº¥àº·àºàºàºàº²àºà»àºàº»à»àº²àºªàº¹à»àº¥àº°àºàº»àºàºªàº³àº¥àº±àº <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"à»àº¥àº·àºàºàºàº±àºàºàºµàºªàº³àº¥àº±àº <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"à»àº¥àº·àºàºàºàº»àº§à»àº¥àº·àºàºàºªàº³àº¥àº±àº <xliff:g id="APP_NAME">%1$s</xliff:g> àºà»?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"à»àºà»àºà»à»àº¡àº¹àºàºàºµà»àº¢àº¹à» <xliff:g id="APP_NAME">%1$s</xliff:g> àºà»?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"à»àºàº»à»àº²àºªàº¹à»àº¥àº°àºàº»àºàºà»àº§àºàº§àºŽàºàºµàºàº·à»àº"</string>
diff --git a/packages/CredentialManager/res/values-lt/strings.xml b/packages/CredentialManager/res/values-lt/strings.xml
index 5e0fbe0..b476e2c 100644
--- a/packages/CredentialManager/res/values-lt/strings.xml
+++ b/packages/CredentialManager/res/values-lt/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Sukurti prieigos raktÄ
, skirtÄ
prisijungti prie „<xliff:g id="APP_NAME">%1$s</xliff:g>“?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"Sukurti slaptaÅŸodį, skirtÄ
prisijungti prie „<xliff:g id="APP_NAME">%1$s</xliff:g>“?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Išsaugoti prisijungimo prie „<xliff:g id="APP_NAME">%1$s</xliff:g>“ informacijÄ
?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Sukurti „<xliff:g id="APP_NAME">%1$s</xliff:g>“ prieigos raktÄ
naudojant ekrano uÅŸraktÄ
?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Sukurti „<xliff:g id="APP_NAME">%1$s</xliff:g>“ slaptaÅŸodį naudojant ekrano uÅŸraktÄ
?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Naudoti ekrano uÅŸraktÄ
norint išsaugoti „<xliff:g id="APP_NAME">%1$s</xliff:g>“ prisijungimo informacijÄ
?"</string>
<string name="passkey" msgid="632353688396759522">"„passkey“"</string>
<string name="password" msgid="6738570945182936667">"slaptaÅŸodis"</string>
<string name="passkeys" msgid="5733880786866559847">"prieigos raktas"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Grįşti į ankstesnį puslapį"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"UÅŸdaryti"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Atsisakyti"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Naudoti išsaugotÄ
„passkey“ programai „<xliff:g id="APP_NAME">%1$s</xliff:g>“?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Naudoti išsaugotÄ
slaptaÅŸodį programai „<xliff:g id="APP_NAME">%1$s</xliff:g>“?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Naudodami ekrano uÅŸraktÄ
prisijunkite prie „<xliff:g id="APP_NAME">%1$s</xliff:g>“ kaip <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Naudoti prisijungimo informacijÄ
programai „<xliff:g id="APP_NAME">%1$s</xliff:g>“?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Atrakinti prisijungimo prie „<xliff:g id="APP_NAME">%1$s</xliff:g>“ parinktis?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Naudokite išsaugotÄ
prieigos raktÄ
, skirtÄ
programai „<xliff:g id="APP_NAME">%1$s</xliff:g>“"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Naudokite išsaugotÄ
slaptaÅŸodį, skirtÄ
programai „<xliff:g id="APP_NAME">%1$s</xliff:g>“"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Naudokite paskyrÄ
, skirtÄ
programai „<xliff:g id="APP_NAME">%1$s</xliff:g>“"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Atrakinkite prisijungimo parinktis, skirtas programai „<xliff:g id="APP_NAME">%1$s</xliff:g>“"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Išsaugoto prieigos rakto, skirto „<xliff:g id="APP_NAME">%1$s</xliff:g>“, pasirinkimas"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Išsaugoto slaptaÅŸodÅŸio, skirto „<xliff:g id="APP_NAME">%1$s</xliff:g>“, pasirinkimas"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Pasirinkite išsaugotÄ
prisijungimo informacijÄ
programai „<xliff:g id="APP_NAME">%1$s</xliff:g>“"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Pasirinkite prisijungimo informacijÄ
programai „<xliff:g id="APP_NAME">%1$s</xliff:g>“"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Pasirinkite paskyrÄ
, skirtÄ
„<xliff:g id="APP_NAME">%1$s</xliff:g>“"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Pasirinkti parinktį programai „<xliff:g id="APP_NAME">%1$s</xliff:g>“?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Naudoti šiÄ
informacijÄ
programoje „<xliff:g id="APP_NAME">%1$s</xliff:g>“?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Prisijungti kitu būdu"</string>
diff --git a/packages/CredentialManager/res/values-lv/strings.xml b/packages/CredentialManager/res/values-lv/strings.xml
index f56d7f1..b3a733b 100644
--- a/packages/CredentialManager/res/values-lv/strings.xml
+++ b/packages/CredentialManager/res/values-lv/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Vai izveidot piekÄŒuves atslÄgu, lai pierakstÄ«tos lietotnÄ <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"Vai saglabÄt paroli, lai pierakstÄ«tos lietotnÄ <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Vai saglabÄt pierakstÄ«šanÄs informÄciju lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Vai izmantot ekrÄna bloÄ·Äšanas opciju, lai izveidotu piekÄŒuves atslÄgu lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Vai izmantot ekrÄna bloÄ·Äšanas opciju, lai izveidotu paroli lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Vai izmantot ekrÄna bloÄ·Äšanas opciju, lai saglabÄtu pierakstÄ«šanÄs informÄciju lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="passkey" msgid="632353688396759522">"piekÄŒuves atslÄga"</string>
<string name="password" msgid="6738570945182936667">"parole"</string>
<string name="passkeys" msgid="5733880786866559847">"piekÄŒuves atslÄgas"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Atgriezties iepriekšÄjÄ lapÄ"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"AizvÄrt"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"NerÄdÄ«t"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Vai izmantot saglabÄto piekÄŒuves atslÄgu lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Vai izmantot jÅ«su saglabÄto paroli lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Izmantot ekrÄna bloÄ·Äšanu, lai lietotnÄ <xliff:g id="APP_NAME">%1$s</xliff:g> pierakstÄ«tos ar kontu <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Vai izmantot jÅ«su pierakstÄ«šanÄs informÄciju lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Vai vÄlaties atbloÄ·Ät lietotnes <xliff:g id="APP_NAME">%1$s</xliff:g> pierakstÄ«šanÄs opcijas?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"SaglabÄtÄs piekÄŒuves atslÄgas izmantošana lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"SaglabÄtÄs paroles izmantošana lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Sava konta izmantošana lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Lietotnes <xliff:g id="APP_NAME">%1$s</xliff:g> pierakstÄ«šanÄs opciju atbloÄ·Äšana"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"SaglabÄtas piekÄŒuves atslÄgas izvÄle lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"SaglabÄtas paroles izvÄle lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"SaglabÄtas pierakstÄ«šanÄs informÄcijas izvÄle lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"PierakstÄ«šanÄs informÄcijas izvÄle lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Konta izvÄle izmantošanai lietotnÄ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Vai izvÄlÄties opciju lietotnei <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Vai izmantot šo informÄciju lietotnÄ <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"PierakstÄ«ties citÄ veidÄ"</string>
diff --git a/packages/CredentialManager/res/values-mk/strings.xml b/packages/CredentialManager/res/values-mk/strings.xml
index ec4df56..e7e8185 100644
--- a/packages/CredentialManager/res/values-mk/strings.xml
+++ b/packages/CredentialManager/res/values-mk/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Ðа Ñе ÑПзЎаЎе кÑОпÑПгÑаÑÑкО клÑÑ Ð·Ð° МаÑавÑваÑе Ма <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"Ðа Ñе заÑÑва лПзОМкаÑа за МаÑавÑваÑе Ма <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Ðа Ñе заÑÑÐ²Ð°Ð°Ñ Ð¿ÐŸÐŽÐ°ÑПÑОÑе за МаÑавÑваÑе за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Ðа Ñе кПÑОÑÑО заклÑÑÑваÑеÑП екÑаМ за ÑПзЎаваÑе кÑОпÑПгÑаÑÑкО клÑÑ Ð·Ð° <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Ðа Ñе кПÑОÑÑО заклÑÑÑваÑеÑП екÑаМ за ÑПзЎаваÑе лПзОМка за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Ðа Ñе кПÑОÑÑО заклÑÑÑваÑеÑП екÑаМ за заÑÑвÑваÑе Ма пПЎаÑПÑОÑе за МаÑавÑваÑе за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="passkey" msgid="632353688396759522">"кÑОпÑПгÑаÑÑкО клÑÑ"</string>
<string name="password" msgid="6738570945182936667">"лПзОМка"</string>
<string name="passkeys" msgid="5733880786866559847">"кÑОпÑПгÑаÑÑкО клÑÑевО"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"ÐÑаÑО Ñе Ма пÑеÑÑ
ПЎМаÑа ÑÑÑаМОÑа"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"ÐаÑвПÑО"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"ÐÑÑÑлО"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Ðа Ñе кПÑОÑÑО ваÑÐžÐŸÑ Ð·Ð°ÑÑваМ кÑОпÑПгÑаÑÑкО клÑÑ Ð·Ð° <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Ðа Ñе кПÑОÑÑÐ°Ñ Ð·Ð°ÑÑваМОÑе лПзОМкО за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"ÐПÑОÑÑеÑе гП заклÑÑÑваÑеÑП екÑаМ за Ўа Ñе МаÑавÑваÑе Ма <xliff:g id="APP_NAME">%1$s</xliff:g> ÑП <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Ðа Ñе кПÑОÑÑО ваÑеÑП МаÑавÑваÑе за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Ðа Ñе ПÑклÑÑÐ°Ñ ÐŸÐ¿ÑООÑе за МаÑавÑваÑе за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"ÐПÑОÑÑеÑе гП заÑÑÐ²Ð°ÐœÐžÐŸÑ ÐºÑОпÑПгÑаÑÑкО клÑÑ Ð·Ð° <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"ÐПÑОÑÑеÑе Ñа заÑÑваМаÑа лПзОМка за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"ÐПÑОÑÑеÑе Ñа ваÑаÑа ÑЌеÑка за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"ÐÑклÑÑеÑе гО ПпÑООÑе за МаÑавÑваÑе за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"ÐзбеÑеÑе заÑÑваМ кÑОпÑПгÑаÑÑкО клÑÑ Ð·Ð° <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"ÐзбеÑеÑе заÑÑваМа лПзОМка за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"ÐзбеÑеÑе заÑÑваМП МаÑавÑваÑе за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"ÐзбеÑеÑе МаÑавÑваÑе за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"ÐзбеÑеÑе ÑЌеÑка за <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"ÐзбеÑО ПпÑОÑа за <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Ðа Ñе кПÑОÑÑÐ°Ñ ÐŸÐ²ÐžÐµ ОМÑПÑЌаÑОО Ма <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"ÐаÑавеÑе Ñе Ма ÐŽÑÑг МаÑОМ"</string>
diff --git a/packages/CredentialManager/res/values-ml/strings.xml b/packages/CredentialManager/res/values-ml/strings.xml
index f7d74fe..598ccc0 100644
--- a/packages/CredentialManager/res/values-ml/strings.xml
+++ b/packages/CredentialManager/res/values-ml/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"<xliff:g id="APP_NAME">%1$s</xliff:g> àŽàŽšàµàŽšàŽ€àŽ¿àŽ²àµàŽàµàŽàµ àŽžàµàµ» àŽàµ» àŽàµàޝàµàŽ¯àŽŸàµ» àŽªàŽŸàŽžàµàŽàµ àŽžàµàŽ·àµàŽàŽ¿àŽàµàŽàŽ£àµ?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"<xliff:g id="APP_NAME">%1$s</xliff:g> àŽàŽšàµàŽšàŽ€àŽ¿àŽ²àµàŽàµàŽàµ àŽžàµàµ» àŽàµ» àŽàµàޝàµàŽ¯àŽŸàµ» àŽªàŽŸàŽžàµà޵àµàŽ¡àµ àŽžàŽàްàŽàµàŽ·àŽ¿àŽàµàŽàŽ£àµ?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"<xliff:g id="APP_NAME">%1$s</xliff:g> àŽàŽšàµàŽšàŽ€àŽ¿àŽšàŽŸàŽ¯àŽ¿ àŽžàµàµ» àŽàµ» àŽµàŽ¿àŽµàŽ°àŽàµàŽàµŸ àŽžàŽàްàŽàµàŽ·àŽ¿àŽàµàŽàŽ£àµ?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"<xliff:g id="APP_NAME">%1$s</xliff:g> àŽàŽšàµàŽšàŽ€àŽ¿àŽšàŽŸàŽ¯àŽ¿ àŽªàŽŸàŽžàµàŽàµ àŽžàµàŽ·àµàŽàŽ¿àŽàµàŽàŽŸàµ» àŽšàŽ¿àŽàµàŽà޳àµàŽàµ àŽžàµàŽàµàްàµàµ» àŽ²àµàŽàµàŽàµ àŽàŽªàŽ¯àµàŽàŽ¿àŽàµàŽàŽ£àµ?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"<xliff:g id="APP_NAME">%1$s</xliff:g> àŽàŽšàµàŽšàŽ€àŽ¿àŽšàŽŸàŽ¯àŽ¿ àŽªàŽŸàŽžàµà޵àµàŽ¡àµ àŽžàµàŽ·àµàŽàŽ¿àŽàµàŽàŽŸàµ» àŽšàŽ¿àŽàµàŽà޳àµàŽàµ àŽžàµàŽàµàްàµàµ» àŽ²àµàŽàµàŽàµ àŽàŽªàŽ¯àµàŽàŽ¿àŽàµàŽàŽ£àµ?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"<xliff:g id="APP_NAME">%1$s</xliff:g> àŽàŽšàµàŽšàŽ€àŽ¿àŽšàŽŸàŽ¯àŽ¿ àŽžàµàµ» àŽàµ» àŽµàŽ¿àŽµàŽ°àŽàµàŽàµŸ àŽžàŽàްàŽàµàŽ·àŽ¿àŽàµàŽàŽŸàµ» àŽšàŽ¿àŽàµàŽà޳àµàŽàµ àŽžàµàŽàµàްàµàµ» àŽ²àµàŽàµàŽàµ àŽàŽªàŽ¯àµàŽàŽ¿àŽàµàŽàŽ£àµ?"</string>
<string name="passkey" msgid="632353688396759522">"àŽªàŽŸàŽžàµàŽàµ"</string>
<string name="password" msgid="6738570945182936667">"àŽªàŽŸàŽžàµà޵àµàŽ¡àµ"</string>
<string name="passkeys" msgid="5733880786866559847">"àŽªàŽŸàŽžàµàŽàµàŽàµŸ"</string>
@@ -71,15 +68,15 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"àŽ®àµàŽ®àµàŽªàŽ€àµàŽ€àµ àŽªàµàŽàŽ¿àŽ²àµàŽàµàŽàµ àŽ®àŽàŽàµàŽàµàŽ"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"àŽ
àŽàޝàµàŽàµàŽàµàŽ"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"àŽ¡àŽ¿àŽžàµàŽ®àŽ¿àŽžàµ àŽàµàޝàµàޝàµàŽ"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> àŽàŽšàµàŽšàŽ€àŽ¿àŽšàŽŸàŽ¯àŽ¿ àŽšàŽ¿àŽàµàŽàµŸ àŽžàŽàްàŽàµàŽ·àŽ¿àŽàµàŽ àŽªàŽŸàŽžàµàŽàµ àŽàŽªàŽ¯àµàŽàŽ¿àŽàµàŽàŽ£àµ?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> àŽàŽšàµàŽšàŽ€àŽ¿àŽšàŽŸàŽ¯àŽ¿ àŽšàŽ¿àŽàµàŽà޳àµàŽàµ àŽžàŽàްàŽàµàŽ·àŽ¿àŽàµàŽ àŽªàŽŸàŽžàµà޵àµàŽ¡àµ àŽàŽªàŽ¯àµàŽàŽ¿àŽàµàŽàŽ£àµ?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"<xliff:g id="USERNAME">%2$s</xliff:g> àŽàŽšàµàŽšàŽ¯àŽŸàŽ³àŽŸàŽ¯àŽ¿ <xliff:g id="APP_NAME">%1$s</xliff:g> àŽàŽšàµàŽšàŽ€àŽ¿àŽ²àµàŽàµàŽàµ àŽžàµàµ» àŽàµ» àŽàµàޝàµàŽ¯àŽŸàµ» àŽšàŽ¿àŽàµàŽà޳àµàŽàµ àŽžàµàŽàµàްàµàµ» àŽ²àµàŽàµàŽàµ àŽàŽªàŽ¯àµàŽàŽ¿àŽàµàŽàµàŽ"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> àŽàŽªàµàŽªàŽ¿àŽšàµà޳àµà޳ àŽšàŽ¿àŽàµàŽà޳àµàŽàµ àŽžàµàµ» àŽàµ» àŽàµàްàµàŽ¡àµ»àŽ·àµàŽ¯àŽ²àµàŽàµŸ àŽàŽªàŽ¯àµàŽàŽ¿àŽàµàŽàŽ£àµ?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> àŽàŽšàµàŽšàŽ€àŽ¿àŽšàŽŸàŽ¯àŽ¿ àŽžàµàµ» àŽàµ» àŽàŽªàµàŽ·àŽšàµàŽàµŸ àŽ
àµºàŽ²àµàŽàµàŽàµ àŽàµàޝàµàŽ¯àŽ£àµ?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"<xliff:g id="APP_NAME">%1$s</xliff:g> àŽàŽªàµàŽªàŽ¿àŽšàŽŸàŽ¯àŽ¿ àŽšàŽ¿àŽàµàŽà޳àµàŽàµ àŽžàŽàްàŽàµàŽ·àŽ¿àŽàµàŽ àŽªàŽŸàŽžàµàŽàµ àŽàŽªàŽ¯àµàŽàŽ¿àŽàµàŽàµàŽ"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"<xliff:g id="APP_NAME">%1$s</xliff:g> àŽàŽªàµàŽªàŽ¿àŽšàŽŸàŽ¯àŽ¿ àŽšàŽ¿àŽàµàŽà޳àµàŽàµ àŽžàŽàްàŽàµàŽ·àŽ¿àŽàµàŽ àŽªàŽŸàŽžàµà޵àµàŽ¡àµ àŽàŽªàŽ¯àµàŽàŽ¿àŽàµàŽàµàŽ"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"<xliff:g id="APP_NAME">%1$s</xliff:g> àŽàŽªàµàŽªàŽ¿àŽšàŽŸàŽ¯àŽ¿ àŽšàŽ¿àŽàµàŽà޳àµàŽàµ àŽ
àŽàµàŽàµàŽ£àµàŽàµ àŽàŽªàŽ¯àµàŽàŽ¿àŽàµàŽàµàŽ"</string>
+ <string name="get_dialog_description_single_tap" msgid="2797059565126030879">"<xliff:g id="USERNAME">%2$s</xliff:g> àŽàŽšàµàŽšàŽ¯àŽŸàŽ³àŽŸàŽ¯àŽ¿ <xliff:g id="APP_NAME">%1$s</xliff:g> àŽàŽšàµàŽšàŽ€àŽ¿àŽ²àµàŽàµàŽàµ àŽžàµàµ» àŽàµ» àŽàµàޝàµàŽ¯àŽŸàµ» àŽšàŽ¿àŽàµàŽà޳àµàŽàµ àŽžàµàŽàµàްàµàµ» àŽ²àµàŽàµàŽàµ àŽàŽªàŽ¯àµàŽàŽ¿àŽàµàŽàµàŽ"</string>
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g> àŽàŽªàµàŽªàŽ¿àŽšàŽŸàŽ¯àŽ¿ àŽžàµàµ» àŽàµ» àŽàµàޝàµàŽ¯àµœ àŽàŽªàµàŽ·àŽšàµàŽàµŸ àŽ
àµºàŽ²àµàŽàµàŽàµ àŽàµàޝàµàޝàµàŽ"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> àŽàŽšàµàŽšàŽ€àŽ¿àŽšàŽŸàŽ¯àŽ¿ àŽàŽ°àµ àŽžàŽàްàŽàµàŽ·àŽ¿àŽàµàŽ àŽªàŽŸàŽžàµàŽàµ àŽ€àŽ¿àŽ°àŽàµàŽàµàŽàµàŽàµàŽàµàŽ"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> àŽàŽšàµàŽšàŽ€àŽ¿àŽšàŽŸàŽ¯àŽ¿ àŽàŽ°àµ àŽžàŽàްàŽàµàŽ·àŽ¿àŽàµàŽ àŽªàŽŸàŽžàµà޵àµàŽ¡àµ àŽ€àŽ¿àŽ°àŽàµàŽàµàŽàµàŽàµàŽàµàŽ"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> àŽàŽšàµàŽšàŽ€àŽ¿àŽšàŽŸàŽ¯àŽ¿ àŽàŽ°àµ àŽžàŽàްàŽàµàŽ·àŽ¿àŽàµàŽ àŽžàµàµ» àŽàµ» àŽ€àŽ¿àŽ°àŽàµàŽàµàŽàµàŽàµàŽàµàŽ"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> àŽàŽªàµàŽªàŽ¿àŽšàµà޳àµà޳ àŽžàµàµ» àŽàµ» àŽàµàްàµàŽ¡àµ»àŽ·àµàŽ¯àŽ²àµàŽàµŸ àŽ€àŽ¿àŽ°àŽàµàŽàµàŽàµàŽàµàŽàµàŽ"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g> àŽàŽªàµàŽªàŽ¿àŽšàŽŸàŽ¯àŽ¿ àŽàŽ°àµ àŽ
àŽàµàŽàµàŽ£àµàŽàµ àŽ€àŽ¿àŽ°àŽàµàŽàµàŽàµàŽàµàŽàµàŽ"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> àŽàŽšàµàŽš àŽàŽªàµàŽªàŽ¿àŽšàŽŸàŽ¯àŽ¿ àŽàŽ°àµ àŽàŽªàµàŽ·àµ» àŽ€àŽ¿àŽ°àŽàµàŽàµàŽàµàŽàµàŽàŽ£àµ?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g> àŽàŽšàµàŽšàŽ€àŽ¿àµœ àŽ àŽµàŽ¿àŽµàŽ°àŽàµàŽàµŸ àŽàŽªàŽ¯àµàŽàŽ¿àŽàµàŽàŽ£àµ?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"àŽ®àŽ±àµàޱàµàŽ°àµ àŽ°àµàŽ€àŽ¿àŽ¯àŽ¿àµœ àŽžàµàµ» àŽàµ» àŽàµàޝàµàޝàµàŽ"</string>
diff --git a/packages/CredentialManager/res/values-mn/strings.xml b/packages/CredentialManager/res/values-mn/strings.xml
index 093baab..958233a 100644
--- a/packages/CredentialManager/res/values-mn/strings.xml
+++ b/packages/CredentialManager/res/values-mn/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"<xliff:g id="APP_NAME">%1$s</xliff:g>-ÐŽ МÑвÑÑÑÑ
ОйМ ÑÑлЎ МÑвÑÑÑÑ
ÑүлÑ
Ò¯Ò¯Ñ Ò¯Ò¯ÑгÑÑ
Ò¯Ò¯?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"<xliff:g id="APP_NAME">%1$s</xliff:g>-ÐŽ МÑвÑÑÑÑ
ОйМ ÑÑлЎ МÑÑÑ Ò¯Ð³ÐžÐ¹Ð³ Ñ
аЎгалаÑ
ÑÑ?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"<xliff:g id="APP_NAME">%1$s</xliff:g>-М МÑвÑÑÑÑ
ÐŒÑÐŽÑÑллОйг Ñ
аЎгалаÑ
ÑÑ?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"<xliff:g id="APP_NAME">%1$s</xliff:g>-ÐŽ МÑвÑÑÑÑ
ÑүлÑ
Ò¯Ò¯Ñ Ò¯Ò¯ÑгÑÑ
ОйМ ÑÑлЎ ÐŽÑлгÑÑОйМ ÑүгжÑÑгÑÑ Ð°ÑОглаÑ
ÑÑ?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"<xliff:g id="APP_NAME">%1$s</xliff:g>-ÐŽ МÑÑÑ Ò¯Ð³ Ò¯Ò¯ÑгÑÑ
ОйМ ÑÑлЎ ÐŽÑлгÑÑОйМ ÑүгжÑÑгÑÑ Ð°ÑОглаÑ
ÑÑ?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"<xliff:g id="APP_NAME">%1$s</xliff:g>-ÐŽ МÑвÑÑÑÑ
ÐŒÑÐŽÑÑлÑл Ñ
аЎгалаÑ
ÑМ ÑÑлЎ ÐŽÑлгÑÑОйМ ÑүгжÑÑгÑÑ Ð°ÑОглаÑ
ÑÑ?"</string>
<string name="passkey" msgid="632353688396759522">"passkey"</string>
<string name="password" msgid="6738570945182936667">"МÑÑÑ Ò¯Ð³"</string>
<string name="passkeys" msgid="5733880786866559847">"МÑвÑÑÑÑ
ÑүлÑ
Ò¯Ò¯ÑүүЎ"</string>
@@ -71,15 +68,15 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"ӚЌМөÑ
Ñ
ÑÑÐŽÐ°Ñ ÑÑÑ Ð±ÑÑаÑ
"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"ХааÑ
"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"ХааÑ
"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g>-ÐŽ Ó©Ó©ÑОйМ Ñ
аЎгалÑаМ passkey-г аÑОглаÑ
ÑÑ?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g>-ÐŽ Ñ
аЎгалÑаМ МÑÑÑ Ò¯Ð³ÑÑ Ð°ÑОглаÑ
ÑÑ?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"<xliff:g id="APP_NAME">%1$s</xliff:g>-ÐŽ <xliff:g id="USERNAME">%2$s</xliff:g>-Ñ ÐœÑвÑÑÑÑ
ОйМ ÑÑлЎ ÐŽÑлгÑÑОйМ ÑүгжÑÑгÑÑ Ð°ÑОглаМа ÑÑ"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g>-М МÑвÑÑÑлÑÑÑ Ð°ÑОглаÑ
ÑÑ?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g>-ÐŽ МÑвÑÑÑлÑОйМ ÑПМгПлÑÑМ ÑүгжÑÑг ÑайлаÑ
ÑÑ?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"<xliff:g id="APP_NAME">%1$s</xliff:g>-ÐŽ Ñ
аЎгалÑаМ МÑвÑÑÑÑ
ÑүлÑ
Ò¯Ò¯ÑÑÑ Ð°ÑОглаМа ÑÑ"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"<xliff:g id="APP_NAME">%1$s</xliff:g>-ÐŽ Ñ
аЎгалÑаМ МÑÑÑ Ò¯Ð³ÑÑ Ð°ÑОглаМа ÑÑ"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"<xliff:g id="APP_NAME">%1$s</xliff:g>-ÐŽ МÑвÑÑÑÑ
бүÑÑгÑлÑÑ Ð°ÑОглаМа ÑÑ"</string>
+ <string name="get_dialog_description_single_tap" msgid="2797059565126030879">"<xliff:g id="APP_NAME">%1$s</xliff:g>-ÐŽ <xliff:g id="USERNAME">%2$s</xliff:g>-Ñ ÐœÑвÑÑÑÑ
ОйМ ÑÑлЎ ÐŽÑлгÑÑОйМ ÑүгжÑÑгÑÑ Ð°ÑОглаМа ÑÑ"</string>
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g>-ÐŽ МÑвÑÑÑÑ
ÑПМгПлÑÑМ ÑүгжÑÑг ÑайлМа ÑÑ"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g>-ÐŽ Ñ
аЎгалÑаМ МÑвÑÑÑÑ
ÑүлÑ
Ò¯Ò¯Ñ ÑПМгПМП ÑÑ"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g>-ÐŽ Ñ
аЎгалÑаМ МÑÑÑ Ò¯Ð³ ÑПМгПМП ÑÑ"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g>-ÐŽ Ñ
аЎгалÑаМ МÑвÑÑÑÑ
ÐŒÑÐŽÑÑллОйг ÑПМгПМП ÑÑ"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g>-М МÑвÑÑÑлÑОйг ÑПМгПМП ÑÑ"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g>-ÐŽ МÑвÑÑÑÑ
бүÑÑгÑл ÑПМгПМП ÑÑ"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g>-ÐŽ ÑÐŸÐœÐ³ÐŸÐ»Ñ Ñ
ОйÑ
Ò¯Ò¯?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"ÐÐœÑ ÐŒÑÐŽÑÑллОйг <xliff:g id="APP_NAME">%1$s</xliff:g>-ÐŽ аÑОглаÑ
ÑÑ?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"ÓšÓ©Ñ Ð°ÑÐ³Ð°Ð°Ñ ÐœÑвÑÑÑÑ
"</string>
diff --git a/packages/CredentialManager/res/values-mr/strings.xml b/packages/CredentialManager/res/values-mr/strings.xml
index cc52617..3a2e73a 100644
--- a/packages/CredentialManager/res/values-mr/strings.xml
+++ b/packages/CredentialManager/res/values-mr/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€®à€§à¥à€¯à¥ à€žà€Ÿà€à€š à€à€š à€à€°à€£à¥à€¯à€Ÿà€žà€Ÿà€ à¥ à€ªà€Ÿà€žà€à¥ à€€à€¯à€Ÿà€° à€à€°à€Ÿà€¯à€à¥ à€à€¹à¥ à€à€Ÿ?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€®à€§à¥à€¯à¥ à€žà€Ÿà€à€š à€à€š à€à€°à€£à¥à€¯à€Ÿà€žà€Ÿà€ à¥ à€ªà€Ÿà€žà€µà€°à¥à€¡ à€žà¥à€µà¥à€¹ à€à€°à€Ÿà€¯à€à€Ÿ à€à€¹à¥ à€à€Ÿ?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€žà€Ÿà€ à¥ à€žà€Ÿà€à€š-à€à€šà€žà€à€¬à€à€§à€¿à€€ à€®à€Ÿà€¹à€¿à€€à¥ à€žà¥à€µà¥à€¹ à€à€°à€Ÿà€¯à€à¥ à€à€Ÿ?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€žà€Ÿà€ à¥ à€ªà€Ÿà€žà€à¥ à€€à€¯à€Ÿà€° à€à€°à€£à¥à€¯à€Ÿà€à€°à€¿à€€à€Ÿ à€€à¥à€®à€à¥ à€žà¥à€à¥à€°à¥à€š à€²à¥à€ à€µà€Ÿà€ªà€°à€Ÿà€¯à€à¥ à€à€¹à¥ à€à€Ÿ?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€žà€Ÿà€ à¥ à€ªà€Ÿà€žà€µà€°à¥à€¡ à€€à€¯à€Ÿà€° à€à€°à€£à¥à€¯à€Ÿà€à€°à€¿à€€à€Ÿ à€€à¥à€®à€à¥ à€žà¥à€à¥à€°à¥à€š à€²à¥à€ à€µà€Ÿà€ªà€°à€Ÿà€¯à€à¥ à€à€¹à¥ à€à€Ÿ?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€žà€Ÿà€ à¥ à€žà€Ÿà€à€š-à€à€šà€žà€à€¬à€à€§à€¿à€€ à€®à€Ÿà€¹à€¿à€€à¥ à€žà¥à€µà¥à€¹ à€à€°à€£à¥à€¯à€Ÿà€à€°à€¿à€€à€Ÿ à€€à¥à€®à€à¥ à€žà¥à€à¥à€°à¥à€š à€²à¥à€ à€µà€Ÿà€ªà€°à€Ÿà€¯à€à¥ à€à€¹à¥ à€à€Ÿ?"</string>
<string name="passkey" msgid="632353688396759522">"à€ªà€Ÿà€žà€à¥"</string>
<string name="password" msgid="6738570945182936667">"à€ªà€Ÿà€žà€µà€°à¥à€¡"</string>
<string name="passkeys" msgid="5733880786866559847">"à€ªà€Ÿà€žà€à¥"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"à€®à€Ÿà€à¥à€² à€ªà¥à€à€µà€° à€ªà€°à€€ à€à€Ÿ"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"à€¬à€à€Š à€à€°à€Ÿ"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"à€¡à€¿à€žà€®à€¿à€ž à€à€°à€Ÿ"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€žà€Ÿà€ à¥ à€€à¥à€®à€à¥ à€žà¥à€µà¥à€¹ à€à¥à€²à¥à€²à¥ à€ªà€Ÿà€žà€à¥ à€µà€Ÿà€ªà€°à€Ÿà€¯à€à¥ à€à€Ÿ?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"à€€à¥à€®à€à€Ÿ à€žà¥à€µà¥à€¹ à€à¥à€²à¥à€²à€Ÿ à€ªà€Ÿà€žà€µà€°à¥à€¡ <xliff:g id="APP_NAME">%1$s</xliff:g> à€žà€Ÿà€ à¥ à€µà€Ÿà€ªà€°à€Ÿà€¯à€à€Ÿ à€à€¹à¥ à€à€Ÿ?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"<xliff:g id="USERNAME">%2$s</xliff:g> à€žà€¹ <xliff:g id="APP_NAME">%1$s</xliff:g> à€®à€§à¥à€¯à¥ à€žà€Ÿà€à€š à€à€š à€à€°à€£à¥à€¯à€Ÿà€žà€Ÿà€ à¥ à€€à¥à€®à€à¥ à€žà¥à€à¥à€°à¥à€š à€²à¥à€ à€µà€Ÿà€ªà€°à€Ÿ"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€žà€Ÿà€ à¥ à€€à¥à€®à€à¥ à€žà€Ÿà€à€š-à€à€š à€µà€Ÿà€ªà€°à€Ÿà€¯à€à¥ à€à€¹à¥ à€à€Ÿ?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€žà€Ÿà€ à¥ à€žà€Ÿà€à€š-à€à€š à€ªà€°à¥à€¯à€Ÿà€¯ à€
à€šà€²à¥à€ à€à€°à€Ÿà€¯à€à¥ à€à€¹à¥à€€ à€à€Ÿ?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€žà€Ÿà€ à¥ à€€à¥à€®à€à¥ à€žà¥à€µà¥à€¹ à€à¥à€²à¥à€²à¥ à€ªà€Ÿà€žà€à¥ à€µà€Ÿà€ªà€°à€Ÿ"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€žà€Ÿà€ à¥ à€€à¥à€®à€à€Ÿ à€žà¥à€µà¥à€¹ à€à¥à€²à¥à€²à€Ÿ à€ªà€Ÿà€žà€µà€°à¥à€¡ à€µà€Ÿà€ªà€°à€Ÿ"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€žà€Ÿà€ à¥ à€€à¥à€®à€à¥ à€à€Ÿà€€à¥ à€µà€Ÿà€ªà€°à€Ÿ"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€žà€Ÿà€ à¥ à€žà€Ÿà€à€š-à€à€š à€ªà€°à¥à€¯à€Ÿà€¯ à€
à€šà€²à¥à€ à€à€°à€Ÿ"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€žà€Ÿà€ à¥ à€žà¥à€µà¥à€¹ à€à¥à€²à¥à€²à¥ à€ªà€Ÿà€žà€à¥ à€šà€¿à€µà€¡à€Ÿ"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€žà€Ÿà€ à¥ à€žà¥à€µà¥à€¹ à€à¥à€²à¥à€²à€Ÿ à€ªà€Ÿà€žà€µà€°à¥à€¡ à€šà€¿à€µà€¡à€Ÿ"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€žà€Ÿà€ à¥ à€žà¥à€µà¥à€¹ à€à¥à€²à¥à€²à¥ à€žà€Ÿà€à€š-à€à€š à€šà€¿à€µà€¡à€Ÿ"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€žà€Ÿà€ à¥ à€žà€Ÿà€à€š-à€à€š à€šà€¿à€µà€¡à€Ÿ"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€žà€Ÿà€ à¥ à€à€Ÿà€€à¥ à€šà€¿à€µà€¡à€Ÿ"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€žà€Ÿà€ à¥ à€ªà€°à¥à€¯à€Ÿà€¯ à€šà€¿à€µà€¡à€Ÿ?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"à€¹à¥ à€®à€Ÿà€¹à€¿à€€à¥ <xliff:g id="APP_NAME">%1$s</xliff:g> à€µà€° à€µà€Ÿà€ªà€°à€Ÿà€¯à€à¥ à€à€Ÿ?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"à€Šà¥à€žà€±à¥à€¯à€Ÿ à€®à€Ÿà€°à¥à€à€Ÿà€šà¥ à€žà€Ÿà€à€š à€à€š à€à€°à€Ÿ"</string>
diff --git a/packages/CredentialManager/res/values-ms/strings.xml b/packages/CredentialManager/res/values-ms/strings.xml
index 62a7deb..aa216c2 100644
--- a/packages/CredentialManager/res/values-ms/strings.xml
+++ b/packages/CredentialManager/res/values-ms/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Buat kunci laluan untuk log masuk ke <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"Simpan kata laluan untuk log masuk ke <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Simpan maklumat log masuk untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Gunakan kunci skrin anda untuk membuat kunci laluan bagi <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Gunakan kunci skrin anda untuk membuat kata laluan bagi <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Gunakan kunci skrin anda untuk menyimpan maklumat log masuk bagi <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="passkey" msgid="632353688396759522">"kunci laluan"</string>
<string name="password" msgid="6738570945182936667">"kata laluan"</string>
<string name="passkeys" msgid="5733880786866559847">"kunci laluan"</string>
@@ -71,15 +68,15 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Kembali ke halaman sebelumnya"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Tutup"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Ketepikan"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Gunakan kunci laluan anda yang telah disimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Gunakan kata laluan anda yang disimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Gunakan kunci skrin anda untuk log masuk ke <xliff:g id="APP_NAME">%1$s</xliff:g> dengan <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Gunakan log masuk anda untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Buka kunci pilihan log masuk untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Gunakan kunci laluan anda yang telah disimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Gunakan kata laluan anda yang disimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Gunakan akaun anda untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_description_single_tap" msgid="2797059565126030879">"Gunakan kunci skrin anda untuk log masuk ke <xliff:g id="APP_NAME">%1$s</xliff:g> dengan <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Buka kunci pilihan log masuk untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Pilih kunci laluan yang disimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Pilih kata laluan yang disimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Pilih log masuk yang disimpan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Pilih log masuk untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Pilih akaun untuk <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Pilih satu pilihan untuk <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Gunakan maklumat ini pada <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Log masuk menggunakan cara lain"</string>
diff --git a/packages/CredentialManager/res/values-my/strings.xml b/packages/CredentialManager/res/values-my/strings.xml
index aa08aa7..cf224da 100644
--- a/packages/CredentialManager/res/values-my/strings.xml
+++ b/packages/CredentialManager/res/values-my/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"<xliff:g id="APP_NAME">%1$s</xliff:g> ááá¯á· áááºááŸááºááá¯ážáááºááẠáá»áŸáá¯á·ááŸááºáá®áž ááŒá¯áá¯ááºááá¬ážá"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"<xliff:g id="APP_NAME">%1$s</xliff:g> ááá¯á· áááºááŸááºááá¯ážáááºááẠá
áá¬ážááŸááºááᯠááááºážááá¬ážá"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"<xliff:g id="APP_NAME">%1$s</xliff:g> á¡ááœáẠáááºááŸááºááá¯ážáááºááẠá¡áá»ááºá¡áááºááᯠááááºážááá¬ážá"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"<xliff:g id="APP_NAME">%1$s</xliff:g> á¡ááœáẠáá»áŸáá¯á·ááŸááºáá®ážááŒá¯áá¯ááºááẠááá·áºáááºáá¬ážááŒááºáá±á¬á·ááºááᯠáá¯á¶ážááá¬ážá"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"<xliff:g id="APP_NAME">%1$s</xliff:g> á¡ááœáẠá
áá¬ážááŸááºááŒá¯áá¯ááºááẠááá·áºáááºáá¬ážááŒááºáá±á¬á·ááºááᯠáá¯á¶ážááá¬ážá"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"<xliff:g id="APP_NAME">%1$s</xliff:g> á¡ááœáẠáááºááŸááºááá¯ážáááºááẠá¡áá»ááºá¡áááºáá»á¬áž ááááºážááẠááá·áºáááºáá¬ážááŒááºáá±á¬á·ááºááᯠáá¯á¶ážááá¬ážá"</string>
<string name="passkey" msgid="632353688396759522">"áá»áŸáá¯á·ááŸááºáá®áž"</string>
<string name="password" msgid="6738570945182936667">"á
áá¬ážááŸááº"</string>
<string name="passkeys" msgid="5733880786866559847">"áá»áŸáá¯á·ááŸááºáá®ážáá»á¬áž"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"ááááºá
á¬áá»ááºááŸá¬ááᯠááŒááºááœá¬ážáá«"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"ááááºáááº"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"áááºáááº"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"ááááºážáá¬ážáá±á¬áá»áŸáá¯á·ááŸááºáá®ážááᯠ<xliff:g id="APP_NAME">%1$s</xliff:g> á¡ááœáẠáá¯á¶ážááá¬ážá"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> á¡ááœáẠááááºážáá¬ážáá±á¬á
áá¬ážááŸáẠáá¯á¶ážááá¬ážá"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"<xliff:g id="APP_NAME">%1$s</xliff:g> ááá¯á· <xliff:g id="USERNAME">%2$s</xliff:g> ááŒáá·áº áááºááŸááºááá¯ážáááºááẠááá·áºáááºáá¬ážááŒááºáá±á¬á·ááºááᯠáá¯á¶ážááá¯ááºáááº"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> á¡ááœáẠááá·áºáááºááŸááºááá¯ážáááºááŸá¯ááᯠáá¯á¶ážááá¬ážá"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> á¡ááœáẠáááºááŸááºááá¯ážáááºááŸá¯ ááœá±ážá
áá¬ááᯠááœáá·áºááá¬ážá"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"<xliff:g id="APP_NAME">%1$s</xliff:g> á¡ááœáẠáááºááááºážáá¬ážáá±á¬ áá»áŸáá¯á·ááŸááºáá®ážááᯠáá¯á¶ážáá«"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"<xliff:g id="APP_NAME">%1$s</xliff:g> á¡ááœáẠáááºááááºážáá¬ážáá±á¬ á
áá¬ážááŸááºááᯠáá¯á¶ážáá«"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"<xliff:g id="APP_NAME">%1$s</xliff:g> á¡ááœáẠááá·áºá¡áá±á¬áá·áºááᯠáá¯á¶ážáá«"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g> á¡ááœáẠáááºááŸááºááá¯ážáááºááŸá¯ ááœá±ážá
áá¬ááᯠááœáá·áºáá«"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> á¡ááœáẠááááºážáá¬ážáá±á¬ áá»áŸáá¯á·ááŸááºáá®áž ááœá±ážáá«"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> á¡ááœáẠááááºážáá¬ážáá±á¬ á
áá¬ážááŸáẠááœá±ážáá«"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> á¡ááœáẠááááºážáá¬ážáá±á¬ áááºááŸááºááá¯ážáááºááŸá¯ááᯠááœá±ážáá«"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> á¡ááœáẠáááºááŸááºááá¯ážáááºááŸá¯ ááœá±ážááŒááºáž"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g> á¡ááœáẠá¡áá±á¬áá·áºáá
áºáᯠááœá±ážáá«"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> á¡ááœáẠáá
áºáá¯ááá¯ááœá±ážááá¬ážá"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g> ááœáẠá€á¡áá»ááºá¡áááºááᯠáá¯á¶ážááá¬ážá"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"áá±á¬ááºáá
áºáááºážááŒáá·áº áááºááŸááºááá¯ážáááºáááº"</string>
diff --git a/packages/CredentialManager/res/values-nb/strings.xml b/packages/CredentialManager/res/values-nb/strings.xml
index 8cf3444..9739635 100644
--- a/packages/CredentialManager/res/values-nb/strings.xml
+++ b/packages/CredentialManager/res/values-nb/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Vil du opprette en passnøkkel for å logge på <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"Vil du lagre passordet for å logge på <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Vil du lagre påloggingsinformasjon for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Vil du bruke skjermlåsen til å opprette en passnøkkel for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Vil du bruke skjermlåsen til å opprette et passord for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Vil du bruke skjermlåsen til å lagre påloggingsinformasjon for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="passkey" msgid="632353688396759522">"passnøkkel"</string>
<string name="password" msgid="6738570945182936667">"passord"</string>
<string name="passkeys" msgid="5733880786866559847">"passnøkler"</string>
@@ -71,15 +68,15 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Gå tilbake til den forrige siden"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Lukk"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Lukk"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Vil du bruke den lagrede tilgangsnøkkelen for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Vil du bruke det lagrede passordet ditt for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Bruk skjermlåsen til å logge på <xliff:g id="APP_NAME">%1$s</xliff:g> med <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Vil du bruke påloggingen for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Vil du låse opp påloggingsalternativene for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Bruk den lagrede passnøkkelen din for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Bruk det lagrede passordet ditt for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Bruk kontoen din for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_description_single_tap" msgid="2797059565126030879">"Bruk skjermlåsen til å logge på <xliff:g id="APP_NAME">%1$s</xliff:g> med <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Lås opp påloggingsalternativene for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Velg en lagret passnøkkel for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Velg et lagret passord for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Velg en lagret pålogging for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Velg pålogging for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Velg en konto for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Vil du velge et alternativ for <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Vil du bruke denne informasjonen i <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Bruk en annen påloggingsmetode"</string>
diff --git a/packages/CredentialManager/res/values-ne/strings.xml b/packages/CredentialManager/res/values-ne/strings.xml
index 161a16d..a353784 100644
--- a/packages/CredentialManager/res/values-ne/strings.xml
+++ b/packages/CredentialManager/res/values-ne/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€®à€Ÿ à€žà€Ÿà€à€š à€à€š à€à€°à¥à€š à€ªà€Ÿà€žà€à¥ à€¬à€šà€Ÿà€à€šà¥ à€¹à¥?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€®à€Ÿ à€žà€Ÿà€à€š à€à€š à€à€°à¥à€š à€ªà€Ÿà€žà€µà€°à¥à€¡ à€žà¥à€ à€à€°à¥à€šà¥ à€¹à¥?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€®à€Ÿ à€žà€Ÿà€à€š à€à€°à¥à€š à€ªà¥à€°à€¯à¥à€ à€à€°à€¿à€šà¥ à€à€Ÿà€šà€à€Ÿà€°à¥ à€žà¥à€ à€à€°à¥à€šà¥ à€¹à¥?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€®à€Ÿ à€ªà€Ÿà€žà€à¥ à€¬à€šà€Ÿà€à€š à€à€«à¥à€šà¥ à€žà¥à€à¥à€°à€¿à€š à€²à€ à€ªà¥à€°à€¯à¥à€ à€à€°à¥à€šà¥ à€¹à¥?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€®à€Ÿ à€ªà€Ÿà€žà€µà€°à¥à€¡ à€°à€Ÿà€à¥à€š à€à€«à¥à€šà¥ à€žà¥à€à¥à€°à€¿à€š à€²à€ à€ªà¥à€°à€¯à¥à€ à€à€°à¥à€šà¥ à€¹à¥?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€®à€Ÿ à€žà€Ÿà€à€š à€à€šà€žà€®à¥à€¬à€šà¥à€§à¥ à€à€Ÿà€šà€à€Ÿà€°à¥ à€žà¥à€ à€à€°à¥à€š à€à€«à¥à€šà¥ à€žà¥à€à¥à€°à€¿à€š à€²à€ à€ªà¥à€°à€¯à¥à€ à€à€°à¥à€šà¥ à€¹à¥?"</string>
<string name="passkey" msgid="632353688396759522">"à€ªà€Ÿà€žà€à¥"</string>
<string name="password" msgid="6738570945182936667">"à€ªà€Ÿà€žà€µà€°à¥à€¡"</string>
<string name="passkeys" msgid="5733880786866559847">"à€ªà€Ÿà€žà€à¥à€¹à€°à¥"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"à€
à€à€¿à€²à¥à€²à¥ à€ªà¥à€à€®à€Ÿ à€«à€°à¥à€à€šà¥à€¹à¥à€žà¥"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"à€¬à€šà¥à€Š à€à€°à¥à€šà¥à€¹à¥à€žà¥"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"à€¹à€à€Ÿà€à€šà¥à€¹à¥à€žà¥"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"à€à€«à¥à€²à¥ à€žà¥à€ à€à€°à¥à€à¥ à€ªà€Ÿà€žà€à¥ à€ªà¥à€°à€¯à¥à€ à€à€°à¥ <xliff:g id="APP_NAME">%1$s</xliff:g> à€®à€Ÿ à€žà€Ÿà€à€š à€à€š à€à€°à¥à€šà¥ à€¹à¥?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€®à€Ÿ à€žà€Ÿà€à€š à€à€š à€à€°à¥à€š à€žà¥à€ à€à€°à€¿à€à€à¥ à€ªà€Ÿà€žà€µà€°à¥à€¡ à€ªà¥à€°à€¯à¥à€ à€à€°à¥à€šà¥ à€¹à¥?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"<xliff:g id="USERNAME">%2$s</xliff:g> à€ªà¥à€°à€¯à¥à€ à€à€°à¥ <xliff:g id="APP_NAME">%1$s</xliff:g> à€®à€Ÿ à€žà€Ÿà€à€š à€à€š à€à€°à¥à€š à€à€«à¥à€šà¥ à€žà¥à€à¥à€°à€¿à€š à€²à€ à€ªà¥à€°à€¯à¥à€ à€à€°à¥à€šà¥à€¹à¥à€žà¥"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€®à€Ÿ à€žà€Ÿà€à€š à€à€š à€à€°à¥à€šà€à€Ÿ à€²à€Ÿà€à€¿ à€€à€ªà€Ÿà€à€à€à€Ÿ à€à¥à€°à€¿à€¡à¥à€šà¥à€žà€¿à€¯à€²à€¹à€°à¥ à€ªà¥à€°à€¯à¥à€ à€à€°à¥à€šà¥ à€¹à¥?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€à€Ÿ à€žà€Ÿà€à€š à€à€šà€žà€®à¥à€¬à€šà¥à€§à¥ à€µà€¿à€à€²à¥à€ªà€¹à€°à¥ à€
à€šà€²à€ à€à€°à¥à€šà¥ à€¹à¥?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€à€²à€Ÿà€à€š à€žà¥à€ à€à€°à€¿à€à€à¥ à€ªà€Ÿà€žà€à¥ à€ªà¥à€°à€¯à¥à€ à€à€°à¥à€šà¥à€¹à¥à€žà¥"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€à€²à€Ÿà€à€š à€žà¥à€ à€à€°à€¿à€à€à¥ à€ªà€Ÿà€žà€µà€°à¥à€¡ à€ªà¥à€°à€¯à¥à€ à€à€°à¥à€šà¥à€¹à¥à€žà¥"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€à€²à€Ÿà€à€š à€à€«à¥à€šà¥ à€à€Ÿà€€à€Ÿ à€ªà¥à€°à€¯à¥à€ à€à€°à¥à€šà¥à€¹à¥à€žà¥"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€à€²à€Ÿà€à€š à€žà€Ÿà€à€š à€à€šà€žà€®à¥à€¬à€šà¥à€§à¥ à€µà€¿à€à€²à¥à€ªà€¹à€°à¥ à€ªà¥à€°à€Ÿà€ªà¥à€€ à€à€°à¥à€šà¥à€¹à¥à€žà¥"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€®à€Ÿ à€žà€Ÿà€à€š à€à€š à€à€°à¥à€š à€žà¥à€ à€à€°à€¿à€à€à¥ à€ªà€Ÿà€žà€à¥ à€à€šà¥à€ à€à€°à¥à€šà¥à€¹à¥à€žà¥"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€®à€Ÿ à€žà€Ÿà€à€š à€à€š à€à€°à¥à€š à€žà¥à€ à€à€°à€¿à€à€à¥ à€ªà€Ÿà€žà€µà€°à¥à€¡ à€à€šà¥à€ à€à€°à¥à€šà¥à€¹à¥à€žà¥"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€®à€Ÿ à€žà€Ÿà€à€š à€à€š à€à€°à¥à€š à€žà¥à€ à€à€°à€¿à€à€à€Ÿ à€à¥à€°à€¿à€¡à¥à€šà¥à€žà€¿à€¯à€² à€à€šà¥à€ à€à€°à¥à€šà¥à€¹à¥à€žà¥"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€®à€Ÿ à€žà€Ÿà€à€š à€à€š à€à€°à¥à€š à€ªà¥à€°à€¯à¥à€ à€à€°à€¿à€šà¥ à€à¥à€°à€¿à€¡à¥à€šà¥à€žà€¿à€¯à€²à€¹à€°à¥ à€à€šà¥à€ à€à€°à¥à€šà¥à€¹à¥à€žà¥"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€à€²à€Ÿà€à€š à€à¥à€šà¥ à€à€Ÿà€€à€Ÿ à€à€šà¥à€ à€à€°à¥à€šà¥à€¹à¥à€žà¥"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€®à€Ÿ à€žà€Ÿà€à€š à€à€°à¥à€š à€ªà¥à€°à€¯à¥à€ à€à€°à€¿à€šà¥ à€à¥à€°à€¿à€¡à¥à€šà¥à€žà€¿à€¯à€² à€à€šà¥à€ à€à€°à¥à€šà¥ à€¹à¥?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g> à€®à€Ÿ à€žà€Ÿà€à€š à€à€°à¥à€š à€à€°à¥à€šà€à€Ÿ à€šà€¿à€®à¥à€€à€¿ à€¯à¥ à€à€Ÿà€šà€à€Ÿà€°à¥ à€ªà¥à€°à€¯à¥à€ à€à€°à¥à€šà¥ à€¹à¥?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"à€
à€°à¥à€à¥ à€µà€¿à€§à€¿ à€ªà¥à€°à€¯à¥à€ à€à€°à¥ à€žà€Ÿà€à€š à€à€š à€à€°à¥à€šà¥à€¹à¥à€žà¥"</string>
diff --git a/packages/CredentialManager/res/values-nl/strings.xml b/packages/CredentialManager/res/values-nl/strings.xml
index 6707ff0..d7790c7 100644
--- a/packages/CredentialManager/res/values-nl/strings.xml
+++ b/packages/CredentialManager/res/values-nl/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Toegangssleutel maken om in te loggen bij <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"Wachtwoord opslaan om in te loggen bij <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Inloggegevens opslaan voor <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Je schermvergrendeling gebruiken om een toegangssleutel voor <xliff:g id="APP_NAME">%1$s</xliff:g> te maken?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Je schermvergrendeling gebruiken om een wachtwoord voor <xliff:g id="APP_NAME">%1$s</xliff:g> te maken?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Je schermvergrendeling gebruiken om inloggegevens voor <xliff:g id="APP_NAME">%1$s</xliff:g> op te slaan?"</string>
<string name="passkey" msgid="632353688396759522">"Toegangssleutel"</string>
<string name="password" msgid="6738570945182936667">"wachtwoord"</string>
<string name="passkeys" msgid="5733880786866559847">"toegangssleutels"</string>
@@ -71,15 +68,15 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Ga terug naar de vorige pagina"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Sluiten"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Sluiten"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Je opgeslagen toegangssleutel gebruiken voor <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Je opgeslagen wachtwoord voor <xliff:g id="APP_NAME">%1$s</xliff:g> gebruiken?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Gebruik je schermvergrendeling om in te loggen bij <xliff:g id="APP_NAME">%1$s</xliff:g> met <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Je login voor <xliff:g id="APP_NAME">%1$s</xliff:g> gebruiken?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Inlogopties voor <xliff:g id="APP_NAME">%1$s</xliff:g> ontgrendelen?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Gebruik je opgeslagen toegangssleutel voor <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Gebruik je opgeslagen wachtwoord voor <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Gebruik je account voor <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_description_single_tap" msgid="2797059565126030879">"Gebruik je schermvergrendeling om in te loggen bij <xliff:g id="APP_NAME">%1$s</xliff:g> met <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Ontgrendel inlogopties voor <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Opgeslagen toegangssleutel kiezen voor <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Opgeslagen wachtwoord kiezen voor <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Opgeslagen login kiezen voor <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Kies een login voor <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Kies een account voor <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Een optie kiezen voor <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Deze informatie gebruiken in <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Op een andere manier inloggen"</string>
diff --git a/packages/CredentialManager/res/values-or/strings.xml b/packages/CredentialManager/res/values-or/strings.xml
index 9781c49..1e2bbe8 100644
--- a/packages/CredentialManager/res/values-or/strings.xml
+++ b/packages/CredentialManager/res/values-or/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"<xliff:g id="APP_NAME">%1$s</xliff:g>ରà ଞଟà¬à¬š à¬à¬š à¬à¬°à¬¿à¬¬à¬Ÿà¬à ପଟଞà¬à ଀ିà¬à¬°à¬¿ à¬à¬°à¬¿à¬¬à?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"<xliff:g id="APP_NAME">%1$s</xliff:g>ରà ଞଟà¬à¬š à¬à¬š à¬à¬°à¬¿à¬¬à¬Ÿà¬à ପଟଞà±à¬Ÿà¬°àଡ ଞàଠà¬à¬°à¬¿à¬¬à?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପଟà¬à¬ ଞଟà¬à¬š-à¬à¬šà¬° ଞàà¬à¬šà¬Ÿ ଞàଠà¬à¬°à¬¿à¬¬à?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପଟà¬à¬ à¬à¬ ପଟଞà¬à ଀ିà¬à¬°à¬¿ à¬à¬°à¬¿à¬¬à¬Ÿà¬à à¬à¬ªà¬£à¬àଠଞàà¬àରିଚ ଲଠବààବହଟର à¬à¬°à¬¿à¬¬à?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପଟà¬à¬ à¬à¬ ପଟଞà±à¬Ÿà¬°àଡ ଀ିà¬à¬°à¬¿ à¬à¬°à¬¿à¬¬à¬Ÿà¬à à¬à¬ªà¬£à¬àଠଞàà¬àରିଚ ଲଠବààବହଟର à¬à¬°à¬¿à¬¬à?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପଟà¬à¬ ଞଟà¬à¬š à¬à¬š ଞàà¬à¬šà¬Ÿ ଞàଠà¬à¬°à¬¿à¬¬à¬Ÿà¬à à¬à¬ªà¬£à¬àଠଞàà¬àରିଚ ଲଠବààବହଟର à¬à¬°à¬¿à¬¬à?"</string>
<string name="passkey" msgid="632353688396759522">"ପଟଞà¬à"</string>
<string name="password" msgid="6738570945182936667">"ପଟଞà±à¬Ÿà¬°àଡ"</string>
<string name="passkeys" msgid="5733880786866559847">"ପଟଞà¬àà¬àଡଌିà¬"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"ପàରàବବରà଀à଀à ପàଷàଠଟà¬à ଫàରଚà଀à"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"ବଚàଊ à¬à¬°à¬šà଀à"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"à¬à¬Ÿà¬°à¬ à¬à¬°à¬šà଀à"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପଟà¬à¬ ଞàଠà¬à¬°à¬Ÿà¬¯à¬Ÿà¬à¬¥à¬¿à¬¬à¬Ÿ à¬à¬ªà¬£à¬àଠପଟଞà¬à ବààବହଟର à¬à¬°à¬¿à¬¬à?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପଟà¬à¬ à¬à¬ªà¬£à¬àଠଞàଠà¬à¬°à¬Ÿà¬¯à¬Ÿà¬à¬¥à¬¿à¬¬à¬Ÿ ପଟଞà±à¬Ÿà¬°àଡà¬à ବààବହଟର à¬à¬°à¬¿à¬¬à?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"<xliff:g id="USERNAME">%2$s</xliff:g> ମଟଧààମରà <xliff:g id="APP_NAME">%1$s</xliff:g>ରà ଞଟà¬à¬š à¬à¬š à¬à¬°à¬¿à¬¬à¬Ÿ ପଟà¬à¬ à¬à¬ªà¬£à¬àଠଞàà¬àରିଚ ଲଠବààବହଟର à¬à¬°à¬šà଀à"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପଟà¬à¬ à¬à¬ªà¬£à¬àଠଞଟà¬à¬š-à¬à¬š ବààବହଟର à¬à¬°à¬¿à¬¬à?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପଟà¬à¬ ଞଟà¬à¬š-à¬à¬š ବିà¬à¬³àପà¬àଡଌିà¬à à¬
ଚଲଠà¬à¬°à¬¿à¬¬à?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପଟà¬à¬ à¬à¬ªà¬£à¬àଠଞàଠà¬à¬°à¬Ÿà¬¯à¬Ÿà¬à¬¥à¬¿à¬¬à¬Ÿ ପଟଞà¬à ବààବହଟର à¬à¬°à¬šà଀à"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପଟà¬à¬ à¬à¬ªà¬£à¬àଠଞàଠà¬à¬°à¬Ÿà¬¯à¬Ÿà¬à¬¥à¬¿à¬¬à¬Ÿ ପଟଞà±à¬Ÿà¬°àଡ ବààବହଟର à¬à¬°à¬šà଀à"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପଟà¬à¬ à¬à¬ªà¬£à¬àଠà¬à¬à¬Ÿà¬à¬£àଠବààବହଟର à¬à¬°à¬šà଀à"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପଟà¬à¬ ଞଟà¬à¬š-à¬à¬š ବିà¬à¬³àପà¬à à¬
ଚଲଠà¬à¬°à¬šà଀à"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପଟà¬à¬ ଞàଠà¬à¬°à¬Ÿà¬¯à¬Ÿà¬à¬¥à¬¿à¬¬à¬Ÿ à¬à¬ ପଟଞà¬à ବଟà¬à¬šà଀à"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପଟà¬à¬ ଞàଠà¬à¬°à¬Ÿà¬¯à¬Ÿà¬à¬¥à¬¿à¬¬à¬Ÿ à¬à¬ ପଟଞà±à¬Ÿà¬°àଡ ବଟà¬à¬šà଀à"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପଟà¬à¬ ଞàଠà¬à¬°à¬Ÿà¬¯à¬Ÿà¬à¬¥à¬¿à¬¬à¬Ÿ à¬à¬ ଞଟà¬à¬š-à¬à¬š ବଟà¬à¬šà଀à"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପଟà¬à¬ à¬à¬ ଞଟà¬à¬š-à¬à¬š ବଟà¬à¬šà଀à"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପଟà¬à¬ à¬à¬ à¬à¬à¬Ÿà¬à¬£àଠବଟà¬à¬šà଀à"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> ପଟà¬à¬ à¬à¬ ବିà¬à¬³àପ ବଟà¬à¬¿à¬¬à?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g>ରà à¬à¬¹à¬¿ ଞàà¬à¬šà¬Ÿà¬à ବààବହଟର à¬à¬°à¬¿à¬¬à?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"à¬
ଚàà à¬à¬ à¬à¬ªà¬Ÿàରà ଞଟà¬à¬š à¬à¬š à¬à¬°à¬šà଀à"</string>
diff --git a/packages/CredentialManager/res/values-pa/strings.xml b/packages/CredentialManager/res/values-pa/strings.xml
index a5aceb7..1caec50 100644
--- a/packages/CredentialManager/res/values-pa/strings.xml
+++ b/packages/CredentialManager/res/values-pa/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"àšà© <xliff:g id="APP_NAME">%1$s</xliff:g> àšµàš¿à©±àš àšžàšŸàšàšš-àšàšš àšàš°àšš àš²àš àšªàšŸàšžàšà© àš¬àš£àšŸàšàš£à© àš¹à©?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"àšà© <xliff:g id="APP_NAME">%1$s</xliff:g> àšµàš¿à©±àš àšžàšŸàšàšš-àšàšš àšàš°àšš àš²àš àšªàšŸàšžàšµàš°àš¡ àš°à©±àšàš¿àš
àš€ àšàš°àššàšŸ àš¹à©?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"àšà© <xliff:g id="APP_NAME">%1$s</xliff:g> àš²àš àšžàšŸàšàšš-àšàšš àšàšŸàš£àšàšŸàš°à© àš°à©±àšàš¿àš
àš€ àšàš°àššà© àš¹à©?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"àšà© <xliff:g id="APP_NAME">%1$s</xliff:g> àš²àš àšªàšŸàšžàšà© àš¬àš£àšŸàšàš£ àšµàšŸàšžàš€à© àšàšªàš£à© àšžàšà©àš°à©àšš àš²àšŸàš àšŠà© àšµàš°àš€à©àš àšàš°àššà© àš¹à©?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"àšà© <xliff:g id="APP_NAME">%1$s</xliff:g> àš²àš àšªàšŸàšžàšµàš°àš¡ àš¬àš£àšŸàšàš£ àšµàšŸàšžàš€à© àšàšªàš£à© àšžàšà©àš°à©àšš àš²àšŸàš àšŠà© àšµàš°àš€à©àš àšàš°àššà© àš¹à©?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"àšà© <xliff:g id="APP_NAME">%1$s</xliff:g> àš²àš àšžàšŸàšàšš-àšàšš àšàšŸàš£àšàšŸàš°à© àš°à©±àšàš¿àš
àš€ àšàš°àšš àšµàšŸàšžàš€à© àšàšªàš£à© àšžàšà©àš°à©àšš àš²àšŸàš àšŠà© àšµàš°àš€à©àš àšàš°àššà© àš¹à©?"</string>
<string name="passkey" msgid="632353688396759522">"àšªàšŸàšžàšà©"</string>
<string name="password" msgid="6738570945182936667">"àšªàšŸàšžàšµàš°àš¡"</string>
<string name="passkeys" msgid="5733880786866559847">"àšªàšŸàšžàšà©àšàš"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"àšªàš¿àšàš²à© àšªà©°àššà© \'àš€à© àšµàšŸàšªàšž àšàšŸàš"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"àš¬à©°àšŠ àšàš°à©"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"àšàšŸàš°àš àšàš°à©"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"àšà© <xliff:g id="APP_NAME">%1$s</xliff:g> àš²àš àšàšªàš£à© àš°à©±àšàš¿àš
àš€ àšà©àš€à© àšªàšŸàšžàšà© àšŠà© àšµàš°àš€à©àš àšàš°àššà© àš¹à©?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"àšà© <xliff:g id="APP_NAME">%1$s</xliff:g> àš²àš àš€à©àš¹àšŸàš¡àšŸ àš°à©±àšàš¿àš
àš€ àšà©àš€àšŸ àšªàšŸàšžàšµàš°àš¡ àšµàš°àš€àš£àšŸ àš¹à©?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"<xliff:g id="USERNAME">%2$s</xliff:g> àššàšŸàš² <xliff:g id="APP_NAME">%1$s</xliff:g> àšµàš¿à©±àš àšžàšŸàšàšš-àšàšš àšàš°àšš àš²àš àšàšªàš£à© àšžàšà©àš°à©àšš àš²àšŸàš àšŠà© àšµàš°àš€à©àš àšàš°à©"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"àšà© <xliff:g id="APP_NAME">%1$s</xliff:g> àš²àš àšàšªàš£àšŸ àšžàšŸàšàšš-àšàšš àšàš°àšš àšŠàšŸ àšµàš¿àšàš²àšª àšµàš°àš€àš£àšŸ àš¹à©?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"àšà© <xliff:g id="APP_NAME">%1$s</xliff:g> àš²àš àšžàšŸàšàšš-àšàšš àšµàš¿àšàš²àšªàšŸàš àššà©à©° àš
àš£àš²àšŸàš àšàš°àššàšŸ àš¹à©?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"<xliff:g id="APP_NAME">%1$s</xliff:g> àš²àš àšàšªàš£à© àš°à©±àšàš¿àš
àš€ àšà©àš€à© àšªàšŸàšžàšà© àšµàš°àš€à©"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"<xliff:g id="APP_NAME">%1$s</xliff:g> àš²àš àšàšªàš£àšŸ àš°à©±àšàš¿àš
àš€ àšà©àš€àšŸ àšªàšŸàšžàšµàš°àš¡ àšµàš°àš€à©"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"<xliff:g id="APP_NAME">%1$s</xliff:g> àš²àš àšàšªàš£àšŸ àšàšŸàš€àšŸ àšµàš°àš€à©"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g> àš²àš àšžàšŸàšàšš-àšàšš àšµàš¿àšàš²àšªàšŸàš àššà©à©° àš
àš£àš²àšŸàš àšàš°à©"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> àš²àš àšà©àš àš°à©±àšàš¿àš
àš€ àšà©àš€à© àšªàšŸàšžàšà© àšà©àš£à©"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> àš²àš àšà©àš àš°à©±àšàš¿àš
àš€ àšà©àš€àšŸ àšªàšŸàšžàšµàš°àš¡ àšà©àš£à©"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> àš²àš àšà©àš àš°à©±àšàš¿àš
àš€ àšà©àš€à© àšžàšŸàšàšš-àšàšš àšàšŸàš£àšàšŸàš°à© àšà©àš£à©"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> àš²àš àšžàšŸàšàšš-àšàšš àšàš°àšš àšŠàšŸ àšµàš¿àšàš²àšª àšà©àš£à©"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g> àš²àš àšà©àš àšàšŸàš€àšŸ àšà©àš£à©"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"àšà© <xliff:g id="APP_NAME">%1$s</xliff:g> àš²àš àšàš¿àšžà© àšµàš¿àšàš²àšª àšŠà© àšà©àš£ àšàš°àššà© àš¹à©?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"àšà© <xliff:g id="APP_NAME">%1$s</xliff:g> \'àš€à© àšàšž àšàšŸàš£àšàšŸàš°à© àšŠà© àšµàš°àš€à©àš àšàš°àššà© àš¹à©?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"àšàš¿àšžà© àš¹à©àš° àš€àš°à©àšà© àššàšŸàš² àšžàšŸàšàšš-àšàšš àšàš°à©"</string>
diff --git a/packages/CredentialManager/res/values-pl/strings.xml b/packages/CredentialManager/res/values-pl/strings.xml
index eca8699..3857de4 100644
--- a/packages/CredentialManager/res/values-pl/strings.xml
+++ b/packages/CredentialManager/res/values-pl/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"UtworzyÄ klucz dostÄpu do logowania w aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"ZapisaÄ hasÅo do logowania w aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"ZapisaÄ dane uÅŒywane do logowania w aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"UÅŒyÄ metody odblokowania ekranu do utworzenia klucza dostÄpu do aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"UÅŒyÄ metody odblokowania ekranu do utworzenia hasÅa do aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"UÅŒyÄ metody odblokowania ekranu do zapisania danych logowania do aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="passkey" msgid="632353688396759522">"klucz"</string>
<string name="password" msgid="6738570945182936667">"hasÅo"</string>
<string name="passkeys" msgid="5733880786866559847">"klucze dostÄpu"</string>
@@ -71,15 +68,15 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"WróÄ do poprzedniej strony"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Zamknij"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Zamknij"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"UÅŒyÄ zapisanego klucza dla aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"UÅŒyÄ zapisanego hasÅa do aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"UÅŒywaj metody odblokowywania ekranu, aby logowaÄ siÄ do aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g> za pomocÄ
nazwy uÅŒytkownika <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"UÅŒyÄ tych danych logowania do aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"OdblokowaÄ opcje logowania do aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"UÅŒyj zapisanego klucza dostÄpu do aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"UÅŒyj zapisanego hasÅa do aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"UÅŒyj swojego konta w aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_description_single_tap" msgid="2797059565126030879">"UÅŒywaj metody odblokowywania ekranu, aby logowaÄ siÄ w aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g> za pomocÄ
nazwy uÅŒytkownika <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Odblokuj opcje logowania w aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Wybierz zapisany klucz dostÄpu do aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Wybierz zapisane hasÅo do aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Wybierz zapisane dane logowania do aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Wybierz dane logowania do aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Wybierz konto dla aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"WybraÄ opcjÄ dla aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"UÅŒyÄ tych informacji w aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Zaloguj siÄ w inny sposób"</string>
diff --git a/packages/CredentialManager/res/values-pt-rBR/strings.xml b/packages/CredentialManager/res/values-pt-rBR/strings.xml
index b508af9..2a1b6a6 100644
--- a/packages/CredentialManager/res/values-pt-rBR/strings.xml
+++ b/packages/CredentialManager/res/values-pt-rBR/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Criar chave de acesso para fazer login no app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"Salvar senha para fazer login no app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Salvar informações de login do app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Usar o bloqueio de tela para criar uma chave de acesso para o app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Usar o bloqueio de tela para criar uma senha para o app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Usar o bloqueio de tela para salvar as informações de login do app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="passkey" msgid="632353688396759522">"chave de acesso"</string>
<string name="password" msgid="6738570945182936667">"senha"</string>
<string name="passkeys" msgid="5733880786866559847">"chaves de acesso"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Voltar à página anterior"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Fechar"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Dispensar"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Usar sua chave de acesso salva para o app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Usar a senha salva para o app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Use o bloqueio de tela para fazer login no app <xliff:g id="APP_NAME">%1$s</xliff:g> com a conta <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Usar seu login para o app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Desbloquear opções de login para o app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Usar sua chave de acesso salva para o app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Usar a senha salva para o app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Usar sua conta para o app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Desbloquear opções de login para o app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Escolha uma chave de acesso salva para o app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Escolha uma senha salva para o app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Escolha uma credencial de login salva para o app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Escolha uma opção de login para o app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Escolha uma conta para o app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Escolher uma opção para o app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Usar estas informações no app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Fazer login de outra forma"</string>
diff --git a/packages/CredentialManager/res/values-pt-rPT/strings.xml b/packages/CredentialManager/res/values-pt-rPT/strings.xml
index 8b6b2b2..2204e02 100644
--- a/packages/CredentialManager/res/values-pt-rPT/strings.xml
+++ b/packages/CredentialManager/res/values-pt-rPT/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Criar a chave de acesso para iniciar sessão na app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"Guardar a palavra-passe para iniciar sessão na app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Guardar as informações de início de sessão da app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Usar o bloqueio de ecrã para criar uma chave de acesso para a app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Usar o bloqueio de ecrã para criar uma palavra-passe para a app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Usar o bloqueio de ecrã para guardar as informações de início de sessão para a app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="passkey" msgid="632353688396759522">"chave de acesso"</string>
<string name="password" msgid="6738570945182936667">"palavra-passe"</string>
<string name="passkeys" msgid="5733880786866559847">"chaves de acesso"</string>
@@ -71,15 +68,15 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Volte à página anterior"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Fechar"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Ignorar"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Usar a sua chave de acesso guardada na app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Usar a sua palavra-passe guardada para a app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Use o seu bloqueio de ecrã para iniciar sessão na app <xliff:g id="APP_NAME">%1$s</xliff:g> com <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Usar o seu início de sessão para a app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Desbloquear as opções de início de sessão para a app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Use a sua chave de acesso guardada na app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Use a sua palavra-passe guardada na app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Use sua conta na app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_description_single_tap" msgid="2797059565126030879">"Use o seu bloqueio de ecrã para iniciar sessão na app <xliff:g id="APP_NAME">%1$s</xliff:g> com <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Desbloqueie as opções de início de sessão para a app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Escolha uma chave de acesso guardada para a app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Escolha uma palavra-passe guardada para a app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Escolha um início de sessão guardado para a app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Escolha um início de sessão para a app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Escolha uma conta para a app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Escolher uma opção para a app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Usar estas informações na app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Iniciar sessão de outra forma"</string>
diff --git a/packages/CredentialManager/res/values-pt/strings.xml b/packages/CredentialManager/res/values-pt/strings.xml
index b508af9..2a1b6a6 100644
--- a/packages/CredentialManager/res/values-pt/strings.xml
+++ b/packages/CredentialManager/res/values-pt/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Criar chave de acesso para fazer login no app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"Salvar senha para fazer login no app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Salvar informações de login do app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Usar o bloqueio de tela para criar uma chave de acesso para o app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Usar o bloqueio de tela para criar uma senha para o app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Usar o bloqueio de tela para salvar as informações de login do app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="passkey" msgid="632353688396759522">"chave de acesso"</string>
<string name="password" msgid="6738570945182936667">"senha"</string>
<string name="passkeys" msgid="5733880786866559847">"chaves de acesso"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Voltar à página anterior"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Fechar"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Dispensar"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Usar sua chave de acesso salva para o app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Usar a senha salva para o app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Use o bloqueio de tela para fazer login no app <xliff:g id="APP_NAME">%1$s</xliff:g> com a conta <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Usar seu login para o app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Desbloquear opções de login para o app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Usar sua chave de acesso salva para o app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Usar a senha salva para o app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Usar sua conta para o app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Desbloquear opções de login para o app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Escolha uma chave de acesso salva para o app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Escolha uma senha salva para o app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Escolha uma credencial de login salva para o app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Escolha uma opção de login para o app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Escolha uma conta para o app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Escolher uma opção para o app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Usar estas informações no app <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Fazer login de outra forma"</string>
diff --git a/packages/CredentialManager/res/values-ro/strings.xml b/packages/CredentialManager/res/values-ro/strings.xml
index ccbf228..2fd84cf 100644
--- a/packages/CredentialManager/res/values-ro/strings.xml
+++ b/packages/CredentialManager/res/values-ro/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Creezi o cheie de acces pentru a te conecta la <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"Salvezi parola pentru a te conecta la <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Salvezi informaÈiile de conectare pentru <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"FoloseÈti blocarea ecranului ca sÄ creezi o cheie de acces pentru <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"FoloseÈti blocarea ecranului ca sÄ creezi o parolÄ pentru <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"FoloseÈti blocarea ecranului ca sÄ salvezi informaÈiile de conectare pentru <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="passkey" msgid="632353688396759522">"cheia de acces"</string>
<string name="password" msgid="6738570945182936667">"parolÄ"</string>
<string name="passkeys" msgid="5733880786866559847">"cheile de acces"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Revino la pagina precedentÄ"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Închide"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Închide"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"FoloseÈti cheia de acces salvatÄ pentru <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"FoloseÈti parola salvatÄ pentru <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"FoloseÈte blocarea ecranului ca sÄ te conectezi la <xliff:g id="APP_NAME">%1$s</xliff:g> cu <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"FoloseÈti datele de conectare pentru <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Deblochezi opÈiunile de conectare pentru <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"FoloseÈte cheia de acces salvatÄ pentru <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"FoloseÈte parola salvatÄ pentru <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"FoloseÈte-Èi contul pentru <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"DeblocheazÄ opÈiunile de conectare pentru <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Alege o cheie de acces salvatÄ pentru <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Alege o parolÄ salvatÄ pentru <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Alege o conectare salvatÄ pentru <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Alege un set de date conectare pentru <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Alege un cont pentru <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Alegi o opÈiune pentru <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"FoloseÈti aceste informaÈii în <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"ConecteazÄ-te altfel"</string>
diff --git a/packages/CredentialManager/res/values-ru/strings.xml b/packages/CredentialManager/res/values-ru/strings.xml
index c9c8dcc..690af93 100644
--- a/packages/CredentialManager/res/values-ru/strings.xml
+++ b/packages/CredentialManager/res/values-ru/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"СПзЎаÑÑ ÐºÐ»ÑÑ ÐŽÐŸÑÑÑпа ÐŽÐ»Ñ Ð²Ñ
ПЎа в пÑОлПжеМОе \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"СПÑ
ÑаМОÑÑ Ð¿Ð°ÑÐŸÐ»Ñ ÐŽÐ»Ñ Ð²Ñ
ПЎа в пÑОлПжеМОе \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"СПÑ
ÑаМОÑÑ ÐŽÐ°ÐœÐœÑе ÐŽÐ»Ñ Ð²Ñ
ПЎа в пÑОлПжеМОе \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"ÐÑпПлÑзПваÑÑ ÑпПÑПб ÑазблПкОÑПвкО ÑкÑаМа, ÑÑÐŸÐ±Ñ ÑПзЎаÑÑ ÐºÐ»ÑÑ ÐŽÐŸÑÑÑпа ÐŽÐ»Ñ Ð¿ÑÐžÐ»ÐŸÐ¶ÐµÐœÐžÑ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"ÐÑпПлÑзПваÑÑ ÑпПÑПб ÑазблПкОÑПвкО ÑкÑаМа, ÑÑÐŸÐ±Ñ ÑПзЎаÑÑ Ð¿Ð°ÑÐŸÐ»Ñ ÐŽÐ»Ñ Ð¿ÑÐžÐ»ÐŸÐ¶ÐµÐœÐžÑ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"ÐÑпПлÑзПваÑÑ ÑпПÑПб ÑазблПкОÑПвкО ÑкÑаМа, ÑÑÐŸÐ±Ñ ÑПÑ
ÑаМОÑÑ ÐŽÐ°ÐœÐœÑе ÐŽÐ»Ñ Ð²Ñ
ПЎа в пÑОлПжеМОе \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string>
<string name="passkey" msgid="632353688396759522">"клÑÑ ÐŽÐŸÑÑÑпа"</string>
<string name="password" msgid="6738570945182936667">"паÑПлÑ"</string>
<string name="passkeys" msgid="5733880786866559847">"клÑÑО ЎПÑÑÑпа"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"ÐеÑМÑÑÑÑÑ ÐœÐ° пÑеЎÑÐŽÑÑÑÑ ÑÑÑаМОÑÑ"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"ÐакÑÑÑÑ"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"ÐакÑÑÑÑ"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"ÐÑпПлÑзПваÑÑ ÑПÑ
ÑаМеММÑй клÑÑ ÐŽÐŸÑÑÑпа ÐŽÐ»Ñ Ð¿ÑÐžÐ»ÐŸÐ¶ÐµÐœÐžÑ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"ÐÑпПлÑзПваÑÑ ÑПÑ
ÑаМеММÑй паÑÐŸÐ»Ñ ÐŽÐ»Ñ Ð¿ÑÐžÐ»ÐŸÐ¶ÐµÐœÐžÑ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"ÐÑпПлÑзÑйÑе ÑпПÑПб ÑазблПкОÑПвкО ÑкÑаМа ÐŽÐ»Ñ Ð²Ñ
ПЎа в пÑОлПжеМОе \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" (<xliff:g id="USERNAME">%2$s</xliff:g>)."</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"ÐПйÑО в пÑОлПжеМОе \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" Ñ ÑÑОЌО ЎаММÑЌО?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"РазблПкОÑПваÑÑ Ð²Ð°ÑОаМÑÑ Ð²Ñ
ПЎа ÐŽÐ»Ñ Ð¿ÑÐžÐ»ÐŸÐ¶ÐµÐœÐžÑ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"ÐÑпПлÑзÑйÑе ÑПÑ
ÑаМеММÑй клÑÑ ÐŽÐŸÑÑÑпа ÐŽÐ»Ñ Ð¿ÑÐžÐ»ÐŸÐ¶ÐµÐœÐžÑ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"ÐÑпПлÑзÑйÑе ÑПÑ
ÑаМеММÑй паÑÐŸÐ»Ñ ÐŽÐ»Ñ Ð¿ÑÐžÐ»ÐŸÐ¶ÐµÐœÐžÑ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"ÐÑпПлÑзÑйÑе аккаÑÐœÑ ÐŽÐ»Ñ Ð²Ñ
ПЎа в пÑОлПжеМОе \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"РазблПкОÑÑйÑе ÑпПÑÐŸÐ±Ñ Ð²Ñ
ПЎа ÐŽÐ»Ñ Ð¿ÑÐžÐ»ÐŸÐ¶ÐµÐœÐžÑ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"ÐÑбеÑОÑе ÑПÑ
ÑаМеММÑй клÑÑ ÐŽÐŸÑÑÑпа ÐŽÐ»Ñ Ð¿ÑÐžÐ»ÐŸÐ¶ÐµÐœÐžÑ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"ÐÑбеÑОÑе ÑПÑ
ÑаМеММÑй паÑÐŸÐ»Ñ ÐŽÐ»Ñ Ð¿ÑÐžÐ»ÐŸÐ¶ÐµÐœÐžÑ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"ÐÑбеÑОÑе ÑПÑ
ÑаМеММÑе ÑÑеÑМÑе ЎаММÑе ÐŽÐ»Ñ Ð¿ÑÐžÐ»ÐŸÐ¶ÐµÐœÐžÑ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Ðак Ð²Ñ Ñ
ПÑОÑе вПйÑО в пÑОлПжеМОе \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"ÐÑбеÑОÑе аккаÑÐœÑ ÐŽÐ»Ñ Ð¿ÑÐžÐ»ÐŸÐ¶ÐµÐœÐžÑ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"ÐÑбеÑОÑе ЎаММÑе ÐŽÐ»Ñ Ð²Ñ
ПЎа в пÑОлПжеМОе \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"ÐÑпПлÑзПваÑÑ ÑÑÑ ÐžÐœÑПÑЌаÑÐžÑ ÐŽÐ»Ñ Ð²Ñ
ПЎа в пÑОлПжеМОе \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"ÐПйÑО ÐŽÑÑгОЌ ÑпПÑПбПЌ"</string>
diff --git a/packages/CredentialManager/res/values-si/strings.xml b/packages/CredentialManager/res/values-si/strings.xml
index 0acc655..f5696f7 100644
--- a/packages/CredentialManager/res/values-si/strings.xml
+++ b/packages/CredentialManager/res/values-si/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"<xliff:g id="APP_NAME">%1$s</xliff:g> à·à·à¶ à¶Žà·à¶»à¶±à¶º à·à·à¶žà¶§ à¶žà·à¶»à¶ºà¶à·à¶»à¶à· à¶à¶±à¶±à·à¶± ද?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"<xliff:g id="APP_NAME">%1$s</xliff:g> à·à·à¶ à¶Žà·à¶»à¶±à¶º à·à·à¶žà¶§ à¶žà·à¶»à¶Žà¶¯à¶º à·à·à¶»à¶à·à¶±à·à¶± ද?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"<xliff:g id="APP_NAME">%1$s</xliff:g> à·à¶³à·à· à¶Žà·à¶»à¶±à¶º à·à·à¶žà· à¶à¶à· à·à·à¶»à¶à·à¶±à·à¶± ද?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"<xliff:g id="APP_NAME">%1$s</xliff:g> à·à¶³à·à· à¶žà·à¶»à¶Žà¶¯à¶ºà¶à· à¶à·à¶±à·à¶žà¶§ à¶à¶¶à· à¶à·à¶» à¶
à¶à·à¶œ à¶·à·à·à·à¶ à¶à¶»à¶±à·à¶± ද?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"<xliff:g id="APP_NAME">%1$s</xliff:g> à·à¶³à·à· à¶žà·à¶»à¶Žà¶¯à¶ºà¶à· à¶à·à¶±à·à¶žà¶§ à¶à¶¶à· à¶à·à¶» à¶
à¶à·à¶œ à¶·à·à·à·à¶ à¶à¶»à¶±à·à¶± ද?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"<xliff:g id="APP_NAME">%1$s</xliff:g> à·à¶³à·à· à¶Žà·à¶»à¶±à¶º à·à·à¶žà· à¶à¶à· à·à·à¶»à·à¶à·à¶žà¶§ à¶à¶¶à· à¶à·à¶» à¶
à¶à·à¶œ à¶·à·à·à·à¶à· à¶à¶»à¶±à·à¶± ද?"</string>
<string name="passkey" msgid="632353688396759522">"à¶žà·à¶»à¶ºà¶à·à¶»"</string>
<string name="password" msgid="6738570945182936667">"à¶žà·à¶»à¶Žà¶¯à¶º"</string>
<string name="passkeys" msgid="5733880786866559847">"à¶žà·à¶»à¶ºà¶à·à¶»à·"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"à¶Žà·à¶» à¶Žà·à¶§à·à·à¶§ à¶à¶Žà·à· යනà·à¶±"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"à·à·à¶±à·à¶±"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"à¶
à·à· à¶à¶»à¶±à·à¶±"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> à·à¶³à·à· à¶à¶¶à· à·à·à¶»à·à¶à· à¶žà·à¶»à¶ºà¶à·à¶» à¶·à·à·à·à¶à· à¶à¶»à¶±à·à¶± ද?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> à·à¶³à·à· à¶à¶¶à· à·à·à¶»à·à¶à· à¶žà·à¶»à¶Žà¶¯à¶º à¶·à·à·à·à¶ à¶à¶»à¶±à·à¶± ද?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"<xliff:g id="USERNAME">%2$s</xliff:g> à·à¶žà¶à·à¶±à· <xliff:g id="APP_NAME">%1$s</xliff:g> à·à·à¶ à¶Žà·à¶»à¶±à¶º à·à·à¶žà¶§ à¶à¶¶à· à¶à·à¶» à¶
à¶à·à¶œ à¶·à·à·à·à¶ à¶à¶»à¶±à·à¶±"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> à·à¶³à·à· à¶à¶¶à· à¶Žà·à¶»à¶±à¶º à·à·à¶ž à¶·à·à·à·à¶à· à¶à¶»à¶±à·à¶± ද?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> à·à¶³à·à· à¶Žà·à¶»à¶± à·à·à¶à¶œà·à¶Ž à¶
à¶à·à¶œà· à·à¶»à·à¶±à·à¶± ද?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"<xliff:g id="APP_NAME">%1$s</xliff:g> à·à¶³à·à· à¶à¶¶à· à·à·à¶»à·à¶à· à¶žà·à¶»à¶ºà¶à·à¶» à¶·à·à·à·à¶à· à¶à¶»à¶±à·à¶±"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"<xliff:g id="APP_NAME">%1$s</xliff:g> à·à¶³à·à· à¶à¶¶à· à·à·à¶»à·à¶à· à¶žà·à¶»à¶Žà¶¯à¶º à¶·à·à·à·à¶à· à¶à¶»à¶±à·à¶±"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"<xliff:g id="APP_NAME">%1$s</xliff:g> à·à¶³à·à· à¶à¶¶à· à¶à·à¶«à·à¶ž à¶·à·à·à·à¶à· à¶à¶»à¶±à·à¶±"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g> à·à¶³à·à· à¶Žà·à¶»à¶±à¶º à·à·à¶žà· à·à·à¶à¶œà·à¶Ž à¶
à¶à·à·
à· à·à¶»à·à¶±à·à¶±"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> à·à¶³à·à· à·à·à¶»à¶à·à¶± ගද à¶žà·à¶»à¶ºà¶à·à¶»à¶à· à¶à·à¶»à¶±à·à¶±"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> à·à¶³à·à· à·à·à¶»à¶à·à¶± ගද à¶žà·à¶»à¶Žà¶¯à¶ºà¶à· à¶à·à¶»à¶±à·à¶±"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> à·à¶³à·à· à·à·à¶»à·à¶à· à¶Žà·à¶»à¶±à¶ºà¶à· à¶à·à¶»à· à¶à¶±à·à¶±"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> à·à¶³à·à· à¶Žà·à¶»à¶±à¶º à·à·à¶žà¶à· à¶à·à¶»à· à¶à¶±à·à¶±"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g> à·à¶³à·à· à¶à·à¶«à·à¶žà¶à· à¶à·à¶»à· à¶à¶±à·à¶±"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> à·à¶³à·à· à·à·à¶à¶œà·à¶Žà¶ºà¶à· à¶à·à¶»à¶±à·à¶±à¶¯?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g> à¶žà¶ à¶žà·à¶ž à¶à¶à· à¶·à·à·à·à¶à· à¶à¶»à¶±à·à¶± ද?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"à·à·à¶±à¶à· à¶à¶à·à¶»à¶ºà¶à·à¶±à· à¶Žà·à¶»à¶±à·à¶±"</string>
diff --git a/packages/CredentialManager/res/values-sk/strings.xml b/packages/CredentialManager/res/values-sk/strings.xml
index c2626ea..4029c53 100644
--- a/packages/CredentialManager/res/values-sk/strings.xml
+++ b/packages/CredentialManager/res/values-sk/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Chcete vytvoriÅ¥ prístupový kÄŸúÄ na prihlasovanie do aplikácie <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"Chcete uloÅŸiÅ¥ heslo na prihlasovanie do aplikácie <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Chcete uloÅŸiÅ¥ prihlasovacie údaje pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Chcete pomocou zámky obrazovky vytvoriÅ¥ prístupový kÄŸúÄ pre <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Chcete pomocou zámky obrazovky vytvoriÅ¥ heslo pre <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Chcete pomocou zámky obrazovky uloÅŸiÅ¥ prihlasovacie údaje pre <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="passkey" msgid="632353688396759522">"prístupový kÄŸúÄ"</string>
<string name="password" msgid="6738570945182936667">"heslo"</string>
<string name="passkeys" msgid="5733880786866559847">"prístupové kÄŸúÄe"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"PrejsÅ¥ späÅ¥ na predchádzajúcu stránku"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Zavrieť"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Zavrieť"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Chcete pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g> pouÅŸiÅ¥ uloÅŸený prístupový kÄŸúÄ?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Chcete pouÅŸiÅ¥ uloÅŸené heslo aplikácie <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Pomocou zámky obrazovky sa prihláste do aplikácie <xliff:g id="APP_NAME">%1$s</xliff:g> pouÅŸívateÄŸským menom <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Chcete pouÅŸiÅ¥ svoje prihlásenie pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Chcete odomknúÅ¥ moÅŸnosti prihlásenia pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"PouÅŸite svoj uloÅŸený prístupový kÄŸúÄ pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"PouÅŸite uloÅŸené heslo pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"PouÅŸite svoj úÄet pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Odomknite moÅŸnosti prihlásenia pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Vyberte uloÅŸený prístupový kÄŸúÄ pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Vyberte uloÅŸené heslo pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Vyberte uloÅŸené prihlasovacie údaje pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Vyberte prihlásenie pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Vyberte úÄet pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Chcete pre aplikáciu <xliff:g id="APP_NAME">%1$s</xliff:g> vybraÅ¥ moÅŸnosÅ¥?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Chcete pouÅŸiÅ¥ tieto informácie v aplikácii <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"PrihlásiÅ¥ sa inak"</string>
diff --git a/packages/CredentialManager/res/values-sl/strings.xml b/packages/CredentialManager/res/values-sl/strings.xml
index 79c8c72..c9c1091 100644
--- a/packages/CredentialManager/res/values-sl/strings.xml
+++ b/packages/CredentialManager/res/values-sl/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Åœelite ustvariti kljuÄ za dostop za prijavo v aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"Åœelite shraniti geslo za prijavo v aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Åœelite shraniti podatke za prijavo za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Åœelite uporabiti zaklepanje zaslona za ustvarjanje kljuÄa za dostop za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Åœelite uporabiti zaklepanje zaslona za ustvarjanje gesla za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Åœelite uporabiti zaklepanje zaslona za shranjevanje podatkov za prijavo za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="passkey" msgid="632353688396759522">"kljuÄ za dostop"</string>
<string name="password" msgid="6738570945182936667">"geslo"</string>
<string name="passkeys" msgid="5733880786866559847">"kljuÄi za dostop"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Nazaj na prejšnjo stran"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Zapri"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Opusti"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Åœelite uporabiti shranjeni kljuÄ za dostop do aplikacije <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Ali ÅŸelite uporabiti shranjeno geslo za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Uporabite zaklepanje zaslona za prijavo v aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g> z uporabniškim imenom <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Åœelite uporabiti svojo prijavo za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Åœelite odkleniti moÅŸnosti prijave za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Uporaba shranjenega kljuÄa za dostop za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Uporaba shranjenega gesla za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Uporaba vašega raÄuna za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Odklepanje moÅŸnosti prijave za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Izberite shranjeni kljuÄ za dostop za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Izberite shranjeno geslo za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Izberite shranjene podatke za prijavo za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Izberite prijavo za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Izbira raÄuna za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Izberite moÅŸnost za aplikacijo <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Åœelite te podatke uporabiti v aplikaciji <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Prijava na drug naÄin"</string>
diff --git a/packages/CredentialManager/res/values-sq/strings.xml b/packages/CredentialManager/res/values-sq/strings.xml
index 722bee6..73ac0b3 100644
--- a/packages/CredentialManager/res/values-sq/strings.xml
+++ b/packages/CredentialManager/res/values-sq/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Të krijohet një çelës kalimi për t\'u identifikuar në <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"Të ruhet fjalëkalimi për t\'u identifikuar në <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Të ruhen informacionet e identifikimit për <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Të përdoret kyçja e ekranit për të krijuar një çelës kalimi për <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Të përdoret kyçja e ekranit për të krijuar një fjalëkalim për <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Të përdoret kyçja e ekranit për të ruajtur informacionet e identifikimit për <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="passkey" msgid="632353688396759522">"çelësin e kalimit"</string>
<string name="password" msgid="6738570945182936667">"fjalëkalimi"</string>
<string name="passkeys" msgid="5733880786866559847">"çelësat e kalimit"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Kthehu te faqja e mëparshme"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Mbyll"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Hiq"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Të përdoret fjalëkalimi yt i ruajtur për <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Të përdoret fjalëkalimi i ruajtur për <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Përdor kyçjen e ekranit për t\'u identifikuar në <xliff:g id="APP_NAME">%1$s</xliff:g> me <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Të përdoret identifikimi yt për <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Të shkyçen opsionet e identifikimit për <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Përdor fjalëkalimin tënd të ruajtur për <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Përdor fjalëkalimin tënd të ruajtur për <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Përdor llogarinë tënde për <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Shkyç opsionet e identifikimit për <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Zgjidh një çelës kalimi të ruajtur për <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Zgjidh një fjalëkalim të ruajtur për <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Zgjidh një identifikim të ruajtur për <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Zgjidh një identifikim për <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Zgjidh një llogari për <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Të zgjidhet një opsion për <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Të përdoren këto informacione në <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Identifikohu me një mënyrë tjetër"</string>
diff --git a/packages/CredentialManager/res/values-sr/strings.xml b/packages/CredentialManager/res/values-sr/strings.xml
index 58110aa..a87636b 100644
--- a/packages/CredentialManager/res/values-sr/strings.xml
+++ b/packages/CredentialManager/res/values-sr/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"ÐелОÑе Ўа МапÑавОÑе пÑОÑÑÑпМО кÑÑÑ ÐŽÐ° бОÑÑе Ñе пÑОÑавОлО Ñ <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"ÐелОÑе Ўа ÑаÑÑваÑе Ð»ÐŸÐ·ÐžÐœÐºÑ ÐŽÐ° бОÑÑе Ñе пÑОÑавОлО Ñ <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"ÐелОÑе Ўа ÑаÑÑваÑе пПЎаÑке за пÑОÑавÑОваÑе за: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"ÐелОÑе Ўа кПÑОÑÑОÑе ПÑкÑÑÑаваÑе екÑаМа Ўа бОÑÑе МапÑавОлО пÑОÑÑÑпМО кÑÑÑ Ð·Ð°: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"ÐелОÑе Ўа кПÑОÑÑОÑе ПÑкÑÑÑаваÑе екÑаМа Ўа бОÑÑе МапÑавОлО Ð»ÐŸÐ·ÐžÐœÐºÑ Ð·Ð°: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"ÐелОÑе Ўа кПÑОÑÑОÑе ПÑкÑÑÑаваÑе екÑаМа Ўа бОÑÑе ÑаÑÑвалО пПЎаÑке за пÑОÑавÑОваÑе за: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="passkey" msgid="632353688396759522">"пÑОÑÑÑпМО кôÐŽ"</string>
<string name="password" msgid="6738570945182936667">"лПзОМка"</string>
<string name="passkeys" msgid="5733880786866559847">"пÑОÑÑÑпМО кПЎПвО"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"ÐÑаÑОÑе Ñе Ма пÑеÑÑ
ÐŸÐŽÐœÑ ÑÑÑаМОÑÑ"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"ÐаÑвПÑОÑе"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"ÐЎбаÑО"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"ÐелОÑе Ўа кПÑОÑÑОÑе ÑаÑÑваМО пÑОÑÑÑпМО кôÐŽ за: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"ÐелОÑе Ўа кПÑОÑÑОÑе ÑаÑÑÐ²Ð°ÐœÑ Ð»ÐŸÐ·ÐžÐœÐºÑ Ð·Ð°: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"ÐПÑОÑÑОÑе ПÑкÑÑÑаваÑе екÑаМа Ўа бОÑÑе Ñе пÑОÑавОлО Ñ <xliff:g id="APP_NAME">%1$s</xliff:g> каП <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"ÐелОÑе лО Ўа кПÑОÑÑОÑе ÑвПÑе пПЎаÑке за пÑОÑавÑОваÑе за аплОкаÑОÑÑ <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"ÐелОÑе Ўа ПÑкÑÑÑаÑе ПпÑОÑе пÑОÑавÑОваÑа за: <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"ÐПÑОÑÑОÑе ÑаÑÑваМО пÑОÑÑÑпМО кÑÑÑ Ð·Ð°: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"ÐПÑОÑÑОÑе ÑаÑÑÐ²Ð°ÐœÑ Ð»ÐŸÐ·ÐžÐœÐºÑ Ð·Ð°: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"ÐПÑОÑÑОÑе МалПг за: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"ÐÑкÑÑÑаÑÑе ПпÑОÑе пÑОÑавÑОваÑа за: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"ÐзабеÑОÑе ÑаÑÑваМ пÑОÑÑÑпМО кÑÑÑ Ð·Ð°: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"ÐзабеÑОÑе ÑаÑÑÐ²Ð°ÐœÑ Ð»ÐŸÐ·ÐžÐœÐºÑ Ð·Ð°: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"ÐзабеÑОÑе ÑаÑÑваМе пПЎаÑке за пÑОÑавÑОваÑе за: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"ÐЎабеÑОÑе пПЎаÑке за пÑОÑавÑОваÑе за аплОкаÑОÑÑ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"ÐЎабеÑОÑе МалПг за: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"ÐелОÑе Ўа ПЎабеÑеÑе ПпÑОÑÑ Ð·Ð° аплОкаÑОÑÑ <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"ÐелОÑе Ўа кПÑОÑÑОÑе Ñе пПЎаÑке Ñ Ð°Ð¿Ð»ÐžÐºÐ°ÑОÑО <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"ÐÑОÑавОÑе Ñе Ма ÐŽÑÑгО МаÑОМ"</string>
diff --git a/packages/CredentialManager/res/values-sv/strings.xml b/packages/CredentialManager/res/values-sv/strings.xml
index 331b124..cab499a 100644
--- a/packages/CredentialManager/res/values-sv/strings.xml
+++ b/packages/CredentialManager/res/values-sv/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Vill du skapa en nyckel för att logga in i <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"Vill du spara lösenordet för att logga in i <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Vill du spara inloggningsuppgifterna för <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Vill du använda skärmlåset för att skapa en nyckel för <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Vill du använda skärmlåset för att skapa ett lösenord för <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Vill du använda skärmlåset för att spara inloggningsuppgifter för <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="passkey" msgid="632353688396759522">"nyckel"</string>
<string name="password" msgid="6738570945182936667">"lösenord"</string>
<string name="passkeys" msgid="5733880786866559847">"nycklar"</string>
@@ -71,15 +68,15 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Gå tillbaka till föregående sida"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Stäng"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Stäng"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Vill du använda din sparade nyckel för <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Vill du använda det sparade lösenordet för <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Använd skärmlåset för att logga in i <xliff:g id="APP_NAME">%1$s</xliff:g> med <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Vill du använda din inloggning för <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Vill du låsa upp inloggningsalternativ för <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Använd den sparade nyckeln för <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Använd det sparade lösenordet för <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Använd kontot för <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_description_single_tap" msgid="2797059565126030879">"Använd skärmlåset för att logga in i <xliff:g id="APP_NAME">%1$s</xliff:g> med <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Lås upp inloggningsalternativ för <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Välj en sparad nyckel för <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Välj ett sparat lösenord för <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Välj en sparad inloggning för <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Välj en inloggning för <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Välj ett konto för <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Vill du välja ett alternativ för <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Vill du använda den här informationen på <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Logga in på ett annat sätt"</string>
diff --git a/packages/CredentialManager/res/values-sw/strings.xml b/packages/CredentialManager/res/values-sw/strings.xml
index 888b01c..e5480a4 100644
--- a/packages/CredentialManager/res/values-sw/strings.xml
+++ b/packages/CredentialManager/res/values-sw/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Ungependa kubuni ufunguo wa siri wa kuingia katika akaunti ya <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"Ungependa kuhifadhi nenosiri la kuingia katika akaunti ya <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Ungependa kuhifadhi maelezo ya kuingia katika akaunti ya <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Ungependa kutumia mbinu yako ya kufunga skrini kubuni ufunguo wa siri wa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Ungependa kutumia mbinu yako ya kufunga skrini kubuni nenosiri la <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Ungependa kutumia mbinu yako ya kufunga skrini kuhifadhi maelezo ya kuingia katika akaunti ya <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="passkey" msgid="632353688396759522">"ufunguo wa siri"</string>
<string name="password" msgid="6738570945182936667">"nenosiri"</string>
<string name="passkeys" msgid="5733880786866559847">"funguo za siri"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Rudi kwenye ukurasa uliotangulia"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Funga"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Ondoa"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Ungependa kutumia ufunguo wa siri uliohifadhiwa wa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Je, ungependa kutumia nenosiri lako lililohifadhiwa kuingia katika <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Tumia mbinu yako ya kufunga skrini kuingia katika akaunti ya <xliff:g id="APP_NAME">%1$s</xliff:g> ukitumia <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Ungependa kutumia kitambulisho chako cha kuingia katika akaunti ya <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Je, ungependa kuona chaguo za kuingia katika <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Tumia ufunguo wako wa siri uliohifadhi wa <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Tumia nenosiri lako ulilohifadhi la <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Tumia akaunti yako ya <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Fungua chaguo za kuingia katika akaunti ya <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Chagua ufunguo wa siri uliohifadhiwa ambao ungependa kutumia kuingia katika <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Chagua nenosiri lililohifadhiwa ambalo ungependa kutumia kuingia katika <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Chagua vitambulisho vilivyohifadhiwa ambavyo ungependa kutumia kuingia katika <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Chagua kitambulisho cha kuingia katika akaunti ya <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Chagua akaunti ya <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Ungependa kuteua chaguo la <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Ungependa kutumia maelezo haya kwenye <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Ingia katika akaunti kwa kutumia njia nyingine"</string>
diff --git a/packages/CredentialManager/res/values-ta/strings.xml b/packages/CredentialManager/res/values-ta/strings.xml
index ba1eb60..96d2676 100644
--- a/packages/CredentialManager/res/values-ta/strings.xml
+++ b/packages/CredentialManager/res/values-ta/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"<xliff:g id="APP_NAME">%1$s</xliff:g> à®à®ªà¯à®žà®¿à®²à¯ à®à®³à¯à®šà¯à®Žà¯à®¯ à®à®à®µà¯à®à¯à®à®Ÿà®µà®¿à®¯à¯ à®à®°à¯à®µà®Ÿà®à¯à®à®µà®Ÿ?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"<xliff:g id="APP_NAME">%1$s</xliff:g> à®à®ªà¯à®žà®¿à®²à¯ à®à®³à¯à®šà¯à®Žà¯à®¯ à®à®à®µà¯à®à¯à®à¯à®²à¯à®²à¯à®à¯ à®à¯à®®à®¿à®à¯à®à®µà®Ÿ?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"<xliff:g id="APP_NAME">%1$s</xliff:g> à®à®ªà¯à®žà¯à®à¯à®à®Ÿà®© à®à®³à¯à®šà¯à®Žà¯à®µà¯à®€à¯ ஀à®à®µà®²à¯à®à¯ à®à¯à®®à®¿à®à¯à®à®µà®Ÿ?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"<xliff:g id="APP_NAME">%1$s</xliff:g> à®à®ªà¯à®žà¯à®à¯à®à®Ÿà®© à®à®à®µà¯à®à¯à®à®Ÿà®µà®¿à®¯à¯ à®à®°à¯à®µà®Ÿà®à¯à® à®à®à¯à®à®³à¯ ஀ிரà¯à®ªà¯ பà¯à®à¯à®à¯à®ªà¯ பயனà¯à®ªà®à¯à®€à¯à®€à®µà®Ÿ?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"<xliff:g id="APP_NAME">%1$s</xliff:g> à®à®ªà¯à®žà¯à®à¯à®à®Ÿà®© à®à®à®µà¯à®à¯à®à¯à®²à¯à®²à¯ à®à®°à¯à®µà®Ÿà®à¯à® à®à®à¯à®à®³à¯ ஀ிரà¯à®ªà¯ பà¯à®à¯à®à¯à®ªà¯ பயனà¯à®ªà®à¯à®€à¯à®€à®µà®Ÿ?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"<xliff:g id="APP_NAME">%1$s</xliff:g> à®à®ªà¯à®žà¯à®à¯à®à®Ÿà®© à®à®³à¯à®šà¯à®Žà¯à®µà¯à®€à¯ ஀à®à®µà®²à¯à®à¯ à®à¯à®®à®¿à®à¯à® à®à®à¯à®à®³à¯ ஀ிரà¯à®ªà¯ பà¯à®à¯à®à¯à®ªà¯ பயனà¯à®ªà®à¯à®€à¯à®€à®µà®Ÿ?"</string>
<string name="passkey" msgid="632353688396759522">"à®à®à®µà¯à®à¯à®à®Ÿà®µà®¿"</string>
<string name="password" msgid="6738570945182936667">"à®à®à®µà¯à®à¯à®à¯à®²à¯"</string>
<string name="passkeys" msgid="5733880786866559847">"à®à®à®µà¯à®à¯à®à®Ÿà®µà®¿à®à®³à¯"</string>
@@ -71,15 +68,15 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"à®®à¯à®šà¯à®€à¯à®¯ பà®à¯à®à®€à¯à®€à®¿à®±à¯à®à¯à®à¯ à®à¯à®²à¯à®²à¯à®®à¯"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"à®®à¯à®à¯à®®à¯"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"சிரடà®à®°à®¿à®à¯à®à¯à®®à¯"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> à®à®ªà¯à®žà¯à®à¯à®à¯ à®à®±à¯à®à¯à®©à®µà¯ à®à¯à®®à®¿à®à¯à®à®ªà¯à®ªà®à¯à® à®à®à®µà¯à®à¯à®à¯à®±à®¿à®¯à¯à®à¯à®à¯à®ªà¯ பயனà¯à®ªà®à¯à®€à¯à®€à®µà®Ÿ?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> à®à®ªà¯à®žà¯à®à¯à®à¯à®à¯ à®à¯à®®à®¿à®€à¯à®€ à®à®à®µà¯à®à¯à®à¯à®²à¯à®²à¯à®ªà¯ பயனà¯à®ªà®à¯à®€à¯à®€à®µà®Ÿ?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"<xliff:g id="USERNAME">%2$s</xliff:g> à®à®ªà¯ பயனà¯à®ªà®à¯à®€à¯à®€à®¿ <xliff:g id="APP_NAME">%1$s</xliff:g> à®à®ªà¯à®žà®¿à®²à¯ à®à®³à¯à®šà¯à®Žà¯à®¯ à®à®à¯à®à®³à¯ ஀ிரà¯à®ªà¯ பà¯à®à¯à®à¯à®ªà¯ பயனà¯à®ªà®à¯à®€à¯à®€à¯à®à¯à®à®³à¯"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> à®à®ªà¯à®žà¯à®à¯à®à¯ à®à®à¯à®à®³à¯ à®à®³à¯à®šà¯à®Žà¯à®µà¯ விவரà®à¯à®à®³à¯à®ªà¯ பயனà¯à®ªà®à¯à®€à¯à®€à®µà®Ÿ?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> à®à®ªà¯à®žà¯à®à¯à®à®Ÿà®© à®à®³à¯à®šà¯à®Žà¯à®µà¯ விரà¯à®ªà¯à®ªà®à¯à®à®³à¯ à®
னà¯à®²à®Ÿà®à¯ à®à¯à®¯à¯à®¯à®µà®Ÿ?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"<xliff:g id="APP_NAME">%1$s</xliff:g> à®à®ªà¯à®žà¯à®à¯à®à®Ÿà®© à®à¯à®®à®¿à®à¯à®à®ªà¯à®ªà®à¯à® à®à®à®µà¯à®à¯à®à®Ÿà®µà®¿à®¯à¯à®ªà¯ பயனà¯à®ªà®à¯à®€à¯à®€à¯à®à¯à®à®³à¯"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"<xliff:g id="APP_NAME">%1$s</xliff:g> à®à®ªà¯à®žà¯à®à¯à®à®Ÿà®© à®à¯à®®à®¿à®à¯à®à®ªà¯à®ªà®à¯à® à®à®à®µà¯à®à¯à®à¯à®²à¯à®²à¯à®ªà¯ பயனà¯à®ªà®à¯à®€à¯à®€à¯à®à¯à®à®³à¯"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"<xliff:g id="APP_NAME">%1$s</xliff:g> à®à®ªà¯à®žà¯à®à¯à®à®Ÿà®© à®à®à¯à®à®³à¯ à®à®£à®à¯à®à¯à®ªà¯ பயனà¯à®ªà®à¯à®€à¯à®€à¯à®à¯à®à®³à¯"</string>
+ <string name="get_dialog_description_single_tap" msgid="2797059565126030879">"<xliff:g id="USERNAME">%2$s</xliff:g> à®à®ªà¯ பயனà¯à®ªà®à¯à®€à¯à®€à®¿ <xliff:g id="APP_NAME">%1$s</xliff:g> à®à®ªà¯à®žà®¿à®²à¯ à®à®³à¯à®šà¯à®Žà¯à®¯ à®à®à¯à®à®³à¯ ஀ிரà¯à®ªà¯ பà¯à®à¯à®à¯à®ªà¯ பயனà¯à®ªà®à¯à®€à¯à®€à¯à®à¯à®à®³à¯"</string>
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g> à®à®ªà¯à®žà¯à®à¯à®à®Ÿà®© à®à®³à¯à®šà¯à®Žà¯à®µà¯ விரà¯à®ªà¯à®ªà®à¯à®à®³à¯ à®
னà¯à®²à®Ÿà®à¯ à®à¯à®¯à¯à®¯à¯à®à¯à®à®³à¯"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> à®à®ªà¯à®žà¯à®à¯à®à®Ÿà®© à®à¯à®®à®¿à®à¯à®à®ªà¯à®ªà®à¯à® à®à®à®µà¯à®à¯à®à®Ÿà®µà®¿à®¯à¯à®€à¯ ஀à¯à®°à¯à®šà¯à®€à¯à®à¯à®à¯à®à®³à¯"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> à®à®ªà¯à®žà¯à®à¯à®à®Ÿà®© à®à¯à®®à®¿à®à¯à®à®ªà¯à®ªà®à¯à® à®à®à®µà¯à®à¯à®à¯à®²à¯à®²à¯à®€à¯ ஀à¯à®°à¯à®šà¯à®€à¯à®à¯à®à¯à®à®³à¯"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> à®à®ªà¯à®žà¯à®à¯à®à®Ÿà®© à®à¯à®®à®¿à®à¯à®à®ªà¯à®ªà®à¯à® à®à®³à¯à®šà¯à®Žà¯à®µà¯à®€à¯ ஀à®à®µà®²à¯à®à®³à¯à®€à¯ ஀à¯à®°à¯à®šà¯à®€à¯à®à¯à®à¯à®à®³à¯"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> à®à®ªà¯à®žà¯à®à¯à®à®Ÿà®© à®à®³à¯à®šà¯à®Žà¯à®µà¯ விவரà®à¯à®à®³à¯à®€à¯ ஀à¯à®°à¯à®µà¯à®à¯à®¯à¯à®¯à¯à®à¯à®à®³à¯"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g> à®à®ªà¯à®žà¯à®à¯à®à®Ÿà®© à®à®£à®à¯à®à¯à®€à¯ ஀à¯à®°à¯à®µà¯à®à¯à®¯à¯à®¯à¯à®à¯à®à®³à¯"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> à®à®ªà¯à®žà¯à®à¯à®à®Ÿà®© விரà¯à®ªà¯à®ªà®€à¯à®€à¯à®€à¯ ஀à¯à®°à¯à®µà¯à®à¯à®¯à¯à®¯à®µà®Ÿ?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g> à®à®ªà¯à®žà®¿à®²à¯ à®à®šà¯à®€à®€à¯ ஀à®à®µà®²à¯à®à®³à¯à®ªà¯ பயனà¯à®ªà®à¯à®€à¯à®€à®µà®Ÿ?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"வà¯à®±à¯ à®®à¯à®±à¯à®¯à®¿à®²à¯ à®à®³à¯à®šà¯à®Žà¯à®"</string>
diff --git a/packages/CredentialManager/res/values-te/strings.xml b/packages/CredentialManager/res/values-te/strings.xml
index e2e362b..59b86eb 100644
--- a/packages/CredentialManager/res/values-te/strings.xml
+++ b/packages/CredentialManager/res/values-te/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"<xliff:g id="APP_NAME">%1$s</xliff:g>à°à± à°žà±à°šà± à°à°šà± à°à±à°¯à°¡à°Ÿà°šà°¿à°à°¿ పటఞà±-à°à±à°šà°¿ à°à±à°°à°¿à°¯à±à°à± à°à±à°¯à°Ÿà°²à°Ÿ?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"<xliff:g id="APP_NAME">%1$s</xliff:g>à°à± à°žà±à°šà± à°à°šà± à°à±à°¯à°¡à°Ÿà°šà°¿à°à°¿ పటఞà±à°µà°°à±à°¡à±à°šà± à°žà±à°µà± à°à±à°¯à°Ÿà°²à°Ÿ?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"<xliff:g id="APP_NAME">%1$s</xliff:g> à°à±à°žà° à°žà±à°šà± à°à°šà± ఞమటà°à°Ÿà°°à°Ÿà°šà±à°šà°¿ à°žà±à°µà± à°à±à°¯à°Ÿà°²à°Ÿ?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"మౠఞà±à°à±à°°à±à°šà± లటà°à±à°šà± à°à°ªà°¯à±à°à°¿à°à°à°¿ <xliff:g id="APP_NAME">%1$s</xliff:g>à°à± పటఞà±-à°à±à°šà°¿ à°à±à°°à°¿à°¯à±à°à± à°à±à°¯à°Ÿà°²à°Ÿ?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"మౠఞà±à°à±à°°à±à°šà± లటà°à±à°šà± à°à°ªà°¯à±à°à°¿à°à°à°¿ <xliff:g id="APP_NAME">%1$s</xliff:g>à°à± పటఞà±à°µà°°à±à°¡à±à°šà± à°à±à°°à°¿à°¯à±à°à± à°à±à°¯à°Ÿà°²à°Ÿ?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"మౠఞà±à°à±à°°à±à°šà± లటà°à±à°šà± à°à°ªà°¯à±à°à°¿à°à°à°¿ <xliff:g id="APP_NAME">%1$s</xliff:g>à°à± à°žà°à°¬à°à°§à°¿à°à°à°¿à°š à°žà±à°šà±-à°à°šà± ఞమటà°à°Ÿà°°à°Ÿà°šà±à°šà°¿ à°žà±à°µà± à°à±à°¯à°Ÿà°²à°Ÿ?"</string>
<string name="passkey" msgid="632353688396759522">"పటఞà±-à°à±"</string>
<string name="password" msgid="6738570945182936667">"పటఞà±à°µà°°à±à°¡à±"</string>
<string name="passkeys" msgid="5733880786866559847">"పటఞà±-à°à±à°²à±"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"à°®à±à°šà±à°ªà°à°¿ à°ªà±à°à±à°à°¿ ఀిరిà°à°¿ à°µà±à°³à±à°²à°à°¡à°¿"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"à°®à±à°žà°¿à°µà±à°¯à°à°¡à°¿"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"విఞà±à°®à°°à°¿à°à°à°à°¡à°¿"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> à°à±à°žà° మౠఞà±à°µà± à°à±à°žà°¿à°š పటఞà±-à°à±à°šà°¿ à°à°ªà°¯à±à°à°¿à°à°à°Ÿà°²à°Ÿ?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> à°à±à°žà° మౠఞà±à°µà± à°à±à°žà°¿à°š పటఞà±à°µà°°à±à°¡à±à°šà± à°à°ªà°¯à±à°à°¿à°à°à°Ÿà°²à°Ÿ?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"మౠఞà±à°à±à°°à±à°šà± లటà°à±à°šà± à°à°ªà°¯à±à°à°¿à°à°à°¿ <xliff:g id="USERNAME">%2$s</xliff:g>ఀౠ<xliff:g id="APP_NAME">%1$s</xliff:g>à°à± à°žà±à°šà± à°à°šà± à°à±à°¯à°à°¡à°¿"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> à°à±à°žà° మౠఞà±à°šà± à°à°šà± వివరటలచౠà°à°ªà°¯à±à°à°¿à°à°à°Ÿà°²à°Ÿ?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> à°à±à°žà° à°žà±à°šà± à°à°šà± à°à°ªà±à°·à°šà±à°²à°šà± à°
à°šà±à°²à°Ÿà°à± à°à±à°¯à°Ÿà°²à°Ÿ?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"<xliff:g id="APP_NAME">%1$s</xliff:g> à°à±à°žà° మౠఞà±à°µà± à°à±à°žà°¿à°š పటఞà±-à°à± వివరటలచౠà°à°ªà°¯à±à°à°¿à°à°à°à°¡à°¿"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"<xliff:g id="APP_NAME">%1$s</xliff:g> à°à±à°žà° మౠఞà±à°µà± à°à±à°žà°¿à°š పటఞà±à°µà°°à±à°¡à±à°šà± à°à°ªà°¯à±à°à°¿à°à°à°à°¡à°¿"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"<xliff:g id="APP_NAME">%1$s</xliff:g> à°à±à°žà° మౠà°à°Ÿà°€à°Ÿà°šà± à°à°ªà°¯à±à°à°¿à°à°à°à°¡à°¿"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g> à°à±à°žà° à°žà±à°šà± à°à°šà± à°à°ªà±à°·à°šà±à°²à°šà± à°
à°šà±à°²à°Ÿà°à± à°à±à°¯à°à°¡à°¿"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> à°à±à°žà° à°žà±à°µà± à°à±à°žà°¿à°š పటఞà±-à°à±à°šà°¿ à°à°à°à±à°à±à°à°¡à°¿"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> à°à±à°žà° à°žà±à°µà± à°à±à°žà°¿à°š పటఞà±à°µà°°à±à°¡à±à°šà± à°à°à°à±à°à±à°à°¡à°¿"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> à°à±à°žà° à°žà±à°µà± à°à±à°žà°¿à°š à°žà±à°šà± à°à°šà± వివరటలచౠà°à°à°à±à°à±à°à°¡à°¿"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> à°à±à°žà° à°žà±à°šà± à°à°šà± వివరటలచౠà°à°à°à±à°à±à°à°¡à°¿"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g> à°à±à°žà° à°à°Ÿà°€à°Ÿà°šà± à°à°à°à±à°à±à°à°¡à°¿"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> à°à±à°žà° à°à°Šà±à°šà°Ÿ à°à°ªà±à°·à°šà±à°šà± à°à°à°à±à°à±à°µà°Ÿà°²à°šà±à°à±à°à°à±à°šà±à°šà°Ÿà°°à°Ÿ?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"ఠఞమటà°à°Ÿà°°à°Ÿà°šà±à°šà°¿ <xliff:g id="APP_NAME">%1$s</xliff:g>లౠà°à°ªà°¯à±à°à°¿à°à°à°Ÿà°²à°Ÿ?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"మరà±à° పఊà±à°§à°€à°¿à°²à± à°žà±à°šà± à°à°šà± à°à±à°¯à°à°¡à°¿"</string>
diff --git a/packages/CredentialManager/res/values-th/strings.xml b/packages/CredentialManager/res/values-th/strings.xml
index 876371a..e8058e8 100644
--- a/packages/CredentialManager/res/values-th/strings.xml
+++ b/packages/CredentialManager/res/values-th/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"àžªàž£à¹àž²àžàžàž²àžªàžàžµàž¢à¹à¹àžàž·à¹àžàž¥àžàžàž·à¹àžà¹àžà¹àž²à¹àžà¹ <xliff:g id="APP_NAME">%1$s</xliff:g> à¹àž«àž¡"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"àžàž±àžàžàž¶àžàž£àž«àž±àžªàžà¹àž²àžà¹àžàž·à¹àžàž¥àžàžàž·à¹àžà¹àžà¹àž²à¹àžà¹ <xliff:g id="APP_NAME">%1$s</xliff:g> à¹àž«àž¡"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"àžàž±àžàžàž¶àžàžà¹àžàž¡àž¹àž¥àžàž²àž£àž¥àžàžàž·à¹àžà¹àžà¹àž²à¹àžà¹àžªàž³àž«àž£àž±àž <xliff:g id="APP_NAME">%1$s</xliff:g> à¹àž«àž¡"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"àžà¹àžàžàžàž²àž£à¹àžà¹àžàžµà¹àžàžàž£à¹àž¥à¹àžàžàž«àžà¹àž²àžàžà¹àžàž·à¹àžàžªàž£à¹àž²àžàžàž²àžªàžàžµàž¢à¹àžªàž³àž«àž£àž±àž <xliff:g id="APP_NAME">%1$s</xliff:g> à¹àžà¹à¹àž«àž¡"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"àžà¹àžàžàžàž²àž£à¹àžà¹àžàžµà¹àžàžàž£à¹àž¥à¹àžàžàž«àžà¹àž²àžàžà¹àžàž·à¹àžàžªàž£à¹àž²àžàž£àž«àž±àžªàžà¹àž²àžàžªàž³àž«àž£àž±àž <xliff:g id="APP_NAME">%1$s</xliff:g> à¹àžà¹à¹àž«àž¡"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"àžà¹àžàžàžàž²àž£à¹àžà¹àžàžµà¹àžàžàž£à¹àž¥à¹àžàžàž«àžà¹àž²àžàžà¹àžàž·à¹àžàžàž±àžàžàž¶àžàžà¹àžàž¡àž¹àž¥àžàž²àž£àž¥àžàžàž·à¹àžà¹àžà¹àž²à¹àžà¹àžªàž³àž«àž£àž±àž <xliff:g id="APP_NAME">%1$s</xliff:g> à¹àžà¹à¹àž«àž¡"</string>
<string name="passkey" msgid="632353688396759522">"àžàž²àžªàžàžµàž¢à¹"</string>
<string name="password" msgid="6738570945182936667">"àž£àž«àž±àžªàžà¹àž²àž"</string>
<string name="passkeys" msgid="5733880786866559847">"àžàž²àžªàžàžµàž¢à¹"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"àžàž¥àž±àžà¹àžàž¢àž±àžàž«àžà¹àž²àžà¹àžàžàž«àžà¹àž²"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"àžàžŽàž"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"àžàžŽàž"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"à¹àžà¹àžàž²àžªàžàžµàž¢à¹àžàžµà¹àžàž±àžàžàž¶àžà¹àž§à¹àžªàž³àž«àž£àž±àž <xliff:g id="APP_NAME">%1$s</xliff:g> à¹àžà¹à¹àž«àž¡"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"à¹àžà¹àž£àž«àž±àžªàžà¹àž²àžàžàžµà¹àžàž±àžàžàž¶àžà¹àž§à¹àžªàž³àž«àž£àž±àž <xliff:g id="APP_NAME">%1$s</xliff:g> à¹àžà¹à¹àž«àž¡"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"à¹àžà¹àžàž²àž£àž¥à¹àžàžàž«àžà¹àž²àžàžà¹àžàž·à¹àžàž¥àžàžàž·à¹àžà¹àžà¹àž²à¹àžà¹ <xliff:g id="APP_NAME">%1$s</xliff:g> àžà¹àž§àž¢ <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"à¹àžà¹àžàž²àž£àž¥àžàžàž·à¹àžà¹àžà¹àž²à¹àžà¹àžªàž³àž«àž£àž±àž <xliff:g id="APP_NAME">%1$s</xliff:g> à¹àžà¹à¹àž«àž¡"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"àžàž¥àžàž¥à¹àžàžàžàž±àž§à¹àž¥àž·àžàžàžàž²àž£àž¥àžàžàž·à¹àžà¹àžà¹àž²à¹àžà¹àžªàž³àž«àž£àž±àž <xliff:g id="APP_NAME">%1$s</xliff:g> à¹àžà¹à¹àž«àž¡"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"à¹àžà¹àžàž²àžªàžàžµàž¢à¹àžàžµà¹àžàž±àžàžàž¶àžà¹àž§à¹àžªàž³àž«àž£àž±àž <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"à¹àžà¹àž£àž«àž±àžªàžà¹àž²àžàžàžµà¹àžàž±àžàžàž¶àžà¹àž§à¹àžªàž³àž«àž£àž±àž <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"à¹àžà¹àžàž±àžàžàžµàžªàž³àž«àž£àž±àž <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"àžàž¥àžàž¥à¹àžàžàžàž±àž§à¹àž¥àž·àžàžàžàž²àž£àž¥àžàžàž·à¹àžà¹àžà¹àž²à¹àžà¹àžªàž³àž«àž£àž±àž <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"à¹àž¥àž·àžàžàžàž²àžªàžàžµàž¢à¹àžàžµà¹àžàž±àžàžàž¶àžà¹àž§à¹àžªàž³àž«àž£àž±àž <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"à¹àž¥àž·àžàžàž£àž«àž±àžªàžà¹àž²àžàžàžµà¹àžàž±àžàžàž¶àžà¹àž§à¹àžªàž³àž«àž£àž±àž <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"à¹àž¥àž·àžàžàžàž²àž£àž¥àžàžàž·à¹àžà¹àžà¹àž²à¹àžà¹àžàžµà¹àžàž±àžàžàž¶àžà¹àž§à¹àžªàž³àž«àž£àž±àž \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"à¹àž¥àž·àžàžàžàž²àž£àž¥àžàžàž·à¹àžà¹àžà¹àž²à¹àžà¹àžªàž³àž«àž£àž±àž <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"à¹àž¥àž·àžàžàžàž±àžàžàžµàžªàž³àž«àž£àž±àž <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"àžà¹àžàžàžàž²àž£à¹àž¥àž·àžàžàžàž±àž§à¹àž¥àž·àžàžàžªàž³àž«àž£àž±àž <xliff:g id="APP_NAME">%1$s</xliff:g> à¹àž«àž¡"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"à¹àžà¹àžà¹àžàž¡àž¹àž¥àžàžµà¹àžàž±àž <xliff:g id="APP_NAME">%1$s</xliff:g> à¹àž«àž¡"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"àž¥àžàžàž·à¹àžà¹àžà¹àž²à¹àžà¹àžà¹àž§àž¢àž§àžŽàžàžµàžàž·à¹àž"</string>
diff --git a/packages/CredentialManager/res/values-tl/strings.xml b/packages/CredentialManager/res/values-tl/strings.xml
index 163e93a..ebc2f4d 100644
--- a/packages/CredentialManager/res/values-tl/strings.xml
+++ b/packages/CredentialManager/res/values-tl/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Gumawa ng passkey para mag-sign in sa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"I-save ang password para mag-sign in sa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"I-save ang impormasyon sa pag-sign in para sa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Gamitin ang iyong lock ng screen para gumawa ng passkey para sa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Gamitin ang iyong lock ng screen para gumawa ng password para sa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Gamitin ang iyong lock ng screen para mag-save ng impormasyon sa pag-sign in para sa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="passkey" msgid="632353688396759522">"passkey"</string>
<string name="password" msgid="6738570945182936667">"password"</string>
<string name="passkeys" msgid="5733880786866559847">"mga passkey"</string>
@@ -71,15 +68,15 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Bumalik sa nakaraang page"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Isara"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"I-dismiss"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Gamitin ang iyong naka-save na passkey para sa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Gamitin ang iyong naka-save na password para sa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Gamitin ang iyong lock ng screen para mag-sign in sa <xliff:g id="APP_NAME">%1$s</xliff:g> gamit ang <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Gamitin ang iyong sign-in para sa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"I-unlock ang mga opsyon sa pag-sign in para sa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Gamitin ang iyong naka-save na passkey para sa <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Gamitin ang iyong naka-save na password para sa <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Gamitin ang iyong account para sa <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_description_single_tap" msgid="2797059565126030879">"Gamitin ang iyong lock ng screen para mag-sign in sa <xliff:g id="APP_NAME">%1$s</xliff:g> gamit ang <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"I-unlock ang mga opsyon sa pag-sign in para sa <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Pumili ng naka-save na passkey para sa <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Pumili ng naka-save na password para sa <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Pumili ng naka-save na sign-in para sa <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Pumili ng sign-in para sa <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Pumili ng account para sa <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Pumili ng opsyon para sa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Gamitin ang impormasyong ito sa <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Mag-sign in sa ibang paraan"</string>
diff --git a/packages/CredentialManager/res/values-tr/strings.xml b/packages/CredentialManager/res/values-tr/strings.xml
index b11ca07..cf6b2e3 100644
--- a/packages/CredentialManager/res/values-tr/strings.xml
+++ b/packages/CredentialManager/res/values-tr/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"<xliff:g id="APP_NAME">%1$s</xliff:g> uygulamasında oturum açmak için geçiÅ anahtarı oluÅturulsun mu?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"<xliff:g id="APP_NAME">%1$s</xliff:g> uygulamasında oturum açmak için Åifre kaydedilsin mi?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"<xliff:g id="APP_NAME">%1$s</xliff:g> için oturum açma bilgileri kaydedilsin mi?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"<xliff:g id="APP_NAME">%1$s</xliff:g> geçiÅ anahtarı oluÅturmak için ekran kilidiniz kullanılsın mı?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"<xliff:g id="APP_NAME">%1$s</xliff:g> Åifresi oluÅturmak için ekran kilidiniz kullanılsın mı?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"<xliff:g id="APP_NAME">%1$s</xliff:g> oturum açma bilgilerini kaydetmek için ekran kilidiniz kullanılsın mı?"</string>
<string name="passkey" msgid="632353688396759522">"GeçiÅ anahtarı"</string>
<string name="password" msgid="6738570945182936667">"Åifre"</string>
<string name="passkeys" msgid="5733880786866559847">"GeçiÅ anahtarlarınızın"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Önceki sayfaya geri dön"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Kapat"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Kapat"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> için kayıtlı geçiÅ anahtarınız kullanılsın mı?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> için kayıtlı Åifreniz kullanılsın mı?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"<xliff:g id="APP_NAME">%1$s</xliff:g> uygulamasında <xliff:g id="USERNAME">%2$s</xliff:g> hesabıyla oturum açmak için ekran kilidinizi kullanın"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> için oturum açma bilgileriniz kullanılsın mı?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> için oturum açma seçeneklerine izin verilsin mi?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"<xliff:g id="APP_NAME">%1$s</xliff:g> için kayıtlı geçiÅ anahtarınızı kullanın"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"<xliff:g id="APP_NAME">%1$s</xliff:g> için kayıtlı Åifrenizi kullanın"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"<xliff:g id="APP_NAME">%1$s</xliff:g> için hesabınızı kullanın"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g> için oturum açma seçeneklerinin kilidini açın"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> için kayıtlı bir geçiÅ anahtarı kullanın"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> için kayıtlı bir Åifre kullanın"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> için kayıtlı oturum açma bilgilerini kullanın"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> için oturum açma bilgilerini seçin"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g> uygulaması için bir hesap seçin"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> için bir seçim yapmak ister misiniz?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Bu bilgiler <xliff:g id="APP_NAME">%1$s</xliff:g> uygulamasında kullanılsın mı?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"BaÅka bir yöntemle oturum aç"</string>
diff --git a/packages/CredentialManager/res/values-uk/strings.xml b/packages/CredentialManager/res/values-uk/strings.xml
index cbc67d9..6b0590a 100644
--- a/packages/CredentialManager/res/values-uk/strings.xml
+++ b/packages/CredentialManager/res/values-uk/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"СÑвПÑОÑО клÑÑ ÐŽÐŸÑÑÑÐ¿Ñ ÐŽÐ»Ñ Ð²Ñ
ÐŸÐŽÑ Ð² ЎПЎаÑПк <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"ÐбеÑегÑО паÑÐŸÐ»Ñ ÐŽÐ»Ñ Ð²Ñ
ÐŸÐŽÑ Ð² ЎПЎаÑПк <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"ÐбеÑегÑО ÐŽÐ°ÐœÑ ÐŽÐ»Ñ Ð²Ñ
ÐŸÐŽÑ ÐŽÐ»Ñ ÐŽÐŸÐŽÐ°Ñка <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"ÐОкПÑОÑÑаÑО ÑпПÑÑб ÑПзблПкÑÐ²Ð°ÐœÐœÑ ÐµÐºÑаМа, ÑПб ÑÑвПÑОÑО клÑÑ ÐŽÐŸÑÑÑÐ¿Ñ ÐŽÐ»Ñ ÐŽÐŸÐŽÐ°Ñка <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"ÐОкПÑОÑÑаÑО ÑпПÑÑб ÑПзблПкÑÐ²Ð°ÐœÐœÑ ÐµÐºÑаМа, ÑПб ÑÑвПÑОÑО паÑÐŸÐ»Ñ ÐŽÐ»Ñ ÐŽÐŸÐŽÐ°Ñка <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"ÐОкПÑОÑÑаÑО ÑпПÑÑб ÑПзблПкÑÐ²Ð°ÐœÐœÑ ÐµÐºÑаМа, ÑПб збеÑегÑО ÐŽÐ°ÐœÑ ÐŽÐ»Ñ Ð²Ñ
ÐŸÐŽÑ Ð² ЎПЎаÑПк <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="passkey" msgid="632353688396759522">"клÑÑ ÐŽÐŸÑÑÑпÑ"</string>
<string name="password" msgid="6738570945182936667">"паÑПлÑ"</string>
<string name="passkeys" msgid="5733880786866559847">"клÑÑÑ ÐŽÐŸÑÑÑпÑ"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"ÐПвеÑМÑÑОÑÑ ÐœÐ° пПпеÑÐµÐŽÐœÑ ÑÑПÑÑМкÑ"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"ÐакÑОÑО"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"ÐакÑОÑО"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"ÐОкПÑОÑÑаÑО збеÑежеМОй клÑÑ ÐŽÐŸÑÑÑÐ¿Ñ ÐŽÐ»Ñ ÐŽÐŸÐŽÐ°Ñка <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"ÐОкПÑОÑÑаÑО Ð²Ð°Ñ Ð·Ð±ÐµÑежеМОй паÑÐŸÐ»Ñ ÐŽÐ»Ñ ÐŽÐŸÐŽÐ°Ñка <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"ÐОкПÑОÑÑПвÑйÑе ÑвÑй ÑпПÑÑб ÑПзблПкÑÐ²Ð°ÐœÐœÑ ÐµÐºÑаМа, ÑПб вÑ
ПЎОÑО в ЎПЎаÑПк <xliff:g id="APP_NAME">%1$s</xliff:g> Ñк кПÑОÑÑÑÐ²Ð°Ñ <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"ÐОкПÑОÑÑПвÑваÑО ваÑÑ ÐŽÐ°ÐœÑ ÐŽÐ»Ñ Ð²Ñ
ÐŸÐŽÑ Ð² ЎПЎаÑПк <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"РПзблПкÑваÑО ПпÑÑÑ Ð²Ñ
ÐŸÐŽÑ ÐŽÐ»Ñ ÐŽÐŸÐŽÐ°Ñка <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"ÐОкПÑОÑÑайÑе ÑвÑй збеÑежеМОй клÑÑ ÐŽÐŸÑÑÑÐ¿Ñ ÐŽÐ»Ñ ÐŽÐŸÐŽÐ°Ñка <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"ÐОкПÑОÑÑайÑе ÑвÑй збеÑежеМОй паÑÐŸÐ»Ñ ÐŽÐ»Ñ ÐŽÐŸÐŽÐ°Ñка <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"ÐОкПÑОÑÑайÑе ÑвÑй ПблÑкПвОй Ð·Ð°Ð¿ÐžÑ ÐŽÐ»Ñ ÐŽÐŸÐŽÐ°Ñка <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"РПзблПкÑйÑе ÑпПÑПбО вÑ
ÐŸÐŽÑ ÐŽÐ»Ñ ÐŽÐŸÐŽÐ°Ñка <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"ÐОбеÑÑÑÑ Ð·Ð±ÐµÑежеМОй клÑÑ ÐŽÐŸÑÑÑÐ¿Ñ ÐŽÐ»Ñ ÐŽÐŸÐŽÐ°Ñка <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"ÐОбеÑÑÑÑ Ð·Ð±ÐµÑежеМОй паÑÐŸÐ»Ñ ÐŽÐ»Ñ ÐŽÐŸÐŽÐ°Ñка <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"ÐОбеÑÑÑÑ Ð·Ð±ÐµÑÐµÐ¶ÐµÐœÑ ÐŽÐ°ÐœÑ ÐŽÐ»Ñ Ð²Ñ
ÐŸÐŽÑ Ð² ЎПЎаÑПк <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"ÐОбеÑÑÑÑ ÐŽÐ°ÐœÑ ÐŽÐ»Ñ Ð²Ñ
ÐŸÐŽÑ Ð² ЎПЎаÑПк <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"ÐОбеÑÑÑÑ ÐŸÐ±Ð»ÑкПвОй Ð·Ð°Ð¿ÐžÑ ÐŽÐ»Ñ ÐŽÐŸÐŽÐ°Ñка <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"ÐОбÑаÑО ваÑÑÐ°ÐœÑ ÐŽÐ»Ñ ÐŽÐŸÐŽÐ°Ñка <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"ÐОкПÑОÑÑПвÑваÑО ÑÑ ÐŽÐ°ÐœÑ Ð² ЎПЎаÑÐºÑ <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"УвÑйÑО ÑМÑОЌ ÑпПÑПбПЌ"</string>
diff --git a/packages/CredentialManager/res/values-ur/strings.xml b/packages/CredentialManager/res/values-ur/strings.xml
index 67cf20a..ff3f0d3 100644
--- a/packages/CredentialManager/res/values-ur/strings.xml
+++ b/packages/CredentialManager/res/values-ur/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"<xliff:g id="APP_NAME">%1$s</xliff:g> Ù
ÛÚº سا؊٠ا٠کرÙÛ Ú©ÛÙØŠÛ ٟاس Ú©Û ØªØ®ÙÛ٠کرÛÚºØ"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"<xliff:g id="APP_NAME">%1$s</xliff:g> Ù
ÛÚº سا؊٠ا٠کرÙÛ Ú©ÛÙØŠÛ ٟاس ÙØ±Ú Ù
ØÙÙØž کرÛÚºØ"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"<xliff:g id="APP_NAME">%1$s</xliff:g> Ú©Û ÙÛÛ Ø³Ø§ØŠÙ Ø§Ù Ú©Û Ù
عÙÙÙ
ات Ù
ØÙÙØž کرÛÚºØ"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"<xliff:g id="APP_NAME">%1$s</xliff:g> Ú©Û ÙÛÛ ÙŸØ§Ø³ Ú©Û ØšÙØ§ÙÛ Ú©Û ÙÛÛ Ø§ÙŸÙØ§ اسکرÛÙ ÙØ§Ú© استعÙ
ا٠کرÛÚºØ"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"<xliff:g id="APP_NAME">%1$s</xliff:g> کا ٟاس ÙØ±Ú ØšÙØ§ÙÛ Ú©Û ÙÛÛ Ø§ÙŸÙØ§ اسکرÛÙ ÙØ§Ú© استعÙ
ا٠کرÛÚºØ"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"<xliff:g id="APP_NAME">%1$s</xliff:g> Ú©Û Ø³Ø§ØŠÙ Ø§Ù Ú©Û Ù
عÙÙÙ
ات Ù
ØÙÙØž کرÙÛ Ú©Û ÙÛÛ Ø§ÙŸÙØ§ اسکرÛÙ ÙØ§Ú© استعÙ
ا٠کرÛÚºØ"</string>
<string name="passkey" msgid="632353688396759522">"ٟاس Ú©Û"</string>
<string name="password" msgid="6738570945182936667">"ٟاس ÙØ±Ú"</string>
<string name="passkeys" msgid="5733880786866559847">"ٟاس Ú©ÛØ²"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Ú¯Ø²ØŽØªÛ ØµÙØÛ ÙŸØ± ÙØ§ÙŸØ³ جا؊ÛÚº"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"ØšÙØ¯ کرÛÚº"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"ؚرخاست کرÛÚº"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> Ú©Û ÙÛÛ Ø§ÙŸÙÛ Ù
ØÙÙØž Ú©Ø±Ø¯Û ÙŸØ§Ø³ Ú©Û Ø§Ø³ØªØ¹Ù
ا٠کرÛÚºØ"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> Ú©Û ÙÛÛ Ø¢ÙŸ کا Ù
ØÙÙØž Ú©Ø±Ø¯Û ÙŸØ§Ø³ ÙØ±Ú استعÙ
ا٠کرÛÚºØ"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"<xliff:g id="USERNAME">%2$s</xliff:g> Ú©Û Ø³Ø§ØªÚŸ <xliff:g id="APP_NAME">%1$s</xliff:g> Ù
ÛÚº سا؊٠ا٠کرÙÛ Ú©Û ÙÛÛ Ø§ÙŸÙØ§ اسکرÛÙ ÙØ§Ú© استعÙ
ا٠کرÛÚº"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> Ú©Û ÙÛÛ Ø¢ÙŸ Ú©Û Ø³Ø§ØŠÙ Ø§Ù ØªÙØµÛÙØ§Øª استعÙ
ا٠کرÛÚºØ"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> Ú©Û ÙÛÛ Ø³Ø§ØŠÙ Ø§Ù Ú©Û Ø§Ø®ØªÛØ§Ø±Ø§Øª Ú©Ù ØºÛØ± Ù
ÙÙ٠کرÛÚºØ"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"<xliff:g id="APP_NAME">%1$s</xliff:g> Ú©Û ÙÛÛ Ø§ÙŸÙÛ Ù
ØÙÙØž Ú©Ø±Ø¯Û ÙŸØ§Ø³ Ú©Û Ø§Ø³ØªØ¹Ù
ا٠کرÛÚº"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"<xliff:g id="APP_NAME">%1$s</xliff:g> Ú©ÛÙØŠÛ آٟ کا Ù
ØÙÙØž Ú©Ø±Ø¯Û ÙŸØ§Ø³ ÙØ±Ú استعÙ
ا٠کرÛÚº"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"<xliff:g id="APP_NAME">%1$s</xliff:g> Ú©Û ÙÛÛ Ø§ÙŸÙØ§ اکا؀ÙÙ¹ استعÙ
ا٠کرÛÚº"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g> Ú©Û ÙÛÛ Ø³Ø§ØŠÙ Ø§Ù Ú©Û Ø§Ø®ØªÛØ§Ø±Ø§Øª Ú©Ù ØºÛØ± Ù
ÙÙ٠کرÛÚº"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> Ú©Û ÙÛÛ Ø§ÛÚ© Ù
ØÙÙØž Ú©Ø±Ø¯Û ÙŸØ§Ø³ Ú©Û Ù
ÙØªØ®Øš کرÛÚº"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> Ú©Û ÙÛÛ Ø§ÛÚ© Ù
ØÙÙØž Ú©Ø±Ø¯Û ÙŸØ§Ø³ ÙØ±Ú Ù
ÙØªØ®Øš کرÛÚº"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> Ú©Û ÙÛÛ Ù
ØÙÙØž Ú©Ø±Ø¯Û Ø³Ø§ØŠÙ Ø§Ù Ù
ÙØªØ®Øš کرÛÚº"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> Ú©Û ÙÛÛ Ø³Ø§ØŠÙ Ø§Ù Ù
ÙØªØ®Øš کرÛÚº"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g> Ú©ÛÙØŠÛ اÛÚ© اکا؀ÙÙ¹ Ù
ÙØªØ®Øš کرÛÚº"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> Ú©Û ÙÛÛ Ø§ÛÚ© Ø§Ø®ØªÛØ§Ø± Ù
ÙØªØ®Øš کرÛÚºØ"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"<xliff:g id="APP_NAME">%1$s</xliff:g> ٟر اس Ù
عÙÙÙ
ات کا استعÙ
ا٠کرÛÚºØ"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Ø¯ÙØ³Ø±Û طرÛÙÛ Ø³Û Ø³Ø§ØŠÙ Ø§Ù Ú©Ø±ÛÚº"</string>
diff --git a/packages/CredentialManager/res/values-uz/strings.xml b/packages/CredentialManager/res/values-uz/strings.xml
index ae7f06e..7bb974a 100644
--- a/packages/CredentialManager/res/values-uz/strings.xml
+++ b/packages/CredentialManager/res/values-uz/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilovasiga kirish uchun kirish kaliti yaratilsinmi?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilovasiga kirish uchun parol saqlansinmi?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"<xliff:g id="APP_NAME">%1$s</xliff:g> uchun kirish maÊŒlumoti saqlansinmi?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilovasida kirish kaliti yaratish uchun ekranni qulflashdan foydalanilsinmi?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilovasida parol yaratish uchun ekranni qulflashdan foydalanilsinmi?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilovasiga kirish axborotlarini saqlash uchun ekranni qulflashdan foydalanilsinmi?"</string>
<string name="passkey" msgid="632353688396759522">"kalit"</string>
<string name="password" msgid="6738570945182936667">"parol"</string>
<string name="passkeys" msgid="5733880786866559847">"kalitlar"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Avvalgi sahifaga qaytish"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Yopish"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Yopish"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"<xliff:g id="APP_NAME">%1$s</xliff:g> uchun saqlangan kalit ishlatilsinmi?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"<xliff:g id="APP_NAME">%1$s</xliff:g> uchun saqlangan parol ishlatilsinmi?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilovasiga <xliff:g id="USERNAME">%2$s</xliff:g> bilan kirish uchun ekran qulfini ishlating"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilovasiga bu maÊŒlumotlar bilan kirilsinmi?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"<xliff:g id="APP_NAME">%1$s</xliff:g> uchun kirish usullari ochilsinmi?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilovasiga saqlangan kalit orqali kiring"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"<xliff:g id="APP_NAME">%1$s</xliff:g> uchun saqlangan parol orqali kiring"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilovasiga hisobingiz orqali kiring"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilovasiga kirish usulini tasdiqlang"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"<xliff:g id="APP_NAME">%1$s</xliff:g> uchun saqlangan kalitni tanlang"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"<xliff:g id="APP_NAME">%1$s</xliff:g> uchun saqlangan parolni tanlang"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"<xliff:g id="APP_NAME">%1$s</xliff:g> uchun hisob maÊŒlumotlarini tanlang"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilovasiga qanday kirishni tanlang"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilovasiga kirish hisobini tanlang"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilovasiga kirish uchun maÊŒlumotlar tanlansinmi?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Bu axborotdan <xliff:g id="APP_NAME">%1$s</xliff:g> ilovasiga kirish uchun foydalanilsinmi?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Boshqa usul orqali kirish"</string>
diff --git a/packages/CredentialManager/res/values-vi/strings.xml b/packages/CredentialManager/res/values-vi/strings.xml
index 2b59857..aa253a4 100644
--- a/packages/CredentialManager/res/values-vi/strings.xml
+++ b/packages/CredentialManager/res/values-vi/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Tạo khoá truy cáºp Äá» ÄÄng nháºp vào <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"Lưu máºt khẩu Äá» ÄÄng nháºp vào <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Lưu thông tin ÄÄng nháºp cho <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Sá» dụng phương thức khoá màn hình Äá» tạo khoá truy cáºp cho ứng dụng <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Sá» dụng phương thức khoá màn hình Äá» tạo máºt khẩu cho ứng dụng <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Sá» dụng phương thức khoá màn hình Äá» lưu thông tin ÄÄng nháºp cho ứng dụng <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="passkey" msgid="632353688396759522">"khoá ÄÄng nháºp"</string>
<string name="password" msgid="6738570945182936667">"máºt khẩu"</string>
<string name="passkeys" msgid="5733880786866559847">"khoá truy cáºp"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Quay lại trang trưá»c"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Äóng"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Äóng"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Dùng khoá ÄÄng nháºp bạn Äã lưu cho <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Sá» dụng máºt khẩu bạn Äã lưu cho <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Dùng phương thức khoá màn hình Äá» ÄÄng nháºp vào <xliff:g id="APP_NAME">%1$s</xliff:g> bằng <xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Dùng thông tin ÄÄng nháºp cá»§a bạn cho <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Má» khoá các tuỳ chá»n ÄÄng nháºp cho <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Dùng khoá truy cáºp bạn Äã lưu cho <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Dùng máºt khẩu bạn Äã lưu cho <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Dùng tài khoản cá»§a bạn cho <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Má» khoá các phương thức ÄÄng nháºp cho <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Chá»n khoá truy cáºp Äã lưu cho <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Chá»n máºt khẩu Äã lưu cho <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Chá»n thông tin ÄÄng nháºp Äã lưu cho <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Chá»n thông tin ÄÄng nháºp cho <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Chá»n má»t tài khoản cho <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Chá»n má»t lá»±a chá»n cho <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Sá» dụng thông tin này trên <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"ÄÄng nháºp bằng cách khác"</string>
diff --git a/packages/CredentialManager/res/values-zh-rCN/strings.xml b/packages/CredentialManager/res/values-zh-rCN/strings.xml
index 9b7ae0d..42dbfaf 100644
--- a/packages/CredentialManager/res/values-zh-rCN/strings.xml
+++ b/packages/CredentialManager/res/values-zh-rCN/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"èŠå建éè¡å¯é¥ä»¥äŸ¿ç»åœ“<xliff:g id="APP_NAME">%1$s</xliff:g>”åïŒ"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"èŠä¿åå¯ç 以䟿ç»åœ“<xliff:g id="APP_NAME">%1$s</xliff:g>”åïŒ"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"èŠä¿å“<xliff:g id="APP_NAME">%1$s</xliff:g>”çç»åœä¿¡æ¯åïŒ"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"èŠäœ¿çšå±é䞺“<xliff:g id="APP_NAME">%1$s</xliff:g>”å建éè¡å¯é¥ïŒ"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"èŠäœ¿çšå±é䞺“<xliff:g id="APP_NAME">%1$s</xliff:g>”å建å¯ç ïŒ"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"èŠäœ¿çšå±é䞺“<xliff:g id="APP_NAME">%1$s</xliff:g>”ä¿åç»åœä¿¡æ¯ïŒ"</string>
<string name="passkey" msgid="632353688396759522">"éè¡å¯é¥"</string>
<string name="password" msgid="6738570945182936667">"å¯ç "</string>
<string name="passkeys" msgid="5733880786866559847">"éè¡å¯é¥"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"è¿åäžäžé¡µ"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"å
³é"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"応ç¥"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"èŠäœ¿çšæšäžº“<xliff:g id="APP_NAME">%1$s</xliff:g>”ä¿åçéè¡å¯é¥åïŒ"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"èŠäœ¿çšå·²ä¿åçå¯ç ç»åœ“<xliff:g id="APP_NAME">%1$s</xliff:g>”åïŒ"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"äœ¿çšæšçå±é以 <xliff:g id="USERNAME">%2$s</xliff:g> ç身仜ç»åœ“<xliff:g id="APP_NAME">%1$s</xliff:g>”"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"æ¯åŠäœ¿çšæšç<xliff:g id="APP_NAME">%1$s</xliff:g>ç»åœåæ®ç»§ç»ïŒ"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"èŠè§£é“<xliff:g id="APP_NAME">%1$s</xliff:g>”çç»åœé项åïŒ"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"䜿çšå·²ä¿åçéè¡å¯é¥ç»åœ“<xliff:g id="APP_NAME">%1$s</xliff:g>”"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"䜿çšå·²ä¿åçå¯ç ç»åœ“<xliff:g id="APP_NAME">%1$s</xliff:g>”"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"äœ¿çšæšç莊å·ç»åœ“<xliff:g id="APP_NAME">%1$s</xliff:g>”"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"è§£é“<xliff:g id="APP_NAME">%1$s</xliff:g>”çç»åœé项"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"éæ©äžäžªå·²ä¿åçéè¡å¯é¥æ¥ç»åœ“<xliff:g id="APP_NAME">%1$s</xliff:g>”"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"éæ©äžäžªå·²ä¿åçå¯ç æ¥ç»åœ“<xliff:g id="APP_NAME">%1$s</xliff:g>”"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"éæ©äžç§å·²ä¿åçç»åœæ¹åŒæ¥ç»åœ“<xliff:g id="APP_NAME">%1$s</xliff:g>”"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"éæ©äžç§ç»åœ<xliff:g id="APP_NAME">%1$s</xliff:g>çæ¹åŒ"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"éæ©äžäžªèŽŠå·ç»åœ“<xliff:g id="APP_NAME">%1$s</xliff:g>”"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"èŠäžº“<xliff:g id="APP_NAME">%1$s</xliff:g>”éæ©äžäžªé项åïŒ"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"èŠå°æ€ä¿¡æ¯çšäº“<xliff:g id="APP_NAME">%1$s</xliff:g>”åïŒ"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"䜿çšå
¶ä»ç»åœæ¹åŒ"</string>
diff --git a/packages/CredentialManager/res/values-zh-rHK/strings.xml b/packages/CredentialManager/res/values-zh-rHK/strings.xml
index 4ff00c3..56e0b90 100644
--- a/packages/CredentialManager/res/values-zh-rHK/strings.xml
+++ b/packages/CredentialManager/res/values-zh-rHK/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"èŠå»ºç«å¯é°ä»¥ç»å
¥ <xliff:g id="APP_NAME">%1$s</xliff:g> åïŒ"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"èŠå²åå¯ç¢Œä»¥ç»å
¥ <xliff:g id="APP_NAME">%1$s</xliff:g> åïŒ"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"èŠå²å <xliff:g id="APP_NAME">%1$s</xliff:g> çç»å
¥è³æåïŒ"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"èŠäœ¿çšè¢å¹é宿¹åŒå»ºç«ã<xliff:g id="APP_NAME">%1$s</xliff:g>ãçå¯é°åïŒ"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"èŠäœ¿çšè¢å¹é宿¹åŒå»ºç«ã<xliff:g id="APP_NAME">%1$s</xliff:g>ãçå¯ç¢ŒåïŒ"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"èŠäœ¿çšè¢å¹é宿¹åŒå²åã<xliff:g id="APP_NAME">%1$s</xliff:g>ãçç»å
¥è³æåïŒ"</string>
<string name="passkey" msgid="632353688396759522">"å¯é°"</string>
<string name="password" msgid="6738570945182936667">"å¯ç¢Œ"</string>
<string name="passkeys" msgid="5733880786866559847">"å¯é°"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"è¿åäžäžé "</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"éé"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"éé"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"èŠäœ¿çšå·²å²åçã<xliff:g id="APP_NAME">%1$s</xliff:g>ãå¯é°åïŒ"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"èŠäœ¿çšå·²å²åçã<xliff:g id="APP_NAME">%1$s</xliff:g>ãå¯ç¢ŒåïŒ"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"䜿çšè¢å¹é宿¹åŒä»¥ <xliff:g id="USERNAME">%2$s</xliff:g> ç»å
¥ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"èŠä»¥æ€ç»å
¥æ¹åŒäœ¿çšã<xliff:g id="APP_NAME">%1$s</xliff:g>ãåïŒ"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"èŠè§£éã<xliff:g id="APP_NAME">%1$s</xliff:g>ãçç»å
¥éžé
åïŒ"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"䜿çšå·²å²åç <xliff:g id="APP_NAME">%1$s</xliff:g> å¯é°"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"䜿çšå·²å²åç <xliff:g id="APP_NAME">%1$s</xliff:g> å¯ç¢Œ"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"ééäœ çåž³æ¶äœ¿çš <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"è§£é <xliff:g id="APP_NAME">%1$s</xliff:g> çç»å
¥éžé
"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"éžæå·²å²åçã<xliff:g id="APP_NAME">%1$s</xliff:g>ãå¯é°"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"éžæå·²å²åçã<xliff:g id="APP_NAME">%1$s</xliff:g>ãå¯ç¢Œ"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"éžæå·²å²åçã<xliff:g id="APP_NAME">%1$s</xliff:g>ãç»å
¥è³æ"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"éžæçšæŒã<xliff:g id="APP_NAME">%1$s</xliff:g>ãçç»å
¥æ¹åŒ"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"éžæäœ¿çš <xliff:g id="APP_NAME">%1$s</xliff:g> çåž³æ¶"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"èŠéžæé©çšæŒã<xliff:g id="APP_NAME">%1$s</xliff:g>ãçé
ç®åïŒ"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"èŠåšã<xliff:g id="APP_NAME">%1$s</xliff:g>ãäžäœ¿çšéäºè³æåïŒ"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"䜿çšå
¶ä»æ¹åŒç»å
¥"</string>
diff --git a/packages/CredentialManager/res/values-zh-rTW/strings.xml b/packages/CredentialManager/res/values-zh-rTW/strings.xml
index c8bd87d..59d0607 100644
--- a/packages/CredentialManager/res/values-zh-rTW/strings.xml
+++ b/packages/CredentialManager/res/values-zh-rTW/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"èŠå»ºç«çšæŒç»å
¥ã<xliff:g id="APP_NAME">%1$s</xliff:g>ãçå¯ç¢Œéé°åïŒ"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"èŠå²åçšæŒç»å
¥ã<xliff:g id="APP_NAME">%1$s</xliff:g>ãçå¯ç¢ŒåïŒ"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"èŠå²åã<xliff:g id="APP_NAME">%1$s</xliff:g>ãçç»å
¥è³èšåïŒ"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"èŠäœ¿çšè¢å¹éå®å»ºç«ã<xliff:g id="APP_NAME">%1$s</xliff:g>ãçå¯ç¢Œéé°åïŒ"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"èŠäœ¿çšè¢å¹éå®å»ºç«ã<xliff:g id="APP_NAME">%1$s</xliff:g>ãçå¯ç¢ŒåïŒ"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"èŠäœ¿çšè¢å¹éå®å²åã<xliff:g id="APP_NAME">%1$s</xliff:g>ãçç»å
¥è³èšåïŒ"</string>
<string name="passkey" msgid="632353688396759522">"å¯ç¢Œéé°"</string>
<string name="password" msgid="6738570945182936667">"å¯ç¢Œ"</string>
<string name="passkeys" msgid="5733880786866559847">"å¯ç¢Œéé°"</string>
@@ -71,15 +68,16 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"è¿åäžäžé "</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"éé"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"éé"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"èŠäœ¿çšå·²å²åçã<xliff:g id="APP_NAME">%1$s</xliff:g>ãå¯ç¢Œéé°åïŒ"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"èŠäœ¿çšå·²å²åçã<xliff:g id="APP_NAME">%1$s</xliff:g>ãå¯ç¢ŒåïŒ"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"çš <xliff:g id="USERNAME">%2$s</xliff:g> ç»å
¥ã<xliff:g id="APP_NAME">%1$s</xliff:g>ãæäœ¿çšè¢å¹éå®åèœé²è¡é©è"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"èŠäœ¿çšäœ çæèç»å
¥ã<xliff:g id="APP_NAME">%1$s</xliff:g>ãåïŒ"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"èŠè§£éã<xliff:g id="APP_NAME">%1$s</xliff:g>ãçç»å
¥éžé
åïŒ"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"䜿çšå·²å²åçã<xliff:g id="APP_NAME">%1$s</xliff:g>ãå¯ç¢Œéé°"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"䜿çšå·²å²åçã<xliff:g id="APP_NAME">%1$s</xliff:g>ãå¯ç¢Œ"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"䜿çšã<xliff:g id="APP_NAME">%1$s</xliff:g>ãçåž³æ¶"</string>
+ <!-- no translation found for get_dialog_description_single_tap (2797059565126030879) -->
+ <skip />
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"è§£éã<xliff:g id="APP_NAME">%1$s</xliff:g>ãçç»å
¥éžé
"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"éžæå·²å²åçã<xliff:g id="APP_NAME">%1$s</xliff:g>ãå¯ç¢Œéé°"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"éžæå·²å²åçã<xliff:g id="APP_NAME">%1$s</xliff:g>ãå¯ç¢Œ"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"éžæå·²å²åçã<xliff:g id="APP_NAME">%1$s</xliff:g>ãç»å
¥è³èš"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"éžæçšæŒç»å
¥ã<xliff:g id="APP_NAME">%1$s</xliff:g>ãçæè"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"éžæèŠçšæŒã<xliff:g id="APP_NAME">%1$s</xliff:g>ãçåž³æ¶"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"èŠéžæé©çšæŒã<xliff:g id="APP_NAME">%1$s</xliff:g>ãçé
ç®åïŒ"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"èŠåšã<xliff:g id="APP_NAME">%1$s</xliff:g>ãäžäœ¿çšéé
è³èšåïŒ"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"䜿çšå
¶ä»æ¹åŒç»å
¥"</string>
diff --git a/packages/CredentialManager/res/values-zu/strings.xml b/packages/CredentialManager/res/values-zu/strings.xml
index 7e6300b5..db7c992 100644
--- a/packages/CredentialManager/res/values-zu/strings.xml
+++ b/packages/CredentialManager/res/values-zu/strings.xml
@@ -42,9 +42,6 @@
<string name="choose_create_option_passkey_title" msgid="8762295821604276511">"Sungula ukhiye wokudlula ukuze ungene ngemvume ku-<xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_password_title" msgid="4481366993598649224">"Londoloza iphasiwedi ukuze ungene ngemvume ku-<xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="choose_create_option_sign_in_title" msgid="7092914088455358079">"Londoloza ulwazi lokungena lwe-<xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_passkey_title" msgid="3872793514041774218">"Sebenzisa ukukhiya isikrini sakho ukuze usungule ukhiye wokudlula we-<xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_password_title" msgid="5231871886818921622">"Sebenzisa ukukhiya isikrini sakho ukuze usungule iphasiwedi ye-<xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="choose_create_single_tap_sign_in_title" msgid="256498714574099587">"Sebenzisa ukukhiya isikrini sakho ukuze ulondoloze ulwazi lokungena ngemvume lwe-<xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="passkey" msgid="632353688396759522">"ukhiye wokudlula"</string>
<string name="password" msgid="6738570945182936667">"iphasiwedi"</string>
<string name="passkeys" msgid="5733880786866559847">"okhiye bokudlula"</string>
@@ -71,15 +68,15 @@
<string name="accessibility_back_arrow_button" msgid="3233198183497842492">"Buyela emuva ekhasini langaphambilini"</string>
<string name="accessibility_close_button" msgid="1163435587545377687">"Vala"</string>
<string name="accessibility_snackbar_dismiss" msgid="3456598374801836120">"Chitha"</string>
- <string name="get_dialog_title_use_passkey_for" msgid="6236608872708021767">"Sebenzisa ukhiye wakho wokungena olondoloziwe <xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_use_password_for" msgid="625828023234318484">"Sebenzisa iphasiwedi yakho elondoloziwe ye-<xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_single_tap_for" msgid="2057945648748859483">"Sebenzisa ukukhiya kwakho kwesikrini ukuze ungene ngemvume ku-<xliff:g id="APP_NAME">%1$s</xliff:g> ngo-<xliff:g id="USERNAME">%2$s</xliff:g>"</string>
- <string name="get_dialog_title_use_sign_in_for" msgid="790049858275131785">"Sebenzisa ukungena kwakho ngemvume ku-<xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
- <string name="get_dialog_title_unlock_options_for" msgid="7605568190597632433">"Vula ukungena ngemvume okukhethwa kukho kwe-<xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
+ <string name="get_dialog_title_use_passkey_for" msgid="479261099705979148">"Sebenzisa ukhiye wakho wokungena olondoloziwe we-<xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_password_for" msgid="688557784207167647">"Sebenzisa iphasiwedi yakho elondoloziwe ye-<xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_use_sign_in_for" msgid="4233553937542583226">"Sebenzisa i-akhawunti yakho ye-<xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_description_single_tap" msgid="2797059565126030879">"Sebenzisa ukukhiya kwakho isikrini ukuze ungene ngemvume ku-<xliff:g id="APP_NAME">%1$s</xliff:g> ngo-<xliff:g id="USERNAME">%2$s</xliff:g>"</string>
+ <string name="get_dialog_title_unlock_options_for" msgid="7096423827682163270">"Vula ukungena ngemvume okukhethwa kukho kwe-<xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_choose_passkey_for" msgid="9175997688078538490">"Khetha ukhiye wokudlula olondoloziwe we-<xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_password_for" msgid="1724435823820819221">"Khetha iphasiwedi elondoloziwe ye-<xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_saved_sign_in_for" msgid="2420298653461652728">"Khetha ukungena ngemvume okulondoloziwe kwe-<xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="get_dialog_title_choose_sign_in_for" msgid="3048870756117876514">"Khetha ukungenangemvume ku-<xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="get_dialog_title_choose_sign_in_for" msgid="645728947702442421">"Khetha i-akhawunti ye-<xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="get_dialog_title_choose_option_for" msgid="4976380044745029107">"Khetha ongakhetha kukho kwe-<xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_title_use_info_on" msgid="8863708099535435146">"Sebenzisa lolu lwazi ku-<xliff:g id="APP_NAME">%1$s</xliff:g>?"</string>
<string name="get_dialog_use_saved_passkey_for" msgid="4618100798664888512">"Ngena ngemvume ngenye indlela"</string>
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/autofill/CredentialAutofillService.kt b/packages/CredentialManager/src/com/android/credentialmanager/autofill/CredentialAutofillService.kt
index 4109079..50ebdd5 100644
--- a/packages/CredentialManager/src/com/android/credentialmanager/autofill/CredentialAutofillService.kt
+++ b/packages/CredentialManager/src/com/android/credentialmanager/autofill/CredentialAutofillService.kt
@@ -47,9 +47,9 @@
import android.service.credentials.CredentialProviderService
import android.util.Log
import android.content.Intent
+import android.os.IBinder
import android.view.autofill.AutofillId
import android.view.autofill.AutofillManager
-import android.view.autofill.IAutoFillManagerClient
import android.widget.RemoteViews
import android.widget.inline.InlinePresentationSpec
import androidx.autofill.inline.v1.InlineSuggestionUi
@@ -95,7 +95,7 @@
request: FillRequest,
cancellationSignal: CancellationSignal,
callback: FillCallback,
- autofillCallback: IAutoFillManagerClient
+ autofillCallback: IBinder
) {
val context = request.fillContexts
val structure = context[context.size - 1].structure
@@ -160,7 +160,7 @@
CancellationSignal(),
Executors.newSingleThreadExecutor(),
outcome,
- autofillCallback.asBinder()
+ autofillCallback
)
}
diff --git a/packages/InputDevices/res/values-af/strings.xml b/packages/InputDevices/res/values-af/strings.xml
index 5d0c022..72bb640 100644
--- a/packages/InputDevices/res/values-af/strings.xml
+++ b/packages/InputDevices/res/values-af/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"Belarussies"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"Mongools"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"Georgies"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"Thai (Kedmanee)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-am/strings.xml b/packages/InputDevices/res/values-am/strings.xml
index 39d5717..0eea57b 100644
--- a/packages/InputDevices/res/values-am/strings.xml
+++ b/packages/InputDevices/res/values-am/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"á€áá©áµá"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"ááááá«á"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"áá®ááá«á"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"á³ááááµá (á¬áµáá)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-ar/strings.xml b/packages/InputDevices/res/values-ar/strings.xml
index 4315853..88be85a 100644
--- a/packages/InputDevices/res/values-ar/strings.xml
+++ b/packages/InputDevices/res/values-ar/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"Ø§ÙØšÙÙØ§Ø±ÙØ³ÙØ©"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"اÙÙ
ÙØºÙÙÙØ©"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"Ø§ÙØ¬ÙØ±Ø¬ÙØ©"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"Ø§ÙØªØ§ÙÙØ§ÙØ¯ÙØ© (Kedmanee)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-as/strings.xml b/packages/InputDevices/res/values-as/strings.xml
index 0171442..3cd707f 100644
--- a/packages/InputDevices/res/values-as/strings.xml
+++ b/packages/InputDevices/res/values-as/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"àŠ¬à§àŠ²àŠŸà§°à§àŠàŠ¿àŠ¯àŠŒàŠŸàŠš"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"Mongolian"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"Georgian"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"àŠ¥àŠŸàŠ (àŠà§àŠ¡àŠ®àŠŸàŠšàŠ¿)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-az/strings.xml b/packages/InputDevices/res/values-az/strings.xml
index 39a12b7..332fd1c 100644
--- a/packages/InputDevices/res/values-az/strings.xml
+++ b/packages/InputDevices/res/values-az/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"Belarus dili"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"Monqol"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"Gürcü"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"Tay (Kedmanee)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-b+sr+Latn/strings.xml b/packages/InputDevices/res/values-b+sr+Latn/strings.xml
index 64aa7f6..a7ede75 100644
--- a/packages/InputDevices/res/values-b+sr+Latn/strings.xml
+++ b/packages/InputDevices/res/values-b+sr+Latn/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"beloruski"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"mongolska"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"gruzijska"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"tajski (Kedmanee)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-ca/strings.xml b/packages/InputDevices/res/values-ca/strings.xml
index ed04b94..573e325 100644
--- a/packages/InputDevices/res/values-ca/strings.xml
+++ b/packages/InputDevices/res/values-ca/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"Bielorús"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"Mongol"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"Georgià"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"Tai (Kedmanee)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-cs/strings.xml b/packages/InputDevices/res/values-cs/strings.xml
index 5cd3ff5..331da96 100644
--- a/packages/InputDevices/res/values-cs/strings.xml
+++ b/packages/InputDevices/res/values-cs/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"bÄloruština"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"mongolština"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"gruzínština"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"thajština (Kedmanee)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-el/strings.xml b/packages/InputDevices/res/values-el/strings.xml
index 7b9651c..1510708 100644
--- a/packages/InputDevices/res/values-el/strings.xml
+++ b/packages/InputDevices/res/values-el/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"Λευκορωσικά"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"Μογγολικά"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"Γεωργιανά"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"ΤαÏλανδικά (Kedmanee)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-en-rAU/strings.xml b/packages/InputDevices/res/values-en-rAU/strings.xml
index 76bb2f1..6db501e 100644
--- a/packages/InputDevices/res/values-en-rAU/strings.xml
+++ b/packages/InputDevices/res/values-en-rAU/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"Belarusian"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"Mongolian"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"Georgian"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"Thai (Kedmanee)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-en-rGB/strings.xml b/packages/InputDevices/res/values-en-rGB/strings.xml
index 76bb2f1..6db501e 100644
--- a/packages/InputDevices/res/values-en-rGB/strings.xml
+++ b/packages/InputDevices/res/values-en-rGB/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"Belarusian"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"Mongolian"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"Georgian"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"Thai (Kedmanee)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-en-rIN/strings.xml b/packages/InputDevices/res/values-en-rIN/strings.xml
index 76bb2f1..6db501e 100644
--- a/packages/InputDevices/res/values-en-rIN/strings.xml
+++ b/packages/InputDevices/res/values-en-rIN/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"Belarusian"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"Mongolian"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"Georgian"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"Thai (Kedmanee)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-fa/strings.xml b/packages/InputDevices/res/values-fa/strings.xml
index 4389205..67bdfc8 100644
--- a/packages/InputDevices/res/values-fa/strings.xml
+++ b/packages/InputDevices/res/values-fa/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"ØšÙØ§Ø±ÙسÛ"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"Ù
غÙÙÛ"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"گرجستاÙÛ"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"تاÛÙÙØ¯Û (کدÙ
اÙÛ)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-fr-rCA/strings.xml b/packages/InputDevices/res/values-fr-rCA/strings.xml
index e176c7e..c03fd6d 100644
--- a/packages/InputDevices/res/values-fr-rCA/strings.xml
+++ b/packages/InputDevices/res/values-fr-rCA/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"Biélorusse"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"Mongol"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"Géorgien"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"Thaï (Kedmanee)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-fr/strings.xml b/packages/InputDevices/res/values-fr/strings.xml
index 4388ec1..8c70b0d 100644
--- a/packages/InputDevices/res/values-fr/strings.xml
+++ b/packages/InputDevices/res/values-fr/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"Biélorusse"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"Mongol"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"Géorgien"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"Thaï (Kedmanee)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-hu/strings.xml b/packages/InputDevices/res/values-hu/strings.xml
index 565bf69..a02f934 100644
--- a/packages/InputDevices/res/values-hu/strings.xml
+++ b/packages/InputDevices/res/values-hu/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"belarusz"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"mongol"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"grúz"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"thai (kedmanee)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-in/strings.xml b/packages/InputDevices/res/values-in/strings.xml
index 19fd692..5ac0439 100644
--- a/packages/InputDevices/res/values-in/strings.xml
+++ b/packages/InputDevices/res/values-in/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"Belarusia"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"Mongolia"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"Georgia"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"Thai (Kedmanee)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-is/strings.xml b/packages/InputDevices/res/values-is/strings.xml
index f76d9d7..d25497c 100644
--- a/packages/InputDevices/res/values-is/strings.xml
+++ b/packages/InputDevices/res/values-is/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"hvítrússneska"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"mongólska"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"georgíska"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"Taílenskt (Kedmanee)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-it/strings.xml b/packages/InputDevices/res/values-it/strings.xml
index ccde851..ae86156 100644
--- a/packages/InputDevices/res/values-it/strings.xml
+++ b/packages/InputDevices/res/values-it/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"Bielorusso"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"Mongolo"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"Georgiano"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"Thai (Kedmanee)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-iw/strings.xml b/packages/InputDevices/res/values-iw/strings.xml
index 4a8b802..9eed7be 100644
--- a/packages/InputDevices/res/values-iw/strings.xml
+++ b/packages/InputDevices/res/values-iw/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"×××ך×ס×ת"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"××× ××××ת"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"××××ך××ת"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"ת××ת (Kedmanee)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-ja/strings.xml b/packages/InputDevices/res/values-ja/strings.xml
index b9bab69..297f351 100644
--- a/packages/InputDevices/res/values-ja/strings.xml
+++ b/packages/InputDevices/res/values-ja/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"ãã©ã«ãŒã·èª"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"ã¢ã³ãŽã«èª"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"ãžã§ãŒãžã¢èª"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"ã¿ã€èªïŒKedmaneeïŒ"</string>
</resources>
diff --git a/packages/InputDevices/res/values-ka/strings.xml b/packages/InputDevices/res/values-ka/strings.xml
index 1610d26..c471c44 100644
--- a/packages/InputDevices/res/values-ka/strings.xml
+++ b/packages/InputDevices/res/values-ka/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"ááááá á£á¡á£áá"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"ááááŠááá£á á"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"á¥áá áá£áá"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"á¢ááááááá£á á (Kedmanee)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-km/strings.xml b/packages/InputDevices/res/values-km/strings.xml
index eb43247..d43fe36 100644
--- a/packages/InputDevices/res/values-km/strings.xml
+++ b/packages/InputDevices/res/values-km/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"ááá¡á¶áá»á"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"áá»áá áááááž"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"á áááâá ááááž"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"áá (Kedmanee)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-kn/strings.xml b/packages/InputDevices/res/values-kn/strings.xml
index 5750585..5fd766f 100644
--- a/packages/InputDevices/res/values-kn/strings.xml
+++ b/packages/InputDevices/res/values-kn/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"ಬà³à²²à²°à³à²žà²¿à²¯à²šà³"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"ಮà²à²à³à²²à²¿à²¯à²šà³"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"à²à²Ÿà²°à³à²à²¿à²¯à²šà³"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"ಥಟಯೠ(à²à³à²¡à³à²®à²šà³)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-lo/strings.xml b/packages/InputDevices/res/values-lo/strings.xml
index ab64e24..0ffa3ce 100644
--- a/packages/InputDevices/res/values-lo/strings.xml
+++ b/packages/InputDevices/res/values-lo/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"à»àºàº¥àº²àº£àº±àºªàºàºœàº"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"ມàºàºà»àºàº¥àºœàº"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"àºà»àºàºœàº"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"à»àº (à»àºàºàº¡àº°àºàºµ)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-lt/strings.xml b/packages/InputDevices/res/values-lt/strings.xml
index ec98937..d6e20eb 100644
--- a/packages/InputDevices/res/values-lt/strings.xml
+++ b/packages/InputDevices/res/values-lt/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"Baltarusių k."</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"Mongolų"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"Gruzinų"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"Tajų („Kedmanee“)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-lv/strings.xml b/packages/InputDevices/res/values-lv/strings.xml
index 05e5d2f..254c70e 100644
--- a/packages/InputDevices/res/values-lv/strings.xml
+++ b/packages/InputDevices/res/values-lv/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"Baltkrievu"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"MongoÄŒu"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"Gruzīnu"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"Taju valoda (Kedmanee)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-ml/strings.xml b/packages/InputDevices/res/values-ml/strings.xml
index 33f8f22..59ee6e6 100644
--- a/packages/InputDevices/res/values-ml/strings.xml
+++ b/packages/InputDevices/res/values-ml/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"àŽ¬àµàŽ²àŽŸàŽ±àµàŽ·àµàŽ¯àµ»"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"àŽ®àŽàŽàµàŽ³àŽ¿àŽ¯àµ»"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"àŽàµàްàµàŽàµàŽàŽ¿àŽ¯àµ»"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"àŽ€àŽŸàŽ¯àµ (Kedmanee)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-mr/strings.xml b/packages/InputDevices/res/values-mr/strings.xml
index db607e3..4dfdbf0 100644
--- a/packages/InputDevices/res/values-mr/strings.xml
+++ b/packages/InputDevices/res/values-mr/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"à€¬à¥à€²à€Ÿà€°à¥à€¶à€¿à€¯à€š"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"à€®à€à€à¥à€²à€¿à€¯à€š"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"à€à¥à€°à¥à€à€¿à€¯à€š"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"à€¥à€Ÿà€ (à€à¥à€¡à€®à€Ÿà€šà¥)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-ms/strings.xml b/packages/InputDevices/res/values-ms/strings.xml
index 9a00126..6f8f171 100644
--- a/packages/InputDevices/res/values-ms/strings.xml
+++ b/packages/InputDevices/res/values-ms/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"Bahasa Belarus"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"Bahasa Mongolia"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"Bahasa Georgia"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"Thai (Kedmanee)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-nb/strings.xml b/packages/InputDevices/res/values-nb/strings.xml
index fbefd38..8a1d653 100644
--- a/packages/InputDevices/res/values-nb/strings.xml
+++ b/packages/InputDevices/res/values-nb/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"Belarusisk"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"Mongolsk"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"Georgisk"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"Thai (Kedmanee)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-ne/strings.xml b/packages/InputDevices/res/values-ne/strings.xml
index 642fc5c..7a6cbe8 100644
--- a/packages/InputDevices/res/values-ne/strings.xml
+++ b/packages/InputDevices/res/values-ne/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"à€¬à¥à€²à€Ÿà€°à¥à€žà€¿à€¯à€Ÿà€²à¥"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"à€®à€à¥à€à¥à€²à€¿à€¯à€Ÿà€²à¥"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"à€à€°à¥à€à€¿à€¯à€Ÿà€²à¥"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"à€¥à€Ÿà€ (à€à¥à€¡à€®à€Ÿà€šà¥)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-pa/strings.xml b/packages/InputDevices/res/values-pa/strings.xml
index c634223..6725072f 100644
--- a/packages/InputDevices/res/values-pa/strings.xml
+++ b/packages/InputDevices/res/values-pa/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"àš¬à©àš²àšŸàš°à©àšžà©"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"àš®à©°àšà©àš²à©àšàš"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"àšàšŸàš°àšà©àšàš"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"àš¥àšŸàš (àšà©àšŠàš®àššà©)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-pt-rPT/strings.xml b/packages/InputDevices/res/values-pt-rPT/strings.xml
index 3d7c603..2cc6a8c 100644
--- a/packages/InputDevices/res/values-pt-rPT/strings.xml
+++ b/packages/InputDevices/res/values-pt-rPT/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"Bielorrusso"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"Mongol"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"Georgiano"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"Tailandês (Kedmanee)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-ru/strings.xml b/packages/InputDevices/res/values-ru/strings.xml
index fcdd405..d1fbfd6 100644
--- a/packages/InputDevices/res/values-ru/strings.xml
+++ b/packages/InputDevices/res/values-ru/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"белПÑÑÑÑкОй"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"ЌПМгПлÑÑкОй"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"гÑÑзОМÑкОй"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"ТайÑкОй (Kedmanee)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-si/strings.xml b/packages/InputDevices/res/values-si/strings.xml
index 44dfd60..e4e4791 100644
--- a/packages/InputDevices/res/values-si/strings.xml
+++ b/packages/InputDevices/res/values-si/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"à¶¶à·à¶œà¶»à·à·à·à¶ºà·à¶±à·"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"à¶žà·à¶±à·à¶à·à¶œà·à¶ºà·à¶±à·"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"à¶¢à·à¶»à·à¶¢à·à¶ºà·à¶±à·"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"à¶à·à¶ºà· (à¶à·à¶©à·à¶žà¶±à·)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-sk/strings.xml b/packages/InputDevices/res/values-sk/strings.xml
index f02b0be..ffe3c8d 100644
--- a/packages/InputDevices/res/values-sk/strings.xml
+++ b/packages/InputDevices/res/values-sk/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"bieloruské"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"mongolské"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"gruzínske"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"thajÄina (Kedmanee)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-sr/strings.xml b/packages/InputDevices/res/values-sr/strings.xml
index 88978f6..563fe4a 100644
--- a/packages/InputDevices/res/values-sr/strings.xml
+++ b/packages/InputDevices/res/values-sr/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"белПÑÑÑкО"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"ЌПМгПлÑка"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"гÑÑзОÑÑка"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"ÑаÑÑкО (Kedmanee)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-sw/strings.xml b/packages/InputDevices/res/values-sw/strings.xml
index 00979e5..f8cf6c6 100644
--- a/packages/InputDevices/res/values-sw/strings.xml
+++ b/packages/InputDevices/res/values-sw/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"Kibelarusi"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"Kimongolia"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"Kijojia"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"Kithai (Kedmanee)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-te/strings.xml b/packages/InputDevices/res/values-te/strings.xml
index 1fe885d..6ea08d3 100644
--- a/packages/InputDevices/res/values-te/strings.xml
+++ b/packages/InputDevices/res/values-te/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"à°¬à±à°²à°Ÿà°°à°·à±à°¯à°šà±"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"à°®à°à°à±à°²à°¿à°¯à°šà±"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"à°à°Ÿà°°à±à°à°¿à°¯à°šà±"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"థటయౠ(à°à±à°¡à±à°®à°šà±)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-th/strings.xml b/packages/InputDevices/res/values-th/strings.xml
index f1b433b..e3c4a7a 100644
--- a/packages/InputDevices/res/values-th/strings.xml
+++ b/packages/InputDevices/res/values-th/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"à¹àžàž¥àž²àž£àžžàžª"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"àž àž²àž©àž²àž¡àžàžà¹àžà¹àž¥àžµàž¢"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"àž àž²àž©àž²àžàžàž£à¹à¹àžàžµàž¢"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"à¹àžàž¢ (à¹àžàž©àž¡àžàžµ)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-ur/strings.xml b/packages/InputDevices/res/values-ur/strings.xml
index e8f327c..644d364 100644
--- a/packages/InputDevices/res/values-ur/strings.xml
+++ b/packages/InputDevices/res/values-ur/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"ØšÙÙØ§Ø±ÙسÛ"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"Ù
Ùگ؀ÙÛ"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"Ø¬Ø§Ø±Ø¬ÛØ§ØŠÛ"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"ØªÚŸØ§ØŠÛ (Ú©ÛÚÙ
ÛÙÛ)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-uz/strings.xml b/packages/InputDevices/res/values-uz/strings.xml
index 0968d7a..581dea5 100644
--- a/packages/InputDevices/res/values-uz/strings.xml
+++ b/packages/InputDevices/res/values-uz/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"Belarus"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"Mongol"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"Gruzin"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"Tay (Kedmanee)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-zh-rHK/strings.xml b/packages/InputDevices/res/values-zh-rHK/strings.xml
index a0c3c1a..4f761a4 100644
--- a/packages/InputDevices/res/values-zh-rHK/strings.xml
+++ b/packages/InputDevices/res/values-zh-rHK/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"çœä¿çŸ
æ¯æ"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"è倿"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"æ Œé¯åäºæ"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"æ³°æ (Kedmanee)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-zh-rTW/strings.xml b/packages/InputDevices/res/values-zh-rTW/strings.xml
index 1b84841..be56620 100644
--- a/packages/InputDevices/res/values-zh-rTW/strings.xml
+++ b/packages/InputDevices/res/values-zh-rTW/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"çœä¿çŸ
æ¯æ"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"è倿"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"嬿²»äºæ"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"æ³°æ (Kedmanee)"</string>
</resources>
diff --git a/packages/InputDevices/res/values-zu/strings.xml b/packages/InputDevices/res/values-zu/strings.xml
index c4b5d7a..832ce1b 100644
--- a/packages/InputDevices/res/values-zu/strings.xml
+++ b/packages/InputDevices/res/values-zu/strings.xml
@@ -50,6 +50,5 @@
<string name="keyboard_layout_belarusian" msgid="7619281752698687588">"Belarusian"</string>
<string name="keyboard_layout_mongolian" msgid="7678483495823936626">"isi-Mongolian"</string>
<string name="keyboard_layout_georgian" msgid="4596185456863747454">"Georgian"</string>
- <!-- no translation found for keyboard_layout_thai_kedmanee (6637147314580760938) -->
- <skip />
+ <string name="keyboard_layout_thai_kedmanee" msgid="6637147314580760938">"Isi-Thai (Kedmanee)"</string>
</resources>
diff --git a/packages/PackageInstaller/AndroidManifest.xml b/packages/PackageInstaller/AndroidManifest.xml
index bf69d3b..4437475 100644
--- a/packages/PackageInstaller/AndroidManifest.xml
+++ b/packages/PackageInstaller/AndroidManifest.xml
@@ -23,6 +23,7 @@
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_SYSTEM_EXEMPTED" />
+ <uses-permission android:name="android.permission.READ_SYSTEM_GRAMMATICAL_GENDER" />
<uses-permission android:name="com.google.android.permission.INSTALL_WEARABLE_PACKAGES" />
diff --git a/packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_arrow_drop_down.xml b/packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_arrow_drop_down.xml
index 77979f0..8755247 100644
--- a/packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_arrow_drop_down.xml
+++ b/packages/SettingsLib/SettingsTheme/res/drawable-v35/settingslib_arrow_drop_down.xml
@@ -16,11 +16,12 @@
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:viewportWidth="18"
- android:viewportHeight="18"
- android:width="24dp"
- android:height="24dp">
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24"
+ android:viewportHeight="24"
+ android:tint="@color/settingslib_materialColorOnPrimaryContainer">
<path
- android:pathData="M7 10l5 5 5 -5z"
- android:fillColor="@color/settingslib_materialColorOnPrimaryContainer"/>
+ android:fillColor="@android:color/white"
+ android:pathData="M16.59,8.59L12,13.17 7.41,8.59 6,10l6,6 6,-6 -1.41,-1.41z"/>
</vector>
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/SpaDialogWindowTypeActivity.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/SpaDialogWindowTypeActivity.kt
index 46975f5..fb9e98e 100644
--- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/SpaDialogWindowTypeActivity.kt
+++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/SpaDialogWindowTypeActivity.kt
@@ -47,7 +47,7 @@
super.finish()
}
- abstract val dialogWindowType: Int?
+ abstract fun getDialogWindowType(): Int?
@Composable
abstract fun Content()
@@ -67,7 +67,7 @@
}
override fun onCreate(savedInstanceState: Bundle?) {
- dialogWindowType?.let { window?.setType(it) }
+ getDialogWindowType()?.let { window?.setType(it) }
super.onCreate(savedInstanceState)
}
}
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/preference/ListPreference.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/preference/ListPreference.kt
index 1a04bb8..73ee5d1 100644
--- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/preference/ListPreference.kt
+++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/widget/preference/ListPreference.kt
@@ -22,8 +22,10 @@
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
+import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.selection.selectable
import androidx.compose.foundation.selection.selectableGroup
+import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.RadioButton
import androidx.compose.runtime.Composable
import androidx.compose.runtime.IntState
@@ -86,7 +88,7 @@
title = model.title,
onDismissRequest = { dialogOpened = false },
) {
- Column(modifier = Modifier.selectableGroup()) {
+ Column(modifier = Modifier.selectableGroup().verticalScroll(rememberScrollState())) {
for (option in model.options) {
Radio(option, model.selectedId.intValue, model.enabled()) {
dialogOpened = false
diff --git a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/database/ContentChangeFlow.kt b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/database/ContentChangeFlow.kt
index 8f67354..7ea4b18 100644
--- a/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/database/ContentChangeFlow.kt
+++ b/packages/SettingsLib/SpaPrivileged/src/com/android/settingslib/spaprivileged/database/ContentChangeFlow.kt
@@ -27,7 +27,7 @@
import kotlinx.coroutines.flow.flowOn
/** Content change flow for the given [uri]. */
-internal fun Context.contentChangeFlow(
+fun Context.contentChangeFlow(
uri: Uri,
sendInitial: Boolean = true,
): Flow<Unit> = callbackFlow {
diff --git a/packages/SettingsLib/res/values-af/strings.xml b/packages/SettingsLib/res/values-af/strings.xml
index e4be79b..dde6041 100644
--- a/packages/SettingsLib/res/values-af/strings.xml
+++ b/packages/SettingsLib/res/values-af/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$s</xliff:g> oor tot vol"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> – Laaiproses word geoptimeer"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> – Laai tans"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATUS">%2$s</xliff:g> – Volgelaai teen <xliff:g id="TIME">%3$s</xliff:g>"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> – Volgelaai teen <xliff:g id="TIME">%2$s</xliff:g>"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"Volgelaai teen <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"Volgelaai teen <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"Onbekend"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"Laai"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Laai tans vinnig"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"Gelaai"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"Volgelaai"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"Laai wag tans"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"Laai tans"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Laai vinnig"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Beheer deur administrateur"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Beheer deur Beperkte Instellings"</string>
<string name="disabled" msgid="8017887509554714950">"Gedeaktiveer"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"Foon, een staaf."</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"Foon, twee stawe."</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"Foon, drie stawe."</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"Foon vier strepies."</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"Foonsein is vol."</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"Geen data nie."</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"Data, een staaf."</string>
diff --git a/packages/SettingsLib/res/values-am/strings.xml b/packages/SettingsLib/res/values-am/strings.xml
index 368698c..ccd2beb 100644
--- a/packages/SettingsLib/res/values-am/strings.xml
+++ b/packages/SettingsLib/res/values-am/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> - á¥áµáªáá áµášáµ <xliff:g id="TIME">%2$s</xliff:g> ááá«á"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - ááá ááááµ á¥áá²á°á£ á°á°ááá"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> - ááá á ááááµ áá"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - á¥áµáš <xliff:g id="TIME">%3$s</xliff:g> áµášáµ áááá"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - á¥áµáš <xliff:g id="TIME">%2$s</xliff:g> áá ááá áááá"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"á¥áµáš <xliff:g id="TIME">%1$s</xliff:g> áµášáµ áá ááá áááá"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"á¥áµáš <xliff:g id="TIME">%1$s</xliff:g> áµášáµ áááá"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"á«áá³áá"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"ááá á ááááµ áá"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"ááá á áá¥ááµ á ááááµ áá"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"á£áµáª ááá·á"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"áá ááá ááá á°ááá·á"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"ááá ááááµ á ááá áá"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"ááá á ááááµ áá"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"áá£á ááá«"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"á á áµá°á³á³áª áá¥á¥á ášá°á°ášáá áµ"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"á á°áá°á á
áá¥á áá¥á¥á ášáá°ášáá áµ"</string>
<string name="disabled" msgid="8017887509554714950">"áŠááá"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"ášáµáá á ááµ á áá"</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"ášáµáá áááµ á áá"</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"ášáµáá áŠáµáµ á áá"</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"áµáá á á«áµ ááµáá®áœá¢"</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"ášáµáá á ááá«áœ áá ááá¢"</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"ááá ááᥠášááá¢"</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"ášááᥠá ááµ á áá"</string>
diff --git a/packages/SettingsLib/res/values-ar/strings.xml b/packages/SettingsLib/res/values-ar/strings.xml
index 41b51a5..40e836e 100644
--- a/packages/SettingsLib/res/values-ar/strings.xml
+++ b/packages/SettingsLib/res/values-ar/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> - ÙØªØšÙÙÙ <xliff:g id="TIME">%2$s</xliff:g> ØØªÙ Ø§ÙØªÙ
ا٠؎ØÙ Ø§ÙØšØ·Ø§Ø±ÙØ©."</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - تÙ
ØªØØ³ÙÙ Ø§ÙØŽØÙ"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"â«<xliff:g id="LEVEL">%1$s</xliff:g>: Ø¬Ø§Ø±Ù Ø§ÙØŽØÙ"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"â«<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - سÙÙØªÙ
Ù Ø§ÙØŽØÙ ØšØÙÙÙ <xliff:g id="TIME">%3$s</xliff:g>"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"â«<xliff:g id="LEVEL">%1$s</xliff:g> - سÙÙØªÙ
Ù Ø§ÙØŽØÙ ØšØÙÙÙ <xliff:g id="TIME">%2$s</xliff:g>"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"سÙÙØªÙ
Ù Ø§ÙØŽØÙ ØšØÙÙÙ <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"سÙÙØªÙ
Ù Ø§ÙØŽØÙ ØšØÙÙÙ <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"ØºÙØ± Ù
عرÙÙ"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"Ø¬Ø§Ø±Ù Ø§ÙØŽØÙ"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Ø¬Ø§Ø±Ù Ø§ÙØŽØÙ Ø³Ø±ÙØ¹Ùا"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"Ù
ØŽØÙÙØ©"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"Ø§ÙØšØ·Ø§Ø±ÙØ© Ù
ØŽØÙÙØ© ؚاÙÙØ§Ù
Ù."</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"Ø§ÙØŽØÙ Ù
عÙÙÙÙ"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"Ø¬Ø§Ø±Ù Ø§ÙØŽØÙ"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Ø¬Ø§Ø±Ù Ø§ÙØŽØÙ Ø§ÙØ³Ø±Ùع"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"إعدادات ÙØªØÙÙ
ÙÙÙØ§ اÙÙ
؎رÙ"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"ÙØªØÙÙÙ
ÙÙ٠إعداد Ù
ØØžÙر"</string>
<string name="disabled" msgid="8017887509554714950">"ØºÙØ± Ù
ÙØ¹ÙÙ"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"إ؎ارة اÙÙØ§ØªÙ تتÙÙÙ Ù
Ù ØŽØ±ÙØ· ÙØ§ØØ¯."</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"إ؎ارة اÙÙØ§ØªÙ تتÙÙÙ Ù
Ù ØŽØ±ÙØ·ÙÙ."</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"إ؎ارة اÙÙØ§ØªÙ تتÙÙÙ Ù
Ù Ø«ÙØ§Ø«Ø© أ؎رطة."</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"أرؚعة أ؎رطة Ù٠إ؎ارة ØšÙØ§Ùات اÙÙØ§ØªÙ"</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"إ؎ارة اÙÙØ§ØªÙ ÙØ§Ù
ÙØ©."</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"ÙØ§ تتÙÙØ± ØšÙØ§Ùات."</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"إ؎ارة Ø§ÙØšÙØ§ÙØ§Øª تتÙÙÙ Ù
Ù ØŽØ±ÙØ· ÙØ§ØØ¯."</string>
diff --git a/packages/SettingsLib/res/values-as/strings.xml b/packages/SettingsLib/res/values-as/strings.xml
index b5ea37f..0ec52d9 100644
--- a/packages/SettingsLib/res/values-as/strings.xml
+++ b/packages/SettingsLib/res/values-as/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"àŠžàŠ®à§àŠªà§à§°à§àŠ£ àŠ¹’àŠ¬àŠ²à§ <xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> àŠ¬àŠŸàŠà§ àŠàŠà§"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - àŠàŠŸà§°à§àŠàŠ¿àŠ àŠ
àŠªà§àŠàŠ¿àŠ®àŠŸàŠàŠ àŠà§°àŠŸ àŠ¹à§àŠà§"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> â àŠàŠŸà§°à§àŠ àŠ¹à§ àŠàŠà§"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - <xliff:g id="TIME">%3$s</xliff:g>à§° àŠàŠ¿àŠ€à§°àŠ€ àŠžàŠ®à§àŠªà§à§°à§àŠ£ àŠ¹’àŠ¬"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g>à§° àŠàŠ¿àŠ€à§°àŠ€ àŠžàŠ®à§àŠªà§à§°à§àŠ£à§°à§àŠªà§ àŠàŠŸà§°à§àŠ àŠ¹’àŠ¬"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"<xliff:g id="TIME">%1$s</xliff:g>à§° àŠàŠ¿àŠ€à§°àŠ€ àŠžàŠ®à§àŠªà§à§°à§àŠ£à§°à§àŠªà§ àŠàŠŸà§°à§àŠ àŠ¹’àŠ¬"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"<xliff:g id="TIME">%1$s</xliff:g>à§° àŠàŠ¿àŠ€à§°àŠ€ àŠžàŠ®à§àŠªà§à§°à§àŠ£ àŠ¹’àŠ¬"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"àŠ
àŠà§àŠàŠŸàŠ€"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"àŠàŠŸà§°à§àŠ àŠà§°àŠ¿ àŠ¥àŠàŠŸ àŠ¹à§àŠà§"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"àŠŠà§à§°à§àŠ€àŠ€àŠŸà§°à§ àŠàŠŸà§°à§àŠ àŠ¹à§àŠà§"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"àŠàŠŸà§°à§àŠ àŠ¹’àŠ²"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"àŠžàŠ®à§àŠªà§à§°à§àŠ£ àŠàŠŸà§°à§àŠ àŠ¹à§àŠà§"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"àŠàŠŸà§°à§àŠàŠ¿àŠ àŠžà§àŠ¥àŠàŠ¿àŠ€ à§°àŠàŠŸ àŠ¹à§àŠà§"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"àŠàŠŸà§°à§àŠ àŠ¹à§ àŠàŠà§"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"àŠŠà§à§°à§àŠ€ àŠàŠŸà§°à§àŠàŠ¿àŠ"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"àŠàŠ¡àŠ®àŠ¿àŠšà§° àŠŠà§àŠ¬àŠŸà§°àŠŸ àŠšàŠ¿àŠ¯àŠŒàŠšà§àŠ€à§à§°àŠ¿àŠ€"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"àŠªà§à§°àŠ€àŠ¿àŠ¬àŠšà§àŠ§àŠ¿àŠ€ àŠà§àŠàŠ¿àŠà§° àŠŠà§àŠ¬àŠŸà§°àŠŸ àŠšàŠ¿àŠ¯àŠŒàŠšà§àŠ€à§à§°àŠ¿àŠ€"</string>
<string name="disabled" msgid="8017887509554714950">"àŠšàŠ¿àŠ·à§àŠà§à§°àŠ¿àŠ¯àŠŒ"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"àŠ«\'àŠš àŠàŠ¿àŠàŠšà§àŠ²à§° àŠàŠ¡àŠŸàŠ² àŠŠàŠ£à§àŠ¡à¥€"</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"àŠ«\'àŠš àŠàŠ¿àŠàŠšà§àŠ²à§° àŠŠà§àŠ¡àŠŸàŠ² àŠŠàŠ£à§àŠ¡à¥€"</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"àŠ«\'àŠšà§° àŠàŠ¿àŠàŠšà§àŠ²à§° àŠ€àŠ¿àŠšàŠ¿àŠ¡àŠŸàŠ² àŠŠàŠ£à§àŠ¡ àŠàŠà§à¥€"</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"àŠ«’àŠšàŠ€ àŠàŠŸà§°àŠ¿àŠ¡àŠŸàŠ² àŠŠàŠ£à§àŠ¡à¥€"</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"àŠ«\'àŠšà§° àŠàŠ¿àŠàŠšà§àв àŠªà§à§°àŠŸ àŠàŠà§à§·"</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"àŠà§àŠšà§ àŠ¡à§àŠàŠŸ àŠšàŠŸàŠà¥€"</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"àŠ¡à§àŠàŠŸ àŠàŠ¿àŠàŠšà§àŠ²à§° àŠàŠ¡àŠŸàŠ² àŠŠàŠ£à§àŠ¡à¥€"</string>
diff --git a/packages/SettingsLib/res/values-az/strings.xml b/packages/SettingsLib/res/values-az/strings.xml
index 9324252..e97f999 100644
--- a/packages/SettingsLib/res/values-az/strings.xml
+++ b/packages/SettingsLib/res/values-az/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> - tam Åarj edilÉnÉdÉk <xliff:g id="TIME">%2$s</xliff:g> qalıb"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - Åarj optimallaÅdırılıb"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> - Åarj edilir"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - <xliff:g id="TIME">%3$s</xliff:g> radÉlÉrinÉ qÉdÉr tam dolacaq"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> radÉlÉrinÉ qÉdÉr tam dolacaq"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"<xliff:g id="TIME">%1$s</xliff:g> radÉlÉrinÉ qÉdÉr tam dolacaq"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"<xliff:g id="TIME">%1$s</xliff:g> radÉlÉrinÉ qÉdÉr tam dolacaq"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"NamÉlum"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"Enerji doldurma"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"SürÉtlÉ doldurulur"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"Åarj edilib"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"Tam Åarj edilib"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"Åarj gözlÉdilir"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"Åarj"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"SürÉtli Åarj"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Admin tÉrÉfindÉn nÉzarÉt olunur"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"MÉhdudlaÅdırılmıŠAyar ilÉ nÉzarÉt edilir"</string>
<string name="disabled" msgid="8017887509554714950">"Deaktiv"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"ÅÉbÉkÉ bir xÉtdir."</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"ÅÉbÉkÉ iki xÉtdir."</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"ÅÉbÉkÉ üç xÉtdir."</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"Telefonda dörd zolaq."</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"Tam ÅÉbÉkÉ."</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"MÉlumat yoxdur."</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"Data bir xÉtdir."</string>
diff --git a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
index 02e5f69..22aa147 100644
--- a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
+++ b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$s</xliff:g> do kraja punjenja"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> – punjenje je optimizovano"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> – Punjenje"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATUS">%2$s</xliff:g> – Potpuno napunjeno do <xliff:g id="TIME">%3$s</xliff:g>"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> – Potpuno napunjeno do <xliff:g id="TIME">%2$s</xliff:g>"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"Potpuno napunjeno do <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"Napunjeno do <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"Nepoznato"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"Puni se"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Brzo se puni"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"Napunjeno"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"Napunjeno do kraja"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"Punjenje je na Äekanju"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"Punjenje"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Brzo punjenje"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Kontroliše administrator"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Kontrolišu ograniÄena podešavanja"</string>
<string name="disabled" msgid="8017887509554714950">"OnemoguÄeno"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"Signal telefona ima jednu crtu."</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"Signal telefona od dve crte."</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"Signal telefona od tri crte."</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"Telefon ima Äetiri crte."</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"Signal telefona je pun."</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"Nema podataka."</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"Signal za podatke ima jednu crtu."</string>
diff --git a/packages/SettingsLib/res/values-ca/strings.xml b/packages/SettingsLib/res/values-ca/strings.xml
index 8a6c26c..9ea570f 100644
--- a/packages/SettingsLib/res/values-ca/strings.xml
+++ b/packages/SettingsLib/res/values-ca/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g>: <xliff:g id="TIME">%2$s</xliff:g> per completar la càrrega"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g>: càrrega optimitzada"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g>: s\'està carregant"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - Càrrega completa a les <xliff:g id="TIME">%3$s</xliff:g>"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - Càrrega completa a les <xliff:g id="TIME">%2$s</xliff:g>"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"Càrrega completa a les <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"Càrrega completa a les <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"Desconegut"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"S\'està carregant"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Càrrega ràpida"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"Carregada"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"Totalment carregada"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"Càrrega en espera"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"Càrrega"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Càrrega ràpida"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Controlat per l\'administrador"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Controlat per l\'opció de configuració restringida"</string>
<string name="disabled" msgid="8017887509554714950">"Desactivat"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"Senyal de telèfon: una barra"</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"Senyal de telèfon: dues barres."</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"Senyal de telèfon: tres barres."</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"Telèfon amb quatre barres."</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"Senyal de telèfon: complet."</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"Senyal de dades: no n\'hi ha"</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"Senyal de dades: una barra."</string>
diff --git a/packages/SettingsLib/res/values-cs/strings.xml b/packages/SettingsLib/res/values-cs/strings.xml
index dc6d2d0..b204662 100644
--- a/packages/SettingsLib/res/values-cs/strings.xml
+++ b/packages/SettingsLib/res/values-cs/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$s</xliff:g> do úplného nabití"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> – optimalizované nabíjení"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> – Nabíjení"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATUS">%2$s</xliff:g> – Úplné nabití: <xliff:g id="TIME">%3$s</xliff:g>"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> – Úplné nabití: <xliff:g id="TIME">%2$s</xliff:g>"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"Úplné nabití: <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"Úplné nabití: <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"Neznámé"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"Nabíjí se"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Rychlé nabíjení"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"Nabito"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"PlnÄ nabito"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"Nabíjení pozastaveno"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"Nabíjení"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Rychlé nabíjení"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Spravováno administrátorem"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Spravováno omezeným nastavením"</string>
<string name="disabled" msgid="8017887509554714950">"Deaktivováno"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"Jedna Äárka signálu telefonní sítÄ."</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"DvÄ Äárky signálu telefonní sítÄ."</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"TÅi Äárky signálu telefonní sítÄ."</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"Telefon ÄtyÅi Äárky."</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"Plný signál telefonní sítÄ."</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"Åœádné datové pÅipojení."</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"Jedna Äárka signálu datové sítÄ."</string>
diff --git a/packages/SettingsLib/res/values-el/strings.xml b/packages/SettingsLib/res/values-el/strings.xml
index e74e5c3..ade0b33 100644
--- a/packages/SettingsLib/res/values-el/strings.xml
+++ b/packages/SettingsLib/res/values-el/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> - ΑπομÎνουν <xliff:g id="TIME">%2$s</xliff:g> για πλήρη φÏρτιση"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - Η φÏρτιση βελτιστοποιήθηκε"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> â ΦÏρτιση"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - Πλήρης φÏρτιση στις <xliff:g id="TIME">%3$s</xliff:g>"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - Πλήρης φÏρτιση στις <xliff:g id="TIME">%2$s</xliff:g>"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"Πλήρης φÏρτιση στις <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"Πλήρης φÏρτιση στις <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"Îγνωστο"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"ΦÏρτιση"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Ταχεία φÏρτιση"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"ΦορτισμÎνη"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"Πλήρως φορτισμÎνο"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"Η φÏρτιση τÎθηκε σε αναμονή"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"ΦÏρτιση"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Γρήγορη φÏρτιση"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"ΕλÎγχονται απÏ το διαχειριστή"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"ΕλÎγχεται απÏ τη ΡÏθμιση με περιορισμÏ"</string>
<string name="disabled" msgid="8017887509554714950">"ΑπενεργοποιημÎνο"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"Μία γραμμή τηλεφÏνου."</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"ΔÏο γραμμÎς τηλεφÏνου."</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"Τρεις γραμμÎς μπαταρίας."</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"ΤÎσσερις γραμμÎς στο τηλÎφωνο."</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"Πλήρες σήμα τηλεφÏνου."</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"Δεν υπάρχουν δεδομÎνα."</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"Μία γραμμή δεδομÎνων."</string>
diff --git a/packages/SettingsLib/res/values-en-rAU/strings.xml b/packages/SettingsLib/res/values-en-rAU/strings.xml
index 4b4154a..227f2eb 100644
--- a/packages/SettingsLib/res/values-en-rAU/strings.xml
+++ b/packages/SettingsLib/res/values-en-rAU/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$s</xliff:g> left until full"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - Charging optimised"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> – charging"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATUS">%2$s</xliff:g> – Full by <xliff:g id="TIME">%3$s</xliff:g>"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - Fully charged by <xliff:g id="TIME">%2$s</xliff:g>"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"Fully charged by <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"Full by <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"Unknown"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"Charging"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Charging rapidly"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"Charged"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"Fully charged"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"Charging on hold"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"Charging"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Fast charging"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Controlled by admin"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Controlled by restricted setting"</string>
<string name="disabled" msgid="8017887509554714950">"Disabled"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"Phone one bar."</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"Phone two bars."</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"Phone three bars."</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"Phone four bars."</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"Phone signal full."</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"No data."</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"Data one bar."</string>
diff --git a/packages/SettingsLib/res/values-en-rGB/strings.xml b/packages/SettingsLib/res/values-en-rGB/strings.xml
index 4b4154a..227f2eb 100644
--- a/packages/SettingsLib/res/values-en-rGB/strings.xml
+++ b/packages/SettingsLib/res/values-en-rGB/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$s</xliff:g> left until full"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - Charging optimised"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> – charging"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATUS">%2$s</xliff:g> – Full by <xliff:g id="TIME">%3$s</xliff:g>"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - Fully charged by <xliff:g id="TIME">%2$s</xliff:g>"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"Fully charged by <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"Full by <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"Unknown"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"Charging"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Charging rapidly"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"Charged"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"Fully charged"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"Charging on hold"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"Charging"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Fast charging"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Controlled by admin"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Controlled by restricted setting"</string>
<string name="disabled" msgid="8017887509554714950">"Disabled"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"Phone one bar."</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"Phone two bars."</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"Phone three bars."</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"Phone four bars."</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"Phone signal full."</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"No data."</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"Data one bar."</string>
diff --git a/packages/SettingsLib/res/values-en-rIN/strings.xml b/packages/SettingsLib/res/values-en-rIN/strings.xml
index 4b4154a..227f2eb 100644
--- a/packages/SettingsLib/res/values-en-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-en-rIN/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$s</xliff:g> left until full"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - Charging optimised"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> – charging"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATUS">%2$s</xliff:g> – Full by <xliff:g id="TIME">%3$s</xliff:g>"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - Fully charged by <xliff:g id="TIME">%2$s</xliff:g>"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"Fully charged by <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"Full by <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"Unknown"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"Charging"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Charging rapidly"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"Charged"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"Fully charged"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"Charging on hold"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"Charging"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Fast charging"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Controlled by admin"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Controlled by restricted setting"</string>
<string name="disabled" msgid="8017887509554714950">"Disabled"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"Phone one bar."</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"Phone two bars."</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"Phone three bars."</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"Phone four bars."</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"Phone signal full."</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"No data."</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"Data one bar."</string>
diff --git a/packages/SettingsLib/res/values-fa/strings.xml b/packages/SettingsLib/res/values-fa/strings.xml
index f9bab28..1c32d89 100644
--- a/packages/SettingsLib/res/values-fa/strings.xml
+++ b/packages/SettingsLib/res/values-fa/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> تا ØŽØ§Ø±Ú Ú©Ø§Ù
٠ؚاÙÛ Ù
Ø§ÙØ¯Ù است"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - ØŽØ§Ø±Ú ØšÙÛÙ٠؎د٠است"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> - Ø¯Ø±ØØ§Ù ؎ارÚ"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"â«<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - تا <xliff:g id="TIME">%3$s</xliff:g> کاÙ
Ù Ù
ÛØŽÙد"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"â«<xliff:g id="LEVEL">%1$s</xliff:g> - ØŽØ§Ø±Ú ØªØ§ <xliff:g id="TIME">%2$s</xliff:g> کاÙ
Ù Ù
ÛØŽÙد"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"ØŽØ§Ø±Ú ØªØ§ <xliff:g id="TIME">%1$s</xliff:g> کاÙ
Ù Ù
ÛØŽÙد"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"تا <xliff:g id="TIME">%1$s</xliff:g> کاÙ
Ù Ù
ÛØŽÙد"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"ÙØ§ØŽÙاس"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"در ØØ§Ù ØŽØ§Ø±Ú ØŽØ¯Ù"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Ø¯Ø±ØØ§Ù ØŽØ§Ø±Ú ØŽØ¯Ù Ø³Ø±ÛØ¹"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"ØŽØ§Ø±Ú Ú©Ø§Ù
٠؎د"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"کاÙ
ÙØ§Ù ØŽØ§Ø±Ú ØŽØ¯Ù Ø§Ø³Øª"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"ØŽØ§Ø±Ú Ù
ÙÙØªØ§Ù Ù
تÙÙ٠؎د٠است"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"Ø¯Ø±ØØ§Ù ØŽØ§Ø±Ú ØŽØ¯Ù"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Ø¯Ø±ØØ§Ù ØŽØ§Ø±Ú Ø³Ø±ÛØ¹"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"ØªÙØ³Ø· سرٟرست Ø³ÛØ³ØªÙ
Ú©ÙØªØ±Ù Ù
ÛØŽÙد"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"ؚا ØªÙØžÛÙ
«ØØ§Ùت Ù
ØØ¯Ùد» Ú©ÙØªØ±Ù Ù
ÛØŽÙد"</string>
<string name="disabled" msgid="8017887509554714950">"ØºÛØ± ÙØ¹Ø§Ù ؎د"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"ÛÚ© ÙÙØ§Ø± ØšØ±Ø§Û ØªÙÙÙ."</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"د٠ÙÙØ§Ø± ØšØ±Ø§Û ØªÙÙÙ."</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"س٠ÙÙØ§Ø± ØšØ±Ø§Û ØªÙÙÙ."</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"سÛÚ¯ÙØ§Ù تÙÙ٠ؚا ÚÙØ§Ø± خط."</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"ÙØ¯Ø±Øª اÙ
ÙØ§Ø¬ تÙÙÙ ÙÙ
را٠کاÙ
٠است."</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"Ø¯Ø§Ø¯ÙØ§Û ÙØ¬Ùد ÙØ¯Ø§Ø±Ø¯."</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"ÛÚ© ÙÙØ§Ø± ØšØ±Ø§Û Ø¯Ø§Ø¯Ù."</string>
diff --git a/packages/SettingsLib/res/values-fr-rCA/strings.xml b/packages/SettingsLib/res/values-fr-rCA/strings.xml
index bfd7d9c..e059091 100644
--- a/packages/SettingsLib/res/values-fr-rCA/strings.xml
+++ b/packages/SettingsLib/res/values-fr-rCA/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> (<xliff:g id="TIME">%2$s</xliff:g> jusqu\'à la recharge complète)"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - Recharge optimisée"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> – Recharge en cours…"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATUS">%2$s</xliff:g> – Recharge complète d\'ici <xliff:g id="TIME">%3$s</xliff:g>"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> – Recharge complète d\'ici <xliff:g id="TIME">%2$s</xliff:g>"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"Recharge complète d\'ici <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"Recharge complète d\'ici <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"Inconnu"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"Charge en cours…"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Recharge rapide"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"Chargée"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"Complètement rechargée"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"Recharge en pause"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"Recharge"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Recharge rapide"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Contrôlé par l\'administrateur"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Contrôlé par les paramètres restreints"</string>
<string name="disabled" msgid="8017887509554714950">"Désactivée"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"Signal : faible"</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"Signal : moyen"</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"Signal : bon"</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"Téléphone : quatre barres"</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"Signal excellent"</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"Aucun signal"</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"Signal faible"</string>
diff --git a/packages/SettingsLib/res/values-fr/strings.xml b/packages/SettingsLib/res/values-fr/strings.xml
index 846cc99..11de54b 100644
--- a/packages/SettingsLib/res/values-fr/strings.xml
+++ b/packages/SettingsLib/res/values-fr/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> - chargée à 100 %% dans <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - Recharge optimisée"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> - En charge"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - Complètement chargé dans <xliff:g id="TIME">%3$s</xliff:g>"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - Complètement chargé dans <xliff:g id="TIME">%2$s</xliff:g>"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"Complètement chargé dans <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"Complètement chargé dans <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"Inconnu"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"Batterie en charge"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Charge rapide"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"Chargée"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"Complètement chargée"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"Recharge en pause"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"Recharge"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Recharge rapide"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Contrôlé par l\'administrateur"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Contrôlé par les paramètres restreints"</string>
<string name="disabled" msgid="8017887509554714950">"Désactivée"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"Signal : faible"</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"Signal : moyen"</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"Signal : bon"</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"Quatre barres sur le téléphone."</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"Signal excellent"</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"Aucun signal"</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"Signal faible"</string>
diff --git a/packages/SettingsLib/res/values-hu/strings.xml b/packages/SettingsLib/res/values-hu/strings.xml
index 7133353..afb9c01 100644
--- a/packages/SettingsLib/res/values-hu/strings.xml
+++ b/packages/SettingsLib/res/values-hu/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$s</xliff:g> a teljes töltöttségig"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> – Optimalizált töltés"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> – Töltés…"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATUS">%2$s</xliff:g> – Teljes feltöltés eddig: <xliff:g id="TIME">%3$s</xliff:g>"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> – Teljes feltöltés eddig: <xliff:g id="TIME">%2$s</xliff:g>"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"Teljes feltöltés eddig: <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"Teljes feltöltés eddig: <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"Ismeretlen"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"Töltés"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Gyorstöltés"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"Feltöltve"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"Teljesen feltöltve"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"A töltés szünetel"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"Töltés…"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Gyors töltés…"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Rendszergazda által irányítva"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Korlátozott beállítás vezérli"</string>
<string name="disabled" msgid="8017887509554714950">"Letiltva"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"Telefon egy sáv."</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"Telefon két sáv."</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"Telefon három sáv."</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"Telefon négy egységnyi térerÅvel."</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"Telefonjel megtelt."</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"Nincsenek adatok."</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"Adat egy sáv."</string>
diff --git a/packages/SettingsLib/res/values-in/strings.xml b/packages/SettingsLib/res/values-in/strings.xml
index 7ee46cf..843cc94 100644
--- a/packages/SettingsLib/res/values-in/strings.xml
+++ b/packages/SettingsLib/res/values-in/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> lagi sampai penuh"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - Pengisian daya dioptimalkan"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> - Mengisi daya"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - Penuh dalam <xliff:g id="TIME">%3$s</xliff:g>"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - Baterai terisi penuh dalam <xliff:g id="TIME">%2$s</xliff:g>"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"Baterai terisi penuh dalam <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"Penuh dalam <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"Tidak diketahui"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"Mengisi daya"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Mengisi daya cepat"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"Terisi"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"Baterai Terisi Penuh"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"Pengisian daya dihentikan sementara"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"Pengisian daya"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Pengisian daya cepat"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Dikontrol oleh admin"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Dikontrol oleh Setelan Terbatas"</string>
<string name="disabled" msgid="8017887509554714950">"Dinonaktifkan"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"Ponsel satu batang."</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"Ponsel dua batang."</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"Ponsel tiga batang."</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"Telepon empat batang."</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"Sinyal ponsel penuh."</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"Tidak ada data yang diterima."</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"Data satu batang."</string>
diff --git a/packages/SettingsLib/res/values-is/strings.xml b/packages/SettingsLib/res/values-is/strings.xml
index 51d1803..ff0c621 100644
--- a/packages/SettingsLib/res/values-is/strings.xml
+++ b/packages/SettingsLib/res/values-is/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> fram að fullri hleðslu"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> – Hleðsla fínstillt"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> â Í hleðslu"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - Fullt kl. <xliff:g id="TIME">%3$s</xliff:g>"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - Fullhlaðið kl. <xliff:g id="TIME">%2$s</xliff:g>"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"Fullhlaðið kl. <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"Fullt kl. <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"Óþekkt"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"Í hleðslu"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Hröð hleðsla"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"Fullhlaðin"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"Full hleðsla"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"Hleðsla í bið"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"Í hleðslu"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Hraðhleðsla"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Stjórnað af kerfisstjóra"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Stýrt af takmarkaði stillingu"</string>
<string name="disabled" msgid="8017887509554714950">"Óvirkt"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"Styrkur símasambands er eitt strik."</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"Styrkur símasambands er tvö strik."</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"Styrkur símasambands er þrjú strik."</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"Sími fjórar stikur."</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"Fullur styrkur símasambands."</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"Engin gögn."</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"Sendistyrkur gagnatengingar er eitt strik."</string>
diff --git a/packages/SettingsLib/res/values-it/strings.xml b/packages/SettingsLib/res/values-it/strings.xml
index e8c5cf5..5f680f4 100644
--- a/packages/SettingsLib/res/values-it/strings.xml
+++ b/packages/SettingsLib/res/values-it/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> alla ricarica completa"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - Ricarica ottimizzata"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> â In carica"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - Ricarica completa entro <xliff:g id="TIME">%3$s</xliff:g>"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - Batteria completamente carica entro <xliff:g id="TIME">%2$s</xliff:g>"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"Batteria completamente carica entro <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"Ricarica completa entro <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"Sconosciuta"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"In carica"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Ricarica veloce"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"Carica"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"Batteria completamente carica"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"Ricarica in sospeso"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"In carica"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Ricarica rapida"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Gestita dall\'amministratore"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Gestita tramite impostazioni con restrizioni"</string>
<string name="disabled" msgid="8017887509554714950">"Disattivato"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"Telefono: una barra."</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"Telefono: due barre."</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"Telefono: tre barre."</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"Telefono con quattro barre."</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"Massimo segnale telefonico."</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"Nessun dato."</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"Dati: una barra."</string>
diff --git a/packages/SettingsLib/res/values-iw/strings.xml b/packages/SettingsLib/res/values-iw/strings.xml
index 72a025c..526fae5 100644
--- a/packages/SettingsLib/res/values-iw/strings.xml
+++ b/packages/SettingsLib/res/values-iw/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> – ×××× ×× ×תך ×××¢×× × ××××: <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> – ×××¢×× × ×¢××š× ×××€×××××׊××"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"â«<xliff:g id="LEVEL">%1$s</xliff:g> – ×××¢×× ×"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"â«<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATUS">%2$s</xliff:g> – ××¢×× × ×××× ×¢× <xliff:g id="TIME">%3$s</xliff:g>"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"â«<xliff:g id="LEVEL">%1$s</xliff:g> – ××¢×× × ×××× ×¢× <xliff:g id="TIME">%2$s</xliff:g>"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"××¢×× × ×××× ×¢× <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"××¢×× × ×××× ×¢× <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"×× ××××¢"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"×××¢×× ×"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"×ס×××× × ××¢× ×ª ××ך"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"×ס×××× ××¢×× ×"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"××¢×× × ××××××"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"×××¢×× × ××ש×ת×"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"××¢×× ×"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"××¢×× × ×××ך×"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"× ××Š× ×ש×××ת ×× ×× ×עך×ת"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"×ש×××× ×©× ××××š× ×××××ת"</string>
<string name="disabled" msgid="8017887509554714950">"××ש×ת"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"׀ס ××× ×©× ×××€××."</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"×©× × ×€×¡×× ×©× ×××€××."</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"ש×××©× ×€×¡×× ×©× ×××€××."</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"×ך××¢× ×€×¡×× ××××€××."</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"××ת ××××€×× ×××."</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"××× × ×ª×× ××."</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"׀ס ××× ×©× × ×ª×× ××."</string>
diff --git a/packages/SettingsLib/res/values-ja/strings.xml b/packages/SettingsLib/res/values-ja/strings.xml
index 80858ab..60d936c 100644
--- a/packages/SettingsLib/res/values-ja/strings.xml
+++ b/packages/SettingsLib/res/values-ja/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> - å®äºãŸã§ããš <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - å
é»ãæé©åãããŠããŸã"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> - å
é»äž"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - <xliff:g id="TIME">%3$s</xliff:g>ãŸã§ã«å®äº"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g>ãŸã§ã«å
é»å®äº"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"<xliff:g id="TIME">%1$s</xliff:g>ãŸã§ã«å
é»å®äº"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"<xliff:g id="TIME">%1$s</xliff:g>ãŸã§ã«å®äº"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"äžæ"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"å
é»äž"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"æ¥éå
é»äž"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"å
é»ãå®äºããŸãã"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"å
é»å®äº"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"å
é»ãäžæåæ¢ããŠããŸã"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"å
é»äž"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"æ¥éå
é»äž"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"管çè
ã«ãã管çãããŠããŸã"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"å¶éä»ãèšå®ã«ãã£ãŠç®¡çãããŠããŸã"</string>
<string name="disabled" msgid="8017887509554714950">"ç¡å¹"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"黿³¢ç¶æ
:ã¬ãã«1"</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"黿³¢ç¶æ
:ã¬ãã«2"</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"黿³¢ç¶æ
:ã¬ãã«3"</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"ã¹ããŒããã©ã³ã®ã¢ã³ãã㯠4 æ¬ã§ãã"</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"黿³¢ç¶æ
:ãã«"</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"ããŒã¿ä¿¡å·:ãªã"</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"ããŒã¿ä¿¡å·:ã¬ãã«1"</string>
diff --git a/packages/SettingsLib/res/values-ka/strings.xml b/packages/SettingsLib/res/values-ka/strings.xml
index c422b73..ef0b524 100644
--- a/packages/SettingsLib/res/values-ka/strings.xml
+++ b/packages/SettingsLib/res/values-ka/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> — á¡á á£á ááá¢ááááááá ááá á©áááááá <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - ááá¢áááá ááá¢áááááá ááá£ááá"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> – áá¢ááááá"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - á¡á á£ááá ááá¢áááá¡ áá á: <xliff:g id="TIME">%3$s</xliff:g>"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - á¡á á£ááá ááá¢áááá¡ áá á: <xliff:g id="TIME">%2$s</xliff:g>"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"á¡á á£ááá ááá¢áááá¡ áá á: <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"á¡á á£ááá ááá¢áááá¡ áá á: <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"á£áªáááá"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"áá¢ááááá"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"á¡á¬á áá€áá áá¢ááááá"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"ááá¢áááááá"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"ááááááá ááá¢ááááá"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"ááá¢áááá ášáá©áá ááá£ááá"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"áá¢ááááá"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"á¡á¬á áá€á ááá¢ááá"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"áááá áááá ááááááá¡á¢á áá¢áá áá¡ áááá "</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"áááá¢á áááááá ášáááŠá£áá£áá á áááááá¡ ááá áááá¢á áá"</string>
<string name="disabled" msgid="8017887509554714950">"ááááá áá£áá"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"á¢áááá€áááá¡ á¡áááááá áá á áááááá."</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"á¢áááá€áááá¡ á¡áááááá áá áááááá."</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"á¢áááá€áááá¡ á¡áááááá á¡áá áááááá."</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"á¢áááá€áááá¡ á¡áááááá ááá® áááááá."</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"á¢áááá€áááá¡ á¡áááááá á¡á á£ááá."</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"áááááªááááá áá áá áá¡."</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"ááá ááŠá ááááá."</string>
diff --git a/packages/SettingsLib/res/values-km/strings.xml b/packages/SettingsLib/res/values-km/strings.xml
index 0d41022..9a2b89b 100644
--- a/packages/SettingsLib/res/values-km/strings.xml
+++ b/packages/SettingsLib/res/values-km/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> - áá
ááá <xliff:g id="TIME">%2$s</xliff:g> áááááŸáááá"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - áá¶ááááááŸáááááá·ááááá¶ááááá¶ááá¶á"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> - áááá»ááá¶áááá"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - ááááá
áááá <xliff:g id="TIME">%3$s</xliff:g>"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - áá¶ááááááááá
áááá <xliff:g id="TIME">%2$s</xliff:g>"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"áá¶ááááááááá
áááá <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"ááááá
áááá <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"áá·áâáááá¶áá"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"áááá»ááá¶áâááá"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"áááá»ááá¶ááááááá¶ááá¶áááá áá"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"áá¶áâáá¶áâáááááá"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"áá¶ááá¶áâáááááá"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"áááá»áááá¢á¶ááá¶ááá¶áááá"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"áááá»ááá¶áááá"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"áá¶ááá¶áááááá áá"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"ááááááááááááá¢áááááááááááá"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"áááááááááááááá¶ááááááááááá¶ááá¹áááááá¹á"</string>
<string name="disabled" msgid="8017887509554714950">"áá·á"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"áááá¶âááŒááááááâááœáâáá¶áá"</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"áááá¶âááŒááááááâáážáâáá¶áá"</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"áááá¶âááŒááááááâáážâáá¶áâá"</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"ááœááá¶áááŸááŒáááááá"</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"áááá¶âááŒááááááâáááá"</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"áááá¶áâáá·ááááááâá"</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"áá·ááááááâááœáââáá¶áá"</string>
diff --git a/packages/SettingsLib/res/values-kn/strings.xml b/packages/SettingsLib/res/values-kn/strings.xml
index f28712f..338eb7a 100644
--- a/packages/SettingsLib/res/values-kn/strings.xml
+++ b/packages/SettingsLib/res/values-kn/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> ಞಮಯಊಲà³à²²à²¿ ಪà³à²°à³à²€à²¿ à²à²Ÿà²°à³à²à³ à²à²à³à²€à³à²€à²Šà³"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - à²à²Ÿà²°à³à²à²¿à²à²à³ à²
ಚà³à²šà³ à²à²ªà³à²à²¿à²®à³à²žà³ ಮಟಡಲಟà²à²¿à²Šà³"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> - à²à²Ÿà²°à³à²à²¿à²à²à³ à²à²à³à²€à³à²€à²¿à²Šà³"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - <xliff:g id="TIME">%3$s</xliff:g> ವà³à²³à³à²à³ à²à²°à³à²€à²¿à²¯à²Ÿà²à³à²€à³à²€à²Šà³"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> ವà³à²³à³à²à³ ಞà²à²ªà³à²°à³à²£à²µà²Ÿà²à²¿ à²à²Ÿà²°à³à²à³ à²à²à³à²€à³à²€à²Šà³"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"<xliff:g id="TIME">%1$s</xliff:g> ವà³à²³à³à²à³ ಞà²à²ªà³à²°à³à²£à²µà²Ÿà²à²¿ à²à²Ÿà²°à³à²à³ à²à²à³à²€à³à²€à²Šà³"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"<xliff:g id="TIME">%1$s</xliff:g> ವà³à²³à³à²à³ à²à²°à³à²€à²¿à²¯à²Ÿà²à³à²€à³à²€à²Šà³"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"à²
ಪರಿà²à²¿à²€"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"à²à²Ÿà²°à³à²à³ à²à²à³à²€à³à²€à²¿à²Šà³"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"ವà³à²à²Š à²à²Ÿà²°à³à²à²¿à²à²à³"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"à²à²Ÿà²°à³à²à³ à²à²à²¿à²Šà³"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"ಪà³à²°à³à²£à²µà²Ÿà²à²¿ à²à²Ÿà²°à³à²à³ à²à²à²¿à²Šà³"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"à²à²Ÿà²°à³à²à²¿à²à²à³ à²
ಚà³à²šà³ ಹà³à²²à³à²¡à³ ಮಟಡಲಟà²à²¿à²Šà³"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"à²à²Ÿà²°à³à²à³ à²à²à³à²€à³à²€à²¿à²Šà³"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"ಫಟಞà³à²à³ à²à²Ÿà²°à³à²à²¿à²à²à³"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"ಚಿರà³à²µà²Ÿà²¹à²à²° ಮà³à²²à² ಚಿಯà²à²€à³à²°à²¿à²žà²²à²Ÿà²à²¿à²Šà³"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"ಚಿರà³à²¬à²à²§à²¿à²žà²²à²Ÿà²Š ಞà³à²à³à²à²¿à²à²à³ ಮà³à²²à² ಚಿಯà²à²€à³à²°à²¿à²žà²²à²Ÿà²à³à²€à³à²€à²Šà³"</string>
<string name="disabled" msgid="8017887509554714950">"ಚಿಷà³à²à³à²°à²¿à²¯à²à³à²³à²¿à²žà²²à²Ÿà²à²¿à²Šà³"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"ಪà³à²šà³ à²à²à²Šà³ ಪà²à³à²à²¿."</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"ಫà³à²šà³ à²à²°à²¡à³ ಪà²à³à²à²¿à²à²³à³."</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"ಫà³à²šà³ ಮà³à²°à³ ಪà²à³à²à²¿à²à²³à³."</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"ಫà³à²šà³à²š ಚಟಲà³à²à³ ಬಟರà³à²à²³à³."</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"ಫà³à²šà³ ಞà²à²à³à²€ ಪà³à²°à³à²€à²¿ à²à²Šà³."</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"ಯಟವà³à²Šà³ ಡà³à²à²Ÿ à²à²²à³à²²."</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"ಡà³à²à²Ÿ à²à²à²Šà³ ಪà²à³à²à²¿."</string>
diff --git a/packages/SettingsLib/res/values-ko/strings.xml b/packages/SettingsLib/res/values-ko/strings.xml
index e0331f5..d03c152 100644
--- a/packages/SettingsLib/res/values-ko/strings.xml
+++ b/packages/SettingsLib/res/values-ko/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g>: <xliff:g id="TIME">%2$s</xliff:g> í ì¶©ì ìë£"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - ì¶©ì ìµì íëš"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> â ì¶©ì ì€"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - <xliff:g id="TIME">%3$s</xliff:g>ì ìì í ì¶©ì ëš"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g>ì ìì í ì¶©ì ëš"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"<xliff:g id="TIME">%1$s</xliff:g>ì ìì í ì¶©ì ëš"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"<xliff:g id="TIME">%1$s</xliff:g>ì ìì í ì¶©ì ëš"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"ì ì ìì"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"ì¶©ì ì€"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"ê³ ì ì¶©ì ì€"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"ì¶©ì ëš"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"ìì í ì¶©ì ëš"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"ì¶©ì ìŒìì€ì§"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"ì¶©ì "</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"êžì ì¶©ì "</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"êŽëЬìê° ì ìŽ"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"ì íë ì€ì ìŒë¡ ì ìŽëš"</string>
<string name="disabled" msgid="8017887509554714950">"ì¬ì© ìíš"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"íŽëì í ì íž ë§ëê° íëì
ëë€."</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"íŽëì í ì íž ë§ëê° ë ê°ì
ëë€."</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"íŽëì í ì íž ë§ëê° ìž ê°ì
ëë€."</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"ì í ë§ëê° ë€ ê°ì
ëë€."</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"íŽëì íì ì ížê° ê°í©ëë€."</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"ë°ìŽí°ê° ììµëë€."</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"ë°ìŽí° ì íž ë§ëê° íëì
ëë€."</string>
diff --git a/packages/SettingsLib/res/values-ky/strings.xml b/packages/SettingsLib/res/values-ky/strings.xml
index cbc8be1..b17579a 100644
--- a/packages/SettingsLib/res/values-ky/strings.xml
+++ b/packages/SettingsLib/res/values-ky/strings.xml
@@ -387,7 +387,7 @@
<string name="simulate_color_space" msgid="1206503300335835151">"ÐМПЌалОÑга ПкÑПÑÑÑ"</string>
<string name="enable_opengl_traces_title" msgid="4638773318659125196">"OpenGL ÑÑейÑÑеÑОМ ОÑÑеÑÒ¯Ò¯"</string>
<string name="usb_audio_disable_routing" msgid="3367656923544254975">"ÐÑÐŽÐžÐŸÐœÑ Ó©ÑкөÑүүМү Ó©ÑÒ¯ÑÒ¯Ò¯ (USB)"</string>
- <string name="usb_audio_disable_routing_summary" msgid="8768242894849534699">"ТÑÑÐºÑ USB аÑЎОП жабЎÑкÑаÑÑМа авÑП Ó©ÑкөÑÒ¯Ò¯ Ó©ÑÑлÑ"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="8768242894849534699">"ТÑÑÐºÑ USB ÑүзЌөкÑÓ©Ñгө авÑПЌаÑÑÑк ÑÒ¯ÑÐŽÓ© Ó©ÑпөйÑ"</string>
<string name="debug_layout" msgid="1659216803043339741">"ÐлеЌеМÑÑÑЎМ ÑекÑÑОМ көÑÑÑ"</string>
<string name="debug_layout_summary" msgid="8825829038287321978">"ÐеÑОлгеМ МеÑÑеМОМ ÑекÑеÑО жаМа жÑÑкÑеÑО көÑүМөÑ"</string>
<string name="force_rtl_layout_all_locales" msgid="8690762598501599796">"ÐМÑеÑÑейÑÑО ÑагÑлЎÑÑÑÑ"</string>
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$s</xliff:g> кОйОМ ÑПлÑк кÑбаÑÑалаÑ"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> — ÐÑбаÑÑПП жакÑÑÑÑÑлЎÑ"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> - ÐÑбаÑÑалÑÑЎа"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - Ð¡Ð°Ð°Ñ <xliff:g id="TIME">%3$s</xliff:g> кÑбаÑÑалÑп бүÑÓ©Ñ"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> ÑейОМ ÑПлÑк кÑбаÑÑалаÑ"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"<xliff:g id="TIME">%1$s</xliff:g> ÑейОМ ÑПлÑк кÑбаÑÑалаÑ"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"Ð¡Ð°Ð°Ñ <xliff:g id="TIME">%1$s</xliff:g> кÑбаÑÑалÑп бүÑÓ©Ñ"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"ÐелгОÑОз"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"ÐÑбаÑÑалÑÑЎа"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"ЫкÑаЌ кÑбаÑÑалÑÑЎа"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"ÐÑбаÑÑалЎÑ"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"ТПлÑк кÑбаÑÑалЎÑ"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"ÐÑбаÑÑПП күÑÒ¯Ò¯ ÑежОЌОМЎе"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"ÐÑбаÑÑалÑÑЎа"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"ЫкÑаЌ кÑбаÑÑПП"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"ÐЎЌОМОÑÑÑаÑÐŸÑ ÑаÑабÑМаМ көзөЌөлЎөМөÑ"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"ЧекÑелгеМ паÑаЌеÑÑ Ð°ÑкÑлÑÑ ÐºÓ©Ð·Ó©ÐŒÓ©Ð»ÐŽÓ©ÐœÓ©Ñ"</string>
<string name="disabled" msgid="8017887509554714950">"ÓšÑÒ¯ÑүлгөМ"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"ТелеÑПМ ÑÐžÐ³ÐœÐ°Ð»Ñ Ð±ÐžÑ ÑаÑкÑа."</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"ТелеÑПМ ÑÐžÐ³ÐœÐ°Ð»Ñ ÑкО ÑаÑкÑа."</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"ТелеÑПМ ÑÐžÐ³ÐœÐ°Ð»Ñ Ò¯Ñ ÑаÑкÑа."</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"ТелеÑПМ: ÑÓ©ÑÑ ÑаÑкÑа."</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"ТелеÑПМ ÑÐžÐ³ÐœÐ°Ð»Ñ ÑПлÑк."</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"СОгМал жПк."</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"ÐПбОлЎОк ОМÑеÑМеÑÑОМ ÑÐžÐ³ÐœÐ°Ð»Ñ Ð±ÐžÑ ÑаÑкÑа."</string>
diff --git a/packages/SettingsLib/res/values-lo/strings.xml b/packages/SettingsLib/res/values-lo/strings.xml
index 2366c13..441455c 100644
--- a/packages/SettingsLib/res/values-lo/strings.xml
+++ b/packages/SettingsLib/res/values-lo/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"àºàº±àºà»àº«àºŒàº·àºàºàºµàº <xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> àºàº¶à»àºàºàº°àºªàº²àºà»àºàº±àº¡"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - àºàº²àºàºªàº²àºàºàº·àºàºàº±àºà»àº«à»à»à»àº²àº°àºªàº»àº¡à»àº¥à»àº§"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> - àºàº³àº¥àº±àºàºªàº²àºà»àº"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - àºàº°à»àºàº±àº¡àºàº²àºà»àº <xliff:g id="TIME">%3$s</xliff:g>"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - àºàº°àºªàº²àºà»àºàº±àº¡àºàº²àºà»àº <xliff:g id="TIME">%2$s</xliff:g>"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"àºàº°àºªàº²àºà»àºàº±àº¡àºàº²àºà»àº <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"àºàº°à»àºàº±àº¡àºàº²àºà»àº <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"àºà»à»àº®àº¹à»àºàº±àº"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"àºàº³àº¥àº±àºàºªàº²àºà»àº"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"àºàº³àº¥àº±àºàºªàº²àºà»àºàºà»àº§àº"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"ສາàºà»àºàº±àº¡à»àº¥à»àº§"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"ສາàºà»àºàº±àº¡à»àº¥à»àº§"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"ຢພàºàºàº²àºàºªàº²àºàºàº»à»àº§àºàº²àº§"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"àºàº³àº¥àº±àºàºªàº²àº"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"àºàº³àº¥àº±àºàºªàº²àºà»àº§"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"àºàº§àºàºàºžàº¡à»àºàºàºàº¹à»à»àºàºŽà»àºà»àºàº"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"àºàº§àºàºàºžàº¡à»àºàºàºàº²àºàºàº±à»àºàºà»àº²àºàºµà»àºàº³àºàº±àºà»àº§à»"</string>
<string name="disabled" msgid="8017887509554714950">"àºàºŽàºàºàº²àºàºàº³à»àºà»"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"ສັàºàºàº²àºàºàº¶à»àºàºàºµàº."</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"ສັàºàºàº²àºàºªàºàºàºàºµàº."</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"ສັàºàºàº²àºàºªàº²àº¡àºàºµàº."</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"ສັàºàºàº²àºà»àºàº¥àº°àºªàº±àº 4 àºàºµàº."</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"ສັàºàºàº²àºà»àºàº±àº¡."</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"àºà»à»àº¡àºµàºà»à»àº¡àº¹àº."</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"àºà»à»àº¡àº¹àºàºàº¶à»àºàºàºµàº."</string>
diff --git a/packages/SettingsLib/res/values-lt/strings.xml b/packages/SettingsLib/res/values-lt/strings.xml
index 479c850..00672df 100644
--- a/packages/SettingsLib/res/values-lt/strings.xml
+++ b/packages/SettingsLib/res/values-lt/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> – liko <xliff:g id="TIME">%2$s</xliff:g>, kol bus visiškai įkrauta"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> – įkrovimas optimizuotas"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> – įkraunama"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATUS">%2$s</xliff:g> – bus visiškai įkrauta <xliff:g id="TIME">%3$s</xliff:g>"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> – bus visiškai įkrauta <xliff:g id="TIME">%2$s</xliff:g>"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"Bus visiškai įkrauta <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"Bus visiškai įkrauta <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"NeÅŸinomas"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"Kraunasi..."</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Greitai įkraunama"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"Įkrauta"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"Visiškai įkrautas"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"Įkrovimas pristabdytas"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"Įkraunama"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Spartusis įkrovimas"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Valdo administratorius"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Valdoma pagal apribotÄ
nustatymÄ
"</string>
<string name="disabled" msgid="8017887509554714950">"NeleidÅŸiama"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"Viena telefono juosta."</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"Dvi telefono juostos."</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"Trys telefono juostos."</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"Keturios juosto telefone."</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"Telefono signalas stiprus."</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"Duomenų nÄra."</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"Viena duomenų juosta."</string>
diff --git a/packages/SettingsLib/res/values-lv/strings.xml b/packages/SettingsLib/res/values-lv/strings.xml
index f4fc898..a9b848a 100644
--- a/packages/SettingsLib/res/values-lv/strings.xml
+++ b/packages/SettingsLib/res/values-lv/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> — <xliff:g id="TIME">%2$s</xliff:g> lÄ«dz pilnai uzlÄdei"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> — uzlÄde optimizÄta"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> — notiek uzlÄde"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> — <xliff:g id="STATUS">%2$s</xliff:g>. Tiks pilnÄ«bÄ uzlÄdÄts lÄ«dz plkst. <xliff:g id="TIME">%3$s</xliff:g>"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> — tiks pilnÄ«bÄ uzlÄdÄts lÄ«dz plkst. <xliff:g id="TIME">%2$s</xliff:g>"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"Tiks pilnÄ«bÄ uzlÄdÄts lÄ«dz plkst. <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"Tiks pilnÄ«bÄ uzlÄdÄts lÄ«dz plkst. <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"NezinÄms"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"UzlÄde"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Notiek ÄtrÄ uzlÄde"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"UzlÄdÄts"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"PilnÄ«bÄ uzlÄdÄts"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"UzlÄde apturÄta"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"Notiek uzlÄde"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"ÄtrÄ uzlÄde"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"KontrolÄ administrators"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"KontrolÄ ierobeÅŸots iestatÄ«jums"</string>
<string name="disabled" msgid="8017887509554714950">"AtspÄjots"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"TÄlrunis: viena josla."</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"TÄlrunis: divas joslas."</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"TÄlrunis: trÄ«s joslas."</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"TÄlrunis (Äetras joslas)."</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"Pilna piekÄŒuve tÄlruÅa signÄlam"</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"Nav datu."</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"Dati: viena josla"</string>
diff --git a/packages/SettingsLib/res/values-ml/strings.xml b/packages/SettingsLib/res/values-ml/strings.xml
index 40cf60e..231a642 100644
--- a/packages/SettingsLib/res/values-ml/strings.xml
+++ b/packages/SettingsLib/res/values-ml/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> - àŽªàµàµŒàŽ£àµàŽ£àŽ®àŽŸàŽàŽŸàµ» <xliff:g id="TIME">%2$s</xliff:g> àŽ¶àµàŽ·àŽ¿àŽàµàŽàµàŽšàµàŽšàµ"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - àŽàŽŸàµŒàŽàŽ¿àŽàŽàµ àŽàŽªàµàޱàµàŽ±àŽ¿àŽ®àµàŽžàµ àŽàµàޝàµàŽ€àµ"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> â àŽàŽŸàµŒàŽàµ àŽàµàޝàµàޝàµàŽšàµàŽšàµ"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - <xliff:g id="TIME">%3$s</xliff:g>-àŽšàŽàŽ àŽªàµàµŒàŽ£àµàŽ£àŽ®àŽŸàŽàµàŽ"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g>-àŽšàŽàŽ àŽªàµàµŒàŽ£àµàŽ£àŽ®àŽŸàŽ¯àŽ¿ àŽàŽŸàµŒàŽàµ àŽàµàޝàµàޝàµàŽ"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"<xliff:g id="TIME">%1$s</xliff:g>-àŽšàŽàŽ àŽªàµàµŒàŽ£àµàŽ£àŽ®àŽŸàŽ¯àŽ¿ àŽàŽŸàµŒàŽàµ àŽàµàޝàµàޝàµàŽ"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"<xliff:g id="TIME">%1$s</xliff:g>-àŽšàŽàŽ àŽªàµàµŒàŽ£àµàŽ£àŽ®àŽŸàŽàµàŽ"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"àŽ
àŽàµàŽàŽŸàŽ€àŽ"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"àŽàŽŸàµŒàŽàµ àŽàµàޝàµàޝàµàŽšàµàŽšàµ"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"àŽ
àŽ€àŽ¿àŽµàµàŽ àŽàŽŸàµŒàŽàŽ¿àŽàŽàµ"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"àŽàŽŸàµŒàŽàŽŸàŽ¯àŽ¿"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"àŽªàµàµŒàŽ£àµàŽ£àŽ®àŽŸàŽ¯àŽ¿ àŽàŽŸàµŒàŽàµ àŽàµàޝàµàŽ€àµ"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"àŽàŽŸàµŒàŽàŽ¿àŽàŽàµ àŽ¹àµàµŸàŽ¡àŽ¿àŽ²àŽŸàŽ£àµ"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"àŽàŽŸàµŒàŽàµ àŽàµàޝàµàޝàµàŽšàµàŽšàµ"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"àŽ
àŽ€àŽ¿àŽµàµàŽ àŽàŽŸàµŒàŽàŽ¿àŽàŽàµ"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"àŽ
àŽ¡àµàŽ®àŽ¿àµ» àŽšàŽ¿àŽ¯àŽšàµàŽ€àµàŽ°àŽ¿àŽàµàŽàµàŽšàµàŽšàŽ€àµ"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"àŽšàŽ¿àŽ¯àŽšàµàŽ€àµàŽ°àŽ¿àŽ€ àŽàµàŽ°àŽ®àµàŽàŽ°àŽ£àŽ àŽàŽªàŽ¯àµàŽàŽ¿àŽàµàŽàµ àŽšàŽ¿àŽ¯àŽšàµàŽ€àµàŽ°àŽ¿àŽàµàŽàµàŽšàµàŽšàŽ€àµ"</string>
<string name="disabled" msgid="8017887509554714950">"àŽªàµàŽ°àŽµàµŒàŽ€àµàŽ€àŽšàŽ°àŽ¹àŽ¿àŽ€àŽ®àŽŸàŽàµàŽàŽ¿"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"àŽ«àµàŽ£àŽ¿àµœ àŽàŽ°àµ àŽ¬àŽŸàµŒ."</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"àŽ«àµàŽ£àŽ¿àµœ àŽ°àŽ£àµàŽàµ àŽ¬àŽŸàµŒ."</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"àŽ«àµàŽ£àŽ¿àµœ àŽ®àµàŽšàµàŽšàµ àŽ¬àŽŸàµŒ."</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"àŽ«àµàŽ£àŽ¿àµœ àŽšàŽŸàŽ²àµ àŽ¬àŽŸàŽ±àµàŽàµŸ."</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"àŽ«àµàµº àŽžàŽ¿àŽàµàŽšàµœ àŽªàµàµŒàŽ£àµàŽ£àŽ®àŽŸàŽ£àµ."</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"àŽ¡àŽŸàŽ±àµàŽ±àŽŸ àŽžàŽ¿àŽàµàŽšàµœ àŽàŽšàµàŽšàµàŽ®àŽ¿àŽ²àµà޲."</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"àŽ¡àŽŸàŽ±àµàޱ àŽàŽ°àµ àŽ¬àŽŸàµŒ."</string>
diff --git a/packages/SettingsLib/res/values-mn/strings.xml b/packages/SettingsLib/res/values-mn/strings.xml
index f4b82ea..26314d7 100644
--- a/packages/SettingsLib/res/values-mn/strings.xml
+++ b/packages/SettingsLib/res/values-mn/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> - ÐŽÒ¯Ò¯ÑÑÑ
Ñ
Ò¯ÑÑÑл <xliff:g id="TIME">%2$s</xliff:g> үлЎÑÑМ"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - ЊÑМÑглÑÑ
ÑвÑÑг ПМПвÑОлÑПМ"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> - ЊÑМÑглÑж байМа"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - <xliff:g id="TIME">%3$s</xliff:g> гÑÑ
ÑÐŽ ÐŽÒ¯Ò¯ÑМÑ"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> гÑÑ
ÑÐŽ бүÑÑМ ÑÑМÑглÑгЎÑМÑ"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"<xliff:g id="TIME">%1$s</xliff:g> гÑÑ
ÑÐŽ бүÑÑМ ÑÑМÑглÑгЎÑМÑ"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"<xliff:g id="TIME">%1$s</xliff:g> гÑÑ
ÑÐŽ ÐŽÒ¯Ò¯ÑМÑ"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"ТПЎПÑÑ
Пйгүй"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"ЊÑМÑглÑж байМа"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Ð¥ÑÑЎаМ ÑÑМÑглÑж байМа"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"ЊÑМÑглÑÑÑМ"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"ÐÒ¯ÑÑМ ÑÑМÑглÑÑÑМ"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"ЊÑМÑглÑÑ
Ойг Ñ
үлÑÑлгÑÐŽ ПÑÑÑлÑаМ"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"ЊÑМÑглÑж байМа"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"КÑÑÑÑ
ай ÑÑМÑглÑÑ
"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"ÐЎЌОМ ÑЎОÑÐŽÑаМ"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Ð¥ÑзгааÑлагЎÑаМ ÑПÑ
ОÑÐ³ÐŸÐŸÐ³ÐŸÐŸÑ Ñ
ÑМаЎаг"</string>
<string name="disabled" msgid="8017887509554714950">"ÐÐŽÑвÑ
гүйжүүлÑÑМ"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"УÑÐ°Ñ ÐœÑг багаМаÑай."</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"УÑÐ°Ñ Ñ
ПÑÑ Ð±Ð°Ð³Ð°ÐœÐ°Ñай."</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"УÑÐ°Ñ Ð³ÑÑваМ багаМаÑай."</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"УÑаÑÐœÑ ÐŽÓ©ÑвөМ заалÑ."</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"УÑаÑÐœÑ ÐŽÐŸÑ
ОП ÐŽÒ¯Ò¯ÑÑМ."</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"ÐаÑа байÑ
гүй."</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"ÐаÑа МÑг багаМаÑай."</string>
diff --git a/packages/SettingsLib/res/values-mr/strings.xml b/packages/SettingsLib/res/values-mr/strings.xml
index 7ea7579..dc197a6 100644
--- a/packages/SettingsLib/res/values-mr/strings.xml
+++ b/packages/SettingsLib/res/values-mr/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> - à€ªà¥à€°à¥à€£ à€à€Ÿà€°à¥à€ à€¹à¥à€£à¥à€¯à€Ÿà€žà€Ÿà€ ॠ<xliff:g id="TIME">%2$s</xliff:g> à€¶à€¿à€²à¥à€²à€ à€à€¹à¥"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - à€à€Ÿà€°à¥à€à€¿à€à€ à€à€ªà¥à€à€¿à€®à€Ÿà€à€ à€à¥à€²à¥"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> â à€à€Ÿà€°à¥à€ à€¹à¥à€€ à€à€¹à¥"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - <xliff:g id="TIME">%3$s</xliff:g> à€ªà€°à¥à€¯à€à€€ à€ªà¥à€°à¥à€£ à€¹à¥à€à€²"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> à€ªà€°à¥à€¯à€à€€ à€ªà¥à€°à¥à€£à€ªà€£à¥ à€à€Ÿà€°à¥à€ à€¹à¥à€à€²"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"<xliff:g id="TIME">%1$s</xliff:g> à€ªà€°à¥à€¯à€à€€ à€ªà¥à€°à¥à€£à€ªà€£à¥ à€à€Ÿà€°à¥à€ à€¹à¥à€à€²"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"<xliff:g id="TIME">%1$s</xliff:g> à€ªà€°à¥à€¯à€à€€ à€ªà¥à€°à¥à€£ à€¹à¥à€à€²"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"à€
à€à¥à€à€Ÿà€€"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"à€à€Ÿà€°à¥à€ à€¹à¥à€€ à€à€¹à¥"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"à€µà¥à€à€Ÿà€šà¥ à€à€Ÿà€°à¥à€ à€¹à¥à€€ à€à€¹à¥"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"à€à€Ÿà€°à¥à€ à€à€Ÿà€²à¥"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"à€ªà¥à€°à¥à€£ à€à€Ÿà€°à¥à€ à€à€Ÿà€²à¥"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"à€à€Ÿà€°à¥à€à€¿à€à€ à€¥à€Ÿà€à€¬à€µà€²à¥ à€à€¹à¥"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"à€à€Ÿà€°à¥à€ à€¹à¥à€€ à€à€¹à¥"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"à€«à€Ÿà€žà¥à€ à€à€Ÿà€°à¥à€à€¿à€à€"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"à€ªà¥à€°à€¶à€Ÿà€žà€à€Ÿà€šà¥ à€šà€¿à€¯à€à€€à¥à€°à€¿à€€ à€à¥à€²à¥à€²à¥"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"à€ªà¥à€°à€€à€¿à€¬à€à€§à€¿à€€ à€à¥à€²à¥à€²à¥à€¯à€Ÿ à€žà¥à€à€¿à€à€ à€Šà¥à€µà€Ÿà€°à¥ à€šà€¿à€¯à€à€€à¥à€°à€¿à€€"</string>
<string name="disabled" msgid="8017887509554714950">"à€
à€à¥à€·à€®"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"à€«à¥à€š à€à€ à€¬à€Ÿà€°."</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"à€«à¥à€š à€Šà¥à€š à€¬à€Ÿà€°."</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"à€«à¥à€š à€€à¥à€š à€¬à€Ÿà€°."</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"à€«à¥à€šà€à¥ à€à€Ÿà€° à€¬à€Ÿà€°."</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"à€«à¥à€š à€žà€¿à€à¥à€šà€² à€ªà¥à€°à¥à€£."</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"à€à¥à€£à€€à€Ÿà€¹à¥ à€¡à¥à€à€Ÿ à€šà€Ÿà€¹à¥."</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"à€¡à¥à€à€Ÿ à€à€ à€¬à€Ÿà€°."</string>
diff --git a/packages/SettingsLib/res/values-ms/strings.xml b/packages/SettingsLib/res/values-ms/strings.xml
index a64aff3..50b60df 100644
--- a/packages/SettingsLib/res/values-ms/strings.xml
+++ b/packages/SettingsLib/res/values-ms/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> lagi sebelum penuh"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - Pengecasan dioptimumkan"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> - Mengecas"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - Penuh pada <xliff:g id="TIME">%3$s</xliff:g>"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - Dicas sepenuhnya pada <xliff:g id="TIME">%2$s</xliff:g>"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"Dicas sepenuhnya pada <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"Penuh pada <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"Tidak diketahui"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"Mengecas"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Mengecas pantas"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"Sudah dicas"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"Dicas Penuh"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"Pengecasan ditunda"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"Pengecasan"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Pengecasan pantas"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Dikawal oleh pentadbir"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Dikawal oleh Tetapan Terhad"</string>
<string name="disabled" msgid="8017887509554714950">"Dilumpuhkan"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"Telefon satu bar."</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"Telefon dua bar."</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"Telefon tiga bar."</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"Telefon empat bar."</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"Isyarat telefon penuh."</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"Tiada data."</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"Data satu bar."</string>
diff --git a/packages/SettingsLib/res/values-nb/strings.xml b/packages/SettingsLib/res/values-nb/strings.xml
index 3b73bc3..a46b06b 100644
--- a/packages/SettingsLib/res/values-nb/strings.xml
+++ b/packages/SettingsLib/res/values-nb/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> – Fulladet om <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> – Ladingen er optimalisert"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> – lader"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATUS">%2$s</xliff:g> – Fulladet innen <xliff:g id="TIME">%3$s</xliff:g>"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> – Fulladet innen <xliff:g id="TIME">%2$s</xliff:g>"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"Fulladet innen <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"Fulladet innen <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"Ukjent"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"Lader"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Lader raskt"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"Ladet"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"Fulladet"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"Ladingen er satt på vent"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"Lading"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Hurtiglading"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Kontrollert av administratoren"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Kontrollert av en begrenset innstilling"</string>
<string name="disabled" msgid="8017887509554714950">"Slått av"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"Telefon – én stolpe."</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"Telefon – to stolper."</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"Telefon – tre stolper."</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"Fire streker for telefon."</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"Telefonsignal er fullt."</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"Ingen data."</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"Data – én stolpe"</string>
diff --git a/packages/SettingsLib/res/values-ne/strings.xml b/packages/SettingsLib/res/values-ne/strings.xml
index c6a8706..6bdcbd8 100644
--- a/packages/SettingsLib/res/values-ne/strings.xml
+++ b/packages/SettingsLib/res/values-ne/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> - à€ªà¥à€°à€Ÿ à€à€Ÿà€°à¥à€ à€¹à¥à€š <xliff:g id="TIME">%2$s</xliff:g> à€²à€Ÿà€à¥à€šà¥ à€"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - à€à€Ÿà€°à¥à€ à€à€°à¥à€šà¥ à€ªà¥à€°à€à¥à€°à€¿à€¯à€Ÿ à€
à€ªà¥à€à€¿à€®à€Ÿà€à€ à€à€°à€¿à€à€à¥ à€"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> - à€à€Ÿà€°à¥à€ à€à€°à€¿à€à€Šà¥ à€"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - <xliff:g id="TIME">%3$s</xliff:g> à€¬à€à¥à€žà€®à¥à€®à€®à€Ÿ à€ªà¥à€°à€Ÿ à€à€Ÿà€°à¥à€ à€¹à¥à€šà¥ à€"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> à€¬à€à¥à€žà€®à¥à€®à€®à€Ÿ à€ªà¥à€°à€Ÿ à€à€Ÿà€°à¥à€ à€¹à¥à€šà¥ à€"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"<xliff:g id="TIME">%1$s</xliff:g> à€¬à€à¥à€žà€®à¥à€®à€®à€Ÿ à€ªà¥à€°à€Ÿ à€à€Ÿà€°à¥à€ à€¹à¥à€šà¥ à€"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"<xliff:g id="TIME">%1$s</xliff:g> à€¬à€à¥à€žà€®à¥à€®à€®à€Ÿ à€ªà¥à€°à€Ÿ à€à€Ÿà€°à¥à€ à€¹à¥à€šà¥ à€"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"à€
à€à¥à€à€Ÿà€€"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"à€à€Ÿà€°à¥à€ à€¹à¥à€à€Šà¥ à€"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"à€Šà¥à€°à¥à€€ à€à€€à€¿à€®à€Ÿ à€à€Ÿà€°à¥à€ à€à€°à€¿à€à€Šà¥ à€"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"à€à€Ÿà€°à¥à€ à€à€¯à¥"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"à€ªà¥à€°à¥à€£ à€°à¥à€ªà€®à€Ÿ à€à€Ÿà€°à¥à€ à€à€à€à¥ à€"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"à€à€Ÿà€°à¥à€à€¿à€ à€¹à¥à€²à¥à€¡ à€à€°à€¿à€à€à¥ à€"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"à€à€Ÿà€°à¥à€ à€à€°à€¿à€à€Šà¥ à€"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"à€«à€Ÿà€žà¥à€ à€à€Ÿà€°à¥à€à€¿à€"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"à€ªà¥à€°à€¶à€Ÿà€žà€à€Šà¥à€µà€Ÿà€°à€Ÿ à€šà€¿à€¯à€šà¥à€€à¥à€°à€¿à€€"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"à€ªà¥à€°à€€à€¿à€¬à€šà¥à€§à€¿à€€ à€žà¥à€à€¿à€à€²à¥ à€šà€¿à€¯à€šà¥à€€à¥à€°à€£ à€à€°à¥à€à¥"</string>
<string name="disabled" msgid="8017887509554714950">"à€
à€žà€à¥à€·à€® à€ªà€Ÿà€°à€¿à€¯à¥"</string>
@@ -568,7 +562,7 @@
<string name="alarm_template" msgid="3346777418136233330">"<xliff:g id="WHEN">%1$s</xliff:g> à€®à€Ÿ"</string>
<string name="alarm_template_far" msgid="6382760514842998629">"<xliff:g id="WHEN">%1$s</xliff:g> à€®à€Ÿ"</string>
<string name="zen_mode_duration_settings_title" msgid="1553451650289651489">"à€
à€µà€§à€¿"</string>
- <string name="zen_mode_duration_always_prompt_title" msgid="3212996860498119555">"à€ªà¥à€°à€€à¥à€¯à¥à€ à€ªà€à€ à€žà¥à€§à€¿à€¯à¥à€žà¥"</string>
+ <string name="zen_mode_duration_always_prompt_title" msgid="3212996860498119555">"à€ªà¥à€°à€€à¥à€¯à¥à€ à€ªà€à€ à€žà¥à€§à¥à€šà¥à€¹à¥à€žà¥"</string>
<string name="zen_mode_forever" msgid="3339224497605461291">"à€€à€ªà€Ÿà€à€à€²à¥ à€
à€« à€šà€à€°à¥à€žà€®à¥à€®"</string>
<string name="time_unit_just_now" msgid="3006134267292728099">"à€
à€¹à€¿à€²à¥ à€à€°à¥à€à€°à¥"</string>
<string name="media_transfer_this_device_name" msgid="2357329267148436433">"à€¯à¥ à€«à¥à€š"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"à€«à¥à€š à€à€à€à€Ÿ à€ªà€à¥à€à€¿à¥€"</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"à€«à¥à€š à€Šà¥à€ à€ªà€à¥à€à€¿à¥€"</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"à€«à¥à€š à€€à€¿à€š à€ªà€à¥à€à€¿à€¹à€°à¥à¥€"</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"à€«à¥à€šà€à€Ÿ à€à€Ÿà€° à€µà€à€Ÿ à€¬à€Ÿà€°à¥€"</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"à€«à¥à€š à€žà€à¥à€à¥à€€ à€à€°à€¿à€à€à¥à¥€"</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"à€¡à¥à€à€Ÿ à€à¥à€šà¥€"</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"à€¡à¥à€à€Ÿà€à¥ à€à€à€à€Ÿ à€ªà€à¥à€à€¿à¥€"</string>
diff --git a/packages/SettingsLib/res/values-pa/strings.xml b/packages/SettingsLib/res/values-pa/strings.xml
index d9be9bb..db13840 100644
--- a/packages/SettingsLib/res/values-pa/strings.xml
+++ b/packages/SettingsLib/res/values-pa/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> - àš¬à©àšàš°à© àšªà©àš°à© àšàšŸàš°àš àš¹à©àš£ àšµàš¿à©±àš <xliff:g id="TIME">%2$s</xliff:g> àš¬àšŸàšà©"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - àšàšŸàš°àšàš¿à©°àš àššà©à©° àšžà©àš¯à©àš àš¬àš£àšŸàšàš àšàš¿àš"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> - àšàšŸàš°àš àš¹à© àš°àš¹à© àš¹à©"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - <xliff:g id="TIME">%3$s</xliff:g> àš€à©±àš àšªà©àš°à© àš€àš°à©àš¹àšŸàš àšàšŸàš°àš àš¹à© àšàšŸàšµà©àšà©"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> àš€à©±àš àšªà©àš°à© àš€àš°à©àš¹àšŸàš àšàšŸàš°àš àš¹à© àšàšŸàšµà©àšà©"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"<xliff:g id="TIME">%1$s</xliff:g> àš€à©±àš àšªà©àš°à© àš€àš°à©àš¹àšŸàš àšàšŸàš°àš àš¹à© àšàšŸàšµà©àšà©"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"<xliff:g id="TIME">%1$s</xliff:g> àš€à©±àš àšªà©àš°à© àš€àš°à©àš¹àšŸàš àšàšŸàš°àš àš¹à© àšàšŸàšµà©àšà©"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"àš
àšàš¿àšàš€"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"àšàšŸàš°àš àš¹à© àš°àš¹à© àš¹à©"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"àš€à©àšàšŒ àšàšŸàš°àš àš¹à© àš°àš¹à© àš¹à©"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"àš¬à©àšàš°à© àšàšŸàš°àš àš¹à© àšàš"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"àšªà©àš°à© àšàšŸàš°àš àš¹à© àšàš àš¹à©"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"àšàšŸàš°àšàš¿à©°àš àššà©à©° àš°à©àšàš¿àš àšàš¿àš àš¹à©"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"àšàšŸàš°àš àš¹à© àš°àš¹à© àš¹à©"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"àš€à©àšàšŒ àšàšŸàš°àšàš¿à©°àš"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"àšªà©àš°àšžàšŒàšŸàšžàš àšµà©±àš²à©àš àšà©°àšàš°à©àš² àšà©àš€à© àšàš"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"àšªà©àš°àš€àš¿àš¬à©°àš§àš¿àš€ àšžà©àšàš¿à©°àš àš°àšŸàš¹à©àš àšà©°àšàš°à©àš² àšà©àš€à© àšàšŸàšàšŠà© àš¹à©"</string>
<string name="disabled" msgid="8017887509554714950">"àš
àš¯à©àš àš¬àš£àšŸàšàš"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"àš«àšŒà©àšš àšà©±àš àš¬àšŸàš°à¥€"</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"àš«àšŒà©àšš àšŠà© àš¬àšŸàš°àšžà¥€"</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"àš«àšŒà©àšš àš€àš¿à©°àšš àš¬àšŸàš°àšžà¥€"</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"àš«àšŒà©àšš àšŠà© àšžàš¿àšàššàš² àšŠà©àšàš àšàšŸàš° àš¡à©°àš¡à©àšàš àš¹àššà¥€"</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"àš«àšŒà©àšš àšžàš¿àšàššàš² àšªà©àš°àšŸà¥€"</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"àšà©àš àš¡àšŸàšàšŸ àššàš¹à©àšà¥€"</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">" àš¡àšŸàšàšŸ àšà©±àš àš¬àšŸàš°à¥€"</string>
diff --git a/packages/SettingsLib/res/values-pt-rPT/strings.xml b/packages/SettingsLib/res/values-pt-rPT/strings.xml
index 850b6f3..31fa3df 100644
--- a/packages/SettingsLib/res/values-pt-rPT/strings.xml
+++ b/packages/SettingsLib/res/values-pt-rPT/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$s</xliff:g> até à carga máxima"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g>: carregamento otimizado"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> – A carregar"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATUS">%2$s</xliff:g> – Completo à(s) <xliff:g id="TIME">%3$s</xliff:g>"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> – Completamente carregado à(s) <xliff:g id="TIME">%2$s</xliff:g>"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"Completamente carregado à(s) <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"Completo à(s) <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"Desconhecido"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"A carregar"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Carregamento rápido"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"Carregada"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"Totalmente carregada"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"Carregamento em espera"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"Carregamento"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Carregamento rápido"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Controlado pelo gestor"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Controlado por uma definição restrita"</string>
<string name="disabled" msgid="8017887509554714950">"Desativada"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"Uma barra de telefone."</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"Duas barras de telefone."</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"Três barras de telefone."</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"Telemóvel com quatro barras."</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"Sinal de telefone completo."</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"Sem dados."</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"Uma barra de dados."</string>
diff --git a/packages/SettingsLib/res/values-ro/strings.xml b/packages/SettingsLib/res/values-ro/strings.xml
index e7101eb..cc64943 100644
--- a/packages/SettingsLib/res/values-ro/strings.xml
+++ b/packages/SettingsLib/res/values-ro/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$s</xliff:g> pânÄ la finalizare"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> – ÎncÄrcare optimizatÄ"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> – Se încarcÄ"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - Timp rÄmas <xliff:g id="TIME">%3$s</xliff:g>"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - Complet încÄrcat în <xliff:g id="TIME">%2$s</xliff:g>"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"Complet încÄrcat în <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"Timp rÄmas <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"Necunoscut"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"Se încarcÄ"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Se încarcÄ rapid"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"ÎncÄrcatÄ"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"Complet încÄrcatÄ"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"ÎncÄrcare întreruptÄ"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"ÎncÄrcare"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"ÎncÄrcare rapidÄ"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"ControlatÄ de administrator"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"ControlatÄ de setarea restricÈionatÄ"</string>
<string name="disabled" msgid="8017887509554714950">"DezactivatÄ"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"Semnal pentru telefon: o barÄ."</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"Semnal pentru telefon: douÄ bare."</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"Semnal pentru telefon: trei bare."</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"Patru bare pe telefon."</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"Semnal pentru telefon: complet."</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"Nu existÄ semnal pentru date."</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"Semnal pentru date: o barÄ."</string>
diff --git a/packages/SettingsLib/res/values-ru/strings.xml b/packages/SettingsLib/res/values-ru/strings.xml
index c77becf..117f38e 100644
--- a/packages/SettingsLib/res/values-ru/strings.xml
+++ b/packages/SettingsLib/res/values-ru/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$s</xliff:g> ЎП пПлМПй заÑÑЎкО"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> – заÑÑЎка ПпÑОЌОзОÑПваМа"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> – заÑÑжаеÑÑÑ"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g>. <xliff:g id="STATUS">%2$s</xliff:g> – завеÑÑОÑÑÑ Ðº <xliff:g id="TIME">%3$s</xliff:g>."</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> – пПлМПÑÑÑÑ Ð·Ð°ÑÑЎОÑÑÑ Ðº <xliff:g id="TIME">%2$s</xliff:g>"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"ÐПлМПÑÑÑÑ Ð·Ð°ÑÑЎОÑÑÑ Ðº <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"ÐПлМПÑÑÑÑ Ð·Ð°ÑÑЎОÑÑÑ Ðº <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"ÐеОзвеÑÑМП"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"ÐÐŽÐµÑ Ð·Ð°ÑÑЎка"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"ÐÑÑÑÑÐ°Ñ Ð·Ð°ÑÑЎка"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"ÐаÑаÑÐµÑ Ð·Ð°ÑÑжеМа"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"ÐаÑаÑÐµÑ Ð·Ð°ÑÑжеМа"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"ÐаÑÑЎка пÑОПÑÑаМПвлеМа"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"ÐаÑÑЎка"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"ÐÑÑÑÑÐ°Ñ Ð·Ð°ÑÑЎка"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"ÐПМÑÑПлОÑÑеÑÑÑ Ð°ÐŽÐŒÐžÐœÐžÑÑÑаÑПÑПЌ"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"ÐПМÑÑПлОÑÑеÑÑÑ ÐœÐ°ÑÑÑПйкаЌО Ñ ÐŸÐ³ÑаМОÑеММÑÐŒ ЎПÑÑÑпПЌ"</string>
<string name="disabled" msgid="8017887509554714950">"ÐÑклÑÑеМП"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"СОгМал ÑелеÑПММПй ÑеÑО: ПЎМП ЎелеМОе."</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"СОгМал ÑелеÑПММПй ÑеÑО: Ўва ЎелеМОÑ."</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"СОгМал ÑелеÑПММПй ÑеÑО: ÑÑО ЎелеМОÑ."</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"СОгМал ÑелеÑПММПй ÑеÑО: ÑеÑÑÑе ЎелеМОÑ."</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"ÐаЎежМÑй ÑелеÑПММÑй ÑОгМал."</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"СОгМал пеÑеЎаÑО ЎаММÑÑ
ПÑÑÑÑÑÑвÑеÑ."</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"СОгМал пеÑеЎаÑО ЎаММÑÑ
: ПЎМП ЎелеМОе."</string>
diff --git a/packages/SettingsLib/res/values-si/strings.xml b/packages/SettingsLib/res/values-si/strings.xml
index 2f72f01..255a6538 100644
--- a/packages/SettingsLib/res/values-si/strings.xml
+++ b/packages/SettingsLib/res/values-si/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> - à·à¶žà·à¶Žà·à¶»à·à¶« à·à·à¶žà¶§ <xliff:g id="TIME">%2$s</xliff:g>à¶à· à¶à¶à·à¶»à·à¶ºà·"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - à¶à¶»à·à¶Žà¶«à¶º à¶Žà·à¶»à·à·à·à¶ à¶à¶» à¶à¶"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> - à¶à¶»à·à¶Žà¶«à¶º à·à·"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - <xliff:g id="TIME">%3$s</xliff:g> à·à¶§ à¶Žà·à¶» à·à¶žà·à¶Žà·à¶»à·à¶«à¶ºà·"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> à·à¶§ à¶Žà·à¶» à·à¶žà·à¶Žà·à¶»à·à¶«à¶ºà·à¶±à· à¶à¶»à·à¶Žà¶« à·à·à¶ºà·"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"<xliff:g id="TIME">%1$s</xliff:g> à·à¶§ à¶Žà·à¶» à·à¶žà·à¶Žà·à¶»à·à¶«à¶ºà·à¶±à· à¶à¶»à·à¶Žà¶« à·à·à¶ºà·"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"<xliff:g id="TIME">%1$s</xliff:g> à·à¶§ à¶Žà·à¶» à·à¶žà·à¶Žà·à¶»à·à¶«à¶ºà·"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"à¶±à·à¶¯à¶±à·"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"à¶à¶»à·à¶Žà¶«à¶º à·à·à¶žà·à¶±à·"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"à·à·à¶à·à¶» à¶à¶»à·à¶Žà¶«à¶º"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"à¶
à¶»à·à¶Žà·à¶à¶ºà·"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"à·à¶žà·à¶Žà·à¶»à·à¶«à¶ºà·à¶±à· à¶à¶»à·à¶Žà¶« à·à· à¶à¶"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"à¶à¶»à·à¶Žà¶«à¶º රදà·à·à¶à·à¶± à¶à¶"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"à¶à¶»à·à¶Žà¶« à¶à·à¶»à·"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"à·à·à¶à·à¶à· à¶à¶»à·à¶Žà¶«à¶º"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"à¶Žà¶»à·à¶Žà·à¶œà¶ à·à·à·à·à¶±à· à¶Žà·à¶œà¶±à¶º à¶à¶»à¶± ගදà·"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"à·à·à¶žà· à¶à·
à·à·à¶à·à·à¶ž à¶žà¶à·à¶±à· à¶Žà·à¶œà¶±à¶º à·à·"</string>
<string name="disabled" msgid="8017887509554714950">"à¶
à¶¶à¶œ à¶à¶» à¶à¶"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"දà·à¶»à¶à¶®à¶±à¶º à¶à·à¶»à· à¶à¶à¶ºà·."</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"දà·à¶»à¶à¶®à¶±à¶º à¶à·à¶»à· දà·à¶à¶ºà·."</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"දà·à¶»à¶à¶®à¶±à¶º à¶à·à¶»à· à¶à·à¶±à¶ºà·."</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"දà·à¶»à¶à¶®à¶±à¶º à¶à·à¶»à· à·à¶à¶»à¶à·."</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"දà·à¶»à¶à¶®à¶±à¶ºà· à·à¶à¶¥à·à· à¶Žà·à¶»à· à¶à¶."</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"දà¶à·à¶ à¶±à·à¶."</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"දà¶à·à¶ à¶à·à¶»à· à¶à¶à¶ºà·."</string>
diff --git a/packages/SettingsLib/res/values-sk/strings.xml b/packages/SettingsLib/res/values-sk/strings.xml
index 9b143b7..47b14c3 100644
--- a/packages/SettingsLib/res/values-sk/strings.xml
+++ b/packages/SettingsLib/res/values-sk/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$s</xliff:g> do úplného nabitia"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - Nabíjanie je optimalizované"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> – nabíja sa"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATUS">%2$s</xliff:g> – Äas do nabitia: <xliff:g id="TIME">%3$s</xliff:g>"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> – Äas do úplného nabitia: <xliff:g id="TIME">%2$s</xliff:g>"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"Äas do úplného nabitia: <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"Äas do nabitia: <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"Neznáme"</string>
<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>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"Nabité"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"Úplne nabitá"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"Nabíjanie je pozastavené"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"Nabíja sa"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Nabíja sa rýchlo"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Ovládané správcom"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Ovládané obmedzeným nastavením"</string>
<string name="disabled" msgid="8017887509554714950">"Deaktivované"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"Jeden stĺpec signálu telefónnej siete."</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"Dve Äiarky signálu telefónnej siete."</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"Tri Äiarky signálu telefónnej siete."</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"Signál v telefóne má štyri Äiarky."</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"Plný signál telefónnej siete."</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"Åœiadna dátová sieÅ¥."</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"Jedna Äiarka signálu dátovej siete."</string>
diff --git a/packages/SettingsLib/res/values-sr/strings.xml b/packages/SettingsLib/res/values-sr/strings.xml
index 0437a14..0437a00 100644
--- a/packages/SettingsLib/res/values-sr/strings.xml
+++ b/packages/SettingsLib/res/values-sr/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="TIME">%2$s</xliff:g> ЎП кÑаÑа пÑÑеÑа"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> – пÑÑеÑе Ñе ПпÑОЌОзПваМП"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> – ÐÑÑеÑе"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> – <xliff:g id="STATUS">%2$s</xliff:g> – ÐПÑпÑМП МапÑÑеМП ЎП <xliff:g id="TIME">%3$s</xliff:g>"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> – ÐПÑпÑМП МапÑÑеМП ЎП <xliff:g id="TIME">%2$s</xliff:g>"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"ÐПÑпÑМП МапÑÑеМП ЎП <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"ÐапÑÑеМП ЎП <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"ÐепПзМаÑП"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"ÐÑМО Ñе"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"ÐÑзП Ñе пÑМО"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"ÐапÑÑеМП"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"ÐапÑÑеМП ЎП кÑаÑа"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"ÐÑÑеÑе Ñе Ма ÑекаÑÑ"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"ÐÑÑеÑе"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"ÐÑзП пÑÑеÑе"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"ÐПМÑÑПлОÑе аЎЌОМОÑÑÑаÑПÑ"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"ÐПМÑÑПлОÑÑ ÐŸÐ³ÑаМОÑеМа пПЎеÑаваÑа"</string>
<string name="disabled" msgid="8017887509554714950">"ÐМеЌПгÑÑеМП"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"СОгМал ÑелеÑПМа ОЌа ÑÐµÐŽÐœÑ ÑÑÑÑ."</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"СОгМал ÑелеÑПМа ПЎ Ўве ÑÑÑе."</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"СОгМал ÑелеÑПМа ПЎ ÑÑО ÑÑÑе."</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"ТелеÑПМ ОЌа ÑеÑОÑО ÑÑÑе."</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"СОгМал ÑелеÑПМа Ñе пÑМ."</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"ÐеЌа пПЎаÑака."</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"СОгМал за пПЎаÑке ОЌа ÑÐµÐŽÐœÑ ÑÑÑÑ."</string>
diff --git a/packages/SettingsLib/res/values-sw/strings.xml b/packages/SettingsLib/res/values-sw/strings.xml
index f8307e2..a0d8fb9 100644
--- a/packages/SettingsLib/res/values-sw/strings.xml
+++ b/packages/SettingsLib/res/values-sw/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> zimesalia ijae chaji"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - Hali ya kuchaji imeboreshwa"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> - Inachaji"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - Itajaa kufikia <xliff:g id="TIME">%3$s</xliff:g>"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - Betri itajaa chaji kufikia <xliff:g id="TIME">%2$s</xliff:g>"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"Betri itajaa chaji kufikia <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"Itajaa kufikia <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"Haijulikani"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"Inachaji"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Inachaji kwa kasi"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"Imechajiwa"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"Imejaa Chaji"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"Imesitisha kuchaji"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"Inachaji"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Inachaji kwa kasi"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Imedhibitiwa na msimamizi"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Imedhibitiwa na Mpangilio wenye Mipaka"</string>
<string name="disabled" msgid="8017887509554714950">"Imezimwa"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"Mwambaa mmoja wa simu."</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"Miambaa miwili ya simu"</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"Miambaa mitatu ya simu."</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"Simu ina alama nne za ishara."</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"Ishara ya simu imejaa."</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"Hakuna data."</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"Upapi mmoja wa habari"</string>
diff --git a/packages/SettingsLib/res/values-te/strings.xml b/packages/SettingsLib/res/values-te/strings.xml
index c61cf2e..33c673a 100644
--- a/packages/SettingsLib/res/values-te/strings.xml
+++ b/packages/SettingsLib/res/values-te/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g>లౠపà±à°°à±à°€à°¿à°à°Ÿ à°à°Ÿà°°à±à°à± à°
à°µà±à°€à±à°à°Šà°¿"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - à°à°Ÿà°°à±à°à°¿à°à°à± à°à°ªà±à°à°¿à°®à±à°à± à°à±à°¯à°¬à°¡à°¿à°à°Šà°¿"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> - à°à°Ÿà°°à±à°à± à°
à°µà±à°€à±à°à°Šà°¿"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - <xliff:g id="TIME">%3$s</xliff:g>à°à± à°ªà±à°°à±à°€à°µà±à°€à±à°à°Šà°¿"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g>à°à± à°ªà±à°°à±à°€à°¿à°à°Ÿ à°à°Ÿà°°à±à°à± à°
à°µà±à°€à±à°à°Šà°¿"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"<xliff:g id="TIME">%1$s</xliff:g>à°à± à°ªà±à°°à±à°€à°¿à°à°Ÿ à°à°Ÿà°°à±à°à± à°
à°µà±à°€à±à°à°Šà°¿"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"<xliff:g id="TIME">%1$s</xliff:g>à°à± à°ªà±à°°à±à°€à°µà±à°€à±à°à°Šà°¿"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"à°€à±à°²à°¿à°¯à°Šà±"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"à°à°Ÿà°°à±à°à± à°
à°µà±à°€à±à°à°Šà°¿"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"à°µà±à°à°µà°à°€à°®à±à°š à°à°Ÿà°°à±à°à°¿à°à°à±"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"à°à°Ÿà°°à±à°à± à°à±à°¯à°¬à°¡à°¿à°à°Šà°¿"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"à°ªà±à°°à±à°€à°¿ à°à°Ÿà°°à±à°à± à°
యిà°à°Šà°¿"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"à°à°Ÿà°°à±à°à°¿à°à°à± à°¹à±à°²à±à°¡à±à°²à± à°à°à°Šà°¿"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"à°à°Ÿà°°à±à°à± à°
à°µà±à°€à±à°à°Šà°¿"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"à°«à°Ÿà°žà±à°à± à°à°Ÿà°°à±à°à°¿à°à°à±"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"à°šà°¿à°°à±à°µà°Ÿà°¹à°à±à°šà°¿ à°Šà±à°µà°Ÿà°°à°Ÿ à°šà°¿à°¯à°à°€à±à°°à°¿à°à°à°¬à°¡à°¿à°à°Šà°¿"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"పరిమిఀఠà°à±à°žà°¿à°š à°žà±à°à±à°à°¿à°à°à± à°Šà±à°µà°Ÿà°°à°Ÿ à°šà°¿à°¯à°à°€à±à°°à°¿à°à°à°¬à°¡à±à°€à±à°à°Šà°¿"</string>
<string name="disabled" msgid="8017887509554714950">"à°¡à°¿à°à±à°¬à±à°²à± à°à±à°¯à°¬à°¡à°¿à°à°Šà°¿"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"à°«à±à°šà± à°à° బటరà±."</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"à°«à±à°šà± à°°à±à°à°¡à± బటరà±à°²à±."</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"à°«à±à°šà± à°®à±à°¡à± బటరà±à°²à±."</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"à°«à±à°šà±à°²à± à°šà°Ÿà°²à±à°à± బటరà±à°²à±."</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"à°«à±à°šà± à°žà°¿à°à±à°šà°²à± à°ªà±à°°à±à°€à°¿à°à°Ÿ à°à°à°Šà°¿."</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"à°¡à±à°à°Ÿ à°²à±à°Šà±."</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"à°¡à±à°à°Ÿ à°à° బటరà±."</string>
diff --git a/packages/SettingsLib/res/values-th/strings.xml b/packages/SettingsLib/res/values-th/strings.xml
index 74087e5..8910d2e 100644
--- a/packages/SettingsLib/res/values-th/strings.xml
+++ b/packages/SettingsLib/res/values-th/strings.xml
@@ -250,7 +250,7 @@
<string name="adb_wireless_settings" msgid="2295017847215680229">"àžàž²àž£à¹àžà¹à¹àžàžà¹àžàžàžàžàž£à¹àžàžàžà¹àž²àž Wi-Fi"</string>
<string name="adb_wireless_list_empty_off" msgid="1713707973837255490">"àž«àž²àžàžà¹àžàžàžàž²àž£àžàž¹à¹àž¥àž°à¹àžà¹àžàžžàžàžàž£àžà¹àžàžµà¹àž¡àžµàžàž¢àž¹à¹ à¹àž«à¹à¹àžàžŽàžàžàž²àž£à¹àžà¹à¹àžàžà¹àžàžàžàžàž£à¹àžàžàžà¹àž²àž Wi-Fi"</string>
<string name="adb_pair_method_qrcode_title" msgid="6982904096137468634">"àžàž±àžàžàž¹à¹àžàžžàžàžàž£àžà¹àžà¹àž§àž¢àžàžŽàž§àžàž²àž£à¹à¹àžà¹àž"</string>
- <string name="adb_pair_method_qrcode_summary" msgid="7130694277228970888">"àžàž±àžàžàž¹à¹àžàžžàžàžàž£àžà¹à¹àžàž£àž·à¹àžàžà¹àž«àž¡à¹à¹àžàž¢à¹àžà¹à¹àžàžàžªà¹àžàžàžàžŽàž§àžàž²àž£à¹à¹àžà¹àž"</string>
+ <string name="adb_pair_method_qrcode_summary" msgid="7130694277228970888">"àžàž±àžàžàž¹à¹àžàžžàžàžàž£àžà¹à¹àžàž£àž·à¹àžàžà¹àž«àž¡à¹à¹àžàž¢à¹àžà¹àžàž±àž§àžªà¹àžàžàžàžŽàž§àžàž²àž£à¹à¹àžà¹àž"</string>
<string name="adb_pair_method_code_title" msgid="1122590300445142904">"àžàž±àžàžàž¹à¹àžàžžàžàžàž£àžà¹àžà¹àž§àž¢àž£àž«àž±àžªàžàž²àž£àžàž±àžàžàž¹à¹"</string>
<string name="adb_pair_method_code_summary" msgid="6370414511333685185">"àžàž±àžàžàž¹à¹àžàžžàžàžàž£àžà¹à¹àžàž£àž·à¹àžàžà¹àž«àž¡à¹à¹àžàž¢à¹àžà¹àž£àž«àž±àžªàžàž±àž§à¹àž¥àž 6 àž«àž¥àž±àž"</string>
<string name="adb_paired_devices_title" msgid="5268997341526217362">"àžàžžàžàžàž£àžà¹àžàžµà¹àžàž±àžàžàž¹à¹"</string>
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> - àžàžµàž <xliff:g id="TIME">%2$s</xliff:g> àžàž¶àžàžàž°à¹àžà¹àž¡"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - àžàž£àž±àžàžàž²àž£àžàž²àž£à¹àžà¹àž«à¹à¹àž«àž¡àž²àž°àžªàž¡à¹àž¥à¹àž§"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> â àžàž³àž¥àž±àžàžàž²àž£à¹àž"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - àžàž°à¹àžà¹àž¡àž àž²àž¢à¹àž <xliff:g id="TIME">%3$s</xliff:g>"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - àžàž°àžàž²àž£à¹àžà¹àžà¹àž¡àž àž²àž¢à¹àž <xliff:g id="TIME">%2$s</xliff:g>"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"àžàž°àžàž²àž£à¹àžà¹àžà¹àž¡àž àž²àž¢à¹àž <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"àžàž°à¹àžà¹àž¡àž àž²àž¢à¹àž <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"à¹àž¡à¹àžàž£àž²àž"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"àžàž³àž¥àž±àžàžàž²àž£à¹àž"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"àžàž³àž¥àž±àžàžàž²àž£à¹àžàžàž¢à¹àž²àžà¹àž£à¹àž§"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"àžàž²àž£à¹àžà¹àž¥à¹àž§"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"àžàž²àž£à¹àžà¹àžà¹àž¡à¹àž¥à¹àž§"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"àž«àž¢àžžàžàžàž²àž£àžàž²àž£à¹àžàžàž±à¹àž§àžàž£àž²àž§"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"àžàž³àž¥àž±àžàžàž²àž£à¹àž"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"àžàž²àž£à¹àžà¹àž£à¹àž§"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"àžàž¹à¹àžàž¹à¹àž¥àž£àž°àžàžà¹àžà¹àžàžàž¹à¹àžàž§àžàžàžžàž¡"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"àžàž§àžàžàžžàž¡à¹àžàž¢àžàž²àž£àžàž±à¹àžàžà¹àž²àžàžµà¹àžàž³àžàž±àž"</string>
<string name="disabled" msgid="8017887509554714950">"àžàžŽàžàžàž¢àž¹à¹"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"àžªàž±àžàžàž²àžà¹àžàž£àžšàž±àžàžà¹àž«àžàž¶à¹àžàžàžµàž"</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"àžªàž±àžàžàž²àžà¹àžàž£àžšàž±àžàžà¹àžªàžàžàžàžµàž"</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"àžªàž±àžàžàž²àžà¹àžàž£àžšàž±àžàžà¹àžªàž²àž¡àžàžµàž"</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"àžªàž±àžàžàž²àžà¹àžàž£àžšàž±àžàžà¹ 4 àžàžµàž"</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"àžªàž±àžàžàž²àžà¹àžàž£àžšàž±àžàžà¹à¹àžà¹àž¡"</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"à¹àž¡à¹àž¡àžµàžà¹àžàž¡àž¹àž¥"</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"àžªàž±àžàžàž²àžàžà¹àžàž¡àž¹àž¥àž«àžàž¶à¹àžàžàžµàž"</string>
diff --git a/packages/SettingsLib/res/values-ur/strings.xml b/packages/SettingsLib/res/values-ur/strings.xml
index ab97d02..ee8da90 100644
--- a/packages/SettingsLib/res/values-ur/strings.xml
+++ b/packages/SettingsLib/res/values-ur/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"Ù
Ú©Ù
Ù ÚØ§Ø±Ø¬ ÛÙÙÛ Ù
ÛÚº <xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> ؚاÙÛ ÛÛ"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - ÚØ§Ø±Ø¬ÙÚ¯ Ú©Ù ØšÛØªØ± ØšÙØ§Ûا Ú¯ÛØ§"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> - ÚØ§Ø±Ø¬ Û٠رÛÛ ÛÛ"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - <xliff:g id="TIME">%3$s</xliff:g> تک Ù
Ú©Ù
Ù ÛÙ Ø¬Ø§ØŠÛ Ú¯Û"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> تک Ù
Ú©Ù
Ù ÚØ§Ø±Ø¬ ÛÙ Ø¬Ø§ØŠÛ Ú¯Û"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"<xliff:g id="TIME">%1$s</xliff:g> تک Ù
Ú©Ù
Ù ÚØ§Ø±Ø¬ ÛÙ Ø¬Ø§ØŠÛ Ú¯Û"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"<xliff:g id="TIME">%1$s</xliff:g> تک Ù
Ú©Ù
Ù ÛÙ Ø¬Ø§ØŠÛ Ú¯Û"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"ÙØ§Ù
عÙÙÙ
"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"ÚØ§Ø±Ø¬ ÛÙ Ø±ÛØ§ ÛÛ"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"ØªÛØ²Û Ø³Û ÚØ§Ø±Ø¬ ÛÙ Ø±ÛØ§ ÛÛ"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"ÚØ§Ø±Ø¬ Û٠گ؊Û"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"Ù
Ú©Ù
Ù Ø·ÙØ± ٟر ÚØ§Ø±Ø¬ Û٠گ؊Û"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"ÚØ§Ø±Ø¬ÙÚ¯ ÛÙÙÚ ÙŸØ± ÛÛ"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"ÚØ§Ø±Ø¬ Û٠رÛÛ ÛÛ"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"ÙØ§Ø³Ù¹ ÚØ§Ø±Ø¬ÙÚ¯"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Ú©ÙٹرÙÙ Ú©Ø±Ø¯Û ØšØ°Ø±ÛØ¹Û Ù
ÙØªØžÙ
"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Ù
ØØ¯Ùد Ú©Ø±Ø¯Û ØªØ±ØªÛØš Ú©Û Ø²ÛØ± Ø§ÙØªØžØ§Ù
ÛÛ"</string>
<string name="disabled" msgid="8017887509554714950">"ØºÛØ± ÙØ¹Ø§Ù"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"ÙÙ٠کا اÛÚ© ؚارÛ"</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"ÙÙÙ Ú©Û Ø¯Ù ØšØ§Ø±Ø²Û"</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"ÙÙÙ Ú©Û ØªÛ٠ؚارزÛ"</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"ÙÙÙ Ú©Û Ø³Ú¯ÙÙ Ù
ÛÚº ÚØ§Ø± ؚارزÛ"</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"ÙÙ٠سگÙÙ ÙŸÙØ±Ø§ ÛÛÛ"</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"Ú©ÙØŠÛ ÚÛٹا ÙÛÛÚº ÛÛÛ"</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"ÚÛٹا کا اÛÚ© ؚارÛ"</string>
diff --git a/packages/SettingsLib/res/values-uz/strings.xml b/packages/SettingsLib/res/values-uz/strings.xml
index 0bfa951..0559db1 100644
--- a/packages/SettingsLib/res/values-uz/strings.xml
+++ b/packages/SettingsLib/res/values-uz/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> – ToÊ»lishiga <xliff:g id="TIME">%2$s</xliff:g> qoldi"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - Quvvatlash optimallashtirildi"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> - Quvvatlanmoqda"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - Toʻladi: <xliff:g id="TIME">%3$s</xliff:g>"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - Toʻliq quvvatlanadi: <xliff:g id="TIME">%2$s</xliff:g>"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"Toʻliq quvvatlanadi: <xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"Toʻladi: <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"Noma’lum"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"Quvvat olmoqda"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Tezkor quvvat olmoqda"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"Quvvat oldi"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"Toʻliq quvvatlandi"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"Quvvatlash toʻxtatildi"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"Quvvatlanmoqda"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Tezkor quvvatlash"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Administrator tomonidan boshqariladi"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Cheklangan sozlama tomonidan boshqariladi"</string>
<string name="disabled" msgid="8017887509554714950">"Oʻchiq"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"Telefon bitta panelda."</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"Telefon ikkita panelda."</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"Telefon uchta panelda."</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"Telefon: toʻrtta ustun."</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"Telefon signali to‘liq."</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"Ma’lumotlar yo‘q."</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"Ma’lumotlar bitta panelda."</string>
diff --git a/packages/SettingsLib/res/values-zh-rHK/strings.xml b/packages/SettingsLib/res/values-zh-rHK/strings.xml
index 2054136..2545abf 100644
--- a/packages/SettingsLib/res/values-zh-rHK/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rHK/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g>åŸå
滿é»"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - å·²åªåå
é»"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> â å
é»äž"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - <xliff:g id="TIME">%3$s</xliff:g> åå
飜"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> åå
飜"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"<xliff:g id="TIME">%1$s</xliff:g> åå
飜"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"<xliff:g id="TIME">%1$s</xliff:g> åå
飜"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"æªç¥"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"å
é»äž"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"å¿«éå
é»äž"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"å·²å
滿é»"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"å
é»å®æ"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"ç®åæ«åå
é»"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"å
é»äž"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"å¿«éå
é»"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"å·²ç±ç®¡çå¡åçš"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"ç±ãåéèšå®ãæ§å¶"</string>
<string name="disabled" msgid="8017887509554714950">"å·²åçš"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"é»è©±èšè匷床çºäžæ Œã"</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"é»è©±èšè匷床çºå
©æ Œã"</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"é»è©±èšè匷床çºäžæ Œã"</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"ææ©èšèæ»¿æ Œã"</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"é»è©±èšèæ»¿æ Œã"</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"æ²ææžæç¶²çµ¡ã"</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"æžæç¶²çµ¡èšè匷床çºäžæ Œã"</string>
diff --git a/packages/SettingsLib/res/values-zh-rTW/strings.xml b/packages/SettingsLib/res/values-zh-rTW/strings.xml
index 9996577..6aa0700 100644
--- a/packages/SettingsLib/res/values-zh-rTW/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rTW/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g>åŸå
飜"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - å
黿èœå·²æäœ³å"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"<xliff:g id="LEVEL">%1$s</xliff:g> - å
é»äž"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - <xliff:g id="TIME">%3$s</xliff:g> åå
飜"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> åå
飜"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"<xliff:g id="TIME">%1$s</xliff:g> åå
飜"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"<xliff:g id="TIME">%1$s</xliff:g> åå
飜"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"äžæ"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"å
é»äž"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"å¿«éå
é»äž"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"å
é»å®æ"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"å
é»å®æ"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"ç®åæ«åå
é»"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"å
é»äž"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"å¿«éå
é»"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"å·²ç±ç®¡çå¡åçš"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"ç±åéå¶çèšå®æ§ç®¡"</string>
<string name="disabled" msgid="8017887509554714950">"å·²åçš"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"é»è©±èšèåŒ·åºŠäžæ Œã"</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"é»è©±èšè匷床å
©æ Œã"</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"é»è©±èšèåŒ·åºŠäžæ Œã"</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"ææ©èšèæ»¿æ Œã"</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"é»è©±èšèæ»¿æ Œã"</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"æ²ææžæç¶²è·¯ã"</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"æžæç¶²è·¯èšèåŒ·åºŠäžæ Œã"</string>
diff --git a/packages/SettingsLib/res/values-zu/strings.xml b/packages/SettingsLib/res/values-zu/strings.xml
index 3cac220..254f2c2 100644
--- a/packages/SettingsLib/res/values-zu/strings.xml
+++ b/packages/SettingsLib/res/values-zu/strings.xml
@@ -487,14 +487,10 @@
<string name="power_charging_duration" msgid="6127154952524919719">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> okusele kuze kugcwale"</string>
<string name="power_charging_limited" msgid="8202147604844938236">"<xliff:g id="LEVEL">%1$s</xliff:g> - Ukushaja kuthuthukisiwe"</string>
<string name="power_charging_future_paused" msgid="1809543660923642799">"Iku-<xliff:g id="LEVEL">%1$s</xliff:g> â Iyashaja"</string>
- <!-- no translation found for power_fast_charging_duration_v2 (3797735998640359490) -->
- <skip />
- <!-- no translation found for power_charging_duration_v2 (2938998284074003248) -->
- <skip />
- <!-- no translation found for power_remaining_charging_duration_only_v2 (5358176435722950193) -->
- <skip />
- <!-- no translation found for power_remaining_fast_charging_duration_only_v2 (6270950195810579563) -->
- <skip />
+ <string name="power_fast_charging_duration_v2" msgid="3797735998640359490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g> - Igcwala ngo-<xliff:g id="TIME">%3$s</xliff:g>"</string>
+ <string name="power_charging_duration_v2" msgid="2938998284074003248">"<xliff:g id="LEVEL">%1$s</xliff:g> • Ishajwe ngokugcwele ngo-<xliff:g id="TIME">%2$s</xliff:g>"</string>
+ <string name="power_remaining_charging_duration_only_v2" msgid="5358176435722950193">"Ishajwe ngokugcwele ngo-<xliff:g id="TIME">%1$s</xliff:g>"</string>
+ <string name="power_remaining_fast_charging_duration_only_v2" msgid="6270950195810579563">"Igcwala ngo-<xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="battery_info_status_unknown" msgid="268625384868401114">"Akwaziwa"</string>
<string name="battery_info_status_charging" msgid="4279958015430387405">"Iyashaja"</string>
<string name="battery_info_status_charging_fast" msgid="8027559755902954885">"Ishaja ngokushesha"</string>
@@ -506,10 +502,8 @@
<string name="battery_info_status_full" msgid="1339002294876531312">"Kushajiwe"</string>
<string name="battery_info_status_full_charged" msgid="3536054261505567948">"Ishaje Ngokuphelele"</string>
<string name="battery_info_status_charging_on_hold" msgid="6364355145521694438">"Ukushaja kumisiwe"</string>
- <!-- no translation found for battery_info_status_charging_v2 (6118522107222245505) -->
- <skip />
- <!-- no translation found for battery_info_status_charging_fast_v2 (1825439848151256589) -->
- <skip />
+ <string name="battery_info_status_charging_v2" msgid="6118522107222245505">"Iyashaja"</string>
+ <string name="battery_info_status_charging_fast_v2" msgid="1825439848151256589">"Ishaja ngokushesha"</string>
<string name="disabled_by_admin_summary_text" msgid="5343911767402923057">"Kulawulwa umqondisi"</string>
<string name="disabled_by_app_ops_text" msgid="8373595926549098012">"Kulawulwe Isethingi Elikhawulelwe"</string>
<string name="disabled" msgid="8017887509554714950">"Akusebenzi"</string>
@@ -696,8 +690,7 @@
<string name="accessibility_phone_one_bar" msgid="5719721147018970063">"Ibha eyodwa yefoni"</string>
<string name="accessibility_phone_two_bars" msgid="2531458337458953263">"Amabha amabilil efoni."</string>
<string name="accessibility_phone_three_bars" msgid="1523967995996696619">"Amabha amathathu efoni"</string>
- <!-- no translation found for accessibility_phone_four_bars (4477202400261338403) -->
- <skip />
+ <string name="accessibility_phone_four_bars" msgid="4477202400261338403">"Amabha amane efoni."</string>
<string name="accessibility_phone_signal_full" msgid="4302338883816077134">"Isiginali yefoni igcwele"</string>
<string name="accessibility_no_data" msgid="4563181886936931008">"Ayikho idatha."</string>
<string name="accessibility_data_one_bar" msgid="6892888138070752480">"Idatha enye yebha"</string>
diff --git a/packages/SettingsLib/res/values/strings.xml b/packages/SettingsLib/res/values/strings.xml
index fbbed92..73c96d9 100644
--- a/packages/SettingsLib/res/values/strings.xml
+++ b/packages/SettingsLib/res/values/strings.xml
@@ -197,19 +197,23 @@
<string name="bluetooth_connected_no_headset_no_a2dp_battery_level">Connected (no phone or media), battery <xliff:g id="battery_level_as_percentage">%1$s</xliff:g><xliff:g id="active_device">%2$s</xliff:g></string>
<!-- Connected devices settings. Message when Bluetooth is connected and active, showing remote device status and battery level. [CHAR LIMIT=NONE] -->
- <string name="bluetooth_active_battery_level">Active, <xliff:g id="battery_level_as_percentage">%1$s</xliff:g> battery</string>
+ <string name="bluetooth_active_battery_level">Active. <xliff:g id="battery_level_as_percentage">%1$s</xliff:g> battery.</string>
<!-- Connected devices settings. Message when Bluetooth is connected and active, showing remote device status and battery level for untethered headset. [CHAR LIMIT=NONE] -->
- <string name="bluetooth_active_battery_level_untethered">Active, L: <xliff:g id="battery_level_as_percentage" example="25%">%1$s</xliff:g> battery, R: <xliff:g id="battery_level_as_percentage" example="25%">%2$s</xliff:g> battery</string>
+ <string name="bluetooth_active_battery_level_untethered">Active. L: <xliff:g id="battery_level_as_percentage" example="25%">%1$s</xliff:g>, R: <xliff:g id="battery_level_as_percentage" example="25%">%2$s</xliff:g> battery.</string>
+ <!-- Connected devices settings. Message when Bluetooth is connected and active, showing remote device status and battery level for the left part of the untethered headset. [CHAR LIMIT=NONE] -->
+ <string name="bluetooth_active_battery_level_untethered_left">Active. L: <xliff:g id="battery_level_as_percentage" example="25%">%1$s</xliff:g> battery</string>
+ <!-- Connected devices settings. Message when Bluetooth is connected and active, showing remote device status and battery level for the right part of the untethered headset. [CHAR LIMIT=NONE] -->
+ <string name="bluetooth_active_battery_level_untethered_right">Active. R: <xliff:g id="battery_level_as_percentage" example="25%">%1$s</xliff:g> battery</string>
<!-- Connected devices settings. Message when Bluetooth is connected but not in use, showing remote device battery level. [CHAR LIMIT=NONE] -->
<string name="bluetooth_battery_level"><xliff:g id="battery_level_as_percentage">%1$s</xliff:g> battery</string>
<!-- Connected devices settings. Message on TV when Bluetooth is connected but not in use, showing remote device battery level. [CHAR LIMIT=NONE] -->
<string name="tv_bluetooth_battery_level">Battery <xliff:g id="battery_level_as_percentage">%1$s</xliff:g></string>
<!-- Connected devices settings. Message when Bluetooth is connected but not in use, showing remote device battery level for untethered headset. [CHAR LIMIT=NONE] -->
- <string name="bluetooth_battery_level_untethered">L: <xliff:g id="battery_level_as_percentage" example="25%">%1$s</xliff:g> battery, R: <xliff:g id="battery_level_as_percentage" example="25%">%2$s</xliff:g> battery</string>
+ <string name="bluetooth_battery_level_untethered">L: <xliff:g id="battery_level_as_percentage" example="25%">%1$s</xliff:g>, R: <xliff:g id="battery_level_as_percentage" example="25%">%2$s</xliff:g> battery.</string>
<!-- Connected devices settings. Message when Bluetooth is connected but not in use, showing remote device battery level for the left part of the untethered headset. [CHAR LIMIT=NONE] -->
- <string name="bluetooth_battery_level_untethered_left">Left <xliff:g id="battery_level_as_percentage" example="25%">%1$s</xliff:g></string>
+ <string name="bluetooth_battery_level_untethered_left">Left: <xliff:g id="battery_level_as_percentage" example="25%">%1$s</xliff:g> battery</string>
<!-- Connected devices settings. Message when Bluetooth is connected but not in use, showing remote device battery level for the right part of the untethered headset. [CHAR LIMIT=NONE] -->
- <string name="bluetooth_battery_level_untethered_right">Right <xliff:g id="battery_level_as_percentage" example="25%">%1$s</xliff:g></string>
+ <string name="bluetooth_battery_level_untethered_right">Right: <xliff:g id="battery_level_as_percentage" example="25%">%1$s</xliff:g> battery</string>
<!-- Connected devices settings. Message when Bluetooth is connected and active but no battery information, showing remote device status. [CHAR LIMIT=NONE] -->
<string name="bluetooth_active_no_battery_level">Active</string>
<!-- Connected devices settings. Message shown when bluetooth device is disconnected but is a known, previously connected device [CHAR LIMIT=NONE] -->
@@ -223,17 +227,19 @@
<string name="bluetooth_hearing_aid_left_and_right_active">Active, left and right</string>
<!-- Connected devices settings. Message when Bluetooth is connected and active for media only, showing remote device status and battery level. [CHAR LIMIT=NONE] -->
- <string name="bluetooth_active_media_only_battery_level">Active (media only), <xliff:g id="battery_level_as_percentage">%1$s</xliff:g> battery</string>
+ <string name="bluetooth_active_media_only_battery_level">Active (media only). <xliff:g id="battery_level_as_percentage">%1$s</xliff:g> battery.</string>
<!-- Connected devices settings. Message when Bluetooth is connected and active for media only, showing remote device status and battery level for untethered headset. [CHAR LIMIT=NONE] -->
- <string name="bluetooth_active_media_only_battery_level_untethered">Active (media only), L: <xliff:g id="battery_level_as_percentage" example="25%">%1$s</xliff:g> battery, R: <xliff:g id="battery_level_as_percentage" example="25%">%2$s</xliff:g> battery</string>
+ <string name="bluetooth_active_media_only_battery_level_untethered">Active (media only). L: <xliff:g id="battery_level_as_percentage" example="25%">%1$s</xliff:g>, R: <xliff:g id="battery_level_as_percentage" example="25%">%2$s</xliff:g> battery.</string>
<!-- Connected devices settings. Message when Bluetooth is connected but not in use, showing remote device battery level, supports audio sharing. [CHAR LIMIT=NONE] -->
- <string name="bluetooth_battery_level_lea_support">Connected (supports audio sharing), <xliff:g id="battery_level_as_percentage">%1$s</xliff:g> battery</string>
+ <string name="bluetooth_battery_level_lea_support">Connected (supports audio sharing). <xliff:g id="battery_level_as_percentage">%1$s</xliff:g> battery.</string>
<!-- Connected devices settings. Message when Bluetooth is connected but not in use, showing remote device battery level for untethered headset, supports audio sharing. [CHAR LIMIT=NONE] -->
- <string name="bluetooth_battery_level_untethered_lea_support">Connected (supports audio sharing), L: <xliff:g id="battery_level_as_percentage" example="25%">%1$s</xliff:g> battery, R: <xliff:g id="battery_level_as_percentage" example="25%">%2$s</xliff:g> battery</string>
+ <string name="bluetooth_battery_level_untethered_lea_support">Connected (supports audio sharing). L: <xliff:g id="battery_level_as_percentage" example="25%">%1$s</xliff:g>, R: <xliff:g id="battery_level_as_percentage" example="25%">%2$s</xliff:g> battery.</string>
<!-- Connected devices settings. Message when Bluetooth is connected but not in use, showing remote device battery level for the left part of the untethered headset, supports audio sharing. [CHAR LIMIT=NONE] -->
- <string name="bluetooth_battery_level_untethered_left_lea_support">Connected (supports audio sharing), left <xliff:g id="battery_level_as_percentage" example="25%">%1$s</xliff:g></string>
+ <string name="bluetooth_battery_level_untethered_left_lea_support">Connected (supports audio sharing). Left: <xliff:g id="battery_level_as_percentage" example="25%">%1$s</xliff:g> battery.</string>
<!-- Connected devices settings. Message when Bluetooth is connected but not in use, showing remote device battery level for the right part of the untethered headset, supports audio sharing. [CHAR LIMIT=NONE] -->
- <string name="bluetooth_battery_level_untethered_right_lea_support">Connected (supports audio sharing), right <xliff:g id="battery_level_as_percentage" example="25%">%1$s</xliff:g></string>
+ <string name="bluetooth_battery_level_untethered_right_lea_support">Connected (supports audio sharing). Right: <xliff:g id="battery_level_as_percentage" example="25%">%1$s</xliff:g> battery.</string>
+ <!-- Connected devices settings. Message when Bluetooth is connected but not in use, showing no battery information, supports audio sharing. [CHAR LIMIT=NONE] -->
+ <string name="bluetooth_no_battery_level_lea_support">Connected (supports audio sharing)</string>
<!-- Connected devices settings. Message when Bluetooth is connected and active for media only but no battery information, showing remote device status. [CHAR LIMIT=NONE] -->
<string name="bluetooth_active_media_only_no_battery_level">Active (media only)</string>
<!-- Connected devices settings. Message shown when bluetooth device is disconnected but is a known, previously connected device, supports audio sharing [CHAR LIMIT=NONE] -->
diff --git a/packages/SettingsLib/src/com/android/settingslib/Utils.java b/packages/SettingsLib/src/com/android/settingslib/Utils.java
index 563f02d..c2506d3 100644
--- a/packages/SettingsLib/src/com/android/settingslib/Utils.java
+++ b/packages/SettingsLib/src/com/android/settingslib/Utils.java
@@ -765,7 +765,11 @@
return false;
}
- final List<UsbPort> usbPortList = context.getSystemService(UsbManager.class).getPorts();
+ final UsbManager usbManager = context.getSystemService(UsbManager.class);
+ if (usbManager == null) {
+ return false;
+ }
+ final List<UsbPort> usbPortList = usbManager.getPorts();
if (usbPortList == null || usbPortList.isEmpty()) {
return false;
}
diff --git a/packages/SettingsLib/src/com/android/settingslib/accounts/AuthenticatorHelper.java b/packages/SettingsLib/src/com/android/settingslib/accounts/AuthenticatorHelper.java
index 4af9e3c..2f6d839 100644
--- a/packages/SettingsLib/src/com/android/settingslib/accounts/AuthenticatorHelper.java
+++ b/packages/SettingsLib/src/com/android/settingslib/accounts/AuthenticatorHelper.java
@@ -106,8 +106,7 @@
AuthenticatorDescription desc = mTypeToAuthDescription.get(accountType);
Context authContext = context.createPackageContextAsUser(desc.packageName, 0,
mUserHandle);
- icon = mContext.getPackageManager().getUserBadgedIcon(
- authContext.getDrawable(desc.iconId), mUserHandle);
+ icon = authContext.getDrawable(desc.iconId);
synchronized (mAccTypeIconCache) {
mAccTypeIconCache.put(accountType, icon);
}
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothUtils.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothUtils.java
index a906875..3dffb27 100644
--- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothUtils.java
+++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothUtils.java
@@ -534,11 +534,16 @@
/** Returns if the le audio sharing is enabled. */
public static boolean isAudioSharingEnabled() {
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
- return Flags.enableLeAudioSharing()
- && adapter.isLeAudioBroadcastSourceSupported()
- == BluetoothStatusCodes.FEATURE_SUPPORTED
- && adapter.isLeAudioBroadcastAssistantSupported()
- == BluetoothStatusCodes.FEATURE_SUPPORTED;
+ try {
+ return Flags.enableLeAudioSharing()
+ && adapter.isLeAudioBroadcastSourceSupported()
+ == BluetoothStatusCodes.FEATURE_SUPPORTED
+ && adapter.isLeAudioBroadcastAssistantSupported()
+ == BluetoothStatusCodes.FEATURE_SUPPORTED;
+ } catch (IllegalStateException e) {
+ Log.d(TAG, "LE state is on, but there is no bluetooth service.", e);
+ return false;
+ }
}
/** Returns if the broadcast is on-going. */
@@ -790,4 +795,27 @@
public static Set<String> getExclusiveManagers() {
return EXCLUSIVE_MANAGERS;
}
+
+ /**
+ * Get CSIP group id for {@link CachedBluetoothDevice}.
+ *
+ * <p>If CachedBluetoothDevice#getGroupId is invalid, fetch group id from
+ * LeAudioProfile#getGroupId.
+ */
+ public static int getGroupId(@NonNull CachedBluetoothDevice cachedDevice) {
+ int groupId = cachedDevice.getGroupId();
+ String anonymizedAddress = cachedDevice.getDevice().getAnonymizedAddress();
+ if (groupId != BluetoothCsipSetCoordinator.GROUP_ID_INVALID) {
+ Log.d(TAG, "getGroupId by CSIP profile for device: " + anonymizedAddress);
+ return groupId;
+ }
+ for (LocalBluetoothProfile profile : cachedDevice.getProfiles()) {
+ if (profile instanceof LeAudioProfile) {
+ Log.d(TAG, "getGroupId by LEA profile for device: " + anonymizedAddress);
+ return ((LeAudioProfile) profile).getGroupId(cachedDevice.getDevice());
+ }
+ }
+ Log.d(TAG, "getGroupId return invalid id for device: " + anonymizedAddress);
+ return BluetoothCsipSetCoordinator.GROUP_ID_INVALID;
+ }
}
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java
index 04516eb..a7b7da5 100644
--- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java
+++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/CachedBluetoothDevice.java
@@ -19,6 +19,7 @@
import static com.android.settingslib.flags.Flags.enableSetPreferredTransportForLeAudioDevice;
import android.annotation.CallbackExecutor;
+import android.annotation.StringRes;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothClass;
import android.bluetooth.BluetoothCsipSetCoordinator;
@@ -37,6 +38,7 @@
import android.os.Message;
import android.os.ParcelUuid;
import android.os.SystemClock;
+import android.provider.Settings;
import android.text.SpannableStringBuilder;
import android.text.TextUtils;
import android.text.style.ForegroundColorSpan;
@@ -45,6 +47,7 @@
import android.util.Pair;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import com.android.internal.util.ArrayUtils;
@@ -102,6 +105,7 @@
private HearingAidInfo mHearingAidInfo;
private int mGroupId;
private Timestamp mBondTimestamp;
+ private LocalBluetoothManager mBluetoothManager;
// Need this since there is no method for getting RSSI
short mRssi;
@@ -722,6 +726,25 @@
.orElse(BluetoothDevice.BATTERY_LEVEL_UNKNOWN);
}
+ /**
+ * Get the lowest battery level from remote device and its member devices if it's greater than
+ * BluetoothDevice.BATTERY_LEVEL_UNKNOWN.
+ *
+ * <p>Android framework should only set mBatteryLevel to valid range [0-100],
+ * BluetoothDevice.BATTERY_LEVEL_BLUETOOTH_OFF, or BluetoothDevice.BATTERY_LEVEL_UNKNOWN, any
+ * other value should be a framework bug. Thus assume here that if value is greater than
+ * BluetoothDevice.BATTERY_LEVEL_UNKNOWN, it must be valid
+ *
+ * @return battery level in String [0-100] or Null if this lower than
+ * BluetoothDevice.BATTERY_LEVEL_UNKNOWN
+ */
+ @Nullable
+ private String getValidMinBatteryLevelWithMemberDevices() {
+ final int batteryLevel = getMinBatteryLevelWithMemberDevices();
+ return batteryLevel > BluetoothDevice.BATTERY_LEVEL_UNKNOWN
+ ? com.android.settingslib.Utils.formatPercentage(batteryLevel)
+ : null;
+ }
void refresh() {
ListenableFuture<Void> future = ThreadUtils.getBackgroundExecutor().submit(() -> {
@@ -1194,22 +1217,148 @@
}
/**
- * Return summary that describes connection state of this device. Summary depends on:
- * 1. Whether device has battery info
- * 2. Whether device is in active usage(or in phone call)
+ * Return summary that describes connection state of this device. Summary depends on: 1. Whether
+ * device has battery info 2. Whether device is in active usage(or in phone call) 3. Whether
+ * device is in audio sharing process
*
* @param shortSummary {@code true} if need to return short version summary
*/
public String getConnectionSummary(boolean shortSummary) {
- CharSequence summary = getConnectionSummary(shortSummary, false /* isTvSummary */,
- SUMMARY_NO_COLOR_FOR_LOW_BATTERY);
- if (summary != null) {
- return summary.toString();
+ CharSequence summary = null;
+ if (BluetoothUtils.isAudioSharingEnabled()) {
+ if (mBluetoothManager == null) {
+ mBluetoothManager = LocalBluetoothManager.getInstance(mContext, null);
+ }
+ if (BluetoothUtils.isBroadcasting(mBluetoothManager)) {
+ summary = getBroadcastConnectionSummary(shortSummary);
+ }
+ }
+ if (summary == null) {
+ summary =
+ getConnectionSummary(
+ shortSummary,
+ false /* isTvSummary */,
+ SUMMARY_NO_COLOR_FOR_LOW_BATTERY);
+ }
+ return summary != null ? summary.toString() : null;
+ }
+
+ /**
+ * Returns the connection summary of this device during le audio sharing.
+ *
+ * @param shortSummary {@code true} if need to return short version summary
+ */
+ @Nullable
+ private String getBroadcastConnectionSummary(boolean shortSummary) {
+ if (isProfileConnectedFail() && isConnected()) {
+ return mContext.getString(R.string.profile_connect_timeout_subtext);
+ }
+
+ synchronized (mProfileLock) {
+ for (LocalBluetoothProfile profile : getProfiles()) {
+ int connectionStatus = getProfileConnectionState(profile);
+ if (connectionStatus == BluetoothProfile.STATE_CONNECTING
+ || connectionStatus == BluetoothProfile.STATE_DISCONNECTING) {
+ return mContext.getString(
+ BluetoothUtils.getConnectionStateSummary(connectionStatus));
+ }
+ }
+ }
+
+ int leftBattery =
+ BluetoothUtils.getIntMetaData(
+ mDevice, BluetoothDevice.METADATA_UNTETHERED_LEFT_BATTERY);
+ int rightBattery =
+ BluetoothUtils.getIntMetaData(
+ mDevice, BluetoothDevice.METADATA_UNTETHERED_RIGHT_BATTERY);
+ String batteryLevelPercentageString = getValidMinBatteryLevelWithMemberDevices();
+
+ if (mBluetoothManager == null) {
+ mBluetoothManager = LocalBluetoothManager.getInstance(mContext, null);
+ }
+ if (BluetoothUtils.hasConnectedBroadcastSource(this, mBluetoothManager)) {
+ // Gets summary for the buds which are in the audio sharing.
+ int groupId = BluetoothUtils.getGroupId(this);
+ if (groupId != BluetoothCsipSetCoordinator.GROUP_ID_INVALID
+ && groupId
+ == Settings.Secure.getInt(
+ mContext.getContentResolver(),
+ "bluetooth_le_broadcast_fallback_active_group_id",
+ BluetoothCsipSetCoordinator.GROUP_ID_INVALID)) {
+ // The buds are primary buds
+ return getSummaryWithBatteryInfo(
+ R.string.bluetooth_active_battery_level_untethered,
+ R.string.bluetooth_active_battery_level,
+ R.string.bluetooth_active_no_battery_level,
+ leftBattery,
+ rightBattery,
+ batteryLevelPercentageString,
+ shortSummary);
+ } else {
+ // The buds are not primary buds
+ return getSummaryWithBatteryInfo(
+ R.string.bluetooth_active_media_only_battery_level_untethered,
+ R.string.bluetooth_active_media_only_battery_level,
+ R.string.bluetooth_active_media_only_no_battery_level,
+ leftBattery,
+ rightBattery,
+ batteryLevelPercentageString,
+ shortSummary);
+ }
+ } else {
+ // Gets summary for the buds which are not in the audio sharing.
+ if (getProfiles().stream()
+ .anyMatch(
+ profile ->
+ profile instanceof LeAudioProfile
+ && profile.isEnabled(getDevice()))) {
+ // The buds support le audio.
+ if (isConnected()) {
+ return getSummaryWithBatteryInfo(
+ R.string.bluetooth_battery_level_untethered_lea_support,
+ R.string.bluetooth_battery_level_lea_support,
+ R.string.bluetooth_no_battery_level_lea_support,
+ leftBattery,
+ rightBattery,
+ batteryLevelPercentageString,
+ shortSummary);
+ } else {
+ return mContext.getString(R.string.bluetooth_saved_device_lea_support);
+ }
+ }
}
return null;
}
/**
+ * Returns the summary with correct format depending the battery info.
+ *
+ * @param untetheredBatteryResId resource id for untethered device with battery info
+ * @param batteryResId resource id for device with single battery info
+ * @param noBatteryResId resource id for device with no battery info
+ * @param shortSummary {@code true} if need to return short version summary
+ */
+ private String getSummaryWithBatteryInfo(
+ @StringRes int untetheredBatteryResId,
+ @StringRes int batteryResId,
+ @StringRes int noBatteryResId,
+ int leftBattery,
+ int rightBattery,
+ String batteryLevelPercentageString,
+ boolean shortSummary) {
+ if (isTwsBatteryAvailable(leftBattery, rightBattery) && !shortSummary) {
+ return mContext.getString(
+ untetheredBatteryResId,
+ Utils.formatPercentage(leftBattery),
+ Utils.formatPercentage(rightBattery));
+ } else if (batteryLevelPercentageString != null && !shortSummary) {
+ return mContext.getString(batteryResId, batteryLevelPercentageString);
+ } else {
+ return mContext.getString(noBatteryResId);
+ }
+ }
+
+ /**
* Returns android tv string that describes the connection state of this device.
*/
public CharSequence getTvConnectionSummary() {
@@ -1286,18 +1435,7 @@
}
}
- String batteryLevelPercentageString = null;
- // Android framework should only set mBatteryLevel to valid range [0-100],
- // BluetoothDevice.BATTERY_LEVEL_BLUETOOTH_OFF, or BluetoothDevice.BATTERY_LEVEL_UNKNOWN,
- // any other value should be a framework bug. Thus assume here that if value is greater
- // than BluetoothDevice.BATTERY_LEVEL_UNKNOWN, it must be valid
- final int batteryLevel = getMinBatteryLevelWithMemberDevices();
- if (batteryLevel > BluetoothDevice.BATTERY_LEVEL_UNKNOWN) {
- // TODO: name com.android.settingslib.bluetooth.Utils something different
- batteryLevelPercentageString =
- com.android.settingslib.Utils.formatPercentage(batteryLevel);
- }
-
+ String batteryLevelPercentageString = getValidMinBatteryLevelWithMemberDevices();
int stringRes = R.string.bluetooth_pairing;
//when profile is connected, information would be available
if (profileConnected) {
@@ -1338,30 +1476,13 @@
}
}
- // Try to show left/right information if can not get it from battery for hearing
+ // Try to show left/right information for hearing
// aids specifically.
boolean isActiveAshaHearingAid = mIsActiveDeviceHearingAid;
boolean isActiveLeAudioHearingAid = mIsActiveDeviceLeAudio
&& isConnectedHapClientDevice();
if (isActiveAshaHearingAid || isActiveLeAudioHearingAid) {
- final Set<CachedBluetoothDevice> memberDevices = getMemberDevice();
- final CachedBluetoothDevice subDevice = getSubDevice();
- if (memberDevices.stream().anyMatch(m -> m.isConnected())) {
- stringRes = R.string.bluetooth_hearing_aid_left_and_right_active;
- } else if (subDevice != null && subDevice.isConnected()) {
- stringRes = R.string.bluetooth_hearing_aid_left_and_right_active;
- } else {
- int deviceSide = getDeviceSide();
- if (deviceSide == HearingAidInfo.DeviceSide.SIDE_LEFT_AND_RIGHT) {
- stringRes = R.string.bluetooth_hearing_aid_left_and_right_active;
- } else if (deviceSide == HearingAidInfo.DeviceSide.SIDE_LEFT) {
- stringRes = R.string.bluetooth_hearing_aid_left_active;
- } else if (deviceSide == HearingAidInfo.DeviceSide.SIDE_RIGHT) {
- stringRes = R.string.bluetooth_hearing_aid_right_active;
- } else {
- stringRes = R.string.bluetooth_active_no_battery_level;
- }
- }
+ return getHearingDeviceSummary(leftBattery, rightBattery, shortSummary);
}
}
}
@@ -1376,7 +1497,11 @@
|| stringRes == R.string.bluetooth_active_battery_level_untethered
|| stringRes == R.string.bluetooth_battery_level_untethered;
if (isTvSummary && summaryIncludesBatteryLevel && Flags.enableTvMediaOutputDialog()) {
- return getTvBatterySummary(batteryLevel, leftBattery, rightBattery, lowBatteryColorRes);
+ return getTvBatterySummary(
+ getMinBatteryLevelWithMemberDevices(),
+ leftBattery,
+ rightBattery,
+ lowBatteryColorRes);
}
if (isTwsBatteryAvailable(leftBattery, rightBattery)) {
@@ -1425,6 +1550,62 @@
return spannableBuilder;
}
+ private CharSequence getHearingDeviceSummary(int leftBattery, int rightBattery,
+ boolean shortSummary) {
+
+ CachedBluetoothDevice memberDevice = getMemberDevice().stream().filter(
+ CachedBluetoothDevice::isConnected).findFirst().orElse(null);
+ if (memberDevice == null && mSubDevice != null && mSubDevice.isConnected()) {
+ memberDevice = mSubDevice;
+ }
+
+ CachedBluetoothDevice leftDevice = null;
+ CachedBluetoothDevice rightDevice = null;
+ final int deviceSide = getDeviceSide();
+ if (deviceSide == HearingAidInfo.DeviceSide.SIDE_LEFT) {
+ leftDevice = this;
+ rightDevice = memberDevice;
+ } else if (deviceSide == HearingAidInfo.DeviceSide.SIDE_RIGHT) {
+ leftDevice = memberDevice;
+ rightDevice = this;
+ } else if (deviceSide == HearingAidInfo.DeviceSide.SIDE_LEFT_AND_RIGHT) {
+ leftDevice = this;
+ rightDevice = this;
+ }
+
+ if (leftBattery < 0 && leftDevice != null) {
+ leftBattery = leftDevice.getBatteryLevel();
+ }
+ if (rightBattery < 0 && rightDevice != null) {
+ rightBattery = rightDevice.getBatteryLevel();
+ }
+
+ if (leftDevice != null && rightDevice != null) {
+ if (leftBattery >= 0 && rightBattery >= 0 && !shortSummary) {
+ return mContext.getString(R.string.bluetooth_active_battery_level_untethered,
+ Utils.formatPercentage(leftBattery), Utils.formatPercentage(rightBattery));
+ } else {
+ return mContext.getString(R.string.bluetooth_hearing_aid_left_and_right_active);
+ }
+ } else if (leftDevice != null) {
+ if (leftBattery >= 0 && !shortSummary) {
+ return mContext.getString(R.string.bluetooth_active_battery_level_untethered_left,
+ Utils.formatPercentage(leftBattery));
+ } else {
+ return mContext.getString(R.string.bluetooth_hearing_aid_left_active);
+ }
+ } else if (rightDevice != null) {
+ if (rightBattery >= 0 && !shortSummary) {
+ return mContext.getString(R.string.bluetooth_active_battery_level_untethered_right,
+ Utils.formatPercentage(rightBattery));
+ } else {
+ return mContext.getString(R.string.bluetooth_hearing_aid_right_active);
+ }
+ }
+
+ return mContext.getString(R.string.bluetooth_active_no_battery_level);
+ }
+
private void addBatterySpan(SpannableStringBuilder builder,
String batteryString, boolean lowBattery, int lowBatteryColorRes) {
if (lowBattery && lowBatteryColorRes != SUMMARY_NO_COLOR_FOR_LOW_BATTERY) {
@@ -1793,4 +1974,9 @@
boolean getUnpairing() {
return mUnpairing;
}
+
+ @VisibleForTesting
+ void setLocalBluetoothManager(LocalBluetoothManager bluetoothManager) {
+ mBluetoothManager = bluetoothManager;
+ }
}
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothLeBroadcast.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothLeBroadcast.java
index 9df23aa..a6b1dd3 100644
--- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothLeBroadcast.java
+++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/LocalBluetoothLeBroadcast.java
@@ -292,7 +292,6 @@
+ ", sourceId = "
+ sourceId);
}
- updateFallbackActiveDeviceIfNeeded();
}
@Override
@@ -314,7 +313,18 @@
public void onSourceAddFailed(
@NonNull BluetoothDevice sink,
@NonNull BluetoothLeBroadcastMetadata source,
- int reason) {}
+ int reason) {
+ if (DEBUG) {
+ Log.d(
+ TAG,
+ "onSourceAddFailed(), sink = "
+ + sink
+ + ", reason = "
+ + reason
+ + ", source = "
+ + source);
+ }
+ }
@Override
public void onSourceModified(
@@ -369,6 +379,9 @@
+ ", state = "
+ state);
}
+ if (BluetoothUtils.isConnected(state)) {
+ updateFallbackActiveDeviceIfNeeded();
+ }
}
};
@@ -1056,7 +1069,9 @@
List<BluetoothLeBroadcastReceiveState> sourceList =
mServiceBroadcastAssistant.getAllSources(
bluetoothDevice);
- return !sourceList.isEmpty();
+ return !sourceList.isEmpty()
+ && sourceList.stream()
+ .anyMatch(BluetoothUtils::isConnected);
})
.collect(Collectors.toList());
if (devicesInSharing.isEmpty()) {
@@ -1091,7 +1106,8 @@
return;
}
int fallbackActiveGroupId = getFallbackActiveGroupId();
- if (getGroupId(targetCachedDevice) == fallbackActiveGroupId) {
+ if (fallbackActiveGroupId != BluetoothCsipSetCoordinator.GROUP_ID_INVALID
+ && getGroupId(targetCachedDevice) == fallbackActiveGroupId) {
Log.d(
TAG,
"Skip updateFallbackActiveDeviceIfNeeded, already is fallback: "
@@ -1101,12 +1117,6 @@
targetCachedDevice.setActive();
}
- private boolean isDecryptedSource(BluetoothLeBroadcastReceiveState state) {
- return state.getPaSyncState() == BluetoothLeBroadcastReceiveState.PA_SYNC_STATE_SYNCHRONIZED
- && state.getBigEncryptionState()
- == BluetoothLeBroadcastReceiveState.BIG_ENCRYPTION_STATE_DECRYPTING;
- }
-
private int getFallbackActiveGroupId() {
return Settings.Secure.getInt(
mContext.getContentResolver(),
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiUtils.kt b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiUtils.kt
index d5444cf..727c61c 100644
--- a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiUtils.kt
+++ b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiUtils.kt
@@ -28,19 +28,21 @@
import android.os.Bundle
import android.os.SystemClock
import android.util.Log
+import android.view.WindowManager
import androidx.annotation.VisibleForTesting
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.lifecycleScope
import com.android.settingslib.R
import com.android.settingslib.flags.Flags.newStatusBarIcons
-import java.util.Locale
-import kotlin.coroutines.resume
+import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.Job
import kotlinx.coroutines.asExecutor
import kotlinx.coroutines.launch
import kotlinx.coroutines.suspendCancellableCoroutine
import kotlinx.coroutines.withContext
-
+import java.util.Locale
+import kotlin.coroutines.resume
open class WifiUtils {
/**
@@ -473,9 +475,28 @@
context: Context,
lifecycleOwner: LifecycleOwner,
ssid: String,
- onAllowed: () -> Unit,
+ onAllowed: () -> Unit
) {
- lifecycleOwner.lifecycleScope.launch {
+ checkWepAllowed(
+ context,
+ lifecycleOwner.lifecycleScope,
+ ssid,
+ WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW,
+ { intent -> context.startActivity(intent) },
+ onAllowed
+ )
+ }
+
+ @JvmStatic
+ fun checkWepAllowed(
+ context: Context,
+ coroutineScope: CoroutineScope,
+ ssid: String,
+ dialogWindowType: Int,
+ onStartActivity: (intent: Intent) -> Unit,
+ onAllowed: () -> Unit,
+ ): Job =
+ coroutineScope.launch {
val wifiManager = context.getSystemService(WifiManager::class.java) ?: return@launch
if (wifiManager.queryWepAllowed()) {
onAllowed()
@@ -485,12 +506,12 @@
"com.android.settings",
"com.android.settings.network.WepNetworkDialogActivity"
)
+ putExtra(DIALOG_WINDOW_TYPE, dialogWindowType)
putExtra(SSID, ssid)
- }
- context.startActivity(intent)
+ }.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+ onStartActivity(intent)
}
}
- }
private suspend fun WifiManager.queryWepAllowed(): Boolean =
withContext(Dispatchers.Default) {
@@ -502,5 +523,6 @@
}
const val SSID = "ssid"
+ const val DIALOG_WINDOW_TYPE = "dialog_window_type"
}
}
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceTest.java
index 646e9eb..c13c493 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/CachedBluetoothDeviceTest.java
@@ -15,6 +15,7 @@
*/
package com.android.settingslib.bluetooth;
+import static com.android.settingslib.flags.Flags.FLAG_ENABLE_LE_AUDIO_SHARING;
import static com.android.settingslib.flags.Flags.FLAG_ENABLE_SET_PREFERRED_TRANSPORT_FOR_LE_AUDIO_DEVICE;
import static com.google.common.truth.Truth.assertThat;
@@ -30,14 +31,17 @@
import static org.mockito.Mockito.when;
import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothCsipSetCoordinator;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothLeAudio;
+import android.bluetooth.BluetoothLeBroadcastReceiveState;
import android.bluetooth.BluetoothProfile;
import android.bluetooth.BluetoothStatusCodes;
import android.content.Context;
import android.graphics.drawable.BitmapDrawable;
import android.media.AudioManager;
import android.platform.test.flag.junit.SetFlagsRule;
+import android.provider.Settings;
import android.text.Spannable;
import android.text.style.ForegroundColorSpan;
import android.util.LruCache;
@@ -47,6 +51,8 @@
import com.android.settingslib.testutils.shadow.ShadowBluetoothAdapter;
import com.android.settingslib.widget.AdaptiveOutlineDrawable;
+import com.google.common.collect.ImmutableList;
+
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -58,6 +64,9 @@
import org.robolectric.annotation.Config;
import org.robolectric.shadow.api.Shadow;
+import java.util.ArrayList;
+import java.util.List;
+
@RunWith(RobolectricTestRunner.class)
@Config(shadows = {ShadowBluetoothAdapter.class})
public class CachedBluetoothDeviceTest {
@@ -95,6 +104,14 @@
private BluetoothDevice mDevice;
@Mock
private BluetoothDevice mSubDevice;
+ @Mock
+ private LocalBluetoothLeBroadcast mBroadcast;
+ @Mock
+ private LocalBluetoothManager mLocalBluetoothManager;
+ @Mock
+ private LocalBluetoothLeBroadcastAssistant mAssistant;
+ @Mock
+ private BluetoothLeBroadcastReceiveState mLeBroadcastReceiveState;
private CachedBluetoothDevice mCachedDevice;
private CachedBluetoothDevice mSubCachedDevice;
private AudioManager mAudioManager;
@@ -110,9 +127,14 @@
MockitoAnnotations.initMocks(this);
mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_TV_MEDIA_OUTPUT_DIALOG);
mSetFlagsRule.enableFlags(FLAG_ENABLE_SET_PREFERRED_TRANSPORT_FOR_LE_AUDIO_DEVICE);
+ mSetFlagsRule.enableFlags(FLAG_ENABLE_LE_AUDIO_SHARING);
mContext = RuntimeEnvironment.application;
mAudioManager = mContext.getSystemService(AudioManager.class);
mShadowBluetoothAdapter = Shadow.extract(BluetoothAdapter.getDefaultAdapter());
+ mShadowBluetoothAdapter.setIsLeAudioBroadcastSourceSupported(
+ BluetoothStatusCodes.FEATURE_SUPPORTED);
+ mShadowBluetoothAdapter.setIsLeAudioBroadcastAssistantSupported(
+ BluetoothStatusCodes.FEATURE_SUPPORTED);
when(mDevice.getAddress()).thenReturn(DEVICE_ADDRESS);
when(mHfpProfile.isProfileReady()).thenReturn(true);
when(mHfpProfile.getProfileId()).thenReturn(BluetoothProfile.HEADSET);
@@ -126,7 +148,12 @@
when(mLeAudioProfile.getProfileId()).thenReturn(BluetoothProfile.LE_AUDIO);
when(mHidProfile.isProfileReady()).thenReturn(true);
when(mHidProfile.getProfileId()).thenReturn(BluetoothProfile.HID_HOST);
+ when(mLocalBluetoothManager.getProfileManager()).thenReturn(mProfileManager);
+ when(mBroadcast.isEnabled(any())).thenReturn(false);
+ when(mProfileManager.getLeAudioBroadcastProfile()).thenReturn(mBroadcast);
+ when(mProfileManager.getLeAudioBroadcastAssistantProfile()).thenReturn(mAssistant);
mCachedDevice = spy(new CachedBluetoothDevice(mContext, mProfileManager, mDevice));
+ mCachedDevice.setLocalBluetoothManager(mLocalBluetoothManager);
mSubCachedDevice = spy(new CachedBluetoothDevice(mContext, mProfileManager, mSubDevice));
doAnswer((invocation) -> mBatteryLevel).when(mCachedDevice).getBatteryLevel();
doAnswer((invocation) -> mBatteryLevel).when(mSubCachedDevice).getBatteryLevel();
@@ -346,12 +373,13 @@
// Set device as Active for A2DP and test connection state summary
mCachedDevice.onActiveDeviceChanged(true, BluetoothProfile.A2DP);
- assertThat(mCachedDevice.getConnectionSummary()).isEqualTo("Active");
+ assertThat(mCachedDevice.getConnectionSummary())
+ .isEqualTo(mContext.getString(R.string.bluetooth_active_no_battery_level));
// Test with battery level
mBatteryLevel = 10;
- assertThat(mCachedDevice.getConnectionSummary()).isEqualTo(
- "Active, 10% battery");
+ assertThat(mCachedDevice.getConnectionSummary())
+ .isEqualTo(mContext.getString(R.string.bluetooth_active_battery_level, "10%"));
// Set A2DP profile to be disconnected and test connection state summary
updateProfileStatus(mA2dpProfile, BluetoothProfile.STATE_DISCONNECTED);
@@ -362,7 +390,8 @@
// Set A2DP profile to be connected, Active and test connection state summary
updateProfileStatus(mA2dpProfile, BluetoothProfile.STATE_CONNECTED);
mCachedDevice.onActiveDeviceChanged(true, BluetoothProfile.A2DP);
- assertThat(mCachedDevice.getConnectionSummary()).isEqualTo("Active");
+ assertThat(mCachedDevice.getConnectionSummary())
+ .isEqualTo(mContext.getString(R.string.bluetooth_active_no_battery_level));
// Set A2DP profile to be disconnected and test connection state summary
updateProfileStatus(mA2dpProfile, BluetoothProfile.STATE_DISCONNECTED);
@@ -517,11 +546,13 @@
mCachedDevice.onAudioModeChanged();
mAudioManager.setMode(AudioManager.MODE_IN_CALL);
mCachedDevice.onActiveDeviceChanged(true, BluetoothProfile.HEADSET);
- assertThat(mCachedDevice.getConnectionSummary()).isEqualTo("Active");
+ assertThat(mCachedDevice.getConnectionSummary())
+ .isEqualTo(mContext.getString(R.string.bluetooth_active_no_battery_level));
// Test with battery level
mBatteryLevel = 10;
- assertThat(mCachedDevice.getConnectionSummary()).isEqualTo("Active, 10% battery");
+ assertThat(mCachedDevice.getConnectionSummary())
+ .isEqualTo(mContext.getString(R.string.bluetooth_active_battery_level, "10%"));
// Set HFP profile to be disconnected and test connection state summary
updateProfileStatus(mHfpProfile, BluetoothProfile.STATE_DISCONNECTED);
@@ -532,7 +563,8 @@
// Set HFP profile to be connected, Active and test connection state summary
updateProfileStatus(mHfpProfile, BluetoothProfile.STATE_CONNECTED);
mCachedDevice.onActiveDeviceChanged(true, BluetoothProfile.HEADSET);
- assertThat(mCachedDevice.getConnectionSummary()).isEqualTo("Active");
+ assertThat(mCachedDevice.getConnectionSummary())
+ .isEqualTo(mContext.getString(R.string.bluetooth_active_no_battery_level));
// Set HFP profile to be disconnected and test connection state summary
updateProfileStatus(mHfpProfile, BluetoothProfile.STATE_DISCONNECTED);
@@ -904,7 +936,8 @@
mCachedDevice.addMemberDevice(mSubCachedDevice);
doAnswer((invocation) -> lowerBatteryLevel).when(mSubCachedDevice).getBatteryLevel();
- assertThat(mCachedDevice.getConnectionSummary()).isEqualTo("Active, 30% battery");
+ assertThat(mCachedDevice.getConnectionSummary())
+ .isEqualTo(mContext.getString(R.string.bluetooth_active_battery_level, "30%"));
}
@Test
@@ -935,7 +968,8 @@
doAnswer((invocation) -> BluetoothDevice.BATTERY_LEVEL_UNKNOWN).when(
mSubCachedDevice).getBatteryLevel();
- assertThat(mCachedDevice.getConnectionSummary()).isEqualTo("Active, 70% battery");
+ assertThat(mCachedDevice.getConnectionSummary())
+ .isEqualTo(mContext.getString(R.string.bluetooth_active_battery_level, "70%"));
}
@Test
@@ -992,26 +1026,27 @@
// Set device as Active for A2DP and HFP and test connection state summary
mCachedDevice.onActiveDeviceChanged(true, BluetoothProfile.A2DP);
mCachedDevice.onActiveDeviceChanged(true, BluetoothProfile.HEADSET);
- assertThat(mCachedDevice.getConnectionSummary()).isEqualTo("Active");
+ assertThat(mCachedDevice.getConnectionSummary())
+ .isEqualTo(mContext.getString(R.string.bluetooth_active_no_battery_level));
// Test with battery level
mBatteryLevel = 10;
- assertThat(mCachedDevice.getConnectionSummary()).isEqualTo(
- "Active, 10% battery");
+ assertThat(mCachedDevice.getConnectionSummary())
+ .isEqualTo(mContext.getString(R.string.bluetooth_active_battery_level, "10%"));
// Disconnect A2DP only and test connection state summary
mCachedDevice.onActiveDeviceChanged(false, BluetoothProfile.A2DP);
updateProfileStatus(mA2dpProfile, BluetoothProfile.STATE_DISCONNECTED);
- assertThat(mCachedDevice.getConnectionSummary()).isEqualTo(
- "10% battery");
+ assertThat(mCachedDevice.getConnectionSummary())
+ .isEqualTo(mContext.getString(R.string.bluetooth_battery_level, "10%"));
// Disconnect HFP only and test connection state summary
mCachedDevice.onActiveDeviceChanged(false, BluetoothProfile.HEADSET);
updateProfileStatus(mHfpProfile, BluetoothProfile.STATE_DISCONNECTED);
updateProfileStatus(mA2dpProfile, BluetoothProfile.STATE_CONNECTED);
mCachedDevice.onActiveDeviceChanged(true, BluetoothProfile.A2DP);
- assertThat(mCachedDevice.getConnectionSummary()).isEqualTo(
- "Active, 10% battery");
+ assertThat(mCachedDevice.getConnectionSummary())
+ .isEqualTo(mContext.getString(R.string.bluetooth_active_battery_level, "10%"));
// Test with BluetoothDevice.BATTERY_LEVEL_UNKNOWN battery level
mBatteryLevel = BluetoothDevice.BATTERY_LEVEL_UNKNOWN;
@@ -1020,7 +1055,8 @@
updateProfileStatus(mHfpProfile, BluetoothProfile.STATE_CONNECTED);
mCachedDevice.onActiveDeviceChanged(true, BluetoothProfile.A2DP);
mCachedDevice.onActiveDeviceChanged(true, BluetoothProfile.HEADSET);
- assertThat(mCachedDevice.getConnectionSummary()).isEqualTo("Active");
+ assertThat(mCachedDevice.getConnectionSummary())
+ .isEqualTo(mContext.getString(R.string.bluetooth_active_no_battery_level));
// Set A2DP and HFP profiles to be disconnected and test connection state summary
updateProfileStatus(mA2dpProfile, BluetoothProfile.STATE_DISCONNECTED);
@@ -1158,8 +1194,10 @@
when(mDevice.getMetadata(BluetoothDevice.METADATA_UNTETHERED_RIGHT_BATTERY)).thenReturn(
TWS_BATTERY_RIGHT.getBytes());
- assertThat(mCachedDevice.getConnectionSummary()).isEqualTo(
- "L: 15% battery, R: 25% battery");
+ assertThat(mCachedDevice.getConnectionSummary())
+ .isEqualTo(
+ mContext.getString(
+ R.string.bluetooth_battery_level_untethered, "15%", "25%"));
}
@Test
@@ -1175,8 +1213,12 @@
when(mDevice.getMetadata(BluetoothDevice.METADATA_UNTETHERED_RIGHT_BATTERY)).thenReturn(
TWS_BATTERY_RIGHT.getBytes());
- assertThat(mCachedDevice.getTvConnectionSummary().toString()).isEqualTo(
- "Left 15% Right 25%");
+ assertThat(mCachedDevice.getTvConnectionSummary().toString())
+ .isEqualTo(
+ mContext.getString(R.string.bluetooth_battery_level_untethered_left, "15%")
+ + " "
+ + mContext.getString(
+ R.string.bluetooth_battery_level_untethered_right, "25%"));
}
@Test
@@ -1185,19 +1227,23 @@
updateProfileStatus(mHfpProfile, BluetoothProfile.STATE_CONNECTED);
updateProfileStatus(mHearingAidProfile, BluetoothProfile.STATE_CONNECTED);
when(mDevice.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED);
- when(mDevice.getMetadata(BluetoothDevice.METADATA_IS_UNTETHERED_HEADSET)).thenReturn(
- "true".getBytes());
- when(mDevice.getMetadata(BluetoothDevice.METADATA_UNTETHERED_LEFT_BATTERY)).thenReturn(
- TWS_BATTERY_LEFT.getBytes());
- when(mDevice.getMetadata(BluetoothDevice.METADATA_UNTETHERED_RIGHT_BATTERY)).thenReturn(
- TWS_BATTERY_RIGHT.getBytes());
+ when(mDevice.getMetadata(BluetoothDevice.METADATA_IS_UNTETHERED_HEADSET))
+ .thenReturn("true".getBytes());
+ when(mDevice.getMetadata(BluetoothDevice.METADATA_UNTETHERED_LEFT_BATTERY))
+ .thenReturn(TWS_BATTERY_LEFT.getBytes());
+ when(mDevice.getMetadata(BluetoothDevice.METADATA_UNTETHERED_RIGHT_BATTERY))
+ .thenReturn(TWS_BATTERY_RIGHT.getBytes());
int lowBatteryColor = mContext.getColor(LOW_BATTERY_COLOR);
+ String leftBattery =
+ mContext.getString(R.string.bluetooth_battery_level_untethered_left, "15%");
+ String rightBattery =
+ mContext.getString(R.string.bluetooth_battery_level_untethered_right, "25%");
// Default low battery threshold, only left battery is low
CharSequence summary = mCachedDevice.getTvConnectionSummary(LOW_BATTERY_COLOR);
- assertForegroundColorSpan(summary, 0, 0, 8, lowBatteryColor);
- assertThat(summary.toString()).isEqualTo("Left 15% Right 25%");
+ assertForegroundColorSpan(summary, 0, 0, leftBattery.length(), lowBatteryColor);
+ assertThat(summary.toString()).isEqualTo(leftBattery + " " + rightBattery);
// Lower threshold, neither battery should be low
when(mDevice.getMetadata(BluetoothDevice.METADATA_UNTETHERED_LEFT_LOW_BATTERY_THRESHOLD))
@@ -1206,8 +1252,7 @@
.thenReturn(TWS_LOW_BATTERY_THRESHOLD_LOW.getBytes());
summary = mCachedDevice.getTvConnectionSummary(LOW_BATTERY_COLOR);
assertNoForegroundColorSpans(summary);
- assertThat(summary.toString()).isEqualTo("Left 15% Right 25%");
-
+ assertThat(summary.toString()).isEqualTo(leftBattery + " " + rightBattery);
// Higher Threshold, both batteries are low
when(mDevice.getMetadata(BluetoothDevice.METADATA_UNTETHERED_LEFT_LOW_BATTERY_THRESHOLD))
@@ -1215,9 +1260,14 @@
when(mDevice.getMetadata(BluetoothDevice.METADATA_UNTETHERED_RIGHT_LOW_BATTERY_THRESHOLD))
.thenReturn(TWS_LOW_BATTERY_THRESHOLD_HIGH.getBytes());
summary = mCachedDevice.getTvConnectionSummary(LOW_BATTERY_COLOR);
- assertForegroundColorSpan(summary, 0, 0, 8, lowBatteryColor);
- assertForegroundColorSpan(summary, 1, 9, 18, lowBatteryColor);
- assertThat(summary.toString()).isEqualTo("Left 15% Right 25%");
+ assertForegroundColorSpan(summary, 0, 0, leftBattery.length(), lowBatteryColor);
+ assertForegroundColorSpan(
+ summary,
+ 1,
+ leftBattery.length() + 1,
+ leftBattery.length() + rightBattery.length() + 1,
+ lowBatteryColor);
+ assertThat(summary.toString()).isEqualTo(leftBattery + " " + rightBattery);
}
private void assertNoForegroundColorSpans(CharSequence charSequence) {
@@ -1245,32 +1295,39 @@
// Test without battery level
// Set PAN profile to be connected and test connection state summary
updateProfileStatus(mPanProfile, BluetoothProfile.STATE_CONNECTED);
- assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo("Connected");
+ assertThat(mCachedDevice.getCarConnectionSummary())
+ .isEqualTo(mContext.getString(R.string.bluetooth_connected, ""));
// Set PAN profile to be disconnected and test connection state summary
updateProfileStatus(mPanProfile, BluetoothProfile.STATE_DISCONNECTED);
- assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo("Disconnected");
+ assertThat(mCachedDevice.getCarConnectionSummary())
+ .isEqualTo(mContext.getString(R.string.bluetooth_disconnected, ""));
// Test with battery level
mBatteryLevel = 10;
// Set PAN profile to be connected and test connection state summary
updateProfileStatus(mPanProfile, BluetoothProfile.STATE_CONNECTED);
- assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo("Connected, battery 10%");
+ assertThat(mCachedDevice.getCarConnectionSummary())
+ .isEqualTo(
+ mContext.getString(R.string.bluetooth_connected_battery_level, "10%", ""));
// Set PAN profile to be disconnected and test connection state summary
updateProfileStatus(mPanProfile, BluetoothProfile.STATE_DISCONNECTED);
- assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo("Disconnected");
+ assertThat(mCachedDevice.getCarConnectionSummary())
+ .isEqualTo(mContext.getString(R.string.bluetooth_disconnected, ""));
// Test with BluetoothDevice.BATTERY_LEVEL_UNKNOWN battery level
mBatteryLevel = BluetoothDevice.BATTERY_LEVEL_UNKNOWN;
// Set PAN profile to be connected and test connection state summary
updateProfileStatus(mPanProfile, BluetoothProfile.STATE_CONNECTED);
- assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo("Connected");
+ assertThat(mCachedDevice.getCarConnectionSummary())
+ .isEqualTo(mContext.getString(R.string.bluetooth_connected, ""));
// Set PAN profile to be disconnected and test connection state summary
updateProfileStatus(mPanProfile, BluetoothProfile.STATE_DISCONNECTED);
- assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo("Disconnected");
+ assertThat(mCachedDevice.getCarConnectionSummary())
+ .isEqualTo(mContext.getString(R.string.bluetooth_disconnected, ""));
}
@Test
@@ -1281,27 +1338,38 @@
updateProfileStatus(mHfpProfile, BluetoothProfile.STATE_CONNECTED);
updateProfileStatus(mA2dpProfile, BluetoothProfile.STATE_CONNECTED);
updateProfileStatus(mPanProfile, BluetoothProfile.STATE_CONNECTED);
- assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo("Connected, battery 10%");
+ assertThat(mCachedDevice.getCarConnectionSummary())
+ .isEqualTo(
+ mContext.getString(R.string.bluetooth_connected_battery_level, "10%", ""));
// Disconnect HFP only and test connection state summary
updateProfileStatus(mHfpProfile, BluetoothProfile.STATE_DISCONNECTED);
- assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo(
- "Connected (no phone), battery 10%");
+ assertThat(mCachedDevice.getCarConnectionSummary())
+ .isEqualTo(
+ mContext.getString(
+ R.string.bluetooth_connected_no_headset_battery_level, "10%", ""));
// Disconnect A2DP only and test connection state summary
updateProfileStatus(mHfpProfile, BluetoothProfile.STATE_CONNECTED);
updateProfileStatus(mA2dpProfile, BluetoothProfile.STATE_DISCONNECTED);
- assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo(
- "Connected (no media), battery 10%");
+ assertThat(mCachedDevice.getCarConnectionSummary())
+ .isEqualTo(
+ mContext.getString(
+ R.string.bluetooth_connected_no_a2dp_battery_level, "10%", ""));
// Disconnect both HFP and A2DP and test connection state summary
updateProfileStatus(mHfpProfile, BluetoothProfile.STATE_DISCONNECTED);
- assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo(
- "Connected (no phone or media), battery 10%");
+ assertThat(mCachedDevice.getCarConnectionSummary())
+ .isEqualTo(
+ mContext.getString(
+ R.string.bluetooth_connected_no_headset_no_a2dp_battery_level,
+ "10%",
+ ""));
// Disconnect all profiles and test connection state summary
updateProfileStatus(mPanProfile, BluetoothProfile.STATE_DISCONNECTED);
- assertThat(mCachedDevice.getCarConnectionSummary()).isEqualTo("Disconnected");
+ assertThat(mCachedDevice.getCarConnectionSummary())
+ .isEqualTo(mContext.getString(R.string.bluetooth_disconnected));
}
@Test
@@ -1853,6 +1921,91 @@
verify(mHidProfile).setPreferredTransport(mDevice, BluetoothDevice.TRANSPORT_BREDR);
}
+ @Test
+ public void getConnectionSummary_isBroadcastPrimary_returnActive() {
+ when(mBroadcast.isEnabled(any())).thenReturn(true);
+ when(mCachedDevice.getDevice()).thenReturn(mDevice);
+ Settings.Secure.putInt(
+ mContext.getContentResolver(),
+ "bluetooth_le_broadcast_fallback_active_group_id",
+ 1);
+
+ List<Long> bisSyncState = new ArrayList<>();
+ bisSyncState.add(1L);
+ when(mLeBroadcastReceiveState.getBisSyncState()).thenReturn(bisSyncState);
+ List<BluetoothLeBroadcastReceiveState> sourceList = new ArrayList<>();
+ sourceList.add(mLeBroadcastReceiveState);
+ when(mAssistant.getAllSources(any())).thenReturn(sourceList);
+
+ when(mCachedDevice.getGroupId())
+ .thenReturn(
+ Settings.Secure.getInt(
+ mContext.getContentResolver(),
+ "bluetooth_le_broadcast_fallback_active_group_id",
+ BluetoothCsipSetCoordinator.GROUP_ID_INVALID));
+
+ assertThat(mCachedDevice.getConnectionSummary(false))
+ .isEqualTo(mContext.getString(R.string.bluetooth_active_no_battery_level));
+ }
+
+ @Test
+ public void getConnectionSummary_isBroadcastNotPrimary_returnActiveMedia() {
+ when(mBroadcast.isEnabled(any())).thenReturn(true);
+ when(mCachedDevice.getDevice()).thenReturn(mDevice);
+ Settings.Secure.putInt(
+ mContext.getContentResolver(),
+ "bluetooth_le_broadcast_fallback_active_group_id",
+ 1);
+
+ List<Long> bisSyncState = new ArrayList<>();
+ bisSyncState.add(1L);
+ when(mLeBroadcastReceiveState.getBisSyncState()).thenReturn(bisSyncState);
+ List<BluetoothLeBroadcastReceiveState> sourceList = new ArrayList<>();
+ sourceList.add(mLeBroadcastReceiveState);
+ when(mAssistant.getAllSources(any())).thenReturn(sourceList);
+
+ when(mCachedDevice.getGroupId()).thenReturn(BluetoothCsipSetCoordinator.GROUP_ID_INVALID);
+
+ assertThat(mCachedDevice.getConnectionSummary(false))
+ .isEqualTo(
+ mContext.getString(R.string.bluetooth_active_media_only_no_battery_level));
+ }
+
+ @Test
+ public void getConnectionSummary_supportBroadcastConnected_returnConnectedSupportLe() {
+ when(mBroadcast.isEnabled(any())).thenReturn(true);
+ when(mCachedDevice.getDevice()).thenReturn(mDevice);
+ when(mLeAudioProfile.isEnabled(mDevice)).thenReturn(true);
+
+ when(mCachedDevice.getProfiles()).thenReturn(ImmutableList.of(mLeAudioProfile));
+ when(mCachedDevice.isConnected()).thenReturn(true);
+
+ assertThat(mCachedDevice.getConnectionSummary(false))
+ .isEqualTo(mContext.getString(R.string.bluetooth_no_battery_level_lea_support));
+ }
+
+ @Test
+ public void getConnectionSummary_supportBroadcastNotConnected_returnSupportLe() {
+ when(mBroadcast.isEnabled(any())).thenReturn(true);
+ when(mCachedDevice.getDevice()).thenReturn(mDevice);
+ when(mLeAudioProfile.isEnabled(mDevice)).thenReturn(true);
+
+ when(mCachedDevice.getProfiles()).thenReturn(ImmutableList.of(mLeAudioProfile));
+ when(mCachedDevice.isConnected()).thenReturn(false);
+
+ assertThat(mCachedDevice.getConnectionSummary(false))
+ .isEqualTo(mContext.getString(R.string.bluetooth_saved_device_lea_support));
+ }
+
+ @Test
+ public void getConnectionSummary_doNotSupportBroadcast_returnNull() {
+ when(mBroadcast.isEnabled(any())).thenReturn(true);
+
+ when(mCachedDevice.getProfiles()).thenReturn(ImmutableList.of());
+
+ assertThat(mCachedDevice.getConnectionSummary(false)).isNull();
+ }
+
private HearingAidInfo getLeftAshaHearingAidInfo() {
return new HearingAidInfo.Builder()
.setAshaDeviceSide(HearingAidProfile.DeviceSide.SIDE_LEFT)
diff --git a/packages/SystemUI/Android.bp b/packages/SystemUI/Android.bp
index 5e11e1a..6174ab9 100644
--- a/packages/SystemUI/Android.bp
+++ b/packages/SystemUI/Android.bp
@@ -425,6 +425,7 @@
kotlincflags: ["-Xjvm-default=all"],
optimize: {
shrink_resources: false,
+ optimized_shrink_resources: false,
proguard_flags_files: ["proguard.flags"],
},
@@ -514,6 +515,7 @@
optimize: true,
shrink: true,
shrink_resources: true,
+ optimized_shrink_resources: true,
ignore_warnings: false,
proguard_compatibility: false,
},
diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml
index 561c85e..5cc3caf 100644
--- a/packages/SystemUI/AndroidManifest.xml
+++ b/packages/SystemUI/AndroidManifest.xml
@@ -1036,6 +1036,7 @@
<receiver
android:name=".statusbar.KeyboardShortcutsReceiver"
+ android:visibleToInstantApps="true"
android:exported="true">
<intent-filter>
<action android:name="com.android.intent.action.DISMISS_KEYBOARD_SHORTCUTS" />
@@ -1116,5 +1117,11 @@
android:name="android.service.dream"
android:resource="@xml/home_controls_dream_metadata" />
</service>
+
+ <activity android:name="com.android.systemui.keyboard.shortcut.ShortcutHelperActivity"
+ android:exported="false"
+ android:theme="@style/ShortcutHelperTheme"
+ android:excludeFromRecents="true"
+ android:finishOnCloseSystemDialogs="true" />
</application>
</manifest>
diff --git a/packages/SystemUI/OWNERS b/packages/SystemUI/OWNERS
index 78cacec..796e391 100644
--- a/packages/SystemUI/OWNERS
+++ b/packages/SystemUI/OWNERS
@@ -60,7 +60,6 @@
lynhan@google.com
madym@google.com
mankoff@google.com
-mateuszc@google.com
matiashe@google.com
mgalhardo@google.com
michaelmikhil@google.com
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/res/values-or/strings.xml b/packages/SystemUI/accessibility/accessibilitymenu/res/values-or/strings.xml
index 3a40b9f..0310c86 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/res/values-or/strings.xml
+++ b/packages/SystemUI/accessibility/accessibilitymenu/res/values-or/strings.xml
@@ -10,7 +10,7 @@
<string name="power_utterance" msgid="7444296686402104807">"ପଟà±à¬°à ବିà¬à¬³àପ"</string>
<string name="recent_apps_label" msgid="6583276995616385847">"ବରà଀à଀ମଟଚର à¬à¬ªà"</string>
<string name="lockscreen_label" msgid="648347953557887087">"ଞàà¬àରàଚà ଲà¬à à¬à¬°à¬šà଀à"</string>
- <string name="quick_settings_label" msgid="2999117381487601865">"à¬àà±à¬¿à¬ ଞàà¬à¬¿à¬à¬ž"</string>
+ <string name="quick_settings_label" msgid="2999117381487601865">"à¬àà¬à¬ ଞàà¬à¬¿à¬à¬ž"</string>
<string name="notifications_label" msgid="6829741046963013567">"ବିà¬àà¬à¬ªà଀ି"</string>
<string name="screenshot_label" msgid="863978141223970162">"ଞàà¬àରିଚଞà¬"</string>
<string name="screenshot_utterance" msgid="1430760563401895074">"ଞàà¬àରàଚଶà¬à ଚିà¬
ଚà଀à"</string>
diff --git a/packages/SystemUI/aconfig/systemui.aconfig b/packages/SystemUI/aconfig/systemui.aconfig
index c2e4b82..e38f347 100644
--- a/packages/SystemUI/aconfig/systemui.aconfig
+++ b/packages/SystemUI/aconfig/systemui.aconfig
@@ -61,6 +61,16 @@
}
flag {
+ name: "notification_over_expansion_clipping_fix"
+ namespace: "systemui"
+ description: "fix NSSL clipping when over-expanding; fixes split shade bug."
+ bug: "288553572"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
+
+flag {
name: "notification_async_group_header_inflation"
namespace: "systemui"
description: "Inflates the notification group summary header views from the background thread."
@@ -766,6 +776,13 @@
}
flag {
+ name: "keyboard_shortcut_helper_rewrite"
+ namespace: "systemui"
+ description: "A new implementation of the keyboards shortcuts helper sheet."
+ bug: "327364197"
+}
+
+flag {
name: "dream_overlay_bouncer_swipe_direction_filtering"
namespace: "systemui"
description: "do not initiate bouncer swipe when the direction is opposite of the expansion"
@@ -804,3 +821,10 @@
purpose: PURPOSE_BUGFIX
}
}
+
+flag {
+ name: "enforce_brightness_base_user_restriction"
+ namespace: "systemui"
+ description: "Enforce BaseUserRestriction for DISALLOW_CONFIG_BRIGHTNESS."
+ bug: "329205638"
+}
diff --git a/packages/SystemUI/animation/src/com/android/systemui/animation/ActivityTransitionAnimator.kt b/packages/SystemUI/animation/src/com/android/systemui/animation/ActivityTransitionAnimator.kt
index 9ce30fd..1e60b98 100644
--- a/packages/SystemUI/animation/src/com/android/systemui/animation/ActivityTransitionAnimator.kt
+++ b/packages/SystemUI/animation/src/com/android/systemui/animation/ActivityTransitionAnimator.kt
@@ -599,6 +599,12 @@
)
}
+ init {
+ // We do this check here to cover all entry points, including Launcher which doesn't
+ // call startIntentWithAnimation()
+ if (!controller.isLaunching) TransitionAnimator.checkReturnAnimationFrameworkFlag()
+ }
+
@UiThread
internal fun postTimeouts() {
if (timeoutHandler != null) {
@@ -637,7 +643,28 @@
return
}
- startAnimation(apps, nonApps, callback)
+ val window = findRootTaskIfPossible(apps)
+ if (window == null) {
+ Log.i(TAG, "Aborting the animation as no window is opening")
+ callback?.invoke()
+
+ if (DEBUG_TRANSITION_ANIMATION) {
+ Log.d(
+ TAG,
+ "Calling controller.onTransitionAnimationCancelled() [no window opening]"
+ )
+ }
+ controller.onTransitionAnimationCancelled()
+ listener?.onTransitionAnimationCancelled()
+ return
+ }
+
+ val navigationBar =
+ nonApps?.firstOrNull {
+ it.windowType == WindowManager.LayoutParams.TYPE_NAVIGATION_BAR
+ }
+
+ startAnimation(window, navigationBar, callback)
}
private fun findRootTaskIfPossible(
@@ -646,9 +673,17 @@
if (apps == null) {
return null
}
+
+ val targetMode =
+ if (controller.isLaunching) {
+ RemoteAnimationTarget.MODE_OPENING
+ } else {
+ RemoteAnimationTarget.MODE_CLOSING
+ }
var candidate: RemoteAnimationTarget? = null
+
for (it in apps) {
- if (it.mode == RemoteAnimationTarget.MODE_OPENING) {
+ if (it.mode == targetMode) {
if (activityTransitionUseLargestWindow()) {
if (
candidate == null ||
@@ -673,47 +708,31 @@
}
}
}
+
return candidate
}
private fun startAnimation(
- apps: Array<out RemoteAnimationTarget>?,
- nonApps: Array<out RemoteAnimationTarget>?,
+ window: RemoteAnimationTarget,
+ navigationBar: RemoteAnimationTarget?,
iCallback: IRemoteAnimationFinishedCallback?
) {
if (TransitionAnimator.DEBUG) {
Log.d(TAG, "Remote animation started")
}
- val window = findRootTaskIfPossible(apps)
- if (window == null) {
- Log.i(TAG, "Aborting the animation as no window is opening")
- iCallback?.invoke()
-
- if (DEBUG_TRANSITION_ANIMATION) {
- Log.d(
- TAG,
- "Calling controller.onTransitionAnimationCancelled() [no window opening]"
- )
- }
- controller.onTransitionAnimationCancelled()
- listener?.onTransitionAnimationCancelled()
- return
- }
-
- val navigationBar =
- nonApps?.firstOrNull {
- it.windowType == WindowManager.LayoutParams.TYPE_NAVIGATION_BAR
- }
-
val windowBounds = window.screenSpaceBounds
val endState =
- TransitionAnimator.State(
- top = windowBounds.top,
- bottom = windowBounds.bottom,
- left = windowBounds.left,
- right = windowBounds.right
- )
+ if (controller.isLaunching) {
+ TransitionAnimator.State(
+ top = windowBounds.top,
+ bottom = windowBounds.bottom,
+ left = windowBounds.left,
+ right = windowBounds.right
+ )
+ } else {
+ controller.createAnimatorState()
+ }
val windowBackgroundColor =
window.taskInfo?.let { callback.getBackgroundColor(it) } ?: window.backgroundColor
@@ -721,24 +740,29 @@
// instead of recomputing isExpandingFullyAbove here.
val isExpandingFullyAbove =
transitionAnimator.isExpandingFullyAbove(controller.transitionContainer, endState)
- val endRadius =
- if (isExpandingFullyAbove) {
- // Most of the time, expanding fully above the root view means expanding in full
- // screen.
- ScreenDecorationsUtils.getWindowCornerRadius(context)
- } else {
- // This usually means we are in split screen mode, so 2 out of 4 corners will
- // have
- // a radius of 0.
- 0f
- }
- endState.topCornerRadius = endRadius
- endState.bottomCornerRadius = endRadius
+ if (controller.isLaunching) {
+ val endRadius = getWindowRadius(isExpandingFullyAbove)
+ endState.topCornerRadius = endRadius
+ endState.bottomCornerRadius = endRadius
+ }
// We animate the opening window and delegate the view expansion to [this.controller].
val delegate = this.controller
val controller =
object : Controller by delegate {
+ override fun createAnimatorState(): TransitionAnimator.State {
+ if (isLaunching) return delegate.createAnimatorState()
+ val windowRadius = getWindowRadius(isExpandingFullyAbove)
+ return TransitionAnimator.State(
+ top = windowBounds.top,
+ bottom = windowBounds.bottom,
+ left = windowBounds.left,
+ right = windowBounds.right,
+ topCornerRadius = windowRadius,
+ bottomCornerRadius = windowRadius
+ )
+ }
+
override fun onTransitionAnimationStart(isExpandingFullyAbove: Boolean) {
listener?.onTransitionAnimationStart()
@@ -795,6 +819,18 @@
)
}
+ private fun getWindowRadius(isExpandingFullyAbove: Boolean): Float {
+ return if (isExpandingFullyAbove) {
+ // Most of the time, expanding fully above the root view means
+ // expanding in full screen.
+ ScreenDecorationsUtils.getWindowCornerRadius(context)
+ } else {
+ // This usually means we are in split screen mode, so 2 out of 4
+ // corners will have a radius of 0.
+ 0f
+ }
+ }
+
private fun applyStateToWindow(
window: RemoteAnimationTarget,
state: TransitionAnimator.State,
@@ -842,20 +878,41 @@
windowCropF.bottom.roundToInt()
)
+ val windowAnimationDelay =
+ if (controller.isLaunching) {
+ TIMINGS.contentAfterFadeInDelay
+ } else {
+ TIMINGS.contentBeforeFadeOutDelay
+ }
+ val windowAnimationDuration =
+ if (controller.isLaunching) {
+ TIMINGS.contentAfterFadeInDuration
+ } else {
+ TIMINGS.contentBeforeFadeOutDuration
+ }
+ val windowProgress =
+ TransitionAnimator.getProgress(
+ TIMINGS,
+ linearProgress,
+ windowAnimationDelay,
+ windowAnimationDuration
+ )
+
// The alpha of the opening window. If it opens above the expandable, then it should
// fade in progressively. Otherwise, it should be fully opaque and will be progressively
// revealed as the window background color layer above the window fades out.
val alpha =
if (controller.isBelowAnimatingWindow) {
- val windowProgress =
- TransitionAnimator.getProgress(
- TIMINGS,
- linearProgress,
- TIMINGS.contentAfterFadeInDelay,
- TIMINGS.contentAfterFadeInDuration
+ if (controller.isLaunching) {
+ INTERPOLATORS.contentAfterFadeInInterpolator.getInterpolation(
+ windowProgress
)
-
- INTERPOLATORS.contentAfterFadeInInterpolator.getInterpolation(windowProgress)
+ } else {
+ 1 -
+ INTERPOLATORS.contentBeforeFadeOutInterpolator.getInterpolation(
+ windowProgress
+ )
+ }
} else {
1f
}
diff --git a/packages/SystemUI/animation/src/com/android/systemui/animation/TransitionAnimator.kt b/packages/SystemUI/animation/src/com/android/systemui/animation/TransitionAnimator.kt
index 9bf6b34..679c969 100644
--- a/packages/SystemUI/animation/src/com/android/systemui/animation/TransitionAnimator.kt
+++ b/packages/SystemUI/animation/src/com/android/systemui/animation/TransitionAnimator.kt
@@ -59,6 +59,13 @@
1.0f
)
}
+
+ internal fun checkReturnAnimationFrameworkFlag() {
+ check(returnAnimationFrameworkLibrary()) {
+ "isLaunching cannot be false when the returnAnimationFrameworkLibrary flag is " +
+ "disabled"
+ }
+ }
}
private val transitionContainerLocation = IntArray(2)
@@ -558,10 +565,4 @@
}
}
}
-
- private fun checkReturnAnimationFrameworkFlag() {
- check(returnAnimationFrameworkLibrary()) {
- "isLaunching cannot be false when the returnAnimationFrameworkLibrary flag is disabled"
- }
- }
}
diff --git a/packages/SystemUI/compose/core/Android.bp b/packages/SystemUI/compose/core/Android.bp
index 4f7a43e..49ae821 100644
--- a/packages/SystemUI/compose/core/Android.bp
+++ b/packages/SystemUI/compose/core/Android.bp
@@ -38,6 +38,7 @@
"androidx.compose.material3_material3-window-size-class",
"androidx.savedstate_savedstate",
"androidx.window_window",
+ "//frameworks/libs/systemui:tracinglib-platform",
],
kotlincflags: ["-Xjvm-default=all"],
diff --git a/packages/SystemUI/compose/core/src/com/android/compose/modifiers/MeasureTracing.kt b/packages/SystemUI/compose/core/src/com/android/compose/modifiers/MeasureTracing.kt
new file mode 100644
index 0000000..9ce6cd1
--- /dev/null
+++ b/packages/SystemUI/compose/core/src/com/android/compose/modifiers/MeasureTracing.kt
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.compose.modifiers
+
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.layout.layout
+import androidx.compose.ui.unit.IntOffset
+import com.android.app.tracing.traceSection
+
+/** Adds perfetto markers for the measure + layout stages. */
+inline fun Modifier.measureTracer(crossinline traceNameProducer: () -> String): Modifier {
+ return layout { measurable, constraints ->
+ traceSection(traceNameProducer) {
+ val placeable = measurable.measure(constraints)
+ layout(placeable.width, placeable.height) { placeable.placeRelative(IntOffset.Zero) }
+ }
+ }
+}
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/common/ui/compose/windowinsets/ScreenDecorProvider.kt b/packages/SystemUI/compose/features/src/com/android/systemui/common/ui/compose/windowinsets/ScreenDecorProvider.kt
index 76bd4ec..8144d15 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/common/ui/compose/windowinsets/ScreenDecorProvider.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/common/ui/compose/windowinsets/ScreenDecorProvider.kt
@@ -16,11 +16,16 @@
package com.android.systemui.common.ui.compose.windowinsets
+import androidx.compose.foundation.layout.WindowInsets
+import androidx.compose.foundation.layout.asPaddingValues
+import androidx.compose.foundation.layout.displayCutout
+import androidx.compose.foundation.layout.systemBars
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.staticCompositionLocalOf
+import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.unit.dp
import kotlinx.coroutines.flow.StateFlow
@@ -31,6 +36,9 @@
/** The corner radius in px of the current display. */
val LocalScreenCornerRadius = staticCompositionLocalOf { 0.dp }
+/** The screen height in px without accounting for any screen insets (cutouts, status/nav bars) */
+val LocalRawScreenHeight = staticCompositionLocalOf { 0f }
+
@Composable
fun ScreenDecorProvider(
displayCutout: StateFlow<DisplayCutout>,
@@ -39,9 +47,23 @@
) {
val cutout by displayCutout.collectAsState()
val screenCornerRadiusDp = with(LocalDensity.current) { screenCornerRadius.toDp() }
+
+ val density = LocalDensity.current
+ val navBarHeight =
+ with(density) { WindowInsets.systemBars.asPaddingValues().calculateBottomPadding().toPx() }
+ val statusBarHeight = WindowInsets.systemBars.asPaddingValues().calculateTopPadding()
+ val displayCutoutHeight = WindowInsets.displayCutout.asPaddingValues().calculateTopPadding()
+ val screenHeight =
+ with(density) {
+ (LocalConfiguration.current.screenHeightDp.dp +
+ maxOf(statusBarHeight, displayCutoutHeight))
+ .toPx()
+ } + navBarHeight
+
CompositionLocalProvider(
LocalScreenCornerRadius provides screenCornerRadiusDp,
- LocalDisplayCutout provides cutout
+ LocalDisplayCutout provides cutout,
+ LocalRawScreenHeight provides screenHeight,
) {
content()
}
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/communal/ui/compose/CommunalContainer.kt b/packages/SystemUI/compose/features/src/com/android/systemui/communal/ui/compose/CommunalContainer.kt
index 356bfe2..e07cd05 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/communal/ui/compose/CommunalContainer.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/communal/ui/compose/CommunalContainer.kt
@@ -79,10 +79,10 @@
) {
val coroutineScope = rememberCoroutineScope()
val currentSceneKey: SceneKey by viewModel.currentScene.collectAsState(CommunalScenes.Blank)
- val touchesAllowed by viewModel.touchesAllowed.collectAsState(initial = false)
val state: MutableSceneTransitionLayoutState = remember {
MutableSceneTransitionLayoutState(
initialScene = currentSceneKey,
+ canChangeScene = { _ -> viewModel.canChangeScene() },
transitions = sceneTransitions,
enableInterruptions = false,
)
@@ -112,14 +112,9 @@
scene(
CommunalScenes.Blank,
userActions =
- if (touchesAllowed) {
- mapOf(
- Swipe(SwipeDirection.Left, fromSource = Edge.Right) to
- CommunalScenes.Communal
- )
- } else {
- emptyMap()
- }
+ mapOf(
+ Swipe(SwipeDirection.Left, fromSource = Edge.Right) to CommunalScenes.Communal
+ )
) {
// This scene shows nothing only allowing for transitions to the communal scene.
Box(modifier = Modifier.fillMaxSize())
@@ -128,13 +123,7 @@
scene(
CommunalScenes.Communal,
userActions =
- if (touchesAllowed) {
- mapOf(
- Swipe(SwipeDirection.Right, fromSource = Edge.Left) to CommunalScenes.Blank
- )
- } else {
- emptyMap()
- },
+ mapOf(Swipe(SwipeDirection.Right, fromSource = Edge.Left) to CommunalScenes.Blank)
) {
CommunalScene(viewModel, colors, dialogFactory, modifier = modifier)
}
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/communal/ui/compose/CommunalHub.kt b/packages/SystemUI/compose/features/src/com/android/systemui/communal/ui/compose/CommunalHub.kt
index ddfb5f6..89d4343 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/communal/ui/compose/CommunalHub.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/communal/ui/compose/CommunalHub.kt
@@ -17,11 +17,9 @@
package com.android.systemui.communal.ui.compose
import android.appwidget.AppWidgetHostView
-import android.content.res.Configuration
import android.graphics.drawable.Icon
import android.os.Bundle
import android.util.SizeF
-import android.view.ViewGroup
import android.widget.FrameLayout
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.core.animateFloatAsState
@@ -96,7 +94,6 @@
import androidx.compose.ui.layout.onGloballyPositioned
import androidx.compose.ui.layout.onSizeChanged
import androidx.compose.ui.layout.positionInWindow
-import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.platform.testTag
@@ -118,6 +115,8 @@
import androidx.compose.ui.window.Popup
import androidx.core.view.setPadding
import androidx.window.layout.WindowMetricsCalculator
+import com.android.compose.modifiers.height
+import com.android.compose.modifiers.padding
import com.android.compose.modifiers.thenIf
import com.android.compose.theme.LocalAndroidColorScheme
import com.android.compose.ui.graphics.painter.rememberDrawablePainter
@@ -372,7 +371,7 @@
liveContentKeys.indexOfFirst { !prevLiveContentKeys.contains(it) }
// Scroll if current position is behind the first updated content
- if (indexOfFirstUpdatedContent in 0 until gridState.firstVisibleItemIndex) {
+ if (indexOfFirstUpdatedContent in 0..<gridState.firstVisibleItemIndex) {
// Launching with a scope to prevent the job from being canceled in the case of a
// recomposition during scrolling
coroutineScope.launch { gridState.animateScrollToItem(indexOfFirstUpdatedContent) }
@@ -839,13 +838,6 @@
widgetConfigurator: WidgetConfigurator?,
modifier: Modifier = Modifier,
) {
- var widgetId: Int by remember { mutableStateOf(-1) }
- var configuration: Configuration? by remember { mutableStateOf(null) }
-
- // In addition to returning the current configuration, this also causes a recompose on
- // configuration change.
- val currentConfiguration = LocalConfiguration.current
-
Box(
modifier =
modifier.thenIf(!viewModel.isEditMode && model.inQuietMode) {
@@ -861,48 +853,18 @@
AndroidView(
modifier = Modifier.fillMaxSize().allowGestures(allowed = !viewModel.isEditMode),
factory = { context ->
- // This FrameLayout becomes the container view for the AppWidgetHostView we add as a
- // child in update below. Having a container view allows for updating the contained
- // host view as needed (e.g. on configuration changes).
- FrameLayout(context).apply {
- layoutParams =
- ViewGroup.LayoutParams(
- ViewGroup.LayoutParams.MATCH_PARENT,
- ViewGroup.LayoutParams.MATCH_PARENT
- )
- setPadding(0)
- }
- },
- update = { widgetContainer: ViewGroup ->
- if (widgetId == model.appWidgetId && currentConfiguration.equals(configuration)) {
- return@AndroidView
- }
-
- // Add the widget's host view to the FrameLayout parent (after removing any
- // previously added host view).
- widgetContainer.removeAllViews()
- widgetContainer.addView(
- model.appWidgetHost
- .createViewForCommunal(
- widgetContainer.context,
- model.appWidgetId,
- model.providerInfo
- )
- .apply {
- updateAppWidgetSize(Bundle.EMPTY, listOf(size))
- // Remove the extra padding applied to AppWidgetHostView to allow
- // widgets to occupy the entire box.
- setPadding(0)
- }
- )
-
- widgetId = model.appWidgetId
- configuration = currentConfiguration
+ model.appWidgetHost
+ .createViewForCommunal(context, model.appWidgetId, model.providerInfo)
+ .apply {
+ updateAppWidgetSize(Bundle.EMPTY, listOf(size))
+ // Remove the extra padding applied to AppWidgetHostView to allow widgets to
+ // occupy the entire box.
+ setPadding(0)
+ }
},
// For reusing composition in lazy lists.
onReset = {},
)
-
if (
viewModel is CommunalEditModeViewModel &&
model.reconfigurable &&
@@ -1056,6 +1018,12 @@
) {
viewModel.changeScene(CommunalScenes.Blank)
true
+ },
+ CustomAccessibilityAction(
+ context.getString(R.string.accessibility_action_label_edit_widgets)
+ ) {
+ viewModel.onOpenWidgetEditor()
+ true
}
)
}
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/section/DefaultClockSection.kt b/packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/section/DefaultClockSection.kt
index eb389e6..7095875 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/section/DefaultClockSection.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/section/DefaultClockSection.kt
@@ -60,6 +60,8 @@
modifier: Modifier = Modifier,
) {
val currentClock by viewModel.currentClock.collectAsState()
+ val smallTopMargin by
+ viewModel.smallClockTopMargin.collectAsState(viewModel.getSmallClockTopMargin())
if (currentClock?.smallClock?.view == null) {
return
}
@@ -75,7 +77,7 @@
modifier
.height(dimensionResource(R.dimen.small_clock_height))
.padding(horizontal = dimensionResource(R.dimen.clock_padding_start))
- .padding(top = { viewModel.getSmallClockTopMargin(context) })
+ .padding(top = { smallTopMargin })
.onTopPlacementChanged(onTopChanged)
.burnInAware(
viewModel = aodBurnInViewModel,
@@ -107,13 +109,8 @@
1f
}
- val distance =
- if (transition.toScene == splitShadeLargeClockScene) {
- -getClockCenteringDistance()
- } else {
- getClockCenteringDistance()
- }
- .toFloat()
+ val dir = if (transition.toScene == splitShadeLargeClockScene) -1f else 1f
+ val distance = dir * getClockCenteringDistance()
val largeClock = checkNotNull(currentClock).largeClock
largeClock.animations.onPositionUpdated(
distance = distance,
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/media/controls/ui/composable/MediaCarousel.kt b/packages/SystemUI/compose/features/src/com/android/systemui/media/controls/ui/composable/MediaCarousel.kt
index d3e4553..f0d356c 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/media/controls/ui/composable/MediaCarousel.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/media/controls/ui/composable/MediaCarousel.kt
@@ -53,6 +53,11 @@
val mediaFrame = carouselController.mediaFrame
(mediaFrame.parent as? ViewGroup)?.removeView(mediaFrame)
addView(mediaFrame)
+ layoutParams =
+ FrameLayout.LayoutParams(
+ FrameLayout.LayoutParams.MATCH_PARENT,
+ FrameLayout.LayoutParams.MATCH_PARENT,
+ )
}
},
update = {
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/notifications/ui/composable/Notifications.kt b/packages/SystemUI/compose/features/src/com/android/systemui/notifications/ui/composable/Notifications.kt
index 579e837..985d3a1 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/notifications/ui/composable/Notifications.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/notifications/ui/composable/Notifications.kt
@@ -24,7 +24,6 @@
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.asPaddingValues
-import androidx.compose.foundation.layout.displayCutout
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.offset
@@ -57,7 +56,6 @@
import androidx.compose.ui.layout.onPlaced
import androidx.compose.ui.layout.onSizeChanged
import androidx.compose.ui.layout.positionInWindow
-import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.res.dimensionResource
import androidx.compose.ui.unit.Dp
@@ -67,15 +65,17 @@
import com.android.compose.animation.scene.ElementKey
import com.android.compose.animation.scene.NestedScrollBehavior
import com.android.compose.animation.scene.SceneScope
+import com.android.compose.animation.scene.SceneTransitionLayoutState
import com.android.compose.modifiers.height
+import com.android.systemui.common.ui.compose.windowinsets.LocalRawScreenHeight
import com.android.systemui.common.ui.compose.windowinsets.LocalScreenCornerRadius
-import com.android.systemui.notifications.ui.composable.Notifications.TransitionThresholds.EXPANSION_FOR_MAX_CORNER_RADIUS
-import com.android.systemui.notifications.ui.composable.Notifications.TransitionThresholds.EXPANSION_FOR_MAX_SCRIM_ALPHA
import com.android.systemui.res.R
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.shade.ui.composable.ShadeHeader
import com.android.systemui.statusbar.notification.stack.shared.model.ShadeScrimBounds
import com.android.systemui.statusbar.notification.stack.shared.model.ShadeScrimRounding
+import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationTransitionThresholds.EXPANSION_FOR_MAX_CORNER_RADIUS
+import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationTransitionThresholds.EXPANSION_FOR_MAX_SCRIM_ALPHA
import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationsPlaceholderViewModel
import kotlin.math.roundToInt
@@ -168,14 +168,7 @@
val navBarHeight =
with(density) { WindowInsets.systemBars.asPaddingValues().calculateBottomPadding().toPx() }
- val statusBarHeight = WindowInsets.systemBars.asPaddingValues().calculateTopPadding()
- val displayCutoutHeight = WindowInsets.displayCutout.asPaddingValues().calculateTopPadding()
- val screenHeight =
- with(density) {
- (LocalConfiguration.current.screenHeightDp.dp +
- maxOf(statusBarHeight, displayCutoutHeight))
- .toPx()
- } + navBarHeight
+ val screenHeight = LocalRawScreenHeight.current
val stackHeight = viewModel.stackHeight.collectAsState()
@@ -253,7 +246,7 @@
scrimCornerRadius,
screenCornerRadius,
{ expansionFraction },
- layoutState.isTransitioningBetween(Scenes.Gone, Scenes.Shade)
+ layoutState.isNotificationScrimTransitioning(),
)
.let { scrimRounding.value.toRoundedCornerShape(it) }
clip = true
@@ -288,7 +281,7 @@
Modifier.fillMaxSize()
.graphicsLayer {
alpha =
- if (layoutState.isTransitioningBetween(Scenes.Gone, Scenes.Shade)) {
+ if (layoutState.isNotificationScrimTransitioning()) {
(expansionFraction / EXPANSION_FOR_MAX_SCRIM_ALPHA).coerceAtMost(1f)
} else 1f
}
@@ -425,7 +418,7 @@
this
}
-fun ShadeScrimRounding.toRoundedCornerShape(radius: Dp): RoundedCornerShape {
+private fun ShadeScrimRounding.toRoundedCornerShape(radius: Dp): RoundedCornerShape {
val topRadius = if (isTopRounded) radius else 0.dp
val bottomRadius = if (isBottomRounded) radius else 0.dp
return RoundedCornerShape(
@@ -436,6 +429,13 @@
)
}
+private fun SceneTransitionLayoutState.isNotificationScrimTransitioning(): Boolean {
+ return isTransitioningBetween(Scenes.Gone, Scenes.Shade) ||
+ isTransitioningBetween(Scenes.Lockscreen, Scenes.Shade) ||
+ isTransitioningBetween(Scenes.Gone, Scenes.QuickSettings) ||
+ isTransitioningBetween(Scenes.Lockscreen, Scenes.QuickSettings)
+}
+
private const val TAG = "FlexiNotifs"
private val DEBUG_STACK_COLOR = Color(1f, 0f, 0f, 0.2f)
private val DEBUG_HUN_COLOR = Color(0f, 0f, 1f, 0.2f)
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsScene.kt b/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsScene.kt
index a376834..fc32440 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsScene.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsScene.kt
@@ -38,6 +38,7 @@
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.navigationBars
+import androidx.compose.foundation.layout.offset
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.wrapContentHeight
import androidx.compose.foundation.rememberScrollState
@@ -50,19 +51,23 @@
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.CompositingStrategy
import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.compose.ui.res.colorResource
+import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.dp
import com.android.compose.animation.scene.SceneScope
import com.android.compose.animation.scene.TransitionState
import com.android.compose.animation.scene.animateSceneFloatAsState
import com.android.compose.windowsizeclass.LocalWindowSizeClass
import com.android.systemui.battery.BatteryMeterViewController
+import com.android.systemui.common.ui.compose.windowinsets.LocalRawScreenHeight
import com.android.systemui.compose.modifiers.sysuiResTag
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
+import com.android.systemui.notifications.ui.composable.NotificationScrollingStack
import com.android.systemui.qs.footer.ui.compose.FooterActionsWithAnimatedVisibility
import com.android.systemui.qs.ui.viewmodel.QuickSettingsSceneViewModel
import com.android.systemui.res.R
@@ -72,10 +77,12 @@
import com.android.systemui.shade.ui.composable.ExpandedShadeHeader
import com.android.systemui.shade.ui.composable.Shade
import com.android.systemui.shade.ui.composable.ShadeHeader
+import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationsPlaceholderViewModel
import com.android.systemui.statusbar.phone.StatusBarIconController
import com.android.systemui.statusbar.phone.StatusBarIconController.TintedIconManager
import com.android.systemui.statusbar.phone.StatusBarLocation
import javax.inject.Inject
+import kotlin.math.roundToInt
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.stateIn
@@ -87,6 +94,7 @@
constructor(
@Application private val applicationScope: CoroutineScope,
private val viewModel: QuickSettingsSceneViewModel,
+ private val notificationsPlaceholderViewModel: NotificationsPlaceholderViewModel,
private val tintedIconManagerFactory: TintedIconManager.Factory,
private val batteryMeterViewControllerFactory: BatteryMeterViewController.Factory,
private val statusBarIconController: StatusBarIconController,
@@ -106,6 +114,7 @@
) {
QuickSettingsScene(
viewModel = viewModel,
+ notificationsPlaceholderViewModel = notificationsPlaceholderViewModel,
createTintedIconManager = tintedIconManagerFactory::create,
createBatteryMeterViewController = batteryMeterViewControllerFactory::create,
statusBarIconController = statusBarIconController,
@@ -117,6 +126,7 @@
@Composable
private fun SceneScope.QuickSettingsScene(
viewModel: QuickSettingsSceneViewModel,
+ notificationsPlaceholderViewModel: NotificationsPlaceholderViewModel,
createTintedIconManager: (ViewGroup, StatusBarLocation) -> TintedIconManager,
createBatteryMeterViewController: (ViewGroup, StatusBarLocation) -> BatteryMeterViewController,
statusBarIconController: StatusBarIconController,
@@ -135,8 +145,17 @@
)
// TODO(b/280887232): implement the real UI.
- Box(modifier = modifier.fillMaxSize().graphicsLayer { alpha = contentAlpha }) {
+ Box(
+ modifier =
+ modifier.fillMaxSize().graphicsLayer {
+ // Render the scene to an offscreen buffer so that BlendMode.DstOut only clears this
+ // scene (and not the one under it) during a scene transition.
+ compositingStrategy = CompositingStrategy.Offscreen
+ alpha = contentAlpha
+ }
+ ) {
val isCustomizing by viewModel.qsSceneAdapter.isCustomizing.collectAsState()
+ val screenHeight = LocalRawScreenHeight.current
BackHandler(
enabled = isCustomizing,
@@ -273,5 +292,11 @@
modifier = Modifier.align(Alignment.CenterHorizontally),
)
}
+ NotificationScrollingStack(
+ viewModel = notificationsPlaceholderViewModel,
+ maxScrimTop = { screenHeight },
+ modifier =
+ Modifier.fillMaxWidth().offset { IntOffset(x = 0, y = screenHeight.roundToInt()) },
+ )
}
}
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneContainer.kt b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneContainer.kt
index fe6701c..7af9b7b 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneContainer.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneContainer.kt
@@ -37,8 +37,6 @@
import com.android.compose.animation.scene.MutableSceneTransitionLayoutState
import com.android.compose.animation.scene.SceneKey
import com.android.compose.animation.scene.SceneTransitionLayout
-import com.android.compose.animation.scene.UserAction
-import com.android.compose.animation.scene.UserActionResult
import com.android.compose.animation.scene.observableTransitionState
import com.android.systemui.ribbon.ui.composable.BottomRightCornerRibbon
import com.android.systemui.scene.shared.model.SceneDataSourceDelegator
@@ -71,9 +69,7 @@
) {
val coroutineScope = rememberCoroutineScope()
val currentSceneKey: SceneKey by viewModel.currentScene.collectAsState()
- val currentScene = checkNotNull(sceneByKey[currentSceneKey])
- val currentDestinations: Map<UserAction, UserActionResult> by
- currentScene.destinationScenes.collectAsState()
+ val currentDestinations by viewModel.currentDestinationScenes(coroutineScope).collectAsState()
val state: MutableSceneTransitionLayoutState = remember {
MutableSceneTransitionLayoutState(
initialScene = currentSceneKey,
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromGoneToQuickSettingsTransition.kt b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromGoneToQuickSettingsTransition.kt
index 5bd1583..851719d 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromGoneToQuickSettingsTransition.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromGoneToQuickSettingsTransition.kt
@@ -1,12 +1,14 @@
package com.android.systemui.scene.ui.composable.transitions
import androidx.compose.animation.core.tween
-import com.android.compose.animation.scene.Edge
import com.android.compose.animation.scene.TransitionBuilder
-import com.android.systemui.scene.shared.model.Scenes
+import kotlin.time.Duration.Companion.milliseconds
-fun TransitionBuilder.goneToQuickSettingsTransition() {
- spec = tween(durationMillis = 500)
-
- translate(Scenes.QuickSettings.rootElementKey, Edge.Top, true)
+fun TransitionBuilder.goneToQuickSettingsTransition(
+ durationScale: Double = 1.0,
+) {
+ spec = tween(durationMillis = (DefaultDuration * durationScale).inWholeMilliseconds.toInt())
+ toQuickSettingsTransition()
}
+
+private val DefaultDuration = 500.milliseconds
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromGoneToShadeTransition.kt b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromGoneToShadeTransition.kt
index 9b59708..a0f410a 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromGoneToShadeTransition.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromGoneToShadeTransition.kt
@@ -1,31 +1,14 @@
package com.android.systemui.scene.ui.composable.transitions
import androidx.compose.animation.core.tween
-import com.android.compose.animation.scene.Edge
import com.android.compose.animation.scene.TransitionBuilder
-import com.android.systemui.notifications.ui.composable.Notifications
-import com.android.systemui.qs.ui.composable.QuickSettings
-import com.android.systemui.shade.ui.composable.ShadeHeader
import kotlin.time.Duration.Companion.milliseconds
fun TransitionBuilder.goneToShadeTransition(
durationScale: Double = 1.0,
) {
- spec = tween(durationMillis = DefaultDuration.times(durationScale).inWholeMilliseconds.toInt())
-
- fractionRange(start = .58f) {
- fade(ShadeHeader.Elements.Clock)
- fade(ShadeHeader.Elements.CollapsedContentStart)
- fade(ShadeHeader.Elements.CollapsedContentEnd)
- fade(ShadeHeader.Elements.PrivacyChip)
- fade(QuickSettings.Elements.SplitShadeQuickSettings)
- fade(QuickSettings.Elements.FooterActions)
- }
- translate(
- QuickSettings.Elements.QuickQuickSettings,
- y = -ShadeHeader.Dimensions.CollapsedHeight * .66f
- )
- translate(Notifications.Elements.NotificationScrim, Edge.Top, false)
+ spec = tween(durationMillis = (DefaultDuration * durationScale).inWholeMilliseconds.toInt())
+ toShadeTransition()
}
private val DefaultDuration = 500.milliseconds
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromLockscreenToQuickSettingsTransition.kt b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromLockscreenToQuickSettingsTransition.kt
index 962d822..319438c 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromLockscreenToQuickSettingsTransition.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromLockscreenToQuickSettingsTransition.kt
@@ -1,12 +1,14 @@
package com.android.systemui.scene.ui.composable.transitions
import androidx.compose.animation.core.tween
-import com.android.compose.animation.scene.Edge
import com.android.compose.animation.scene.TransitionBuilder
-import com.android.systemui.scene.shared.model.Scenes
+import kotlin.time.Duration.Companion.milliseconds
-fun TransitionBuilder.lockscreenToQuickSettingsTransition() {
- spec = tween(durationMillis = 500)
-
- translate(Scenes.QuickSettings.rootElementKey, Edge.Top, true)
+fun TransitionBuilder.lockscreenToQuickSettingsTransition(
+ durationScale: Double = 1.0,
+) {
+ spec = tween(durationMillis = (DefaultDuration * durationScale).inWholeMilliseconds.toInt())
+ toQuickSettingsTransition()
}
+
+private val DefaultDuration = 500.milliseconds
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromLockscreenToShadeTransition.kt b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromLockscreenToShadeTransition.kt
index 48ab68a..f078b8c 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromLockscreenToShadeTransition.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromLockscreenToShadeTransition.kt
@@ -2,23 +2,13 @@
import androidx.compose.animation.core.tween
import com.android.compose.animation.scene.TransitionBuilder
-import com.android.systemui.notifications.ui.composable.Notifications
-import com.android.systemui.qs.ui.composable.QuickSettings
-import com.android.systemui.shade.ui.composable.Shade
-import com.android.systemui.shade.ui.composable.ShadeHeader
import kotlin.time.Duration.Companion.milliseconds
fun TransitionBuilder.lockscreenToShadeTransition(
durationScale: Double = 1.0,
) {
- spec = tween(durationMillis = DefaultDuration.times(durationScale).inWholeMilliseconds.toInt())
-
- fractionRange(end = 0.5f) { fade(Shade.Elements.BackgroundScrim) }
- translate(QuickSettings.Elements.Content, y = -ShadeHeader.Dimensions.CollapsedHeight * .66f)
- fractionRange(start = 0.5f) {
- fade(QuickSettings.Elements.Content)
- fade(Notifications.Elements.NotificationScrim)
- }
+ spec = tween(durationMillis = (DefaultDuration * durationScale).inWholeMilliseconds.toInt())
+ toShadeTransition()
}
private val DefaultDuration = 500.milliseconds
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromShadeToQuickSettingsTransition.kt b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromShadeToQuickSettingsTransition.kt
index ffb6f31..a9e5be9 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromShadeToQuickSettingsTransition.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromShadeToQuickSettingsTransition.kt
@@ -6,9 +6,12 @@
import com.android.systemui.notifications.ui.composable.Notifications
import com.android.systemui.qs.ui.composable.QuickSettings
import com.android.systemui.shade.ui.composable.ShadeHeader
+import kotlin.time.Duration.Companion.milliseconds
-fun TransitionBuilder.shadeToQuickSettingsTransition() {
- spec = tween(durationMillis = 500)
+fun TransitionBuilder.shadeToQuickSettingsTransition(
+ durationScale: Double = 1.0,
+) {
+ spec = tween(durationMillis = (DefaultDuration * durationScale).inWholeMilliseconds.toInt())
translate(Notifications.Elements.NotificationScrim, Edge.Bottom)
timestampRange(endMillis = 83) { fade(QuickSettings.Elements.FooterActions) }
@@ -24,9 +27,15 @@
)
translate(ShadeHeader.Elements.ShadeCarrierGroup, y = -ShadeHeader.Dimensions.CollapsedHeight)
- fractionRange(end = .14f) { fade(ShadeHeader.Elements.CollapsedContentStart) }
- fractionRange(end = .14f) { fade(ShadeHeader.Elements.CollapsedContentEnd) }
+ fractionRange(end = .14f) {
+ fade(ShadeHeader.Elements.CollapsedContentStart)
+ fade(ShadeHeader.Elements.CollapsedContentEnd)
+ }
- fractionRange(start = .58f) { fade(ShadeHeader.Elements.ExpandedContent) }
- fractionRange(start = .58f) { fade(ShadeHeader.Elements.ShadeCarrierGroup) }
+ fractionRange(start = .58f) {
+ fade(ShadeHeader.Elements.ExpandedContent)
+ fade(ShadeHeader.Elements.ShadeCarrierGroup)
+ }
}
+
+private val DefaultDuration = 500.milliseconds
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/ToQuickSettingsTransition.kt b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/ToQuickSettingsTransition.kt
new file mode 100644
index 0000000..e0a6310
--- /dev/null
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/ToQuickSettingsTransition.kt
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.scene.ui.composable.transitions
+
+import androidx.compose.animation.core.tween
+import com.android.compose.animation.scene.Edge
+import com.android.compose.animation.scene.TransitionBuilder
+import com.android.systemui.notifications.ui.composable.Notifications
+import com.android.systemui.qs.ui.composable.QuickSettings
+import com.android.systemui.shade.ui.composable.ShadeHeader
+import kotlin.time.Duration.Companion.milliseconds
+
+fun TransitionBuilder.toQuickSettingsTransition(
+ durationScale: Double = 1.0,
+) {
+ spec = tween(durationMillis = (DefaultDuration * durationScale).inWholeMilliseconds.toInt())
+
+ translate(
+ ShadeHeader.Elements.ExpandedContent,
+ y = -(ShadeHeader.Dimensions.ExpandedHeight - ShadeHeader.Dimensions.CollapsedHeight)
+ )
+ translate(ShadeHeader.Elements.Clock, y = -ShadeHeader.Dimensions.CollapsedHeight)
+ translate(ShadeHeader.Elements.ShadeCarrierGroup, y = -ShadeHeader.Dimensions.CollapsedHeight)
+
+ fractionRange(start = .58f) {
+ fade(ShadeHeader.Elements.ExpandedContent)
+ fade(ShadeHeader.Elements.Clock)
+ fade(ShadeHeader.Elements.ShadeCarrierGroup)
+ }
+
+ translate(QuickSettings.Elements.Content, y = -ShadeHeader.Dimensions.ExpandedHeight * .66f)
+ translate(Notifications.Elements.NotificationScrim, Edge.Top, false)
+}
+
+private val DefaultDuration = 500.milliseconds
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/ToShadeTransition.kt b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/ToShadeTransition.kt
new file mode 100644
index 0000000..2f59217
--- /dev/null
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/ToShadeTransition.kt
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.scene.ui.composable.transitions
+
+import androidx.compose.animation.core.tween
+import com.android.compose.animation.scene.Edge
+import com.android.compose.animation.scene.TransitionBuilder
+import com.android.systemui.notifications.ui.composable.Notifications
+import com.android.systemui.qs.ui.composable.QuickSettings
+import com.android.systemui.shade.ui.composable.ShadeHeader
+import kotlin.time.Duration.Companion.milliseconds
+
+fun TransitionBuilder.toShadeTransition(
+ durationScale: Double = 1.0,
+) {
+ spec = tween(durationMillis = (DefaultDuration * durationScale).inWholeMilliseconds.toInt())
+
+ fractionRange(start = .58f) {
+ fade(ShadeHeader.Elements.Clock)
+ fade(ShadeHeader.Elements.CollapsedContentStart)
+ fade(ShadeHeader.Elements.CollapsedContentEnd)
+ fade(ShadeHeader.Elements.PrivacyChip)
+ fade(QuickSettings.Elements.SplitShadeQuickSettings)
+ fade(QuickSettings.Elements.FooterActions)
+ }
+ translate(
+ QuickSettings.Elements.QuickQuickSettings,
+ y = -ShadeHeader.Dimensions.CollapsedHeight * .66f
+ )
+ translate(Notifications.Elements.NotificationScrim, Edge.Top, false)
+}
+
+private val DefaultDuration = 500.milliseconds
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeHeader.kt b/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeHeader.kt
index c6c6f57..516e140 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeHeader.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeHeader.kt
@@ -531,8 +531,14 @@
state.currentScene == Scenes.QuickSettings
}
is TransitionState.Transition -> {
- (state.isTransitioning(Scenes.Shade, Scenes.QuickSettings) && state.progress >= 0.5) ||
- (state.isTransitioning(Scenes.QuickSettings, Scenes.Shade) && state.progress < 0.5)
+ ((state.isTransitioning(Scenes.Shade, Scenes.QuickSettings) ||
+ state.isTransitioning(Scenes.Gone, Scenes.QuickSettings) ||
+ state.isTransitioning(Scenes.Lockscreen, Scenes.QuickSettings)) &&
+ state.progress >= 0.5) ||
+ ((state.isTransitioning(Scenes.QuickSettings, Scenes.Shade) ||
+ state.isTransitioning(Scenes.QuickSettings, Scenes.Gone) ||
+ state.isTransitioning(Scenes.QuickSettings, Scenes.Lockscreen)) &&
+ state.progress <= 0.5)
}
}
}
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeScene.kt b/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeScene.kt
index 84b1a4b..944d6ef 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeScene.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeScene.kt
@@ -47,6 +47,7 @@
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.CompositingStrategy
import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.layout.Layout
import androidx.compose.ui.layout.layout
@@ -200,13 +201,15 @@
animateSceneFloatAsState(value = 1f, key = QuickSettings.SharedValues.TilesSquishiness)
val isClickable by viewModel.isClickable.collectAsState()
- Box(
- modifier =
- modifier
- .element(Shade.Elements.BackgroundScrim)
- .background(colorResource(R.color.shade_scrim_background_dark)),
- )
- Box {
+ // Render the scene to an offscreen buffer so that BlendMode.DstOut only clears this scene
+ // (and not the one under it) during a scene transition.
+ Box(modifier = modifier.graphicsLayer(compositingStrategy = CompositingStrategy.Offscreen)) {
+ Box(
+ modifier =
+ Modifier.fillMaxSize()
+ .element(Shade.Elements.BackgroundScrim)
+ .background(colorResource(R.color.shade_scrim_background_dark)),
+ )
Layout(
contents =
listOf(
diff --git a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/DraggableHandler.kt b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/DraggableHandler.kt
index 1b06275..32cebd1 100644
--- a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/DraggableHandler.kt
+++ b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/DraggableHandler.kt
@@ -280,7 +280,7 @@
swipes.findUserActionResult(
fromScene = fromScene,
directionOffset = swipeTransition.dragOffset,
- updateSwipesResults = isNewFromScene
+ updateSwipesResults = isNewFromScene,
)
if (result == null) {
@@ -288,13 +288,14 @@
return
}
- swipeTransition.dragOffset += acceleratedOffset
-
if (
isNewFromScene ||
result.toScene != swipeTransition.toScene ||
result.transitionKey != swipeTransition.key
) {
+ // Make sure the current transition will finish to the right current scene.
+ swipeTransition._currentScene = fromScene
+
val swipeTransition =
SwipeTransition(
layoutState = layoutState,
@@ -305,7 +306,7 @@
layoutImpl = draggableHandler.layoutImpl,
orientation = draggableHandler.orientation,
)
- .apply { dragOffset = swipeTransition.dragOffset }
+ .apply { dragOffset = swipeTransition.dragOffset + acceleratedOffset }
updateTransition(swipeTransition)
}
diff --git a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/Element.kt b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/Element.kt
index a8a1d88..7d43ca8 100644
--- a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/Element.kt
+++ b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/Element.kt
@@ -43,6 +43,7 @@
import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.round
import androidx.compose.ui.util.fastCoerceIn
+import androidx.compose.ui.util.fastLastOrNull
import androidx.compose.ui.util.lerp
import com.android.compose.animation.scene.transformation.PropertyTransformation
import com.android.compose.animation.scene.transformation.SharedElementTransformation
@@ -81,14 +82,12 @@
}
data class Scale(val scaleX: Float, val scaleY: Float, val pivot: Offset = Offset.Unspecified) {
-
companion object {
val Default = Scale(1f, 1f, Offset.Unspecified)
}
}
/** The implementation of [SceneScope.element]. */
-@OptIn(ExperimentalComposeUiApi::class)
@Stable
internal fun Modifier.element(
layoutImpl: SceneTransitionLayoutImpl,
@@ -187,7 +186,7 @@
override fun isMeasurementApproachComplete(lookaheadSize: IntSize): Boolean {
// TODO(b/324191441): Investigate whether making this check more complex (checking if this
// element is shared or transformed) would lead to better performance.
- return layoutImpl.state.currentTransition == null
+ return layoutImpl.state.currentTransitions.isEmpty()
}
override fun Placeable.PlacementScope.isPlacementApproachComplete(
@@ -195,7 +194,7 @@
): Boolean {
// TODO(b/324191441): Investigate whether making this check more complex (checking if this
// element is shared or transformed) would lead to better performance.
- return layoutImpl.state.currentTransition == null
+ return layoutImpl.state.currentTransitions.isEmpty()
}
@ExperimentalComposeUiApi
@@ -203,25 +202,38 @@
measurable: Measurable,
constraints: Constraints,
): MeasureResult {
- val overscrollScene = layoutImpl.state.currentTransition?.currentOverscrollSpec?.scene
- if (overscrollScene != null && overscrollScene != scene.key) {
- // There is an overscroll in progress on another scene
- // By measuring composable elements, Compose can cache relevant information.
- // This reduces the need for re-measure when users return from an overscroll animation.
+ val transitions = layoutImpl.state.currentTransitions
+ val transition = elementTransition(element, transitions)
+
+ // If this element is not supposed to be laid out now, either because it is not part of any
+ // ongoing transition or the other scene of its transition is overscrolling, then lay out
+ // the element normally and don't place it.
+ val overscrollScene = transition?.currentOverscrollSpec?.scene
+ val isOtherSceneOverscrolling = overscrollScene != null && overscrollScene != scene.key
+ val isNotPartOfAnyOngoingTransitions = transitions.isNotEmpty() && transition == null
+ if (isNotPartOfAnyOngoingTransitions || isOtherSceneOverscrolling) {
val placeable = measurable.measure(constraints)
- return layout(placeable.width, placeable.height) {
- // We don't want to draw it, no need to place the element.
- }
+ return layout(placeable.width, placeable.height) {}
}
- val placeable = measure(layoutImpl, scene, element, sceneState, measurable, constraints)
+ val placeable =
+ measure(layoutImpl, scene, element, transition, sceneState, measurable, constraints)
return layout(placeable.width, placeable.height) {
- place(layoutImpl, scene, element, sceneState, placeable, placementScope = this)
+ place(
+ layoutImpl,
+ scene,
+ element,
+ transition,
+ sceneState,
+ placeable,
+ placementScope = this,
+ )
}
}
override fun ContentDrawScope.draw() {
- val drawScale = getDrawScale(layoutImpl, element, scene)
+ val transition = elementTransition(element, layoutImpl.state.currentTransitions)
+ val drawScale = getDrawScale(layoutImpl, scene, element, transition)
if (drawScale == Scale.Default) {
drawContent()
} else {
@@ -256,70 +268,91 @@
}
}
-private fun shouldDrawElement(
+/**
+ * The transition that we should consider for [element]. This is the last transition where one of
+ * its scenes contains the element.
+ */
+private fun elementTransition(
+ element: Element,
+ transitions: List<TransitionState.Transition>,
+): TransitionState.Transition? {
+ return transitions.fastLastOrNull { transition ->
+ transition.fromScene in element.sceneStates || transition.toScene in element.sceneStates
+ }
+}
+
+private fun shouldPlaceElement(
layoutImpl: SceneTransitionLayoutImpl,
scene: Scene,
element: Element,
+ transition: TransitionState.Transition?,
): Boolean {
- val transition = layoutImpl.state.currentTransition ?: return true
-
- val inFromScene = transition.fromScene in element.sceneStates
- val inToScene = transition.toScene in element.sceneStates
-
- // If an element is not present in any scene, it should not be drawn.
- if (!inFromScene && !inToScene) {
- return false
- }
-
- // Always draw if the element is not shared or if the current scene is the one that is currently
- // over scrolling with [OverscrollSpec].
- if (!inFromScene || !inToScene || transition.currentOverscrollSpec?.scene == scene.key) {
+ // Always place the element if we are idle.
+ if (transition == null) {
return true
}
- val sharedTransformation = sharedElementTransformation(transition, element.key)
+ // Don't place the element in this scene if this scene is not part of the current element
+ // transition.
+ if (scene.key != transition.fromScene && scene.key != transition.toScene) {
+ return false
+ }
+
+ // Place the element if it is not shared or if the current scene is the one that is currently
+ // overscrolling with [OverscrollSpec].
+ if (
+ transition.fromScene !in element.sceneStates ||
+ transition.toScene !in element.sceneStates ||
+ transition.currentOverscrollSpec?.scene == scene.key
+ ) {
+ return true
+ }
+
+ val sharedTransformation = sharedElementTransformation(element.key, transition)
if (sharedTransformation?.enabled == false) {
return true
}
return shouldDrawOrComposeSharedElement(
layoutImpl,
- transition,
scene.key,
element.key,
+ transition,
)
}
internal fun shouldDrawOrComposeSharedElement(
layoutImpl: SceneTransitionLayoutImpl,
- transition: TransitionState.Transition,
scene: SceneKey,
element: ElementKey,
+ transition: TransitionState.Transition,
): Boolean {
val scenePicker = element.scenePicker
val fromScene = transition.fromScene
val toScene = transition.toScene
- val chosenByPicker =
+ val pickedScene =
scenePicker.sceneDuringTransition(
element = element,
transition = transition,
fromSceneZIndex = layoutImpl.scenes.getValue(fromScene).zIndex,
toSceneZIndex = layoutImpl.scenes.getValue(toScene).zIndex,
- ) == scene
- return chosenByPicker || transition.currentOverscrollSpec?.scene == scene
+ )
+ ?: return false
+
+ return pickedScene == scene || transition.currentOverscrollSpec?.scene == scene
}
private fun isSharedElementEnabled(
- transition: TransitionState.Transition,
element: ElementKey,
+ transition: TransitionState.Transition,
): Boolean {
- return sharedElementTransformation(transition, element)?.enabled ?: true
+ return sharedElementTransformation(element, transition)?.enabled ?: true
}
internal fun sharedElementTransformation(
- transition: TransitionState.Transition,
element: ElementKey,
+ transition: TransitionState.Transition,
): SharedElementTransformation? {
val transformationSpec = transition.transformationSpec
val sharedInFromScene = transformationSpec.transformations(element, transition.fromScene).shared
@@ -344,11 +377,13 @@
* placement and we don't want to read the transition progress in that phase.
*/
private fun isElementOpaque(
- layoutImpl: SceneTransitionLayoutImpl,
- element: Element,
scene: Scene,
+ element: Element,
+ transition: TransitionState.Transition?,
): Boolean {
- val transition = layoutImpl.state.currentTransition ?: return true
+ if (transition == null) {
+ return true
+ }
val fromScene = transition.fromScene
val toScene = transition.toScene
@@ -356,11 +391,13 @@
val toState = element.sceneStates[toScene]
if (fromState == null && toState == null) {
- error("This should not happen, element $element is neither in $fromScene or $toScene")
+ // TODO(b/311600838): Throw an exception instead once layers of disposed elements are not
+ // run anymore.
+ return true
}
val isSharedElement = fromState != null && toState != null
- if (isSharedElement && isSharedElementEnabled(transition, element.key)) {
+ if (isSharedElement && isSharedElementEnabled(element.key, transition)) {
return true
}
@@ -377,13 +414,15 @@
*/
private fun elementAlpha(
layoutImpl: SceneTransitionLayoutImpl,
- element: Element,
scene: Scene,
+ element: Element,
+ transition: TransitionState.Transition?,
): Float {
return computeValue(
layoutImpl,
scene,
element,
+ transition,
sceneValue = { 1f },
transformation = { it.alpha },
idleValue = 1f,
@@ -399,6 +438,7 @@
layoutImpl: SceneTransitionLayoutImpl,
scene: Scene,
element: Element,
+ transition: TransitionState.Transition?,
sceneState: Element.SceneState,
measurable: Measurable,
constraints: Constraints,
@@ -422,6 +462,7 @@
layoutImpl,
scene,
element,
+ transition,
sceneValue = { it.targetSize },
transformation = { it.size },
idleValue = lookaheadSize,
@@ -441,13 +482,15 @@
private fun getDrawScale(
layoutImpl: SceneTransitionLayoutImpl,
+ scene: Scene,
element: Element,
- scene: Scene
+ transition: TransitionState.Transition?,
): Scale {
return computeValue(
layoutImpl,
scene,
element,
+ transition,
sceneValue = { Scale.Default },
transformation = { it.drawScale },
idleValue = Scale.Default,
@@ -462,6 +505,7 @@
layoutImpl: SceneTransitionLayoutImpl,
scene: Scene,
element: Element,
+ transition: TransitionState.Transition?,
sceneState: Element.SceneState,
placeable: Placeable,
placementScope: Placeable.PlacementScope,
@@ -479,7 +523,7 @@
}
// No need to place the element in this scene if we don't want to draw it anyways.
- if (!shouldDrawElement(layoutImpl, scene, element)) {
+ if (!shouldPlaceElement(layoutImpl, scene, element, transition)) {
return
}
@@ -489,6 +533,7 @@
layoutImpl,
scene,
element,
+ transition,
sceneValue = { it.targetOffset },
transformation = { it.offset },
idleValue = targetOffsetInScene,
@@ -498,14 +543,14 @@
)
val offset = (targetOffset - currentOffset).round()
- if (isElementOpaque(layoutImpl, element, scene)) {
+ if (isElementOpaque(scene, element, transition)) {
// TODO(b/291071158): Call placeWithLayer() if offset != IntOffset.Zero and size is not
// animated once b/305195729 is fixed. Test that drawing is not invalidated in that
// case.
placeable.place(offset)
} else {
placeable.placeWithLayer(offset) {
- alpha = elementAlpha(layoutImpl, element, scene)
+ alpha = elementAlpha(layoutImpl, scene, element, transition)
compositingStrategy = CompositingStrategy.ModulateAlpha
}
}
@@ -536,6 +581,7 @@
layoutImpl: SceneTransitionLayoutImpl,
scene: Scene,
element: Element,
+ transition: TransitionState.Transition?,
sceneValue: (Element.SceneState) -> T,
transformation: (ElementTransformations) -> PropertyTransformation<T>?,
idleValue: T,
@@ -543,13 +589,13 @@
isSpecified: (T) -> Boolean,
lerp: (T, T, Float) -> T,
): T {
- val transition =
- layoutImpl.state.currentTransition
+ if (transition == null) {
// There is no ongoing transition. Even if this element SceneTransitionLayout is not
// animated, the layout itself might be animated (e.g. by another parent
// SceneTransitionLayout), in which case this element still need to participate in the
// layout phase.
- ?: return currentValue()
+ return currentValue()
+ }
val fromScene = transition.fromScene
val toScene = transition.toScene
@@ -602,7 +648,7 @@
// TODO(b/290184746): Support non linear shared paths as well as a way to make sure that shared
// elements follow the finger direction.
val isSharedElement = fromState != null && toState != null
- if (isSharedElement && isSharedElementEnabled(transition, element.key)) {
+ if (isSharedElement && isSharedElementEnabled(element.key, transition)) {
val start = sceneValue(fromState!!)
val end = sceneValue(toState!!)
diff --git a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/MovableElement.kt b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/MovableElement.kt
index be066fd..4b20aca 100644
--- a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/MovableElement.kt
+++ b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/MovableElement.kt
@@ -26,6 +26,7 @@
import androidx.compose.ui.Modifier
import androidx.compose.ui.layout.Layout
import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.util.fastLastOrNull
@Composable
internal fun Element(
@@ -165,18 +166,33 @@
scene: SceneKey,
element: ElementKey,
): Boolean {
- val transition =
- layoutImpl.state.currentTransition
+ val transitions = layoutImpl.state.currentTransitions
+ if (transitions.isEmpty()) {
// If we are idle, there is only one [scene] that is composed so we can compose our
- // movable content here.
- ?: return true
+ // movable content here. We still check that [scene] is equal to the current idle scene, to
+ // make sure we only compose it there.
+ return layoutImpl.state.transitionState.currentScene == scene
+ }
+
+ // The current transition for this element is the last transition in which either fromScene or
+ // toScene contains the element.
+ val transition =
+ transitions.fastLastOrNull { transition ->
+ element.scenePicker.sceneDuringTransition(
+ element = element,
+ transition = transition,
+ fromSceneZIndex = layoutImpl.scenes.getValue(transition.fromScene).zIndex,
+ toSceneZIndex = layoutImpl.scenes.getValue(transition.toScene).zIndex,
+ ) != null
+ }
+ ?: return false
// Always compose movable elements in the scene picked by their scene picker.
return shouldDrawOrComposeSharedElement(
layoutImpl,
- transition,
scene,
element,
+ transition,
)
}
diff --git a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/Scene.kt b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/Scene.kt
index 418c6bb..7fb5a4d 100644
--- a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/Scene.kt
+++ b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/Scene.kt
@@ -59,7 +59,10 @@
): Map<UserAction, UserActionResult> {
userActions.forEach { (action, result) ->
if (key == result.toScene) {
- error("Transition to the same scene is not supported. Scene $key, action $action")
+ error(
+ "Transition to the same scene is not supported. Scene $key, action $action," +
+ " result $result"
+ )
}
}
return userActions
diff --git a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/SceneTransitionLayoutImpl.kt b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/SceneTransitionLayoutImpl.kt
index dbec059..20dcc20 100644
--- a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/SceneTransitionLayoutImpl.kt
+++ b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/SceneTransitionLayoutImpl.kt
@@ -35,6 +35,7 @@
import androidx.compose.ui.unit.Density
import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.util.fastForEach
+import androidx.compose.ui.util.fastForEachReversed
import com.android.compose.ui.util.lerp
import kotlinx.coroutines.CoroutineScope
@@ -191,38 +192,44 @@
.then(LayoutElement(layoutImpl = this))
) {
LookaheadScope {
- val scenesToCompose =
- when (val state = state.transitionState) {
- is TransitionState.Idle -> listOf(scene(state.currentScene))
- is TransitionState.Transition -> {
- if (state.toScene != state.fromScene) {
- listOf(scene(state.toScene), scene(state.fromScene))
- } else {
- listOf(scene(state.fromScene))
- }
- }
- }
+ BackHandler()
- // Handle back events.
- val targetSceneForBackOrNull =
- scene(state.transitionState.currentScene).userActions[Back]?.toScene
- BackHandler(
- enabled = targetSceneForBackOrNull != null,
- ) {
- targetSceneForBackOrNull?.let { targetSceneForBack ->
- // TODO(b/290184746): Handle predictive back and use result.distance if
- // specified.
- if (state.canChangeScene(targetSceneForBack)) {
- with(state) { coroutineScope.onChangeScene(targetSceneForBack) }
- }
+ scenesToCompose().fastForEach { scene -> key(scene.key) { scene.Content() } }
+ }
+ }
+ }
+
+ @Composable
+ private fun BackHandler() {
+ val targetSceneForBackOrNull =
+ scene(state.transitionState.currentScene).userActions[Back]?.toScene
+ BackHandler(enabled = targetSceneForBackOrNull != null) {
+ targetSceneForBackOrNull?.let { targetSceneForBack ->
+ // TODO(b/290184746): Handle predictive back and use result.distance if specified.
+ if (state.canChangeScene(targetSceneForBack)) {
+ with(state) { coroutineScope.onChangeScene(targetSceneForBack) }
+ }
+ }
+ }
+ }
+
+ private fun scenesToCompose(): List<Scene> {
+ val transitions = state.currentTransitions
+ return if (transitions.isEmpty()) {
+ listOf(scene(state.transitionState.currentScene))
+ } else {
+ buildList {
+ val visited = mutableSetOf<SceneKey>()
+ fun maybeAdd(sceneKey: SceneKey) {
+ if (visited.add(sceneKey)) {
+ add(scene(sceneKey))
}
}
- Box {
- scenesToCompose.fastForEach { scene ->
- val key = scene.key
- key(key) { scene.Content() }
- }
+ // Compose the new scene we are going to first.
+ transitions.fastForEachReversed { transition ->
+ maybeAdd(transition.toScene)
+ maybeAdd(transition.fromScene)
}
}
}
diff --git a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/TransitionDsl.kt b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/TransitionDsl.kt
index 2c109a3..6bc397e 100644
--- a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/TransitionDsl.kt
+++ b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/TransitionDsl.kt
@@ -205,7 +205,9 @@
interface ElementScenePicker {
/**
* Return the scene in which [element] should be drawn (when using `Modifier.element(key)`) or
- * composed (when using `MovableElement(key)`) during the given [transition].
+ * composed (when using `MovableElement(key)`) during the given [transition]. If this element
+ * should not be drawn or composed in neither [transition.fromScene] nor [transition.toScene],
+ * return `null`.
*
* Important: For [MovableElements][SceneScope.MovableElement], this scene picker will *always*
* be used during transitions to decide whether we should compose that element in a given scene
@@ -217,12 +219,13 @@
transition: TransitionState.Transition,
fromSceneZIndex: Float,
toSceneZIndex: Float,
- ): SceneKey
+ ): SceneKey?
/**
* Return [transition.fromScene] if it is in [scenes] and [transition.toScene] is not, or return
- * [transition.toScene] if it is in [scenes] and [transition.fromScene] is not, otherwise throw
- * an exception (i.e. if neither or both of fromScene and toScene are in [scenes]).
+ * [transition.toScene] if it is in [scenes] and [transition.fromScene] is not. If neither
+ * [transition.fromScene] and [transition.toScene] are in [scenes], return `null`. If both
+ * [transition.fromScene] and [transition.toScene] are in [scenes], throw an exception.
*
* This function can be useful when computing the scene in which a movable element should be
* composed.
@@ -231,31 +234,22 @@
scenes: Set<SceneKey>,
transition: TransitionState.Transition,
element: ElementKey,
- ): SceneKey {
+ ): SceneKey? {
val fromScene = transition.fromScene
val toScene = transition.toScene
val fromSceneInScenes = scenes.contains(fromScene)
val toSceneInScenes = scenes.contains(toScene)
- if (fromSceneInScenes && toSceneInScenes) {
- error(
- "Element $element can be in both $fromScene and $toScene. You should add a " +
- "special case for this transition before calling pickSingleSceneIn()."
- )
- }
- if (!fromSceneInScenes && !toSceneInScenes) {
- error(
- "Element $element can be neither in $fromScene and $toScene. This either means " +
- "that you should add one of them in the scenes set passed to " +
- "pickSingleSceneIn(), or there is an internal error and this element was " +
- "composed when it shouldn't be."
- )
- }
-
- return if (fromSceneInScenes) {
- fromScene
- } else {
- toScene
+ return when {
+ fromSceneInScenes && toSceneInScenes -> {
+ error(
+ "Element $element can be in both $fromScene and $toScene. You should add a " +
+ "special case for this transition before calling pickSingleSceneIn()."
+ )
+ }
+ fromSceneInScenes -> fromScene
+ toSceneInScenes -> toScene
+ else -> null
}
}
}
@@ -312,8 +306,12 @@
transition: TransitionState.Transition,
fromSceneZIndex: Float,
toSceneZIndex: Float,
- ): SceneKey {
- return if (scenes.contains(transition.toScene)) transition.toScene else transition.fromScene
+ ): SceneKey? {
+ return when {
+ scenes.contains(transition.toScene) -> transition.toScene
+ scenes.contains(transition.fromScene) -> transition.fromScene
+ else -> null
+ }
}
}
diff --git a/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/ElementTest.kt b/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/ElementTest.kt
index 458a2b9..b7fc91c 100644
--- a/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/ElementTest.kt
+++ b/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/ElementTest.kt
@@ -16,6 +16,7 @@
package com.android.compose.animation.scene
+import androidx.compose.animation.core.LinearEasing
import androidx.compose.animation.core.Spring
import androidx.compose.animation.core.spring
import androidx.compose.animation.core.tween
@@ -40,12 +41,14 @@
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.runtime.snapshotFlow
+import androidx.compose.ui.Alignment
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.layout.intermediateLayout
import androidx.compose.ui.platform.LocalViewConfiguration
import androidx.compose.ui.test.assertIsNotDisplayed
+import androidx.compose.ui.test.assertPositionInRootIsEqualTo
import androidx.compose.ui.test.assertTopPositionInRootIsEqualTo
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onNodeWithTag
@@ -54,6 +57,9 @@
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.android.compose.animation.scene.TestScenes.SceneA
+import com.android.compose.animation.scene.TestScenes.SceneB
+import com.android.compose.animation.scene.TestScenes.SceneC
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
@@ -187,8 +193,8 @@
lateinit var changeScene: (SceneKey) -> Unit
rule.testTransition(
- from = TestScenes.SceneA,
- to = TestScenes.SceneB,
+ from = SceneA,
+ to = SceneB,
transitionLayout = { currentScene, onChangeScene ->
changeScene = onChangeScene
@@ -196,11 +202,15 @@
currentScene,
onChangeScene,
transitions {
- from(TestScenes.SceneA, to = TestScenes.SceneB) { spec = tween }
- from(TestScenes.SceneB, to = TestScenes.SceneC) { spec = tween }
+ from(SceneA, to = SceneB) { spec = tween }
+ from(SceneB, to = SceneC) { spec = tween }
},
+
+ // Disable interruptions so that the current transition is directly removed when
+ // starting a new one.
+ enableInterruptions = false,
) {
- scene(TestScenes.SceneA) {
+ scene(SceneA) {
Box(Modifier.size(layoutSize)) {
// Transformed element
Element(
@@ -210,8 +220,8 @@
)
}
}
- scene(TestScenes.SceneB) { Box(Modifier.size(layoutSize)) }
- scene(TestScenes.SceneC) { Box(Modifier.size(layoutSize)) }
+ scene(SceneB) { Box(Modifier.size(layoutSize)) }
+ scene(SceneC) { Box(Modifier.size(layoutSize)) }
}
},
) {
@@ -220,7 +230,7 @@
onElement(TestElements.Bar).assertExists()
// Start transition from SceneB to SceneC
- changeScene(TestScenes.SceneC)
+ changeScene(SceneC)
}
at(2 * frameDuration) { onElement(TestElements.Bar).assertIsNotDisplayed() }
@@ -317,7 +327,7 @@
@Test
fun elementIsReusedBetweenScenes() {
- var currentScene by mutableStateOf(TestScenes.SceneA)
+ var currentScene by mutableStateOf(SceneA)
var sceneCState by mutableStateOf(0)
val key = TestElements.Foo
var nullableLayoutImpl: SceneTransitionLayoutImpl? = null
@@ -331,9 +341,9 @@
),
onLayoutImpl = { nullableLayoutImpl = it },
) {
- scene(TestScenes.SceneA) { /* Nothing */}
- scene(TestScenes.SceneB) { Box(Modifier.element(key)) }
- scene(TestScenes.SceneC) {
+ scene(SceneA) { /* Nothing */}
+ scene(SceneB) { Box(Modifier.element(key)) }
+ scene(SceneC) {
when (sceneCState) {
0 -> Row(Modifier.element(key)) {}
else -> {
@@ -352,21 +362,21 @@
assertThat(layoutImpl.elements).isEmpty()
// Scene B: element is in the map.
- currentScene = TestScenes.SceneB
+ currentScene = SceneB
rule.waitForIdle()
assertThat(layoutImpl.elements.keys).containsExactly(key)
val element = layoutImpl.elements.getValue(key)
- assertThat(element.sceneStates.keys).containsExactly(TestScenes.SceneB)
+ assertThat(element.sceneStates.keys).containsExactly(SceneB)
// Scene C, state 0: the same element is reused.
- currentScene = TestScenes.SceneC
+ currentScene = SceneC
sceneCState = 0
rule.waitForIdle()
assertThat(layoutImpl.elements.keys).containsExactly(key)
assertThat(layoutImpl.elements.getValue(key)).isSameInstanceAs(element)
- assertThat(element.sceneStates.keys).containsExactly(TestScenes.SceneC)
+ assertThat(element.sceneStates.keys).containsExactly(SceneC)
// Scene C, state 1: the element is removed from the map.
sceneCState = 1
@@ -454,14 +464,10 @@
rule.setContent {
SceneTransitionLayoutForTesting(
- state =
- updateSceneTransitionLayoutState(
- currentScene = TestScenes.SceneA,
- onChangeScene = {}
- ),
+ state = updateSceneTransitionLayoutState(currentScene = SceneA, onChangeScene = {}),
onLayoutImpl = { nullableLayoutImpl = it },
) {
- scene(TestScenes.SceneA) { Box(Modifier.element(key)) }
+ scene(SceneA) { Box(Modifier.element(key)) }
}
}
@@ -471,7 +477,7 @@
// There is only Foo in the elements map.
assertThat(layoutImpl.elements.keys).containsExactly(TestElements.Foo)
val fooElement = layoutImpl.elements.getValue(TestElements.Foo)
- assertThat(fooElement.sceneStates.keys).containsExactly(TestScenes.SceneA)
+ assertThat(fooElement.sceneStates.keys).containsExactly(SceneA)
key = TestElements.Bar
@@ -479,7 +485,7 @@
rule.waitForIdle()
assertThat(layoutImpl.elements.keys).containsExactly(TestElements.Bar)
val barElement = layoutImpl.elements.getValue(TestElements.Bar)
- assertThat(barElement.sceneStates.keys).containsExactly(TestScenes.SceneA)
+ assertThat(barElement.sceneStates.keys).containsExactly(SceneA)
assertThat(fooElement.sceneStates).isEmpty()
}
@@ -507,14 +513,10 @@
scrollScope = rememberCoroutineScope()
SceneTransitionLayoutForTesting(
- state =
- updateSceneTransitionLayoutState(
- currentScene = TestScenes.SceneA,
- onChangeScene = {}
- ),
+ state = updateSceneTransitionLayoutState(currentScene = SceneA, onChangeScene = {}),
onLayoutImpl = { nullableLayoutImpl = it },
) {
- scene(TestScenes.SceneA) {
+ scene(SceneA) {
// The pages are full-size and beyondBoundsPageCount is 0, so at rest only one
// page should be composed.
HorizontalPager(
@@ -538,11 +540,11 @@
assertThat(layoutImpl.elements.keys).containsExactly(TestElements.Foo)
val element = layoutImpl.elements.getValue(TestElements.Foo)
val sceneValues = element.sceneStates
- assertThat(sceneValues.keys).containsExactly(TestScenes.SceneA)
+ assertThat(sceneValues.keys).containsExactly(SceneA)
// Get the ElementModifier node that should be reused later on when coming back to this
// page.
- val nodes = sceneValues.getValue(TestScenes.SceneA).nodes
+ val nodes = sceneValues.getValue(SceneA).nodes
assertThat(nodes).hasSize(1)
val node = nodes.single()
@@ -563,10 +565,10 @@
val newSceneValues = newElement.sceneStates
assertThat(newElement).isNotEqualTo(element)
assertThat(newSceneValues).isNotEqualTo(sceneValues)
- assertThat(newSceneValues.keys).containsExactly(TestScenes.SceneA)
+ assertThat(newSceneValues.keys).containsExactly(SceneA)
// The ElementModifier node should be the same as before.
- val newNodes = newSceneValues.getValue(TestScenes.SceneA).nodes
+ val newNodes = newSceneValues.getValue(SceneA).nodes
assertThat(newNodes).hasSize(1)
val newNode = newNodes.single()
assertThat(newNode).isSameInstanceAs(node)
@@ -612,7 +614,7 @@
val state =
MutableSceneTransitionLayoutState(
- initialScene = TestScenes.SceneA,
+ initialScene = SceneA,
transitions = transitions(sceneTransitions),
)
as MutableSceneTransitionLayoutStateImpl
@@ -623,10 +625,7 @@
state = state,
modifier = Modifier.size(layoutWidth, layoutHeight)
) {
- scene(
- key = TestScenes.SceneA,
- userActions = mapOf(Swipe.Down to TestScenes.SceneB)
- ) {
+ scene(key = SceneA, userActions = mapOf(Swipe.Down to SceneB)) {
animateSceneFloatAsState(
value = animatedFloatRange.start,
key = TestValues.Value1,
@@ -634,7 +633,7 @@
)
Spacer(Modifier.fillMaxSize())
}
- scene(TestScenes.SceneB) {
+ scene(SceneB) {
val animatedFloat by
animateSceneFloatAsState(
value = animatedFloatRange.endInclusive,
@@ -674,7 +673,7 @@
layoutWidth = layoutWidth,
layoutHeight = layoutHeight,
sceneTransitions = {
- overscroll(TestScenes.SceneB, Orientation.Vertical) {
+ overscroll(SceneB, Orientation.Vertical) {
// On overscroll 100% -> Foo should translate by overscrollTranslateY
translate(TestElements.Foo, y = overscrollTranslateY)
}
@@ -726,10 +725,10 @@
val state =
MutableSceneTransitionLayoutState(
- initialScene = TestScenes.SceneB,
+ initialScene = SceneB,
transitions =
transitions {
- overscroll(TestScenes.SceneB, Orientation.Vertical) {
+ overscroll(SceneB, Orientation.Vertical) {
translate(TestElements.Foo, y = overscrollTranslateY)
}
}
@@ -742,8 +741,8 @@
state = state,
modifier = Modifier.size(layoutWidth, layoutHeight)
) {
- scene(TestScenes.SceneA) { Spacer(Modifier.fillMaxSize()) }
- scene(TestScenes.SceneB, userActions = mapOf(Swipe.Up to TestScenes.SceneA)) {
+ scene(SceneA) { Spacer(Modifier.fillMaxSize()) }
+ scene(SceneB, userActions = mapOf(Swipe.Up to SceneA)) {
Box(
Modifier
// Unconsumed scroll gesture will be intercepted by STL
@@ -801,7 +800,7 @@
layoutWidth = layoutWidth,
layoutHeight = layoutHeight,
sceneTransitions = {
- overscroll(TestScenes.SceneB, Orientation.Vertical) {
+ overscroll(SceneB, Orientation.Vertical) {
// On overscroll 100% -> Foo should translate by layoutHeight
translate(TestElements.Foo, y = { absoluteDistance })
}
@@ -858,7 +857,7 @@
stiffness = Spring.StiffnessLow,
)
- overscroll(TestScenes.SceneB, Orientation.Vertical) {
+ overscroll(SceneB, Orientation.Vertical) {
// On overscroll 100% -> Foo should translate by layoutHeight
translate(TestElements.Foo, y = { absoluteDistance })
}
@@ -899,4 +898,125 @@
assertThat(transition.bouncingScene).isEqualTo(transition.toScene)
assertThat(animatedFloat).isEqualTo(100f)
}
+
+ @Test
+ fun elementIsUsingLastTransition() {
+ // 4 frames of animation.
+ val duration = 4 * 16
+
+ val state =
+ MutableSceneTransitionLayoutState(
+ SceneA,
+ transitions {
+ // Foo is at the top left corner of scene A. We make it disappear during A => B
+ // to the right edge so it translates to the right.
+ from(SceneA, to = SceneB) {
+ spec = tween(duration, easing = LinearEasing)
+ translate(
+ TestElements.Foo,
+ edge = Edge.Right,
+ startsOutsideLayoutBounds = false,
+ )
+ }
+
+ // Bar is at the top right corner of scene C. We make it appear during B => C
+ // from the left edge so it translates to the right at same time as Foo.
+ from(SceneB, to = SceneC) {
+ spec = tween(duration, easing = LinearEasing)
+ translate(
+ TestElements.Bar,
+ edge = Edge.Left,
+ startsOutsideLayoutBounds = false,
+ )
+ }
+ }
+ )
+
+ val layoutSize = 150.dp
+ val elemSize = 50.dp
+ lateinit var coroutineScope: CoroutineScope
+ rule.setContent {
+ coroutineScope = rememberCoroutineScope()
+
+ SceneTransitionLayout(state) {
+ scene(SceneA) {
+ Box(Modifier.size(layoutSize)) {
+ Box(
+ Modifier.align(Alignment.TopStart)
+ .element(TestElements.Foo)
+ .size(elemSize)
+ )
+ }
+ }
+ scene(SceneB) {
+ // Empty scene.
+ Box(Modifier.size(layoutSize))
+ }
+ scene(SceneC) {
+ Box(Modifier.size(layoutSize)) {
+ Box(
+ Modifier.align(Alignment.BottomEnd)
+ .element(TestElements.Bar)
+ .size(elemSize)
+ )
+ }
+ }
+ }
+ }
+
+ rule.mainClock.autoAdvance = false
+
+ // Trigger A => B then directly B => C so that Foo and Bar move together to the right edge.
+ rule.runOnUiThread {
+ state.setTargetScene(SceneB, coroutineScope)
+ state.setTargetScene(SceneC, coroutineScope)
+ }
+
+ val transitions = state.currentTransitions
+ assertThat(transitions).hasSize(2)
+ assertThat(transitions[0].fromScene).isEqualTo(SceneA)
+ assertThat(transitions[0].toScene).isEqualTo(SceneB)
+ assertThat(transitions[0].progress).isEqualTo(0f)
+
+ assertThat(transitions[1].fromScene).isEqualTo(SceneB)
+ assertThat(transitions[1].toScene).isEqualTo(SceneC)
+ assertThat(transitions[1].progress).isEqualTo(0f)
+
+ // First frame: both are at x = 0dp. For the whole transition, Foo is at y = 0dp and Bar is
+ // at y = layoutSize - elementSoze = 100dp.
+ rule.mainClock.advanceTimeByFrame()
+ rule.waitForIdle()
+ rule.onNode(isElement(TestElements.Foo)).assertPositionInRootIsEqualTo(0.dp, 0.dp)
+ rule.onNode(isElement(TestElements.Bar)).assertPositionInRootIsEqualTo(0.dp, 100.dp)
+
+ // Advance to the second frame (25% of the transition): they are both translating
+ // horizontally to the final target (x = layoutSize - elemSize = 100dp), so they should now
+ // be at x = 25dp.
+ rule.mainClock.advanceTimeByFrame()
+ rule.waitForIdle()
+ rule.onNode(isElement(TestElements.Foo)).assertPositionInRootIsEqualTo(25.dp, 0.dp)
+ rule.onNode(isElement(TestElements.Bar)).assertPositionInRootIsEqualTo(25.dp, 100.dp)
+
+ // Advance to the second frame (50% of the transition): they should now be at x = 50dp.
+ rule.mainClock.advanceTimeByFrame()
+ rule.waitForIdle()
+ rule.onNode(isElement(TestElements.Foo)).assertPositionInRootIsEqualTo(50.dp, 0.dp)
+ rule.onNode(isElement(TestElements.Bar)).assertPositionInRootIsEqualTo(50.dp, 100.dp)
+
+ // Advance to the third frame (75% of the transition): they should now be at x = 75dp.
+ rule.mainClock.advanceTimeByFrame()
+ rule.waitForIdle()
+ rule.onNode(isElement(TestElements.Foo)).assertPositionInRootIsEqualTo(75.dp, 0.dp)
+ rule.onNode(isElement(TestElements.Bar)).assertPositionInRootIsEqualTo(75.dp, 100.dp)
+
+ // Advance to the end of the animation. We can't really test the fourth frame because when
+ // pausing the clock, the layout/drawing code will still run (so elements will have their
+ // size/offset when there is no more transition running) but composition will not (so
+ // elements that should not be composed anymore will still be composed).
+ rule.mainClock.autoAdvance = true
+ rule.waitForIdle()
+ assertThat(state.currentTransitions).isEmpty()
+ rule.onNode(isElement(TestElements.Foo)).assertDoesNotExist()
+ rule.onNode(isElement(TestElements.Bar)).assertPositionInRootIsEqualTo(100.dp, 100.dp)
+ }
}
diff --git a/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/MovableElementScenePickerTest.kt b/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/MovableElementScenePickerTest.kt
index fb46a34..6745fbe 100644
--- a/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/MovableElementScenePickerTest.kt
+++ b/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/MovableElementScenePickerTest.kt
@@ -38,8 +38,8 @@
}
@Test
- fun toSceneNotInScenes() {
- val picker = MovableElementScenePicker(scenes = emptySet())
+ fun fromSceneInScenes() {
+ val picker = MovableElementScenePicker(scenes = setOf(TestScenes.SceneA))
assertThat(
picker.sceneDuringTransition(
TestElements.Foo,
@@ -50,4 +50,18 @@
)
.isEqualTo(TestScenes.SceneA)
}
+
+ @Test
+ fun noneInScenes() {
+ val picker = MovableElementScenePicker(scenes = emptySet())
+ assertThat(
+ picker.sceneDuringTransition(
+ TestElements.Foo,
+ transition(from = TestScenes.SceneA, to = TestScenes.SceneB),
+ fromSceneZIndex = 0f,
+ toSceneZIndex = 1f,
+ )
+ )
+ .isEqualTo(null)
+ }
}
diff --git a/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/SceneTransitionLayoutTest.kt b/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/SceneTransitionLayoutTest.kt
index 2eaccb4..7836581 100644
--- a/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/SceneTransitionLayoutTest.kt
+++ b/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/SceneTransitionLayoutTest.kt
@@ -337,6 +337,94 @@
}
}
+ @Test
+ fun multipleTransitionsWillComposeMultipleScenes() {
+ val duration = 10 * 16L
+
+ var currentScene: SceneKey by mutableStateOf(SceneA)
+ lateinit var state: SceneTransitionLayoutState
+ rule.setContent {
+ state =
+ updateSceneTransitionLayoutState(
+ currentScene = currentScene,
+ onChangeScene = { currentScene = it },
+ transitions =
+ transitions {
+ from(SceneA, to = SceneB) {
+ spec = tween(duration.toInt(), easing = LinearEasing)
+ }
+ from(SceneB, to = SceneC) {
+ spec = tween(duration.toInt(), easing = LinearEasing)
+ }
+ }
+ )
+
+ SceneTransitionLayout(state) {
+ scene(SceneA) { Box(Modifier.testTag("aRoot").fillMaxSize()) }
+ scene(SceneB) { Box(Modifier.testTag("bRoot").fillMaxSize()) }
+ scene(SceneC) { Box(Modifier.testTag("cRoot").fillMaxSize()) }
+ }
+ }
+
+ // Initial state: only A is composed.
+ rule.onNodeWithTag("aRoot").assertExists()
+ rule.onNodeWithTag("bRoot").assertDoesNotExist()
+ rule.onNodeWithTag("cRoot").assertDoesNotExist()
+
+ // Pause the clock so we can manually advance it.
+ rule.waitForIdle()
+ rule.mainClock.autoAdvance = false
+
+ // Start A => B and go to the middle of the transition.
+ currentScene = SceneB
+
+ // We need to tick 2 frames after changing [currentScene] before the animation actually
+ // starts.
+ rule.mainClock.advanceTimeByFrame()
+ rule.mainClock.advanceTimeByFrame()
+ rule.mainClock.advanceTimeBy(duration / 2)
+ rule.waitForIdle()
+ assertThat(state.currentTransition?.progress).isEqualTo(0.5f)
+
+ // A and B are composed.
+ rule.onNodeWithTag("aRoot").assertExists()
+ rule.onNodeWithTag("bRoot").assertExists()
+ rule.onNodeWithTag("cRoot").assertDoesNotExist()
+
+ // Start B => C.
+ currentScene = SceneC
+ rule.mainClock.advanceTimeByFrame()
+ rule.mainClock.advanceTimeByFrame()
+ rule.waitForIdle()
+ assertThat(state.currentTransition?.progress).isEqualTo(0f)
+
+ // A, B and C are composed.
+ rule.onNodeWithTag("aRoot").assertExists()
+ rule.onNodeWithTag("bRoot").assertExists()
+ rule.onNodeWithTag("cRoot").assertExists()
+
+ // Let A => B finish.
+ rule.mainClock.advanceTimeBy(duration / 2L)
+ assertThat(state.currentTransition?.progress).isEqualTo(0.5f)
+ rule.waitForIdle()
+
+ // B and C are composed.
+ rule.onNodeWithTag("aRoot").assertDoesNotExist()
+ rule.onNodeWithTag("bRoot").assertExists()
+ rule.onNodeWithTag("cRoot").assertExists()
+
+ // Let B => C finish.
+ rule.mainClock.advanceTimeBy(duration / 2L)
+ rule.mainClock.advanceTimeByFrame()
+ assertThat(state.currentTransition).isNull()
+ rule.waitForIdle()
+
+ // Only C is composed.
+ rule.onNodeWithTag("aRoot").assertDoesNotExist()
+ rule.onNodeWithTag("bRoot").assertDoesNotExist()
+ rule.onNodeWithTag("cRoot").assertExists()
+ }
+
private fun SemanticsNodeInteraction.offsetRelativeTo(
other: SemanticsNodeInteraction,
): DpOffset {
diff --git a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/AnimatableClockView.kt b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/AnimatableClockView.kt
index f1f1b57..f539a23 100644
--- a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/AnimatableClockView.kt
+++ b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/AnimatableClockView.kt
@@ -97,6 +97,8 @@
@VisibleForTesting var textAnimatorFactory: (Layout, () -> Unit) -> TextAnimator =
{ layout, invalidateCb ->
TextAnimator(layout, NUM_CLOCK_FONT_ANIMATION_STEPS, invalidateCb) }
+
+ // Used by screenshot tests to provide stability
@VisibleForTesting var isAnimationEnabled: Boolean = true
@VisibleForTesting var timeOverrideInMillis: Long? = null
@@ -242,15 +244,8 @@
}
logger.d({ "onDraw($str1)"}) { str1 = text.toString() }
- // Use textAnimator to render text if animation is enabled.
- // Otherwise default to using standard draw functions.
- if (isAnimationEnabled) {
- // intentionally doesn't call super.onDraw here or else the text will be rendered twice
- textAnimator?.draw(canvas)
- } else {
- super.onDraw(canvas)
- }
-
+ // intentionally doesn't call super.onDraw here or else the text will be rendered twice
+ textAnimator?.draw(canvas)
canvas.restore()
}
@@ -318,7 +313,7 @@
weight = lockScreenWeight,
textSize = -1f,
color = lockScreenColor,
- animate = isAnimationEnabled,
+ animate = true,
duration = APPEAR_ANIM_DURATION,
interpolator = Interpolators.EMPHASIZED_DECELERATE,
delay = 0,
@@ -327,7 +322,7 @@
}
fun animateFoldAppear(animate: Boolean = true) {
- if (isAnimationEnabled && textAnimator == null) {
+ if (textAnimator == null) {
return
}
logger.d("animateFoldAppear")
@@ -344,7 +339,7 @@
weight = dozingWeightInternal,
textSize = -1f,
color = dozingColor,
- animate = animate && isAnimationEnabled,
+ animate = animate,
interpolator = Interpolators.EMPHASIZED_DECELERATE,
duration = ANIMATION_DURATION_FOLD_TO_AOD.toLong(),
delay = 0,
@@ -363,7 +358,7 @@
weight = if (isDozing()) dozingWeight else lockScreenWeight,
textSize = -1f,
color = null,
- animate = isAnimationEnabled,
+ animate = true,
duration = CHARGE_ANIM_DURATION_PHASE_1,
delay = 0,
onAnimationEnd = null
@@ -373,7 +368,7 @@
weight = if (isDozing()) lockScreenWeight else dozingWeight,
textSize = -1f,
color = null,
- animate = isAnimationEnabled,
+ animate = true,
duration = CHARGE_ANIM_DURATION_PHASE_0,
delay = chargeAnimationDelay.toLong(),
onAnimationEnd = startAnimPhase2
@@ -386,7 +381,7 @@
weight = if (isDozing) dozingWeight else lockScreenWeight,
textSize = -1f,
color = if (isDozing) dozingColor else lockScreenColor,
- animate = animate && isAnimationEnabled,
+ animate = animate,
duration = DOZE_ANIM_DURATION,
delay = 0,
onAnimationEnd = null
@@ -445,9 +440,6 @@
onAnimationEnd = onAnimationEnd
)
textAnimator?.glyphFilter = glyphFilter
- if (color != null && !isAnimationEnabled) {
- setTextColor(color)
- }
} else {
// when the text animator is set, update its start values
onTextAnimatorInitialized = Runnable {
@@ -462,9 +454,6 @@
onAnimationEnd = onAnimationEnd
)
textAnimator?.glyphFilter = glyphFilter
- if (color != null && !isAnimationEnabled) {
- setTextColor(color)
- }
}
}
}
@@ -482,7 +471,7 @@
weight = weight,
textSize = textSize,
color = color,
- animate = animate && isAnimationEnabled,
+ animate = animate,
interpolator = null,
duration = duration,
delay = delay,
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/ambient/touch/BouncerSwipeTouchHandlerTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/ambient/touch/BouncerSwipeTouchHandlerTest.java
index 04c4efb..fefe5a0 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/ambient/touch/BouncerSwipeTouchHandlerTest.java
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/ambient/touch/BouncerSwipeTouchHandlerTest.java
@@ -149,7 +149,6 @@
mUiEventLogger);
when(mScrimManager.getCurrentController()).thenReturn(mScrimController);
- when(mCentralSurfaces.isBouncerShowing()).thenReturn(false);
when(mValueAnimatorCreator.create(anyFloat(), anyFloat())).thenReturn(mValueAnimator);
when(mVelocityTrackerFactory.obtain()).thenReturn(mVelocityTracker);
when(mFlingAnimationUtils.getMinVelocityPxPerSecond()).thenReturn(Float.MAX_VALUE);
@@ -193,11 +192,6 @@
2)).isTrue();
}
- private enum Direction {
- DOWN,
- UP,
- }
-
@Test
public void testSwipeUp_whenBouncerInitiallyShowing_reduceHeightWithExclusionRects() {
mTouchHandler.getTouchInitiationRegion(SCREEN_BOUNDS, mRegion,
@@ -210,7 +204,7 @@
SCREEN_HEIGHT_PX * MIN_BOUNCER_HEIGHT;
final int minAllowableBottom = SCREEN_HEIGHT_PX - Math.round(minBouncerHeight);
- expected.set(0, minAllowableBottom , SCREEN_WIDTH_PX, SCREEN_HEIGHT_PX);
+ expected.set(0, minAllowableBottom, SCREEN_WIDTH_PX, SCREEN_HEIGHT_PX);
assertThat(bounds).isEqualTo(expected);
@@ -278,69 +272,11 @@
}
/**
- * Makes sure swiping up when bouncer initially showing doesn't change the expansion amount.
- */
- @DisableFlags(Flags.FLAG_DREAM_OVERLAY_BOUNCER_SWIPE_DIRECTION_FILTERING)
- @Test
- public void testSwipeUp_whenBouncerInitiallyShowing_doesNotSetExpansion() {
- when(mCentralSurfaces.isBouncerShowing()).thenReturn(true);
-
- mTouchHandler.onSessionStart(mTouchSession);
- ArgumentCaptor<GestureDetector.OnGestureListener> gestureListenerCaptor =
- ArgumentCaptor.forClass(GestureDetector.OnGestureListener.class);
- verify(mTouchSession).registerGestureListener(gestureListenerCaptor.capture());
-
- final OnGestureListener gestureListener = gestureListenerCaptor.getValue();
-
- final float percent = .3f;
- final float distanceY = SCREEN_HEIGHT_PX * percent;
-
- // Swiping up near the top of the screen where the touch initiation region is.
- final MotionEvent event1 = MotionEvent.obtain(0, 0, MotionEvent.ACTION_MOVE,
- 0, distanceY, 0);
- final MotionEvent event2 = MotionEvent.obtain(0, 0, MotionEvent.ACTION_MOVE,
- 0, 0, 0);
-
- assertThat(gestureListener.onScroll(event1, event2, 0, distanceY)).isTrue();
-
- verify(mScrimController, never()).expand(any());
- }
-
- /**
- * Makes sure swiping up when bouncer initially showing doesn't change the expansion amount.
- */
- @Test
- @EnableFlags(Flags.FLAG_DREAM_OVERLAY_BOUNCER_SWIPE_DIRECTION_FILTERING)
- public void testSwipeUp_whenBouncerInitiallyShowing_doesNotSetExpansion_directionFiltering() {
- when(mCentralSurfaces.isBouncerShowing()).thenReturn(true);
-
- mTouchHandler.onSessionStart(mTouchSession);
- ArgumentCaptor<GestureDetector.OnGestureListener> gestureListenerCaptor =
- ArgumentCaptor.forClass(GestureDetector.OnGestureListener.class);
- verify(mTouchSession).registerGestureListener(gestureListenerCaptor.capture());
-
- final OnGestureListener gestureListener = gestureListenerCaptor.getValue();
-
- final float percent = .3f;
- final float distanceY = SCREEN_HEIGHT_PX * percent;
-
- // Swiping up near the top of the screen where the touch initiation region is.
- final MotionEvent event1 = MotionEvent.obtain(0, 0, MotionEvent.ACTION_MOVE,
- 0, distanceY, 0);
- final MotionEvent event2 = MotionEvent.obtain(0, 0, MotionEvent.ACTION_MOVE,
- 0, 0, 0);
-
- assertThat(gestureListener.onScroll(event1, event2, 0, distanceY)).isFalse();
-
- verify(mScrimController, never()).expand(any());
- }
-
- /**
- * Makes sure swiping down when bouncer initially hidden doesn't change the expansion amount.
+ * Makes sure swiping down doesn't change the expansion amount.
*/
@Test
@DisableFlags(Flags.FLAG_DREAM_OVERLAY_BOUNCER_SWIPE_DIRECTION_FILTERING)
- public void testSwipeDown_whenBouncerInitiallyHidden_doesNotSetExpansion() {
+ public void testSwipeDown_doesNotSetExpansion() {
mTouchHandler.onSessionStart(mTouchSession);
ArgumentCaptor<GestureDetector.OnGestureListener> gestureListenerCaptor =
ArgumentCaptor.forClass(GestureDetector.OnGestureListener.class);
@@ -401,34 +337,8 @@
final OnGestureListener gestureListener = gestureListenerCaptor.getValue();
- verifyScroll(.3f, Direction.UP, false, gestureListener);
-
- // Ensure that subsequent gestures are treated as expanding even if the bouncer state
- // changes.
- when(mCentralSurfaces.isBouncerShowing()).thenReturn(true);
- verifyScroll(.7f, Direction.UP, false, gestureListener);
- }
-
- /**
- * Makes sure the expansion amount is proportional to scroll.
- */
- @Test
- public void testSwipeDown_setsCorrectExpansionAmount() {
- when(mCentralSurfaces.isBouncerShowing()).thenReturn(true);
-
- mTouchHandler.onSessionStart(mTouchSession);
- ArgumentCaptor<GestureDetector.OnGestureListener> gestureListenerCaptor =
- ArgumentCaptor.forClass(GestureDetector.OnGestureListener.class);
- verify(mTouchSession).registerGestureListener(gestureListenerCaptor.capture());
-
- final OnGestureListener gestureListener = gestureListenerCaptor.getValue();
-
- verifyScroll(.3f, Direction.DOWN, true, gestureListener);
-
- // Ensure that subsequent gestures are treated as collapsing even if the bouncer state
- // changes.
- when(mCentralSurfaces.isBouncerShowing()).thenReturn(false);
- verifyScroll(.7f, Direction.DOWN, true, gestureListener);
+ verifyScroll(.3f, gestureListener);
+ verifyScroll(.7f, gestureListener);
}
/**
@@ -493,25 +403,24 @@
verify(mCentralSurfaces, never()).awakenDreams();
}
- private void verifyScroll(float percent, Direction direction,
- boolean isBouncerInitiallyShowing, GestureDetector.OnGestureListener gestureListener) {
+ private void verifyScroll(float percent,
+ OnGestureListener gestureListener) {
final float distanceY = SCREEN_HEIGHT_PX * percent;
final MotionEvent event1 = MotionEvent.obtain(0, 0, MotionEvent.ACTION_MOVE,
- 0, direction == Direction.UP ? SCREEN_HEIGHT_PX : 0, 0);
+ 0, SCREEN_HEIGHT_PX, 0);
final MotionEvent event2 = MotionEvent.obtain(0, 0, MotionEvent.ACTION_MOVE,
- 0, direction == Direction.UP ? SCREEN_HEIGHT_PX - distanceY : distanceY, 0);
+ 0, SCREEN_HEIGHT_PX - distanceY, 0);
reset(mScrimController);
assertThat(gestureListener.onScroll(event1, event2, 0,
- direction == Direction.UP ? distanceY : -distanceY))
+ distanceY))
.isTrue();
// Ensure only called once
verify(mScrimController).expand(any());
- final float expansion = isBouncerInitiallyShowing ? percent : 1 - percent;
- final float dragDownAmount = event2.getY() - event1.getY();
+ final float expansion = 1 - percent;
// Ensure correct expansion passed in.
ShadeExpansionChangeEvent event =
@@ -529,7 +438,7 @@
final float expansion = 1 - swipeUpPercentage;
// The upward velocity is ignored.
final float velocityY = -1;
- swipeToPosition(swipeUpPercentage, Direction.UP, velocityY);
+ swipeToPosition(swipeUpPercentage, velocityY);
verify(mValueAnimatorCreator).create(eq(expansion),
eq(KeyguardBouncerConstants.EXPANSION_HIDDEN));
@@ -552,7 +461,7 @@
final float expansion = 1 - swipeUpPercentage;
// The downward velocity is ignored.
final float velocityY = 1;
- swipeToPosition(swipeUpPercentage, Direction.UP, velocityY);
+ swipeToPosition(swipeUpPercentage, velocityY);
verify(mValueAnimatorCreator).create(eq(expansion),
eq(KeyguardBouncerConstants.EXPANSION_VISIBLE));
@@ -573,57 +482,6 @@
}
/**
- * Tests that ending a downward swipe above the set threshold will continue the expansion,
- * but will not trigger logging of the DREAM_SWIPED event.
- */
- @Test
- public void testSwipeDownPositionAboveThreshold_expandsBouncer_doesNotLog() {
- when(mCentralSurfaces.isBouncerShowing()).thenReturn(true);
-
- final float swipeDownPercentage = .3f;
- // The downward velocity is ignored.
- final float velocityY = 1;
- swipeToPosition(swipeDownPercentage, Direction.DOWN, velocityY);
-
- verify(mValueAnimatorCreator).create(eq(swipeDownPercentage),
- eq(KeyguardBouncerConstants.EXPANSION_VISIBLE));
- verify(mValueAnimator, never()).addListener(any());
-
- verify(mFlingAnimationUtils).apply(eq(mValueAnimator),
- eq(SCREEN_HEIGHT_PX * swipeDownPercentage),
- eq(SCREEN_HEIGHT_PX * KeyguardBouncerConstants.EXPANSION_VISIBLE),
- eq(velocityY), eq((float) SCREEN_HEIGHT_PX));
- verify(mValueAnimator).start();
- verify(mUiEventLogger, never()).log(any());
- }
-
- /**
- * Tests that swiping down with a speed above the set threshold leads to bouncer collapsing
- * down.
- */
- @Test
- public void testSwipeDownVelocityAboveMin_collapsesBouncer() {
- when(mCentralSurfaces.isBouncerShowing()).thenReturn(true);
- when(mFlingAnimationUtils.getMinVelocityPxPerSecond()).thenReturn((float) 0);
-
- // The ending position above the set threshold is ignored.
- final float swipeDownPercentage = .3f;
- final float velocityY = 1;
- swipeToPosition(swipeDownPercentage, Direction.DOWN, velocityY);
-
- verify(mValueAnimatorCreator).create(eq(swipeDownPercentage),
- eq(KeyguardBouncerConstants.EXPANSION_HIDDEN));
- verify(mValueAnimator, never()).addListener(any());
-
- verify(mFlingAnimationUtilsClosing).apply(eq(mValueAnimator),
- eq(SCREEN_HEIGHT_PX * swipeDownPercentage),
- eq(SCREEN_HEIGHT_PX * KeyguardBouncerConstants.EXPANSION_HIDDEN),
- eq(velocityY), eq((float) SCREEN_HEIGHT_PX));
- verify(mValueAnimator).start();
- verify(mUiEventLogger, never()).log(any());
- }
-
- /**
* Tests that swiping up with a speed above the set threshold will continue the expansion.
*/
@Test
@@ -634,7 +492,7 @@
final float swipeUpPercentage = .3f;
final float expansion = 1 - swipeUpPercentage;
final float velocityY = -1;
- swipeToPosition(swipeUpPercentage, Direction.UP, velocityY);
+ swipeToPosition(swipeUpPercentage, velocityY);
verify(mValueAnimatorCreator).create(eq(expansion),
eq(KeyguardBouncerConstants.EXPANSION_VISIBLE));
@@ -654,26 +512,6 @@
verify(mUiEventLogger).log(BouncerSwipeTouchHandler.DreamEvent.DREAM_BOUNCER_FULLY_VISIBLE);
}
- /**
- * Ensures {@link CentralSurfaces}
- */
- @Test
- public void testInformBouncerShowingOnExpand() {
- swipeToPosition(1f, Direction.UP, 0);
- }
-
- /**
- * Ensures {@link CentralSurfaces}
- */
- @Test
- public void testInformBouncerHidingOnCollapse() {
- // Must swipe up to set initial state.
- swipeToPosition(1f, Direction.UP, 0);
- Mockito.clearInvocations(mCentralSurfaces);
-
- swipeToPosition(0f, Direction.DOWN, 0);
- }
-
@Test
public void testTouchSessionOnRemovedCalledTwice() {
mTouchHandler.onSessionStart(mTouchSession);
@@ -684,7 +522,7 @@
onRemovedCallbackCaptor.getValue().onRemoved();
}
- private void swipeToPosition(float percent, Direction direction, float velocityY) {
+ private void swipeToPosition(float percent, float velocityY) {
Mockito.clearInvocations(mTouchSession);
mTouchHandler.onSessionStart(mTouchSession);
ArgumentCaptor<GestureDetector.OnGestureListener> gestureListenerCaptor =
@@ -699,12 +537,12 @@
final float distanceY = SCREEN_HEIGHT_PX * percent;
final MotionEvent event1 = MotionEvent.obtain(0, 0, MotionEvent.ACTION_MOVE,
- 0, direction == Direction.UP ? SCREEN_HEIGHT_PX : 0, 0);
+ 0, SCREEN_HEIGHT_PX, 0);
final MotionEvent event2 = MotionEvent.obtain(0, 0, MotionEvent.ACTION_MOVE,
- 0, direction == Direction.UP ? SCREEN_HEIGHT_PX - distanceY : distanceY, 0);
+ 0, SCREEN_HEIGHT_PX - distanceY, 0);
assertThat(gestureListenerCaptor.getValue().onScroll(event1, event2, 0,
- direction == Direction.UP ? distanceY : -distanceY))
+ distanceY))
.isTrue();
final MotionEvent upEvent = MotionEvent.obtain(0, 0, MotionEvent.ACTION_UP,
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/ambient/touch/ShadeTouchHandlerTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/ambient/touch/ShadeTouchHandlerTest.java
index 27bffd0..11a4241 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/ambient/touch/ShadeTouchHandlerTest.java
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/ambient/touch/ShadeTouchHandlerTest.java
@@ -18,8 +18,10 @@
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
import android.view.GestureDetector;
import android.view.MotionEvent;
@@ -28,7 +30,6 @@
import androidx.test.filters.SmallTest;
import com.android.systemui.SysuiTestCase;
-import com.android.systemui.shade.ShadeViewController;
import com.android.systemui.shared.system.InputChannelCompat;
import com.android.systemui.statusbar.phone.CentralSurfaces;
@@ -36,6 +37,7 @@
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
+import org.mockito.Captor;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
@@ -49,66 +51,89 @@
CentralSurfaces mCentralSurfaces;
@Mock
- ShadeViewController mShadeViewController;
-
- @Mock
TouchHandler.TouchSession mTouchSession;
ShadeTouchHandler mTouchHandler;
+ @Captor
+ ArgumentCaptor<GestureDetector.OnGestureListener> mGestureListenerCaptor;
+ @Captor
+ ArgumentCaptor<InputChannelCompat.InputEventListener> mInputListenerCaptor;
+
private static final int TOUCH_HEIGHT = 20;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
- mTouchHandler = new ShadeTouchHandler(Optional.of(mCentralSurfaces), mShadeViewController,
- TOUCH_HEIGHT);
+
+ mTouchHandler = new ShadeTouchHandler(Optional.of(mCentralSurfaces), TOUCH_HEIGHT);
+ }
+
+ // Verifies that a swipe down in the gesture region is captured by the shade touch handler.
+ @Test
+ public void testSwipeDown_captured() {
+ final boolean captured = swipe(Direction.DOWN);
+
+ assertThat(captured).isTrue();
+ }
+
+ // Verifies that a swipe in the upward direction is not catpured.
+ @Test
+ public void testSwipeUp_notCaptured() {
+ final boolean captured = swipe(Direction.UP);
+
+ // Motion events not captured as the swipe is going in the wrong direction.
+ assertThat(captured).isFalse();
+ }
+
+ // Verifies that a swipe down forwards captured touches to the shade window for handling.
+ @Test
+ public void testSwipeDown_sentToShadeWindow() {
+ swipe(Direction.DOWN);
+
+ // Both motion events are sent for the shade window to process.
+ verify(mCentralSurfaces, times(2)).handleExternalShadeWindowTouch(any());
+ }
+
+ // Verifies that a swipe down is not forwarded to the shade window.
+ @Test
+ public void testSwipeUp_touchesNotSent() {
+ swipe(Direction.UP);
+
+ // Motion events are not sent for the shade window to process as the swipe is going in the
+ // wrong direction.
+ verify(mCentralSurfaces, never()).handleExternalShadeWindowTouch(any());
}
/**
- * Verify that touches aren't handled when the bouncer is showing.
+ * Simulates a swipe in the given direction and returns true if the touch was intercepted by the
+ * touch handler's gesture listener.
+ * <p>
+ * Swipe down starts from a Y coordinate of 0 and goes downward. Swipe up starts from the edge
+ * of the gesture region, {@link #TOUCH_HEIGHT}, and goes upward to 0.
*/
- @Test
- public void testInactiveOnBouncer() {
- when(mCentralSurfaces.isBouncerShowing()).thenReturn(true);
+ private boolean swipe(Direction direction) {
+ Mockito.clearInvocations(mTouchSession);
mTouchHandler.onSessionStart(mTouchSession);
- verify(mTouchSession).pop();
+
+ verify(mTouchSession).registerGestureListener(mGestureListenerCaptor.capture());
+ verify(mTouchSession).registerInputListener(mInputListenerCaptor.capture());
+
+ final float startY = direction == Direction.UP ? TOUCH_HEIGHT : 0;
+ final float endY = direction == Direction.UP ? 0 : TOUCH_HEIGHT;
+
+ // Send touches to the input and gesture listener.
+ final MotionEvent event1 = MotionEvent.obtain(0, 0, MotionEvent.ACTION_MOVE, 0, startY, 0);
+ final MotionEvent event2 = MotionEvent.obtain(0, 0, MotionEvent.ACTION_MOVE, 0, endY, 0);
+ mInputListenerCaptor.getValue().onInputEvent(event1);
+ mInputListenerCaptor.getValue().onInputEvent(event2);
+ final boolean captured = mGestureListenerCaptor.getValue().onScroll(event1, event2, 0,
+ startY - endY);
+
+ return captured;
}
- /**
- * Make sure {@link ShadeTouchHandler}
- */
- @Test
- public void testTouchPilferingOnScroll() {
- final MotionEvent motionEvent1 = Mockito.mock(MotionEvent.class);
- final MotionEvent motionEvent2 = Mockito.mock(MotionEvent.class);
-
- final ArgumentCaptor<GestureDetector.OnGestureListener> gestureListenerArgumentCaptor =
- ArgumentCaptor.forClass(GestureDetector.OnGestureListener.class);
-
- mTouchHandler.onSessionStart(mTouchSession);
- verify(mTouchSession).registerGestureListener(gestureListenerArgumentCaptor.capture());
-
- assertThat(gestureListenerArgumentCaptor.getValue()
- .onScroll(motionEvent1, motionEvent2, 1, 1))
- .isTrue();
+ private enum Direction {
+ DOWN, UP,
}
-
- /**
- * Ensure touches are propagated to the {@link ShadeViewController}.
- */
- @Test
- public void testEventPropagation() {
- final MotionEvent motionEvent = Mockito.mock(MotionEvent.class);
-
- final ArgumentCaptor<InputChannelCompat.InputEventListener>
- inputEventListenerArgumentCaptor =
- ArgumentCaptor.forClass(InputChannelCompat.InputEventListener.class);
-
- mTouchHandler.onSessionStart(mTouchSession);
- verify(mTouchSession).registerInputListener(inputEventListenerArgumentCaptor.capture());
- inputEventListenerArgumentCaptor.getValue().onInputEvent(motionEvent);
- verify(mShadeViewController).handleExternalTouch(motionEvent);
- }
-
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/CommunalBackupRestoreStartableTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/CommunalBackupRestoreStartableTest.kt
new file mode 100644
index 0000000..722eb2b
--- /dev/null
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/CommunalBackupRestoreStartableTest.kt
@@ -0,0 +1,152 @@
+/*
+ * 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.communal
+
+import android.appwidget.AppWidgetManager
+import android.content.Context
+import android.content.Intent
+import android.content.mockedContext
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.broadcast.FakeBroadcastDispatcher
+import com.android.systemui.broadcast.broadcastDispatcher
+import com.android.systemui.communal.domain.interactor.CommunalInteractor
+import com.android.systemui.communal.widgets.CommunalWidgetModule
+import com.android.systemui.kosmos.testScope
+import com.android.systemui.log.logcatLogBuffer
+import com.android.systemui.testKosmos
+import com.android.systemui.util.mockito.any
+import com.android.systemui.util.mockito.kotlinArgumentCaptor
+import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.test.runTest
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.Mockito.never
+import org.mockito.Mockito.verify
+import org.mockito.MockitoAnnotations
+
+@SmallTest
+@RunWith(AndroidJUnit4::class)
+class CommunalBackupRestoreStartableTest : SysuiTestCase() {
+ private val kosmos = testKosmos()
+ private val testScope = kosmos.testScope
+
+ @Mock private lateinit var communalInteractor: CommunalInteractor
+
+ private val mapCaptor = kotlinArgumentCaptor<Map<Int, Int>>()
+
+ private lateinit var context: Context
+ private lateinit var broadcastDispatcher: FakeBroadcastDispatcher
+ private lateinit var underTest: CommunalBackupRestoreStartable
+
+ @Before
+ fun setup() {
+ MockitoAnnotations.initMocks(this)
+
+ context = kosmos.mockedContext
+ broadcastDispatcher = kosmos.broadcastDispatcher
+
+ underTest =
+ CommunalBackupRestoreStartable(
+ broadcastDispatcher,
+ communalInteractor,
+ logcatLogBuffer("CommunalBackupRestoreStartable"),
+ )
+ }
+
+ @Test
+ fun testRestoreWidgetsUponHostRestored() =
+ testScope.runTest {
+ underTest.start()
+
+ // Verify restore widgets not called
+ verify(communalInteractor, never()).restoreWidgets(any())
+
+ // Trigger app widget host restored
+ val intent =
+ Intent().apply {
+ action = AppWidgetManager.ACTION_APPWIDGET_HOST_RESTORED
+ putExtra(
+ AppWidgetManager.EXTRA_HOST_ID,
+ CommunalWidgetModule.APP_WIDGET_HOST_ID
+ )
+ putExtra(AppWidgetManager.EXTRA_APPWIDGET_OLD_IDS, intArrayOf(1, 2, 3))
+ putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, intArrayOf(7, 8, 9))
+ }
+ broadcastDispatcher.sendIntentToMatchingReceiversOnly(context, intent)
+
+ // Verify restore widgets called
+ verify(communalInteractor).restoreWidgets(mapCaptor.capture())
+ val oldToNewWidgetIdMap = mapCaptor.value
+ assertThat(oldToNewWidgetIdMap)
+ .containsExactlyEntriesIn(
+ mapOf(
+ Pair(1, 7),
+ Pair(2, 8),
+ Pair(3, 9),
+ )
+ )
+ }
+
+ @Test
+ fun testDoNotRestoreWidgetsIfNotForCommunalWidgetHost() =
+ testScope.runTest {
+ underTest.start()
+
+ // Trigger app widget host restored, but for another host
+ val hostId = CommunalWidgetModule.APP_WIDGET_HOST_ID + 1
+ val intent =
+ Intent().apply {
+ action = AppWidgetManager.ACTION_APPWIDGET_HOST_RESTORED
+ putExtra(AppWidgetManager.EXTRA_HOST_ID, hostId)
+ putExtra(AppWidgetManager.EXTRA_APPWIDGET_OLD_IDS, intArrayOf(1, 2, 3))
+ putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, intArrayOf(7, 8, 9))
+ }
+ broadcastDispatcher.sendIntentToMatchingReceiversOnly(context, intent)
+
+ // Verify restore widgets not called
+ verify(communalInteractor, never()).restoreWidgets(any())
+ }
+
+ @Test
+ fun testAbortRestoreWidgetsIfOldToNewIdsMappingInvalid() =
+ testScope.runTest {
+ underTest.start()
+
+ // Trigger app widget host restored, but new ids list is one too many for old ids
+ val oldIds = intArrayOf(1, 2, 3)
+ val newIds = intArrayOf(6, 7, 8, 9)
+ val intent =
+ Intent().apply {
+ action = AppWidgetManager.ACTION_APPWIDGET_HOST_RESTORED
+ putExtra(
+ AppWidgetManager.EXTRA_HOST_ID,
+ CommunalWidgetModule.APP_WIDGET_HOST_ID
+ )
+ putExtra(AppWidgetManager.EXTRA_APPWIDGET_OLD_IDS, oldIds)
+ putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, newIds)
+ }
+ broadcastDispatcher.sendIntentToMatchingReceiversOnly(context, intent)
+
+ // Verify restore widgets aborted
+ verify(communalInteractor).abortRestoreWidgets()
+ verify(communalInteractor, never()).restoreWidgets(any())
+ }
+}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/CommunalSceneStartableTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/CommunalSceneStartableTest.kt
index 76f15d2..b4b812d 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/CommunalSceneStartableTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/CommunalSceneStartableTest.kt
@@ -32,7 +32,9 @@
import com.android.systemui.keyguard.domain.interactor.keyguardTransitionInteractor
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.kosmos.applicationCoroutineScope
+import com.android.systemui.kosmos.testDispatcher
import com.android.systemui.kosmos.testScope
+import com.android.systemui.statusbar.notificationShadeWindowController
import com.android.systemui.testKosmos
import com.android.systemui.util.settings.fakeSettings
import com.google.common.truth.Truth.assertThat
@@ -68,8 +70,10 @@
keyguardTransitionInteractor = keyguardTransitionInteractor,
keyguardInteractor = keyguardInteractor,
systemSettings = fakeSettings,
+ notificationShadeWindowController = notificationShadeWindowController,
applicationScope = applicationCoroutineScope,
bgScope = applicationCoroutineScope,
+ mainDispatcher = testDispatcher,
)
.apply { start() }
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/data/repository/CommunalWidgetRepositoryImplTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/data/repository/CommunalWidgetRepositoryImplTest.kt
index a4c7abd..fe4d32d 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/data/repository/CommunalWidgetRepositoryImplTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/data/repository/CommunalWidgetRepositoryImplTest.kt
@@ -16,18 +16,23 @@
package com.android.systemui.communal.data.repository
+import android.app.backup.BackupManager
import android.appwidget.AppWidgetManager
import android.appwidget.AppWidgetProviderInfo
import android.appwidget.AppWidgetProviderInfo.WIDGET_FEATURE_CONFIGURATION_OPTIONAL
import android.appwidget.AppWidgetProviderInfo.WIDGET_FEATURE_RECONFIGURABLE
import android.content.ComponentName
+import android.content.applicationContext
import android.os.UserHandle
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
+import com.android.systemui.communal.data.backup.CommunalBackupUtils
import com.android.systemui.communal.data.db.CommunalItemRank
import com.android.systemui.communal.data.db.CommunalWidgetDao
import com.android.systemui.communal.data.db.CommunalWidgetItem
+import com.android.systemui.communal.nano.CommunalHubState
+import com.android.systemui.communal.proto.toByteArray
import com.android.systemui.communal.shared.model.CommunalWidgetContentModel
import com.android.systemui.communal.widgets.CommunalAppWidgetHost
import com.android.systemui.communal.widgets.CommunalWidgetHost
@@ -42,6 +47,7 @@
import com.android.systemui.testKosmos
import com.android.systemui.util.mockito.any
import com.android.systemui.util.mockito.whenever
+import com.android.systemui.util.mockito.withArgCaptor
import com.google.common.truth.Truth.assertThat
import java.util.Optional
import kotlinx.coroutines.ExperimentalCoroutinesApi
@@ -68,7 +74,9 @@
@Mock private lateinit var providerInfoA: AppWidgetProviderInfo
@Mock private lateinit var communalWidgetHost: CommunalWidgetHost
@Mock private lateinit var communalWidgetDao: CommunalWidgetDao
+ @Mock private lateinit var backupManager: BackupManager
+ private lateinit var backupUtils: CommunalBackupUtils
private lateinit var logBuffer: LogBuffer
private lateinit var fakeWidgets: MutableStateFlow<Map<CommunalItemRank, CommunalWidgetItem>>
@@ -89,6 +97,7 @@
MockitoAnnotations.initMocks(this)
fakeWidgets = MutableStateFlow(emptyMap())
logBuffer = logcatLogBuffer(name = "CommunalWidgetRepoImplTest")
+ backupUtils = CommunalBackupUtils(kosmos.applicationContext)
setAppWidgetIds(emptyList())
@@ -106,6 +115,8 @@
communalWidgetHost,
communalWidgetDao,
logBuffer,
+ backupManager,
+ backupUtils,
)
}
@@ -129,6 +140,9 @@
priority = communalItemRankEntry.rank,
)
)
+
+ // Verify backup not requested
+ verify(backupManager, never()).dataChanged()
}
@Test
@@ -152,6 +166,9 @@
verify(communalWidgetHost).allocateIdAndBindWidget(provider, user)
verify(communalWidgetDao).addWidget(id, provider, priority)
+
+ // Verify backup requested
+ verify(backupManager).dataChanged()
}
@Test
@@ -176,6 +193,9 @@
verify(communalWidgetHost).allocateIdAndBindWidget(provider, user)
verify(communalWidgetDao, never()).addWidget(id, provider, priority)
verify(appWidgetHost).deleteAppWidgetId(id)
+
+ // Verify backup not requested
+ verify(backupManager, never()).dataChanged()
}
@Test
@@ -202,6 +222,9 @@
verify(communalWidgetHost).allocateIdAndBindWidget(provider, user)
verify(communalWidgetDao, never()).addWidget(id, provider, priority)
verify(appWidgetHost).deleteAppWidgetId(id)
+
+ // Verify backup not requested
+ verify(backupManager, never()).dataChanged()
}
@Test
@@ -225,10 +248,13 @@
verify(communalWidgetHost).allocateIdAndBindWidget(provider, user)
verify(communalWidgetDao).addWidget(id, provider, priority)
+
+ // Verify backup requested
+ verify(backupManager).dataChanged()
}
@Test
- fun deleteWidget_deletefromDbTrue_alsoDeleteFromHost() =
+ fun deleteWidget_deleteFromDbTrue_alsoDeleteFromHost() =
testScope.runTest {
val id = 1
whenever(communalWidgetDao.deleteWidgetById(eq(id))).thenReturn(true)
@@ -237,10 +263,13 @@
verify(communalWidgetDao).deleteWidgetById(id)
verify(appWidgetHost).deleteAppWidgetId(id)
+
+ // Verify backup requested
+ verify(backupManager).dataChanged()
}
@Test
- fun deleteWidget_deletefromDbFalse_doesNotDeleteFromHost() =
+ fun deleteWidget_deleteFromDbFalse_doesNotDeleteFromHost() =
testScope.runTest {
val id = 1
whenever(communalWidgetDao.deleteWidgetById(eq(id))).thenReturn(false)
@@ -249,6 +278,9 @@
verify(communalWidgetDao).deleteWidgetById(id)
verify(appWidgetHost, never()).deleteAppWidgetId(id)
+
+ // Verify backup not requested
+ verify(backupManager, never()).dataChanged()
}
@Test
@@ -259,6 +291,147 @@
runCurrent()
verify(communalWidgetDao).updateWidgetOrder(widgetIdToPriorityMap)
+
+ // Verify backup requested
+ verify(backupManager).dataChanged()
+ }
+
+ @Test
+ fun restoreWidgets_deleteStateFileIfRestoreFails() =
+ testScope.runTest {
+ // Write a state file that is invalid, and verify it is written
+ backupUtils.writeBytesToDisk(byteArrayOf(1, 2, 3, 4, 5, 6))
+ assertThat(backupUtils.fileExists()).isTrue()
+
+ // Try to restore widgets
+ underTest.restoreWidgets(emptyMap())
+ runCurrent()
+
+ // The restore should fail, and verify that the file is deleted
+ assertThat(backupUtils.fileExists()).isFalse()
+ }
+
+ @Test
+ fun restoreWidgets_deleteStateFileAfterWidgetsRestored() =
+ testScope.runTest {
+ // Write a state file, and verify it is written
+ backupUtils.writeBytesToDisk(fakeState.toByteArray())
+ assertThat(backupUtils.fileExists()).isTrue()
+
+ // Set up app widget host with widget ids
+ setAppWidgetIds(listOf(11, 12))
+
+ // Restore widgets
+ underTest.restoreWidgets(mapOf(Pair(1, 11), Pair(2, 12)))
+ runCurrent()
+
+ // Verify state restored
+ verify(communalWidgetDao).restoreCommunalHubState(any())
+
+ // Verify state file deleted
+ assertThat(backupUtils.fileExists()).isFalse()
+ }
+
+ @Test
+ fun restoreWidgets_restoredWidgetsNotRegisteredWithHostAreSkipped() =
+ testScope.runTest {
+ // Write fake state to file
+ backupUtils.writeBytesToDisk(fakeState.toByteArray())
+
+ // Set up app widget host with widget ids. Widget 12 (previously 2) is absent.
+ setAppWidgetIds(listOf(11))
+
+ // Restore widgets.
+ underTest.restoreWidgets(mapOf(Pair(1, 11), Pair(2, 12)))
+ runCurrent()
+
+ // Verify state restored, and widget 2 skipped
+ val restoredState =
+ withArgCaptor<CommunalHubState> {
+ verify(communalWidgetDao).restoreCommunalHubState(capture())
+ }
+ val restoredWidgets = restoredState.widgets.toList()
+ assertThat(restoredWidgets).hasSize(1)
+
+ val restoredWidget = restoredWidgets.first()
+ val expectedWidget = fakeState.widgets.first()
+
+ // Verify widget id is updated, and the rest remain the same as expected
+ assertThat(restoredWidget.widgetId).isEqualTo(11)
+ assertThat(restoredWidget.componentName).isEqualTo(expectedWidget.componentName)
+ assertThat(restoredWidget.rank).isEqualTo(expectedWidget.rank)
+ }
+
+ @Test
+ fun restoreWidgets_registeredWidgetsNotRestoredAreRemoved() =
+ testScope.runTest {
+ // Write fake state to file
+ backupUtils.writeBytesToDisk(fakeState.toByteArray())
+
+ // Set up app widget host with widget ids. Widget 13 will not be restored.
+ setAppWidgetIds(listOf(11, 12, 13))
+
+ // Restore widgets.
+ underTest.restoreWidgets(mapOf(Pair(1, 11), Pair(2, 12)))
+ runCurrent()
+
+ // Verify widget 1 and 2 are restored, and are now 11 and 12.
+ val restoredState =
+ withArgCaptor<CommunalHubState> {
+ verify(communalWidgetDao).restoreCommunalHubState(capture())
+ }
+ val restoredWidgets = restoredState.widgets.toList()
+ assertThat(restoredWidgets).hasSize(2)
+
+ val restoredWidget1 = restoredWidgets[0]
+ val expectedWidget1 = fakeState.widgets[0]
+ assertThat(restoredWidget1.widgetId).isEqualTo(11)
+ assertThat(restoredWidget1.componentName).isEqualTo(expectedWidget1.componentName)
+ assertThat(restoredWidget1.rank).isEqualTo(expectedWidget1.rank)
+
+ val restoredWidget2 = restoredWidgets[1]
+ val expectedWidget2 = fakeState.widgets[1]
+ assertThat(restoredWidget2.widgetId).isEqualTo(12)
+ assertThat(restoredWidget2.componentName).isEqualTo(expectedWidget2.componentName)
+ assertThat(restoredWidget2.rank).isEqualTo(expectedWidget2.rank)
+
+ // Verify widget 13 removed since it is not restored
+ verify(appWidgetHost).deleteAppWidgetId(13)
+ }
+
+ @Test
+ fun restoreWidgets_onlySomeWidgetsGotNewIds() =
+ testScope.runTest {
+ // Write fake state to file
+ backupUtils.writeBytesToDisk(fakeState.toByteArray())
+
+ // Set up app widget host with widget ids. Widget 2 gets a new id: 12, but widget 1 does
+ // not.
+ setAppWidgetIds(listOf(1, 12))
+
+ // Restore widgets.
+ underTest.restoreWidgets(mapOf(Pair(2, 12)))
+ runCurrent()
+
+ // Verify widget 1 and 2 are restored, and are now 1 and 12.
+ val restoredState =
+ withArgCaptor<CommunalHubState> {
+ verify(communalWidgetDao).restoreCommunalHubState(capture())
+ }
+ val restoredWidgets = restoredState.widgets.toList()
+ assertThat(restoredWidgets).hasSize(2)
+
+ val restoredWidget1 = restoredWidgets[0]
+ val expectedWidget1 = fakeState.widgets[0]
+ assertThat(restoredWidget1.widgetId).isEqualTo(1)
+ assertThat(restoredWidget1.componentName).isEqualTo(expectedWidget1.componentName)
+ assertThat(restoredWidget1.rank).isEqualTo(expectedWidget1.rank)
+
+ val restoredWidget2 = restoredWidgets[1]
+ val expectedWidget2 = fakeState.widgets[1]
+ assertThat(restoredWidget2.widgetId).isEqualTo(12)
+ assertThat(restoredWidget2.componentName).isEqualTo(expectedWidget2.componentName)
+ assertThat(restoredWidget2.rank).isEqualTo(expectedWidget2.rank)
}
private fun installedProviders(providers: List<AppWidgetProviderInfo>) {
@@ -278,5 +451,22 @@
widgetFeatures =
WIDGET_FEATURE_CONFIGURATION_OPTIONAL or WIDGET_FEATURE_RECONFIGURABLE
}
+ val fakeState =
+ CommunalHubState().apply {
+ widgets =
+ listOf(
+ CommunalHubState.CommunalWidgetItem().apply {
+ widgetId = 1
+ componentName = "pk_name/fake_widget_1"
+ rank = 1
+ },
+ CommunalHubState.CommunalWidgetItem().apply {
+ widgetId = 2
+ componentName = "pk_name/fake_widget_2"
+ rank = 2
+ },
+ )
+ .toTypedArray()
+ }
}
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/ui/view/layout/blueprints/DefaultCommunalBlueprintTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/ui/view/layout/blueprints/DefaultCommunalBlueprintTest.kt
index a496292..c56e919 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/ui/view/layout/blueprints/DefaultCommunalBlueprintTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/ui/view/layout/blueprints/DefaultCommunalBlueprintTest.kt
@@ -31,7 +31,7 @@
@Test
fun addView() {
val constraintLayout = ConstraintLayout(context, null)
- blueprint.replaceViews(null, constraintLayout)
+ blueprint.replaceViews(constraintLayout)
verify(hubSection).addViews(constraintLayout)
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/view/viewmodel/CommunalViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/view/viewmodel/CommunalViewModelTest.kt
index 5be765d..779e79ed 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/view/viewmodel/CommunalViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/view/viewmodel/CommunalViewModelTest.kt
@@ -44,11 +44,13 @@
import com.android.systemui.flags.fakeFeatureFlagsClassic
import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
+import com.android.systemui.keyguard.shared.model.StatusBarState
import com.android.systemui.kosmos.testScope
import com.android.systemui.log.logcatLogBuffer
import com.android.systemui.media.controls.ui.controller.MediaHierarchyManager
import com.android.systemui.media.controls.ui.view.MediaHost
import com.android.systemui.settings.fakeUserTracker
+import com.android.systemui.shade.data.repository.fakeShadeRepository
import com.android.systemui.shade.domain.interactor.shadeInteractor
import com.android.systemui.smartspace.data.repository.FakeSmartspaceRepository
import com.android.systemui.smartspace.data.repository.fakeSmartspaceRepository
@@ -59,6 +61,7 @@
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.advanceTimeBy
+import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
import org.junit.Before
import org.junit.Test
@@ -266,6 +269,26 @@
assertThat(isPopupOnDismissCtaShowing).isEqualTo(false)
}
+ @Test
+ fun canChangeScene_shadeNotExpanded() =
+ testScope.runTest {
+ // On keyguard without any shade expansion.
+ kosmos.fakeKeyguardRepository.setStatusBarState(StatusBarState.KEYGUARD)
+ kosmos.fakeShadeRepository.setLockscreenShadeExpansion(0f)
+ runCurrent()
+ assertThat(underTest.canChangeScene()).isTrue()
+ }
+
+ @Test
+ fun canChangeScene_shadeExpanded() =
+ testScope.runTest {
+ // On keyguard with shade fully expanded.
+ kosmos.fakeKeyguardRepository.setStatusBarState(StatusBarState.KEYGUARD)
+ kosmos.fakeShadeRepository.setLockscreenShadeExpansion(1f)
+ runCurrent()
+ assertThat(underTest.canChangeScene()).isFalse()
+ }
+
private suspend fun setIsMainUser(isMainUser: Boolean) {
whenever(user.isMain).thenReturn(isMainUser)
userRepository.setUserInfos(listOf(user))
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryInteractorTest.kt
index 37a6ac6..af48802 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryInteractorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryInteractorTest.kt
@@ -25,6 +25,9 @@
import com.android.systemui.authentication.data.repository.fakeAuthenticationRepository
import com.android.systemui.authentication.domain.interactor.authenticationInteractor
import com.android.systemui.authentication.shared.model.AuthenticationMethodModel
+import com.android.systemui.biometrics.data.repository.fakeFingerprintPropertyRepository
+import com.android.systemui.bouncer.data.repository.keyguardBouncerRepository
+import com.android.systemui.bouncer.domain.interactor.alternateBouncerInteractor
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.coroutines.collectValues
import com.android.systemui.deviceentry.data.repository.fakeDeviceEntryRepository
@@ -40,11 +43,16 @@
import com.android.systemui.deviceentry.shared.model.DeviceEntryRestrictionReason.UserLockdown
import com.android.systemui.flags.EnableSceneContainer
import com.android.systemui.flags.fakeSystemPropertiesHelper
+import com.android.systemui.keyguard.data.repository.biometricSettingsRepository
+import com.android.systemui.keyguard.data.repository.deviceEntryFingerprintAuthRepository
import com.android.systemui.keyguard.data.repository.fakeBiometricSettingsRepository
import com.android.systemui.keyguard.data.repository.fakeDeviceEntryFaceAuthRepository
import com.android.systemui.keyguard.data.repository.fakeDeviceEntryFingerprintAuthRepository
+import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
+import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository
import com.android.systemui.keyguard.data.repository.fakeTrustRepository
import com.android.systemui.keyguard.shared.model.AuthenticationFlags
+import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.SuccessFingerprintAuthenticationStatus
import com.android.systemui.kosmos.testScope
import com.android.systemui.scene.domain.interactor.sceneInteractor
@@ -371,6 +379,42 @@
}
@Test
+ fun showOrUnlockDevice_noAlternateBouncer_switchesToBouncerScene() =
+ testScope.runTest {
+ val currentScene by collectLastValue(sceneInteractor.currentScene)
+ switchToScene(Scenes.Lockscreen)
+ assertThat(currentScene).isEqualTo(Scenes.Lockscreen)
+
+ kosmos.fakeFingerprintPropertyRepository.supportsRearFps() // altBouncer unsupported
+ kosmos.fakeAuthenticationRepository.setAuthenticationMethod(
+ AuthenticationMethodModel.Pin
+ )
+ runCurrent()
+
+ underTest.attemptDeviceEntry()
+
+ assertThat(currentScene).isEqualTo(Scenes.Bouncer)
+ }
+
+ @Test
+ fun showOrUnlockDevice_showsAlternateBouncer_staysOnLockscreenScene() =
+ testScope.runTest {
+ val currentScene by collectLastValue(sceneInteractor.currentScene)
+ switchToScene(Scenes.Lockscreen)
+ assertThat(currentScene).isEqualTo(Scenes.Lockscreen)
+
+ kosmos.fakeAuthenticationRepository.setAuthenticationMethod(
+ AuthenticationMethodModel.Pin
+ )
+ givenCanShowAlternateBouncer()
+ runCurrent()
+
+ underTest.attemptDeviceEntry()
+
+ assertThat(currentScene).isEqualTo(Scenes.Lockscreen)
+ }
+
+ @Test
fun isBypassEnabled_disabledInRepository_false() =
testScope.runTest {
kosmos.fakeDeviceEntryRepository.setBypassEnabled(false)
@@ -593,4 +637,20 @@
private fun switchToScene(sceneKey: SceneKey) {
sceneInteractor.changeScene(sceneKey, "reason")
}
+
+ private suspend fun givenCanShowAlternateBouncer() {
+ val canShowAlternateBouncer by
+ testScope.collectLastValue(kosmos.alternateBouncerInteractor.canShowAlternateBouncer)
+ kosmos.fakeFingerprintPropertyRepository.supportsUdfps()
+ kosmos.fakeKeyguardTransitionRepository.sendTransitionSteps(
+ from = KeyguardState.GONE,
+ to = KeyguardState.LOCKSCREEN,
+ testScheduler = testScope.testScheduler,
+ )
+ kosmos.deviceEntryFingerprintAuthRepository.setLockedOut(false)
+ kosmos.biometricSettingsRepository.setIsFingerprintAuthCurrentlyAllowed(true)
+ kosmos.fakeKeyguardRepository.setKeyguardDismissible(false)
+ kosmos.keyguardBouncerRepository.setPrimaryShow(false)
+ assertThat(canShowAlternateBouncer).isTrue()
+ }
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/DreamOverlayContainerViewControllerTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/DreamOverlayContainerViewControllerTest.java
index 41bc1dc..e2e5169 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/DreamOverlayContainerViewControllerTest.java
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/DreamOverlayContainerViewControllerTest.java
@@ -16,6 +16,8 @@
package com.android.systemui.dreams;
+import static kotlinx.coroutines.flow.FlowKt.emptyFlow;
+
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyFloat;
@@ -28,6 +30,7 @@
import android.content.res.Resources;
import android.graphics.Region;
import android.os.Handler;
+import android.testing.TestableLooper.RunWithLooper;
import android.view.AttachedSurfaceControl;
import android.view.ViewGroup;
import android.view.ViewRootImpl;
@@ -43,6 +46,7 @@
import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerCallbackInteractor;
import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerCallbackInteractor.PrimaryBouncerExpansionCallback;
import com.android.systemui.complication.ComplicationHostViewController;
+import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor;
import com.android.systemui.statusbar.BlurUtils;
import org.junit.Before;
@@ -52,8 +56,11 @@
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
+import kotlinx.coroutines.CoroutineDispatcher;
+
@SmallTest
@RunWith(AndroidJUnit4.class)
+@RunWithLooper(setAsMainLooper = true)
public class DreamOverlayContainerViewControllerTest extends SysuiTestCase {
private static final int MAX_BURN_IN_OFFSET = 20;
private static final long BURN_IN_PROTECTION_UPDATE_INTERVAL = 10;
@@ -87,6 +94,9 @@
Handler mHandler;
@Mock
+ CoroutineDispatcher mDispatcher;
+
+ @Mock
BlurUtils mBlurUtils;
@Mock
@@ -103,6 +113,8 @@
@Mock
DreamOverlayStateController mStateController;
+ @Mock
+ KeyguardTransitionInteractor mKeyguardTransitionInteractor;
DreamOverlayContainerViewController mController;
@@ -115,6 +127,7 @@
when(mDreamOverlayContainerView.getViewRootImpl()).thenReturn(mViewRoot);
when(mDreamOverlayContainerView.getRootSurfaceControl())
.thenReturn(mAttachedSurfaceControl);
+ when(mKeyguardTransitionInteractor.isFinishedInStateWhere(any())).thenReturn(emptyFlow());
mController = new DreamOverlayContainerViewController(
mDreamOverlayContainerView,
@@ -124,6 +137,7 @@
mLowLightTransitionCoordinator,
mBlurUtils,
mHandler,
+ mDispatcher,
mResources,
MAX_BURN_IN_OFFSET,
BURN_IN_PROTECTION_UPDATE_INTERVAL,
@@ -131,7 +145,8 @@
mPrimaryBouncerCallbackInteractor,
mAnimationsController,
mStateController,
- mBouncerlessScrimController);
+ mBouncerlessScrimController,
+ mKeyguardTransitionInteractor);
}
@Test
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/DreamOverlayServiceTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/DreamOverlayServiceTest.kt
index b18a8ec..bdb0c9a 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/DreamOverlayServiceTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/DreamOverlayServiceTest.kt
@@ -17,35 +17,52 @@
import android.content.ComponentName
import android.content.Intent
-import android.os.RemoteException
import android.service.dreams.IDreamOverlay
import android.service.dreams.IDreamOverlayCallback
import android.service.dreams.IDreamOverlayClient
import android.service.dreams.IDreamOverlayClientCallback
+import android.testing.TestableLooper
import android.view.View
import android.view.ViewGroup
import android.view.WindowManager
import android.view.WindowManagerImpl
import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.LifecycleRegistry
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
+import com.android.compose.animation.scene.ObservableTransitionState
import com.android.internal.logging.UiEventLogger
import com.android.keyguard.KeyguardUpdateMonitor
+import com.android.keyguard.KeyguardUpdateMonitorCallback
import com.android.systemui.SysuiTestCase
import com.android.systemui.ambient.touch.TouchMonitor
import com.android.systemui.ambient.touch.dagger.AmbientTouchComponent
+import com.android.systemui.ambient.touch.scrim.ScrimController
+import com.android.systemui.ambient.touch.scrim.ScrimManager
+import com.android.systemui.bouncer.data.repository.FakeKeyguardBouncerRepository
+import com.android.systemui.bouncer.data.repository.fakeKeyguardBouncerRepository
+import com.android.systemui.communal.data.repository.FakeCommunalRepository
+import com.android.systemui.communal.data.repository.fakeCommunalRepository
+import com.android.systemui.communal.domain.interactor.communalInteractor
+import com.android.systemui.communal.shared.model.CommunalScenes
import com.android.systemui.complication.ComplicationHostViewController
import com.android.systemui.complication.ComplicationLayoutEngine
import com.android.systemui.complication.dagger.ComplicationComponent
import com.android.systemui.dreams.complication.HideComplicationTouchHandler
import com.android.systemui.dreams.dagger.DreamOverlayComponent
+import com.android.systemui.keyguard.domain.interactor.keyguardInteractor
+import com.android.systemui.kosmos.testScope
+import com.android.systemui.testKosmos
import com.android.systemui.touch.TouchInsetManager
import com.android.systemui.util.concurrency.FakeExecutor
import com.android.systemui.util.mockito.any
import com.android.systemui.util.mockito.whenever
import com.android.systemui.util.time.FakeSystemClock
-import com.google.common.truth.Truth
+import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.test.runCurrent
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
@@ -53,20 +70,24 @@
import org.mockito.Captor
import org.mockito.Mock
import org.mockito.Mockito
+import org.mockito.Mockito.verify
import org.mockito.MockitoAnnotations
-import org.mockito.invocation.InvocationOnMock
+@OptIn(ExperimentalCoroutinesApi::class)
@SmallTest
+@TestableLooper.RunWithLooper(setAsMainLooper = true)
@RunWith(AndroidJUnit4::class)
class DreamOverlayServiceTest : SysuiTestCase() {
private val mFakeSystemClock = FakeSystemClock()
private val mMainExecutor = FakeExecutor(mFakeSystemClock)
+ private val kosmos = testKosmos()
+ private val testScope = kosmos.testScope
@Mock lateinit var mLifecycleOwner: DreamOverlayLifecycleOwner
- @Mock lateinit var mLifecycleRegistry: LifecycleRegistry
+ private lateinit var lifecycleRegistry: FakeLifecycleRegistry
- lateinit var mWindowParams: WindowManager.LayoutParams
+ private lateinit var mWindowParams: WindowManager.LayoutParams
@Mock lateinit var mDreamOverlayCallback: IDreamOverlayCallback
@@ -114,18 +135,33 @@
@Mock lateinit var mUiEventLogger: UiEventLogger
+ @Mock lateinit var mScrimManager: ScrimManager
+
+ @Mock lateinit var mScrimController: ScrimController
+
+ @Mock lateinit var mSystemDialogsCloser: SystemDialogsCloser
+
@Mock lateinit var mDreamOverlayCallbackController: DreamOverlayCallbackController
+ private lateinit var bouncerRepository: FakeKeyguardBouncerRepository
+ private lateinit var communalRepository: FakeCommunalRepository
+
@Captor var mViewCaptor: ArgumentCaptor<View>? = null
- var mService: DreamOverlayService? = null
+ private lateinit var mService: DreamOverlayService
+
@Before
fun setup() {
MockitoAnnotations.initMocks(this)
+
+ lifecycleRegistry = FakeLifecycleRegistry(mLifecycleOwner)
+ bouncerRepository = kosmos.fakeKeyguardBouncerRepository
+ communalRepository = kosmos.fakeCommunalRepository
+
whenever(mDreamOverlayComponent.getDreamOverlayContainerViewController())
.thenReturn(mDreamOverlayContainerViewController)
whenever(mComplicationComponent.getComplicationHostViewController())
.thenReturn(mComplicationHostViewController)
- whenever(mLifecycleOwner.registry).thenReturn(mLifecycleRegistry)
+ whenever(mLifecycleOwner.registry).thenReturn(lifecycleRegistry)
whenever(mComplicationComponentFactory.create(any(), any(), any(), any()))
.thenReturn(mComplicationComponent)
whenever(mComplicationComponent.getVisibilityController())
@@ -141,6 +177,7 @@
whenever(mAmbientTouchComponent.getTouchMonitor()).thenReturn(mTouchMonitor)
whenever(mDreamOverlayContainerViewController.containerView)
.thenReturn(mDreamOverlayContainerView)
+ whenever(mScrimManager.getCurrentController()).thenReturn(mScrimController)
mWindowParams = WindowManager.LayoutParams()
mService =
DreamOverlayService(
@@ -154,24 +191,30 @@
mAmbientTouchComponentFactory,
mStateController,
mKeyguardUpdateMonitor,
+ mScrimManager,
+ kosmos.communalInteractor,
+ mSystemDialogsCloser,
mUiEventLogger,
mTouchInsetManager,
LOW_LIGHT_COMPONENT,
HOME_CONTROL_PANEL_DREAM_COMPONENT,
mDreamOverlayCallbackController,
+ kosmos.keyguardInteractor,
WINDOW_NAME
)
}
- @get:Throws(RemoteException::class)
- val client: IDreamOverlayClient
+ private val client: IDreamOverlayClient
get() {
- val proxy = mService!!.onBind(Intent())
+ mService.onCreate()
+ TestableLooper.get(this).processAllMessages()
+
+ val proxy = mService.onBind(Intent())
val overlay = IDreamOverlay.Stub.asInterface(proxy)
val callback = Mockito.mock(IDreamOverlayClientCallback::class.java)
overlay.getClient(callback)
val clientCaptor = ArgumentCaptor.forClass(IDreamOverlayClient::class.java)
- Mockito.verify(callback).onDreamOverlayClient(clientCaptor.capture())
+ verify(callback).onDreamOverlayClient(clientCaptor.capture())
return clientCaptor.value
}
@@ -187,9 +230,8 @@
false /*shouldShowComplication*/
)
mMainExecutor.runAllReady()
- Mockito.verify(mUiEventLogger)
- .log(DreamOverlayService.DreamOverlayEvent.DREAM_OVERLAY_ENTER_START)
- Mockito.verify(mUiEventLogger)
+ verify(mUiEventLogger).log(DreamOverlayService.DreamOverlayEvent.DREAM_OVERLAY_ENTER_START)
+ verify(mUiEventLogger)
.log(DreamOverlayService.DreamOverlayEvent.DREAM_OVERLAY_COMPLETE_START)
}
@@ -205,7 +247,7 @@
false /*shouldShowComplication*/
)
mMainExecutor.runAllReady()
- Mockito.verify(mWindowManager).addView(any(), any())
+ verify(mWindowManager).addView(any(), any())
}
// Validates that {@link DreamOverlayService} properly handles the case where the dream's
@@ -224,14 +266,14 @@
false /*shouldShowComplication*/
)
mMainExecutor.runAllReady()
- Mockito.verify(mWindowManager).addView(any(), any())
- Mockito.verify(mStateController).setOverlayActive(false)
- Mockito.verify(mStateController).setLowLightActive(false)
- Mockito.verify(mStateController).setEntryAnimationsFinished(false)
- Mockito.verify(mStateController, Mockito.never()).setOverlayActive(true)
- Mockito.verify(mUiEventLogger, Mockito.never())
+ verify(mWindowManager).addView(any(), any())
+ verify(mStateController).setOverlayActive(false)
+ verify(mStateController).setLowLightActive(false)
+ verify(mStateController).setEntryAnimationsFinished(false)
+ verify(mStateController, Mockito.never()).setOverlayActive(true)
+ verify(mUiEventLogger, Mockito.never())
.log(DreamOverlayService.DreamOverlayEvent.DREAM_OVERLAY_COMPLETE_START)
- Mockito.verify(mDreamOverlayCallbackController, Mockito.never()).onStartDream()
+ verify(mDreamOverlayCallbackController, Mockito.never()).onStartDream()
}
@Test
@@ -246,7 +288,7 @@
false /*shouldShowComplication*/
)
mMainExecutor.runAllReady()
- Mockito.verify(mDreamOverlayContainerViewController).init()
+ verify(mDreamOverlayContainerViewController).init()
}
@Test
@@ -264,7 +306,7 @@
false /*shouldShowComplication*/
)
mMainExecutor.runAllReady()
- Mockito.verify(mDreamOverlayContainerViewParent).removeView(mDreamOverlayContainerView)
+ verify(mDreamOverlayContainerViewParent).removeView(mDreamOverlayContainerView)
}
@Test
@@ -279,7 +321,7 @@
true /*shouldShowComplication*/
)
mMainExecutor.runAllReady()
- Truth.assertThat(mService!!.shouldShowComplications()).isTrue()
+ assertThat(mService.shouldShowComplications()).isTrue()
}
@Test
@@ -294,8 +336,8 @@
false /*shouldShowComplication*/
)
mMainExecutor.runAllReady()
- Truth.assertThat(mService!!.dreamComponent).isEqualTo(LOW_LIGHT_COMPONENT)
- Mockito.verify(mStateController).setLowLightActive(true)
+ assertThat(mService.dreamComponent).isEqualTo(LOW_LIGHT_COMPONENT)
+ verify(mStateController).setLowLightActive(true)
}
@Test
@@ -310,8 +352,8 @@
false /*shouldShowComplication*/
)
mMainExecutor.runAllReady()
- Truth.assertThat(mService!!.dreamComponent).isEqualTo(HOME_CONTROL_PANEL_DREAM_COMPONENT)
- Mockito.verify(mStateController).setHomeControlPanelActive(true)
+ assertThat(mService.dreamComponent).isEqualTo(HOME_CONTROL_PANEL_DREAM_COMPONENT)
+ verify(mStateController).setHomeControlPanelActive(true)
}
@Test
@@ -328,19 +370,19 @@
mMainExecutor.runAllReady()
// Verify view added.
- Mockito.verify(mWindowManager).addView(mViewCaptor!!.capture(), any())
+ verify(mWindowManager).addView(mViewCaptor!!.capture(), any())
// Service destroyed.
- mService!!.onEndDream()
+ mService.onEndDream()
mMainExecutor.runAllReady()
// Verify view removed.
- Mockito.verify(mWindowManager).removeView(mViewCaptor!!.value)
+ verify(mWindowManager).removeView(mViewCaptor!!.value)
// Verify state correctly set.
- Mockito.verify(mStateController).setOverlayActive(false)
- Mockito.verify(mStateController).setLowLightActive(false)
- Mockito.verify(mStateController).setEntryAnimationsFinished(false)
+ verify(mStateController).setOverlayActive(false)
+ verify(mStateController).setLowLightActive(false)
+ verify(mStateController).setEntryAnimationsFinished(false)
}
@Test
@@ -373,7 +415,7 @@
// Schedule the endDream call in the middle of the startDream implementation, as any
// ordering is possible.
- Mockito.doAnswer { invocation: InvocationOnMock? ->
+ Mockito.doAnswer {
client.endDream()
null
}
@@ -409,37 +451,37 @@
mMainExecutor.runAllReady()
// Verify view added.
- Mockito.verify(mWindowManager).addView(mViewCaptor!!.capture(), any())
+ verify(mWindowManager).addView(mViewCaptor!!.capture(), any())
// Service destroyed.
- mService!!.onDestroy()
+ mService.onDestroy()
mMainExecutor.runAllReady()
// Verify view removed.
- Mockito.verify(mWindowManager).removeView(mViewCaptor!!.value)
+ verify(mWindowManager).removeView(mViewCaptor!!.value)
// Verify state correctly set.
- Mockito.verify(mKeyguardUpdateMonitor).removeCallback(any())
- Mockito.verify(mLifecycleRegistry).currentState = Lifecycle.State.DESTROYED
- Mockito.verify(mStateController).setOverlayActive(false)
- Mockito.verify(mStateController).setLowLightActive(false)
- Mockito.verify(mStateController).setEntryAnimationsFinished(false)
+ verify(mKeyguardUpdateMonitor).removeCallback(any())
+ assertThat(lifecycleRegistry.currentState).isEqualTo(Lifecycle.State.DESTROYED)
+ verify(mStateController).setOverlayActive(false)
+ verify(mStateController).setLowLightActive(false)
+ verify(mStateController).setEntryAnimationsFinished(false)
}
@Test
fun testDoNotRemoveViewOnDestroyIfOverlayNotStarted() {
// Service destroyed without ever starting dream.
- mService!!.onDestroy()
+ mService.onDestroy()
mMainExecutor.runAllReady()
// Verify no view is removed.
- Mockito.verify(mWindowManager, Mockito.never()).removeView(any())
+ verify(mWindowManager, Mockito.never()).removeView(any())
// Verify state still correctly set.
- Mockito.verify(mKeyguardUpdateMonitor).removeCallback(any())
- Mockito.verify(mLifecycleRegistry).currentState = Lifecycle.State.DESTROYED
- Mockito.verify(mStateController).setOverlayActive(false)
- Mockito.verify(mStateController).setLowLightActive(false)
+ verify(mKeyguardUpdateMonitor).removeCallback(any())
+ assertThat(lifecycleRegistry.currentState).isEqualTo(Lifecycle.State.DESTROYED)
+ verify(mStateController).setOverlayActive(false)
+ verify(mStateController).setLowLightActive(false)
}
@Test
@@ -447,7 +489,7 @@
val client = client
// Destroy the service.
- mService!!.onDestroy()
+ mService.onDestroy()
mMainExecutor.runAllReady()
// Inform the overlay service of dream starting.
@@ -458,15 +500,15 @@
false /*shouldShowComplication*/
)
mMainExecutor.runAllReady()
- Mockito.verify(mWindowManager, Mockito.never()).addView(any(), any())
+ verify(mWindowManager, Mockito.never()).addView(any(), any())
}
@Test
fun testNeverRemoveDecorViewIfNotAdded() {
// Service destroyed before dream started.
- mService!!.onDestroy()
+ mService.onDestroy()
mMainExecutor.runAllReady()
- Mockito.verify(mWindowManager, Mockito.never()).removeView(any())
+ verify(mWindowManager, Mockito.never()).removeView(any())
}
@Test
@@ -483,11 +525,11 @@
mMainExecutor.runAllReady()
// Verify that a new window is added.
- Mockito.verify(mWindowManager).addView(mViewCaptor!!.capture(), any())
+ verify(mWindowManager).addView(mViewCaptor!!.capture(), any())
val windowDecorView = mViewCaptor!!.value
// Assert that the overlay is not showing complications.
- Truth.assertThat(mService!!.shouldShowComplications()).isFalse()
+ assertThat(mService.shouldShowComplications()).isFalse()
Mockito.clearInvocations(mDreamOverlayComponent)
Mockito.clearInvocations(mAmbientTouchComponent)
Mockito.clearInvocations(mWindowManager)
@@ -504,16 +546,16 @@
mMainExecutor.runAllReady()
// Assert that the overlay is showing complications.
- Truth.assertThat(mService!!.shouldShowComplications()).isTrue()
+ assertThat(mService.shouldShowComplications()).isTrue()
// Verify that the old overlay window has been removed, and a new one created.
- Mockito.verify(mWindowManager).removeView(windowDecorView)
- Mockito.verify(mWindowManager).addView(any(), any())
+ verify(mWindowManager).removeView(windowDecorView)
+ verify(mWindowManager).addView(any(), any())
// Verify that new instances of overlay container view controller and overlay touch monitor
// are created.
- Mockito.verify(mDreamOverlayComponent).getDreamOverlayContainerViewController()
- Mockito.verify(mAmbientTouchComponent).getTouchMonitor()
+ verify(mDreamOverlayComponent).getDreamOverlayContainerViewController()
+ verify(mAmbientTouchComponent).getTouchMonitor()
}
@Test
@@ -528,15 +570,15 @@
true /*shouldShowComplication*/
)
mMainExecutor.runAllReady()
- mService!!.onWakeUp()
- Mockito.verify(mDreamOverlayContainerViewController).wakeUp()
- Mockito.verify(mDreamOverlayCallbackController).onWakeUp()
+ mService.onWakeUp()
+ verify(mDreamOverlayContainerViewController).wakeUp()
+ verify(mDreamOverlayCallbackController).onWakeUp()
}
@Test
fun testWakeUpBeforeStartDoesNothing() {
- mService!!.onWakeUp()
- Mockito.verify(mDreamOverlayContainerViewController, Mockito.never()).wakeUp()
+ mService.onWakeUp()
+ verify(mDreamOverlayContainerViewController, Mockito.never()).wakeUp()
}
@Test
@@ -554,8 +596,8 @@
val paramsCaptor = ArgumentCaptor.forClass(WindowManager.LayoutParams::class.java)
// Verify that a new window is added.
- Mockito.verify(mWindowManager).addView(any(), paramsCaptor.capture())
- Truth.assertThat(
+ verify(mWindowManager).addView(any(), paramsCaptor.capture())
+ assertThat(
paramsCaptor.value.privateFlags and
WindowManager.LayoutParams.SYSTEM_FLAG_SHOW_FOR_ALL_USERS ==
WindowManager.LayoutParams.SYSTEM_FLAG_SHOW_FOR_ALL_USERS
@@ -563,6 +605,254 @@
.isTrue()
}
+ // Tests that the bouncer closes when DreamOverlayService is told that the dream is coming to
+ // the front.
+ @Test
+ fun testBouncerRetractedWhenDreamComesToFront() {
+ val client = client
+
+ // Inform the overlay service of dream starting.
+ client.startDream(
+ mWindowParams,
+ mDreamOverlayCallback,
+ DREAM_COMPONENT,
+ true /*shouldShowComplication*/
+ )
+ mMainExecutor.runAllReady()
+
+ whenever(mDreamOverlayContainerViewController.isBouncerShowing()).thenReturn(true)
+ mService!!.onComeToFront()
+ verify(mScrimController).expand(any())
+ }
+
+ // Tests that glanceable hub is hidden when DreamOverlayService is told that the dream is
+ // coming to the front.
+ @Test
+ fun testGlanceableHubHiddenWhenDreamComesToFront() {
+ val client = client
+
+ // Inform the overlay service of dream starting.
+ client.startDream(
+ mWindowParams,
+ mDreamOverlayCallback,
+ DREAM_COMPONENT,
+ true /*shouldShowComplication*/
+ )
+ mMainExecutor.runAllReady()
+
+ mService!!.onComeToFront()
+ assertThat(communalRepository.currentScene.value).isEqualTo(CommunalScenes.Blank)
+ }
+
+ // Tests that system dialogs (e.g. notification shade) closes when DreamOverlayService is told
+ // that the dream is coming to the front.
+ @Test
+ fun testSystemDialogsClosedWhenDreamComesToFront() {
+ val client = client
+
+ // Inform the overlay service of dream starting.
+ client.startDream(
+ mWindowParams,
+ mDreamOverlayCallback,
+ DREAM_COMPONENT,
+ true /*shouldShowComplication*/
+ )
+ mMainExecutor.runAllReady()
+
+ mService!!.onComeToFront()
+ verify(mSystemDialogsCloser).closeSystemDialogs()
+ }
+
+ @Test
+ fun testLifecycle_createdAfterConstruction() {
+ mMainExecutor.runAllReady()
+ assertThat(lifecycleRegistry.currentState).isEqualTo(Lifecycle.State.CREATED)
+ }
+
+ @Test
+ fun testLifecycle_resumedAfterDreamStarts() {
+ val client = client
+
+ // Inform the overlay service of dream starting. Do not show dream complications.
+ client.startDream(
+ mWindowParams,
+ mDreamOverlayCallback,
+ DREAM_COMPONENT,
+ false /*shouldShowComplication*/
+ )
+ mMainExecutor.runAllReady()
+ assertThat(lifecycleRegistry.mLifecycles)
+ .containsExactly(
+ Lifecycle.State.CREATED,
+ Lifecycle.State.STARTED,
+ Lifecycle.State.RESUMED
+ )
+ }
+
+ @Test
+ fun testLifecycle_destroyedAfterOnDestroy() {
+ val client = client
+
+ // Inform the overlay service of dream starting. Do not show dream complications.
+ client.startDream(
+ mWindowParams,
+ mDreamOverlayCallback,
+ DREAM_COMPONENT,
+ false /*shouldShowComplication*/
+ )
+ mMainExecutor.runAllReady()
+ mService.onDestroy()
+ mMainExecutor.runAllReady()
+ assertThat(lifecycleRegistry.mLifecycles)
+ .containsExactly(
+ Lifecycle.State.CREATED,
+ Lifecycle.State.STARTED,
+ Lifecycle.State.RESUMED,
+ Lifecycle.State.DESTROYED
+ )
+ }
+
+ @Test
+ fun testNotificationShadeShown_setsLifecycleState() {
+ val client = client
+
+ // Inform the overlay service of dream starting. Do not show dream complications.
+ client.startDream(
+ mWindowParams,
+ mDreamOverlayCallback,
+ DREAM_COMPONENT,
+ false /*shouldShowComplication*/
+ )
+ mMainExecutor.runAllReady()
+ assertThat(lifecycleRegistry.currentState).isEqualTo(Lifecycle.State.RESUMED)
+ val callbackCaptor = ArgumentCaptor.forClass(KeyguardUpdateMonitorCallback::class.java)
+ verify(mKeyguardUpdateMonitor).registerCallback(callbackCaptor.capture())
+
+ // Notification shade opens.
+ callbackCaptor.value.onShadeExpandedChanged(true)
+ mMainExecutor.runAllReady()
+
+ // Lifecycle state goes from resumed back to started when the notification shade shows.
+ assertThat(lifecycleRegistry.currentState).isEqualTo(Lifecycle.State.STARTED)
+
+ // Notification shade closes.
+ callbackCaptor.value.onShadeExpandedChanged(false)
+ mMainExecutor.runAllReady()
+
+ // Lifecycle state goes back to RESUMED.
+ assertThat(lifecycleRegistry.currentState).isEqualTo(Lifecycle.State.RESUMED)
+ }
+
+ @Test
+ fun testBouncerShown_setsLifecycleState() {
+ val client = client
+
+ // Inform the overlay service of dream starting. Do not show dream complications.
+ client.startDream(
+ mWindowParams,
+ mDreamOverlayCallback,
+ DREAM_COMPONENT,
+ false /*shouldShowComplication*/
+ )
+ mMainExecutor.runAllReady()
+ assertThat(lifecycleRegistry.currentState).isEqualTo(Lifecycle.State.RESUMED)
+
+ // Bouncer shows.
+ bouncerRepository.setPrimaryShow(true)
+ testScope.runCurrent()
+ mMainExecutor.runAllReady()
+
+ // Lifecycle state goes from resumed back to started when the notification shade shows.
+ assertThat(lifecycleRegistry.currentState).isEqualTo(Lifecycle.State.STARTED)
+
+ // Bouncer closes.
+ bouncerRepository.setPrimaryShow(false)
+ testScope.runCurrent()
+ mMainExecutor.runAllReady()
+
+ // Lifecycle state goes back to RESUMED.
+ assertThat(lifecycleRegistry.currentState).isEqualTo(Lifecycle.State.RESUMED)
+ }
+
+ @Test
+ fun testCommunalVisible_setsLifecycleState() {
+ val client = client
+
+ // Inform the overlay service of dream starting. Do not show dream complications.
+ client.startDream(
+ mWindowParams,
+ mDreamOverlayCallback,
+ DREAM_COMPONENT,
+ false /*shouldShowComplication*/
+ )
+ mMainExecutor.runAllReady()
+ assertThat(lifecycleRegistry.currentState).isEqualTo(Lifecycle.State.RESUMED)
+ val transitionState: MutableStateFlow<ObservableTransitionState> =
+ MutableStateFlow(ObservableTransitionState.Idle(CommunalScenes.Blank))
+ communalRepository.setTransitionState(transitionState)
+
+ // Communal becomes visible.
+ transitionState.value = ObservableTransitionState.Idle(CommunalScenes.Communal)
+ testScope.runCurrent()
+ mMainExecutor.runAllReady()
+
+ // Lifecycle state goes from resumed back to started when the notification shade shows.
+ assertThat(lifecycleRegistry.currentState).isEqualTo(Lifecycle.State.STARTED)
+
+ // Communal closes.
+ transitionState.value = ObservableTransitionState.Idle(CommunalScenes.Blank)
+ testScope.runCurrent()
+ mMainExecutor.runAllReady()
+
+ // Lifecycle state goes back to RESUMED.
+ assertThat(lifecycleRegistry.currentState).isEqualTo(Lifecycle.State.RESUMED)
+ }
+
+ // Verifies the dream's lifecycle
+ @Test
+ fun testLifecycleStarted_whenAnyOcclusion() {
+ val client = client
+
+ // Inform the overlay service of dream starting. Do not show dream complications.
+ client.startDream(
+ mWindowParams,
+ mDreamOverlayCallback,
+ DREAM_COMPONENT,
+ false /*shouldShowComplication*/
+ )
+ mMainExecutor.runAllReady()
+ assertThat(lifecycleRegistry.currentState).isEqualTo(Lifecycle.State.RESUMED)
+ val transitionState: MutableStateFlow<ObservableTransitionState> =
+ MutableStateFlow(ObservableTransitionState.Idle(CommunalScenes.Blank))
+ communalRepository.setTransitionState(transitionState)
+
+ // Communal becomes visible.
+ transitionState.value = ObservableTransitionState.Idle(CommunalScenes.Communal)
+ testScope.runCurrent()
+ mMainExecutor.runAllReady()
+
+ // Lifecycle state goes from resumed back to started when the notification shade shows.
+ assertThat(lifecycleRegistry.currentState).isEqualTo(Lifecycle.State.STARTED)
+
+ // Communal closes.
+ transitionState.value = ObservableTransitionState.Idle(CommunalScenes.Blank)
+ testScope.runCurrent()
+ mMainExecutor.runAllReady()
+
+ // Lifecycle state goes back to RESUMED.
+ assertThat(lifecycleRegistry.currentState).isEqualTo(Lifecycle.State.RESUMED)
+ }
+
+ internal class FakeLifecycleRegistry(provider: LifecycleOwner) : LifecycleRegistry(provider) {
+ val mLifecycles: MutableList<State> = ArrayList()
+
+ override var currentState: State
+ get() = mLifecycles[mLifecycles.size - 1]
+ set(state) {
+ mLifecycles.add(state)
+ }
+ }
+
companion object {
private val LOW_LIGHT_COMPONENT = ComponentName("package", "lowlight")
private val HOME_CONTROL_PANEL_DREAM_COMPONENT =
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/touch/CommunalTouchHandlerTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/touch/CommunalTouchHandlerTest.java
index 29fbee0..e3c6dee 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/touch/CommunalTouchHandlerTest.java
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/touch/CommunalTouchHandlerTest.java
@@ -108,7 +108,7 @@
mTouchHandler.onSessionStart(mTouchSession);
verify(mTouchSession).registerInputListener(inputEventListenerArgumentCaptor.capture());
inputEventListenerArgumentCaptor.getValue().onInputEvent(motionEvent);
- verify(mCentralSurfaces).handleDreamTouch(motionEvent);
+ verify(mCentralSurfaces).handleExternalShadeWindowTouch(motionEvent);
}
@Test
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/haptics/slider/SeekableSliderHapticPluginTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/haptics/slider/SeekbarHapticPluginTest.kt
similarity index 96%
rename from packages/SystemUI/multivalentTests/src/com/android/systemui/haptics/slider/SeekableSliderHapticPluginTest.kt
rename to packages/SystemUI/multivalentTests/src/com/android/systemui/haptics/slider/SeekbarHapticPluginTest.kt
index 805b4a8..855b6d0 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/haptics/slider/SeekableSliderHapticPluginTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/haptics/slider/SeekbarHapticPluginTest.kt
@@ -44,14 +44,14 @@
@SmallTest
@RunWith(AndroidJUnit4::class)
@OptIn(ExperimentalCoroutinesApi::class)
-class SeekableSliderHapticPluginTest : SysuiTestCase() {
+class SeekbarHapticPluginTest : SysuiTestCase() {
private val kosmos = Kosmos()
@Rule @JvmField val mMockitoRule: MockitoRule = MockitoJUnit.rule()
@Mock private lateinit var vibratorHelper: VibratorHelper
private val seekBar = SeekBar(mContext)
- private lateinit var plugin: SeekableSliderHapticPlugin
+ private lateinit var plugin: SeekbarHapticPlugin
@Before
fun setup() {
@@ -142,7 +142,7 @@
private fun createPlugin() {
plugin =
- SeekableSliderHapticPlugin(
+ SeekbarHapticPlugin(
vibratorHelper,
kosmos.fakeSystemClock,
)
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/haptics/slider/SliderStateProducerTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/haptics/slider/SliderStateProducerTest.kt
new file mode 100644
index 0000000..88189db
--- /dev/null
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/haptics/slider/SliderStateProducerTest.kt
@@ -0,0 +1,134 @@
+/*
+ * 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.haptics.slider
+
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.coroutines.collectLastValue
+import junit.framework.Assert.assertEquals
+import kotlinx.coroutines.test.runTest
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@SmallTest
+@RunWith(AndroidJUnit4::class)
+class SliderStateProducerTest : SysuiTestCase() {
+
+ private val eventProducer = SliderStateProducer()
+ private val eventFlow = eventProducer.produceEvents()
+
+ @Test
+ fun onStartTrackingTouch_noProgress_trackingTouchEventProduced() = runTest {
+ val latest by collectLastValue(eventFlow)
+
+ eventProducer.onStartTracking(/*fromUser =*/ true)
+
+ assertEquals(SliderEvent(SliderEventType.STARTED_TRACKING_TOUCH, 0F), latest)
+ }
+
+ @Test
+ fun onStopTrackingTouch_noProgress_StoppedTrackingTouchEventProduced() = runTest {
+ val latest by collectLastValue(eventFlow)
+
+ eventProducer.onStopTracking(/*fromUser =*/ true)
+
+ assertEquals(SliderEvent(SliderEventType.STOPPED_TRACKING_TOUCH, 0F), latest)
+ }
+
+ @Test
+ fun onStartTrackingProgram_noProgress_trackingTouchEventProduced() = runTest {
+ val latest by collectLastValue(eventFlow)
+
+ eventProducer.onStartTracking(/*fromUser =*/ false)
+
+ assertEquals(SliderEvent(SliderEventType.STARTED_TRACKING_PROGRAM, 0F), latest)
+ }
+
+ @Test
+ fun onStopTrackingProgram_noProgress_StoppedTrackingTouchEventProduced() = runTest {
+ val latest by collectLastValue(eventFlow)
+
+ eventProducer.onStopTracking(/*fromUser =*/ false)
+
+ assertEquals(SliderEvent(SliderEventType.STOPPED_TRACKING_PROGRAM, 0F), latest)
+ }
+
+ @Test
+ fun onProgressChangeByUser_changeByUserEventProduced() = runTest {
+ val progress = 0.5f
+ val latest by collectLastValue(eventFlow)
+
+ eventProducer.onProgressChanged(/*fromUser =*/ true, progress)
+
+ assertEquals(SliderEvent(SliderEventType.PROGRESS_CHANGE_BY_USER, progress), latest)
+ }
+
+ @Test
+ fun onProgressChangeByProgram_changeByProgramEventProduced() = runTest {
+ val progress = 0.5f
+ val latest by collectLastValue(eventFlow)
+
+ eventProducer.onProgressChanged(/*fromUser =*/ false, progress)
+
+ assertEquals(SliderEvent(SliderEventType.PROGRESS_CHANGE_BY_PROGRAM, progress), latest)
+ }
+
+ @Test
+ fun onStartTrackingTouch_afterProgress_trackingTouchEventProduced() = runTest {
+ val progress = 0.5f
+ val latest by collectLastValue(eventFlow)
+
+ eventProducer.onProgressChanged(/*fromUser =*/ true, progress)
+ eventProducer.onStartTracking(/*fromUser =*/ true)
+
+ assertEquals(SliderEvent(SliderEventType.STARTED_TRACKING_TOUCH, progress), latest)
+ }
+
+ @Test
+ fun onStopTrackingTouch_afterProgress_stopTrackingTouchEventProduced() = runTest {
+ val progress = 0.5f
+ val latest by collectLastValue(eventFlow)
+
+ eventProducer.onProgressChanged(/*fromUser =*/ true, progress)
+ eventProducer.onStopTracking(/*fromUser =*/ true)
+
+ assertEquals(SliderEvent(SliderEventType.STOPPED_TRACKING_TOUCH, progress), latest)
+ }
+
+ @Test
+ fun onStartTrackingProgram_afterProgress_trackingProgramEventProduced() = runTest {
+ val progress = 0.5f
+ val latest by collectLastValue(eventFlow)
+
+ eventProducer.onProgressChanged(/*fromUser =*/ false, progress)
+ eventProducer.onStartTracking(/*fromUser =*/ false)
+
+ assertEquals(SliderEvent(SliderEventType.STARTED_TRACKING_PROGRAM, progress), latest)
+ }
+
+ @Test
+ fun onStopTrackingProgram_afterProgress_stopTrackingProgramEventProduced() = runTest {
+ val progress = 0.5f
+ val latest by collectLastValue(eventFlow)
+
+ eventProducer.onProgressChanged(/*fromUser =*/ false, progress)
+ eventProducer.onStopTracking(/*fromUser =*/ false)
+
+ assertEquals(SliderEvent(SliderEventType.STOPPED_TRACKING_PROGRAM, progress), latest)
+ }
+}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardClockInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardClockInteractorTest.kt
index c88e432..26b56a1 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardClockInteractorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardClockInteractorTest.kt
@@ -18,8 +18,6 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
-import com.android.keyguard.KeyguardClockSwitch.LARGE
-import com.android.keyguard.KeyguardClockSwitch.SMALL
import com.android.systemui.SysuiTestCase
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.flags.DisableSceneContainer
@@ -30,6 +28,7 @@
import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository
import com.android.systemui.keyguard.data.repository.keyguardClockRepository
import com.android.systemui.keyguard.data.repository.keyguardRepository
+import com.android.systemui.keyguard.shared.model.ClockSize
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.TransitionState
import com.android.systemui.keyguard.shared.model.TransitionStep
@@ -69,11 +68,11 @@
fun clockSize_sceneContainerFlagOff_basedOnRepository() =
testScope.runTest {
val value by collectLastValue(underTest.clockSize)
- kosmos.keyguardClockRepository.setClockSize(LARGE)
- assertThat(value).isEqualTo(LARGE)
+ kosmos.keyguardClockRepository.setClockSize(ClockSize.LARGE)
+ assertThat(value).isEqualTo(ClockSize.LARGE)
- kosmos.keyguardClockRepository.setClockSize(SMALL)
- assertThat(value).isEqualTo(SMALL)
+ kosmos.keyguardClockRepository.setClockSize(ClockSize.SMALL)
+ assertThat(value).isEqualTo(ClockSize.SMALL)
}
@Test
@@ -96,7 +95,7 @@
kosmos.fakeKeyguardClockRepository.setShouldForceSmallClock(true)
kosmos.fakeFeatureFlagsClassic.set(Flags.LOCKSCREEN_ENABLE_LANDSCAPE, true)
transitionTo(KeyguardState.AOD, KeyguardState.LOCKSCREEN)
- assertThat(value).isEqualTo(SMALL)
+ assertThat(value).isEqualTo(ClockSize.SMALL)
}
@Test
@@ -106,7 +105,7 @@
val value by collectLastValue(underTest.clockSize)
kosmos.shadeRepository.setShadeMode(ShadeMode.Single)
kosmos.activeNotificationListRepository.setActiveNotifs(1)
- assertThat(value).isEqualTo(SMALL)
+ assertThat(value).isEqualTo(ClockSize.SMALL)
}
@Test
@@ -117,7 +116,7 @@
kosmos.shadeRepository.setShadeMode(ShadeMode.Single)
val userMedia = MediaData().copy(active = true)
kosmos.mediaFilterRepository.addSelectedUserMediaEntry(userMedia)
- assertThat(value).isEqualTo(SMALL)
+ assertThat(value).isEqualTo(ClockSize.SMALL)
}
@Test
@@ -129,7 +128,7 @@
kosmos.shadeRepository.setShadeMode(ShadeMode.Split)
kosmos.mediaFilterRepository.addSelectedUserMediaEntry(userMedia)
kosmos.keyguardRepository.setIsDozing(false)
- assertThat(value).isEqualTo(SMALL)
+ assertThat(value).isEqualTo(ClockSize.SMALL)
}
@Test
@@ -139,7 +138,7 @@
val value by collectLastValue(underTest.clockSize)
kosmos.shadeRepository.setShadeMode(ShadeMode.Split)
kosmos.keyguardRepository.setIsDozing(false)
- assertThat(value).isEqualTo(LARGE)
+ assertThat(value).isEqualTo(ClockSize.LARGE)
}
@Test
@@ -151,7 +150,7 @@
kosmos.shadeRepository.setShadeMode(ShadeMode.Split)
kosmos.mediaFilterRepository.addSelectedUserMediaEntry(userMedia)
kosmos.keyguardRepository.setIsDozing(true)
- assertThat(value).isEqualTo(LARGE)
+ assertThat(value).isEqualTo(ClockSize.LARGE)
}
@Test
@@ -219,14 +218,10 @@
}
private suspend fun transitionTo(from: KeyguardState, to: KeyguardState) {
- kosmos.fakeKeyguardTransitionRepository.sendTransitionStep(
- TransitionStep(from, to, 0f, TransitionState.STARTED)
- )
- kosmos.fakeKeyguardTransitionRepository.sendTransitionStep(
- TransitionStep(from, to, 0.5f, TransitionState.RUNNING)
- )
- kosmos.fakeKeyguardTransitionRepository.sendTransitionStep(
- TransitionStep(from, to, 1f, TransitionState.FINISHED)
- )
+ with(kosmos.fakeKeyguardTransitionRepository) {
+ sendTransitionStep(TransitionStep(from, to, 0f, TransitionState.STARTED))
+ sendTransitionStep(TransitionStep(from, to, 0.5f, TransitionState.RUNNING))
+ sendTransitionStep(TransitionStep(from, to, 1f, TransitionState.FINISHED))
+ }
}
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractorTest.kt
index 0ebcf56..2d77f4f 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractorTest.kt
@@ -46,13 +46,17 @@
import com.android.systemui.keyguard.shared.quickaffordance.ActivationState
import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordancePosition
import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordancesMetricsLogger
+import com.android.systemui.kosmos.testDispatcher
+import com.android.systemui.kosmos.testScope
import com.android.systemui.plugins.ActivityStarter
import com.android.systemui.res.R
+import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.settings.UserFileManager
import com.android.systemui.settings.UserTracker
import com.android.systemui.shade.domain.interactor.ShadeInteractor
import com.android.systemui.shared.keyguard.shared.model.KeyguardQuickAffordanceSlots
import com.android.systemui.statusbar.policy.KeyguardStateController
+import com.android.systemui.testKosmos
import com.android.systemui.util.FakeSharedPreferences
import com.android.systemui.util.mockito.mock
import com.android.systemui.util.mockito.whenever
@@ -60,8 +64,6 @@
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.MutableStateFlow
-import kotlinx.coroutines.test.StandardTestDispatcher
-import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
import org.junit.Before
@@ -86,9 +88,11 @@
@Mock private lateinit var shadeInteractor: ShadeInteractor
@Mock private lateinit var logger: KeyguardQuickAffordancesMetricsLogger
+ private val kosmos = testKosmos()
+
private lateinit var underTest: KeyguardQuickAffordanceInteractor
- private lateinit var testScope: TestScope
+ private val testScope = kosmos.testScope
private lateinit var repository: FakeKeyguardRepository
private lateinit var homeControls: FakeKeyguardQuickAffordanceConfig
private lateinit var quickAccessWallet: FakeKeyguardQuickAffordanceConfig
@@ -125,8 +129,6 @@
)
qrCodeScanner =
FakeKeyguardQuickAffordanceConfig(BuiltInKeyguardQuickAffordanceKeys.QR_CODE_SCANNER)
- val testDispatcher = StandardTestDispatcher()
- testScope = TestScope(testDispatcher)
dockManager = DockManagerFake()
biometricSettingsRepository = FakeBiometricSettingsRepository()
@@ -165,7 +167,7 @@
legacySettingSyncer =
KeyguardQuickAffordanceLegacySettingSyncer(
scope = testScope.backgroundScope,
- backgroundDispatcher = testDispatcher,
+ backgroundDispatcher = kosmos.testDispatcher,
secureSettings = FakeSettings(),
selectionsManager = localUserSelectionManager,
),
@@ -195,8 +197,9 @@
devicePolicyManager = devicePolicyManager,
dockManager = dockManager,
biometricSettingsRepository = biometricSettingsRepository,
- backgroundDispatcher = testDispatcher,
+ backgroundDispatcher = kosmos.testDispatcher,
appContext = context,
+ sceneInteractor = { kosmos.sceneInteractor },
)
whenever(shadeInteractor.anyExpansion).thenReturn(MutableStateFlow(0f))
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenContentViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenContentViewModelTest.kt
index 3497183..4907359 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenContentViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenContentViewModelTest.kt
@@ -18,7 +18,6 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
-import com.android.keyguard.KeyguardClockSwitch
import com.android.systemui.SysuiTestCase
import com.android.systemui.biometrics.authController
import com.android.systemui.common.ui.data.repository.fakeConfigurationRepository
@@ -26,6 +25,7 @@
import com.android.systemui.flags.Flags
import com.android.systemui.flags.fakeFeatureFlagsClassic
import com.android.systemui.keyguard.data.repository.fakeKeyguardClockRepository
+import com.android.systemui.keyguard.shared.model.ClockSize
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.testScope
import com.android.systemui.res.R
@@ -62,7 +62,7 @@
fun isUdfpsVisible_withUdfps_true() =
with(kosmos) {
testScope.runTest {
- whenever(kosmos.authController.isUdfpsSupported).thenReturn(true)
+ whenever(authController.isUdfpsSupported).thenReturn(true)
assertThat(underTest.isUdfpsVisible).isTrue()
}
}
@@ -71,26 +71,28 @@
fun isUdfpsVisible_withoutUdfps_false() =
with(kosmos) {
testScope.runTest {
- whenever(kosmos.authController.isUdfpsSupported).thenReturn(false)
+ whenever(authController.isUdfpsSupported).thenReturn(false)
assertThat(underTest.isUdfpsVisible).isFalse()
}
}
@Test
- fun isLargeClockVisible_withLargeClock_true() =
+ fun clockSize_withLargeClock_true() =
with(kosmos) {
testScope.runTest {
- kosmos.fakeKeyguardClockRepository.setClockSize(KeyguardClockSwitch.LARGE)
- assertThat(underTest.isLargeClockVisible).isTrue()
+ val clockSize by collectLastValue(underTest.clockSize)
+ fakeKeyguardClockRepository.setClockSize(ClockSize.LARGE)
+ assertThat(clockSize).isEqualTo(ClockSize.LARGE)
}
}
@Test
- fun isLargeClockVisible_withSmallClock_false() =
+ fun clockSize_withSmallClock_false() =
with(kosmos) {
testScope.runTest {
- kosmos.fakeKeyguardClockRepository.setClockSize(KeyguardClockSwitch.SMALL)
- assertThat(underTest.isLargeClockVisible).isFalse()
+ val clockSize by collectLastValue(underTest.clockSize)
+ fakeKeyguardClockRepository.setClockSize(ClockSize.SMALL)
+ assertThat(clockSize).isEqualTo(ClockSize.SMALL)
}
}
@@ -98,18 +100,21 @@
fun areNotificationsVisible_splitShadeTrue_true() =
with(kosmos) {
testScope.runTest {
+ val areNotificationsVisible by collectLastValue(underTest.areNotificationsVisible)
shadeRepository.setShadeMode(ShadeMode.Split)
- kosmos.fakeKeyguardClockRepository.setClockSize(KeyguardClockSwitch.LARGE)
+ fakeKeyguardClockRepository.setClockSize(ClockSize.LARGE)
- assertThat(collectLastValue(underTest.areNotificationsVisible).invoke()).isTrue()
+ assertThat(areNotificationsVisible).isTrue()
}
}
+
@Test
fun areNotificationsVisible_withSmallClock_true() =
with(kosmos) {
testScope.runTest {
- kosmos.fakeKeyguardClockRepository.setClockSize(KeyguardClockSwitch.SMALL)
- assertThat(collectLastValue(underTest.areNotificationsVisible).invoke()).isTrue()
+ val areNotificationsVisible by collectLastValue(underTest.areNotificationsVisible)
+ fakeKeyguardClockRepository.setClockSize(ClockSize.SMALL)
+ assertThat(areNotificationsVisible).isTrue()
}
}
@@ -117,8 +122,9 @@
fun areNotificationsVisible_withLargeClock_false() =
with(kosmos) {
testScope.runTest {
- kosmos.fakeKeyguardClockRepository.setClockSize(KeyguardClockSwitch.LARGE)
- assertThat(collectLastValue(underTest.areNotificationsVisible).invoke()).isFalse()
+ val areNotificationsVisible by collectLastValue(underTest.areNotificationsVisible)
+ fakeKeyguardClockRepository.setClockSize(ClockSize.LARGE)
+ assertThat(areNotificationsVisible).isFalse()
}
}
@@ -126,9 +132,10 @@
fun shouldUseSplitNotificationShade_withConfigTrue_true() =
with(kosmos) {
testScope.runTest {
+ val shouldUseSplitNotificationShade by
+ collectLastValue(underTest.shouldUseSplitNotificationShade)
shadeRepository.setShadeMode(ShadeMode.Split)
- assertThat(collectLastValue(underTest.shouldUseSplitNotificationShade).invoke())
- .isTrue()
+ assertThat(shouldUseSplitNotificationShade).isTrue()
}
}
@@ -136,9 +143,10 @@
fun shouldUseSplitNotificationShade_withConfigFalse_false() =
with(kosmos) {
testScope.runTest {
+ val shouldUseSplitNotificationShade by
+ collectLastValue(underTest.shouldUseSplitNotificationShade)
shadeRepository.setShadeMode(ShadeMode.Single)
- assertThat(collectLastValue(underTest.shouldUseSplitNotificationShade).invoke())
- .isFalse()
+ assertThat(shouldUseSplitNotificationShade).isFalse()
}
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/SideFpsProgressBarViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/SideFpsProgressBarViewModelTest.kt
index f400cb1..0588b1c 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/SideFpsProgressBarViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/keyguard/ui/viewmodel/SideFpsProgressBarViewModelTest.kt
@@ -59,6 +59,7 @@
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
+import org.mockito.Mockito.spy
import org.mockito.Mockito.verify
@OptIn(ExperimentalCoroutinesApi::class)
@@ -69,6 +70,7 @@
private val kosmos = testKosmos()
private lateinit var underTest: SideFpsProgressBarViewModel
private val testScope = kosmos.testScope
+ private val dozeServiceHost = spy(kosmos.dozeServiceHost)
private lateinit var mTestableLooper: TestableLooper
@Before
@@ -175,7 +177,7 @@
runCurrent()
- verify(kosmos.dozeServiceHost).fireSideFpsAcquisitionStarted()
+ verify(dozeServiceHost).fireSideFpsAcquisitionStarted()
}
private fun createViewModel() =
@@ -184,7 +186,7 @@
kosmos.biometricStatusInteractor,
kosmos.deviceEntryFingerprintAuthInteractor,
kosmos.sideFpsSensorInteractor,
- kosmos.dozeServiceHost,
+ dozeServiceHost,
kosmos.keyguardInteractor,
kosmos.displayStateInteractor,
kosmos.testDispatcher,
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/data/repository/MediaFilterRepositoryTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/data/repository/MediaFilterRepositoryTest.kt
index f685058..e39511f 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/data/repository/MediaFilterRepositoryTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/data/repository/MediaFilterRepositoryTest.kt
@@ -148,37 +148,6 @@
}
@Test
- fun addMediaDataLoadingState() =
- testScope.runTest {
- val mediaDataLoadedStates by collectLastValue(underTest.mediaDataLoadedStates)
- val instanceId = InstanceId.fakeInstanceId(123)
- val mediaLoadedStates = mutableListOf(MediaDataLoadingModel.Loaded(instanceId))
-
- underTest.addMediaDataLoadingState(MediaDataLoadingModel.Loaded(instanceId))
-
- assertThat(mediaDataLoadedStates).isEqualTo(mediaLoadedStates)
-
- mediaLoadedStates.remove(MediaDataLoadingModel.Loaded(instanceId))
-
- underTest.addMediaDataLoadingState(MediaDataLoadingModel.Removed(instanceId))
-
- assertThat(mediaDataLoadedStates).isEqualTo(mediaLoadedStates)
- }
-
- @Test
- fun setRecommendationsLoadingState() =
- testScope.runTest {
- val recommendationsLoadingState by
- collectLastValue(underTest.recommendationsLoadingState)
- val recommendationsLoadingModel =
- SmartspaceMediaLoadingModel.Loaded(KEY_MEDIA_SMARTSPACE)
-
- underTest.setRecommendationsLoadingState(recommendationsLoadingModel)
-
- assertThat(recommendationsLoadingState).isEqualTo(recommendationsLoadingModel)
- }
-
- @Test
fun addMediaControlPlayingThenRemote() =
testScope.runTest {
val sortedMedia by collectLastValue(underTest.sortedMedia)
@@ -195,9 +164,10 @@
assertThat(sortedMedia?.size).isEqualTo(2)
assertThat(sortedMedia?.values)
.containsExactly(
- MediaCommonModel.MediaControl(playingInstanceId),
- MediaCommonModel.MediaControl(remoteInstanceId)
+ MediaCommonModel.MediaControl(MediaDataLoadingModel.Loaded(playingInstanceId)),
+ MediaCommonModel.MediaControl(MediaDataLoadingModel.Loaded(remoteInstanceId))
)
+ .inOrder()
}
@Test
@@ -217,8 +187,8 @@
assertThat(sortedMedia?.size).isEqualTo(2)
assertThat(sortedMedia?.values)
.containsExactly(
- MediaCommonModel.MediaControl(playingInstanceId1),
- MediaCommonModel.MediaControl(playingInstanceId2)
+ MediaCommonModel.MediaControl(MediaDataLoadingModel.Loaded(playingInstanceId1)),
+ MediaCommonModel.MediaControl(MediaDataLoadingModel.Loaded(playingInstanceId2))
)
.inOrder()
@@ -233,8 +203,8 @@
assertThat(sortedMedia?.size).isEqualTo(2)
assertThat(sortedMedia?.values)
.containsExactly(
- MediaCommonModel.MediaControl(playingInstanceId2),
- MediaCommonModel.MediaControl(playingInstanceId1)
+ MediaCommonModel.MediaControl(MediaDataLoadingModel.Loaded(playingInstanceId2)),
+ MediaCommonModel.MediaControl(MediaDataLoadingModel.Loaded(playingInstanceId1))
)
.inOrder()
}
@@ -285,12 +255,14 @@
assertThat(sortedMedia?.size).isEqualTo(6)
assertThat(sortedMedia?.values)
.containsExactly(
- MediaCommonModel.MediaControl(instanceId1),
- MediaCommonModel.MediaControl(instanceId2),
- MediaCommonModel.MediaRecommendations(KEY_MEDIA_SMARTSPACE),
- MediaCommonModel.MediaControl(instanceId4),
- MediaCommonModel.MediaControl(instanceId3),
- MediaCommonModel.MediaControl(instanceId5),
+ MediaCommonModel.MediaControl(MediaDataLoadingModel.Loaded(instanceId1)),
+ MediaCommonModel.MediaControl(MediaDataLoadingModel.Loaded(instanceId2)),
+ MediaCommonModel.MediaRecommendations(
+ SmartspaceMediaLoadingModel.Loaded(KEY_MEDIA_SMARTSPACE, true)
+ ),
+ MediaCommonModel.MediaControl(MediaDataLoadingModel.Loaded(instanceId4)),
+ MediaCommonModel.MediaControl(MediaDataLoadingModel.Loaded(instanceId3)),
+ MediaCommonModel.MediaControl(MediaDataLoadingModel.Loaded(instanceId5)),
)
.inOrder()
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/domain/interactor/MediaCarouselInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/domain/interactor/MediaCarouselInteractorTest.kt
index c15776e..a2991fd 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/domain/interactor/MediaCarouselInteractorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/domain/interactor/MediaCarouselInteractorTest.kt
@@ -20,7 +20,6 @@
import android.graphics.drawable.Icon
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
-import com.android.internal.logging.InstanceId
import com.android.systemui.SysuiTestCase
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.flags.Flags
@@ -29,18 +28,14 @@
import com.android.systemui.media.controls.MediaTestHelper
import com.android.systemui.media.controls.data.repository.MediaFilterRepository
import com.android.systemui.media.controls.data.repository.mediaFilterRepository
-import com.android.systemui.media.controls.domain.pipeline.MediaDataFilterImpl
import com.android.systemui.media.controls.domain.pipeline.interactor.MediaCarouselInteractor
import com.android.systemui.media.controls.domain.pipeline.interactor.mediaCarouselInteractor
-import com.android.systemui.media.controls.domain.pipeline.mediaDataFilter
import com.android.systemui.media.controls.shared.model.MediaCommonModel
import com.android.systemui.media.controls.shared.model.MediaData
import com.android.systemui.media.controls.shared.model.MediaDataLoadingModel
import com.android.systemui.media.controls.shared.model.SmartspaceMediaData
import com.android.systemui.media.controls.shared.model.SmartspaceMediaLoadingModel
-import com.android.systemui.statusbar.notificationLockscreenUserManager
import com.android.systemui.testKosmos
-import com.android.systemui.util.mockito.whenever
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.test.runTest
import org.junit.Before
@@ -54,8 +49,6 @@
private val kosmos = testKosmos()
private val testScope = kosmos.testScope
- private val mediaDataFilter: MediaDataFilterImpl = kosmos.mediaDataFilter
- private val notificationLockscreenUserManager = kosmos.notificationLockscreenUserManager
private val mediaFilterRepository: MediaFilterRepository = kosmos.mediaFilterRepository
private val underTest: MediaCarouselInteractor = kosmos.mediaCarouselInteractor
@@ -95,7 +88,6 @@
collectLastValue(underTest.hasActiveMediaOrRecommendation)
val hasActiveMedia by collectLastValue(underTest.hasActiveMedia)
val hasAnyMedia by collectLastValue(underTest.hasAnyMedia)
- val sortedMedia by collectLastValue(underTest.sortedMedia)
val userMedia = MediaData(active = false)
val instanceId = userMedia.instanceId
@@ -106,7 +98,6 @@
assertThat(hasActiveMediaOrRecommendation).isFalse()
assertThat(hasActiveMedia).isFalse()
assertThat(hasAnyMedia).isTrue()
- assertThat(sortedMedia).containsExactly(MediaCommonModel.MediaControl(instanceId))
assertThat(mediaFilterRepository.removeSelectedUserMediaEntry(instanceId, userMedia))
.isTrue()
@@ -117,7 +108,6 @@
assertThat(hasActiveMediaOrRecommendation).isFalse()
assertThat(hasActiveMedia).isFalse()
assertThat(hasAnyMedia).isFalse()
- assertThat(sortedMedia).isEmpty()
}
@Test
@@ -138,28 +128,26 @@
recommendations = MediaTestHelper.getValidRecommendationList(icon),
)
val userMedia = MediaData(active = false)
+ val recsLoadingModel = SmartspaceMediaLoadingModel.Loaded(KEY_MEDIA_SMARTSPACE, true)
+ val mediaLoadingModel = MediaDataLoadingModel.Loaded(userMedia.instanceId)
mediaFilterRepository.setRecommendation(userMediaRecommendation)
- mediaFilterRepository.setRecommendationsLoadingState(
- SmartspaceMediaLoadingModel.Loaded(KEY_MEDIA_SMARTSPACE, true)
- )
+ mediaFilterRepository.setRecommendationsLoadingState(recsLoadingModel)
assertThat(hasActiveMediaOrRecommendation).isTrue()
assertThat(hasAnyMediaOrRecommendation).isTrue()
assertThat(sortedMedia)
- .containsExactly(MediaCommonModel.MediaRecommendations(KEY_MEDIA_SMARTSPACE))
+ .containsExactly(MediaCommonModel.MediaRecommendations(recsLoadingModel))
mediaFilterRepository.addSelectedUserMediaEntry(userMedia)
- mediaFilterRepository.addMediaDataLoadingState(
- MediaDataLoadingModel.Loaded(userMedia.instanceId)
- )
+ mediaFilterRepository.addMediaDataLoadingState(mediaLoadingModel)
assertThat(hasActiveMediaOrRecommendation).isTrue()
assertThat(hasAnyMediaOrRecommendation).isTrue()
assertThat(sortedMedia)
.containsExactly(
- MediaCommonModel.MediaRecommendations(KEY_MEDIA_SMARTSPACE),
- MediaCommonModel.MediaControl(userMedia.instanceId)
+ MediaCommonModel.MediaRecommendations(recsLoadingModel),
+ MediaCommonModel.MediaControl(mediaLoadingModel, true)
)
.inOrder()
}
@@ -238,80 +226,7 @@
fun hasActiveMediaOrRecommendation_nothingSet_returnsFalse() =
testScope.runTest { assertThat(underTest.hasActiveMediaOrRecommendation.value).isFalse() }
- @Test
- fun onMediaDataUpdated_updatesLoadingState() =
- testScope.runTest {
- whenever(notificationLockscreenUserManager.isCurrentProfile(USER_ID)).thenReturn(true)
- whenever(notificationLockscreenUserManager.isProfileAvailable(USER_ID)).thenReturn(true)
- val mediaDataLoadedStates by collectLastValue(underTest.mediaDataLoadedStates)
- val instanceId = InstanceId.fakeInstanceId(123)
- val mediaLoadedStates: MutableList<MediaDataLoadingModel> = mutableListOf()
-
- mediaLoadedStates.add(MediaDataLoadingModel.Loaded(instanceId))
- mediaDataFilter.onMediaDataLoaded(
- KEY,
- KEY,
- MediaData(userId = USER_ID, instanceId = instanceId)
- )
-
- assertThat(mediaDataLoadedStates).isEqualTo(mediaLoadedStates)
-
- val newInstanceId = InstanceId.fakeInstanceId(321)
-
- mediaLoadedStates.add(MediaDataLoadingModel.Loaded(newInstanceId))
- mediaDataFilter.onMediaDataLoaded(
- KEY_2,
- KEY_2,
- MediaData(userId = USER_ID, instanceId = newInstanceId)
- )
-
- assertThat(mediaDataLoadedStates).isEqualTo(mediaLoadedStates)
-
- mediaLoadedStates.remove(MediaDataLoadingModel.Loaded(instanceId))
-
- mediaDataFilter.onMediaDataRemoved(KEY)
-
- assertThat(mediaDataLoadedStates).isEqualTo(mediaLoadedStates)
-
- mediaLoadedStates.remove(MediaDataLoadingModel.Loaded(newInstanceId))
-
- mediaDataFilter.onMediaDataRemoved(KEY_2)
-
- assertThat(mediaDataLoadedStates).isEqualTo(mediaLoadedStates)
- }
-
- @Test
- fun onMediaRecommendationsUpdated_updatesLoadingState() =
- testScope.runTest {
- whenever(notificationLockscreenUserManager.isCurrentProfile(USER_ID)).thenReturn(true)
- whenever(notificationLockscreenUserManager.isProfileAvailable(USER_ID)).thenReturn(true)
- val recommendationsLoadingState by
- collectLastValue(underTest.recommendationsLoadingState)
- val icon = Icon.createWithResource(context, R.drawable.ic_media_play)
- val mediaRecommendations =
- SmartspaceMediaData(
- targetId = KEY_MEDIA_SMARTSPACE,
- isActive = true,
- recommendations = MediaTestHelper.getValidRecommendationList(icon),
- )
- var recommendationsLoadingModel: SmartspaceMediaLoadingModel =
- SmartspaceMediaLoadingModel.Loaded(KEY_MEDIA_SMARTSPACE, isPrioritized = true)
-
- mediaDataFilter.onSmartspaceMediaDataLoaded(KEY_MEDIA_SMARTSPACE, mediaRecommendations)
-
- assertThat(recommendationsLoadingState).isEqualTo(recommendationsLoadingModel)
-
- recommendationsLoadingModel = SmartspaceMediaLoadingModel.Removed(KEY_MEDIA_SMARTSPACE)
-
- mediaDataFilter.onSmartspaceMediaDataRemoved(KEY_MEDIA_SMARTSPACE)
-
- assertThat(recommendationsLoadingState).isEqualTo(recommendationsLoadingModel)
- }
-
companion object {
- private const val KEY = "key"
- private const val KEY_2 = "key2"
- private const val USER_ID = 0
private const val KEY_MEDIA_SMARTSPACE = "MEDIA_SMARTSPACE_ID"
}
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/ui/util/MediaDiffUtilTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/ui/util/MediaDiffUtilTest.kt
new file mode 100644
index 0000000..71685a4
--- /dev/null
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/ui/util/MediaDiffUtilTest.kt
@@ -0,0 +1,226 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.media.controls.ui.util
+
+import androidx.recyclerview.widget.DiffUtil
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
+import com.android.internal.logging.InstanceId
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.media.controls.ui.viewmodel.MediaCommonViewModel
+import com.android.systemui.media.controls.ui.viewmodel.mediaControlViewModel
+import com.android.systemui.media.controls.ui.viewmodel.mediaRecommendationsViewModel
+import com.android.systemui.testKosmos
+import com.google.common.truth.Truth.assertThat
+import org.junit.Assert.fail
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@SmallTest
+@RunWith(AndroidJUnit4::class)
+class MediaDiffUtilTest : SysuiTestCase() {
+
+ private val kosmos = testKosmos()
+
+ @Test
+ fun newMediaControlAdded() {
+ val mediaControl = createMediaControl(InstanceId.fakeInstanceId(123), true)
+ val oldList = listOf<MediaCommonViewModel>()
+ val newList = listOf(mediaControl)
+ val mediaLoadedCallback = MediaViewModelCallback(oldList, newList)
+ val mediaLoadedListUpdateCallback =
+ MediaViewModelListUpdateCallback(
+ oldList,
+ newList,
+ { commonViewModel, _ -> assertThat(commonViewModel).isEqualTo(mediaControl) },
+ { fail("Unexpected to update $it") },
+ { fail("Unexpected to remove $it") },
+ { commonViewModel, _, _ -> fail("Unexpected to move $commonViewModel ") },
+ )
+
+ DiffUtil.calculateDiff(mediaLoadedCallback).dispatchUpdatesTo(mediaLoadedListUpdateCallback)
+ }
+
+ @Test
+ fun newMediaRecommendationsAdded() {
+ val mediaRecs = createMediaRecommendations(KEY_MEDIA_SMARTSPACE, true)
+ val oldList = listOf<MediaCommonViewModel>()
+ val newList = listOf(mediaRecs)
+ val mediaLoadedCallback = MediaViewModelCallback(oldList, newList)
+ val mediaLoadedListUpdateCallback =
+ MediaViewModelListUpdateCallback(
+ oldList,
+ newList,
+ { commonViewModel, _ -> assertThat(commonViewModel).isEqualTo(mediaRecs) },
+ { fail("Unexpected to update $it") },
+ { fail("Unexpected to remove $it") },
+ { commonViewModel, _, _ -> fail("Unexpected to move $commonViewModel ") },
+ )
+
+ DiffUtil.calculateDiff(mediaLoadedCallback).dispatchUpdatesTo(mediaLoadedListUpdateCallback)
+ }
+
+ @Test
+ fun updateMediaControl_contentChanged() {
+ val mediaControl = createMediaControl(InstanceId.fakeInstanceId(123), true)
+ val oldList = listOf(mediaControl)
+ val newList = listOf(mediaControl.copy(immediatelyUpdateUi = false))
+ val mediaLoadedCallback = MediaViewModelCallback(oldList, newList)
+ val mediaLoadedListUpdateCallback =
+ MediaViewModelListUpdateCallback(
+ oldList,
+ newList,
+ { commonViewModel, _ -> fail("Unexpected to add $commonViewModel") },
+ { commonViewModel -> assertThat(commonViewModel).isNotEqualTo(mediaControl) },
+ { fail("Unexpected to remove $it") },
+ { commonViewModel, _, _ -> fail("Unexpected to move $commonViewModel ") },
+ )
+
+ DiffUtil.calculateDiff(mediaLoadedCallback).dispatchUpdatesTo(mediaLoadedListUpdateCallback)
+ }
+
+ @Test
+ fun updateMediaRecommendations_contentChanged() {
+ val mediaRecs = createMediaRecommendations(KEY_MEDIA_SMARTSPACE, true)
+ val oldList = listOf(mediaRecs)
+ val newList = listOf(mediaRecs.copy(key = KEY_MEDIA_SMARTSPACE_2))
+ val mediaLoadedCallback = MediaViewModelCallback(oldList, newList)
+ val mediaLoadedListUpdateCallback =
+ MediaViewModelListUpdateCallback(
+ oldList,
+ newList,
+ { commonViewModel, _ -> fail("Unexpected to add $commonViewModel") },
+ { commonViewModel -> assertThat(commonViewModel).isNotEqualTo(mediaRecs) },
+ { fail("Unexpected to remove $it") },
+ { commonViewModel, _, _ -> fail("Unexpected to move $commonViewModel ") },
+ )
+
+ DiffUtil.calculateDiff(mediaLoadedCallback).dispatchUpdatesTo(mediaLoadedListUpdateCallback)
+ }
+
+ @Test
+ fun mediaControlMoved() {
+ val mediaControl1 = createMediaControl(InstanceId.fakeInstanceId(123), true)
+ val mediaControl2 = createMediaControl(InstanceId.fakeInstanceId(456), false)
+ val oldList = listOf(mediaControl1, mediaControl2)
+ val newList = listOf(mediaControl2, mediaControl1)
+ val mediaLoadedCallback = MediaViewModelCallback(oldList, newList)
+ val mediaLoadedListUpdateCallback =
+ MediaViewModelListUpdateCallback(
+ oldList,
+ newList,
+ { commonViewModel, _ -> fail("Unexpected to add $commonViewModel") },
+ { fail("Unexpected to update $it") },
+ { fail("Unexpected to remove $it") },
+ { commonViewModel, _, _ -> assertThat(commonViewModel).isEqualTo(mediaControl1) },
+ )
+
+ DiffUtil.calculateDiff(mediaLoadedCallback).dispatchUpdatesTo(mediaLoadedListUpdateCallback)
+ }
+
+ @Test
+ fun mediaRecommendationsMoved() {
+ val mediaControl1 = createMediaControl(InstanceId.fakeInstanceId(123), true)
+ val mediaControl2 = createMediaControl(InstanceId.fakeInstanceId(456), false)
+ val mediaRecs = createMediaRecommendations(KEY_MEDIA_SMARTSPACE, true)
+ val oldList = listOf(mediaRecs, mediaControl1, mediaControl2)
+ val newList = listOf(mediaControl1, mediaControl2, mediaRecs)
+ val mediaLoadedCallback = MediaViewModelCallback(oldList, newList)
+ val mediaLoadedListUpdateCallback =
+ MediaViewModelListUpdateCallback(
+ oldList,
+ newList,
+ { commonViewModel, _ -> fail("Unexpected to add $commonViewModel") },
+ { fail("Unexpected to update $it") },
+ { fail("Unexpected to remove $it") },
+ { commonViewModel, _, _ -> assertThat(commonViewModel).isEqualTo(mediaRecs) },
+ )
+
+ DiffUtil.calculateDiff(mediaLoadedCallback).dispatchUpdatesTo(mediaLoadedListUpdateCallback)
+ }
+
+ @Test
+ fun mediaControlRemoved() {
+ val mediaControl = createMediaControl(InstanceId.fakeInstanceId(123), true)
+ val oldList = listOf(mediaControl)
+ val newList = listOf<MediaCommonViewModel>()
+ val mediaLoadedCallback = MediaViewModelCallback(oldList, newList)
+ val mediaLoadedListUpdateCallback =
+ MediaViewModelListUpdateCallback(
+ oldList,
+ newList,
+ { commonViewModel, _ -> fail("Unexpected to add $commonViewModel") },
+ { fail("Unexpected to update $it") },
+ { commonViewModel -> assertThat(commonViewModel).isEqualTo(mediaControl) },
+ { commonViewModel, _, _ -> fail("Unexpected to move $commonViewModel ") },
+ )
+
+ DiffUtil.calculateDiff(mediaLoadedCallback).dispatchUpdatesTo(mediaLoadedListUpdateCallback)
+ }
+
+ @Test
+ fun mediaRecommendationsRemoved() {
+ val mediaRecs = createMediaRecommendations(KEY_MEDIA_SMARTSPACE_2, false)
+ val oldList = listOf(mediaRecs)
+ val newList = listOf<MediaCommonViewModel>()
+ val mediaLoadedCallback = MediaViewModelCallback(oldList, newList)
+ val mediaLoadedListUpdateCallback =
+ MediaViewModelListUpdateCallback(
+ oldList,
+ newList,
+ { commonViewModel, _ -> fail("Unexpected to add $commonViewModel") },
+ { fail("Unexpected to update $it") },
+ { commonViewModel -> assertThat(commonViewModel).isEqualTo(mediaRecs) },
+ { commonViewModel, _, _ -> fail("Unexpected to move $commonViewModel ") },
+ )
+
+ DiffUtil.calculateDiff(mediaLoadedCallback).dispatchUpdatesTo(mediaLoadedListUpdateCallback)
+ }
+
+ private fun createMediaControl(
+ instanceId: InstanceId,
+ immediatelyUpdateUi: Boolean,
+ ): MediaCommonViewModel.MediaControl {
+ return MediaCommonViewModel.MediaControl(
+ instanceId = instanceId,
+ immediatelyUpdateUi = immediatelyUpdateUi,
+ controlViewModel = kosmos.mediaControlViewModel,
+ onAdded = {},
+ onRemoved = {},
+ onUpdated = {}
+ )
+ }
+
+ private fun createMediaRecommendations(
+ key: String,
+ loadingEnabled: Boolean,
+ ): MediaCommonViewModel.MediaRecommendations {
+ return MediaCommonViewModel.MediaRecommendations(
+ key = key,
+ loadingEnabled = loadingEnabled,
+ recsViewModel = kosmos.mediaRecommendationsViewModel,
+ onAdded = {},
+ onRemoved = {},
+ onUpdated = {}
+ )
+ }
+
+ companion object {
+ private const val KEY_MEDIA_SMARTSPACE = "MEDIA_SMARTSPACE_ID"
+ private const val KEY_MEDIA_SMARTSPACE_2 = "MEDIA_SMARTSPACE_ID_2"
+ }
+}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/ui/viewmodel/MediaCarouselViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/ui/viewmodel/MediaCarouselViewModelTest.kt
new file mode 100644
index 0000000..4b5fecd
--- /dev/null
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/media/controls/ui/viewmodel/MediaCarouselViewModelTest.kt
@@ -0,0 +1,147 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.media.controls.ui.viewmodel
+
+import android.R
+import android.content.packageManager
+import android.content.pm.ApplicationInfo
+import android.graphics.drawable.Icon
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
+import com.android.internal.logging.InstanceId
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.coroutines.collectLastValue
+import com.android.systemui.flags.Flags
+import com.android.systemui.flags.fakeFeatureFlagsClassic
+import com.android.systemui.kosmos.testScope
+import com.android.systemui.media.controls.MediaTestHelper
+import com.android.systemui.media.controls.domain.pipeline.MediaDataFilterImpl
+import com.android.systemui.media.controls.domain.pipeline.interactor.mediaCarouselInteractor
+import com.android.systemui.media.controls.domain.pipeline.mediaDataFilter
+import com.android.systemui.media.controls.shared.model.MediaData
+import com.android.systemui.media.controls.shared.model.SmartspaceMediaData
+import com.android.systemui.statusbar.notificationLockscreenUserManager
+import com.android.systemui.testKosmos
+import com.android.systemui.util.mockito.any
+import com.android.systemui.util.mockito.eq
+import com.android.systemui.util.mockito.whenever
+import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.test.runTest
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.ArgumentMatchers
+import org.mockito.Mockito
+
+@SmallTest
+@RunWith(AndroidJUnit4::class)
+class MediaCarouselViewModelTest : SysuiTestCase() {
+
+ private val kosmos = testKosmos()
+ private val testScope = kosmos.testScope
+
+ private val mediaDataFilter: MediaDataFilterImpl = kosmos.mediaDataFilter
+ private val notificationLockscreenUserManager = kosmos.notificationLockscreenUserManager
+ private val packageManager = kosmos.packageManager
+ private val icon = Icon.createWithResource(context, R.drawable.ic_media_play)
+ private val drawable = context.getDrawable(R.drawable.ic_media_play)
+ private val smartspaceMediaData: SmartspaceMediaData =
+ SmartspaceMediaData(
+ targetId = KEY_MEDIA_SMARTSPACE,
+ isActive = true,
+ packageName = PACKAGE_NAME,
+ recommendations = MediaTestHelper.getValidRecommendationList(icon),
+ )
+
+ private val underTest: MediaCarouselViewModel = kosmos.mediaCarouselViewModel
+
+ @Before
+ fun setUp() {
+ kosmos.mediaCarouselInteractor.start()
+
+ whenever(packageManager.getApplicationIcon(Mockito.anyString())).thenReturn(drawable)
+ whenever(packageManager.getApplicationIcon(any(ApplicationInfo::class.java)))
+ .thenReturn(drawable)
+ whenever(packageManager.getApplicationInfo(eq(PACKAGE_NAME), ArgumentMatchers.anyInt()))
+ .thenReturn(ApplicationInfo())
+ whenever(packageManager.getApplicationLabel(any())).thenReturn(PACKAGE_NAME)
+
+ context.setMockPackageManager(packageManager)
+ }
+
+ @Test
+ fun loadMediaControls_mediaItemsAreUpdated() =
+ testScope.runTest {
+ val sortedMedia by collectLastValue(underTest.mediaItems)
+ val instanceId1 = InstanceId.fakeInstanceId(123)
+ val instanceId2 = InstanceId.fakeInstanceId(456)
+
+ loadMediaControl(KEY, instanceId1)
+ loadMediaControl(KEY_2, instanceId2)
+
+ val firstMediaControl = sortedMedia?.get(0) as MediaCommonViewModel.MediaControl
+ val secondMediaControl = sortedMedia?.get(1) as MediaCommonViewModel.MediaControl
+ assertThat(firstMediaControl.instanceId).isEqualTo(instanceId2)
+ assertThat(secondMediaControl.instanceId).isEqualTo(instanceId1)
+ }
+
+ @Test
+ fun loadMediaControlsAndRecommendations_mediaItemsAreUpdated() =
+ testScope.runTest {
+ val sortedMedia by collectLastValue(underTest.mediaItems)
+ kosmos.fakeFeatureFlagsClassic.set(Flags.MEDIA_RETAIN_RECOMMENDATIONS, false)
+ val instanceId1 = InstanceId.fakeInstanceId(123)
+ val instanceId2 = InstanceId.fakeInstanceId(456)
+
+ loadMediaControl(KEY, instanceId1)
+ loadMediaControl(KEY_2, instanceId2)
+ loadMediaRecommendations()
+
+ val firstMediaControl = sortedMedia?.get(0) as MediaCommonViewModel.MediaControl
+ val secondMediaControl = sortedMedia?.get(1) as MediaCommonViewModel.MediaControl
+ val recsCard = sortedMedia?.get(2) as MediaCommonViewModel.MediaRecommendations
+ assertThat(firstMediaControl.instanceId).isEqualTo(instanceId2)
+ assertThat(secondMediaControl.instanceId).isEqualTo(instanceId1)
+ assertThat(recsCard.key).isEqualTo(KEY_MEDIA_SMARTSPACE)
+ }
+
+ private fun loadMediaControl(key: String, instanceId: InstanceId) {
+ whenever(notificationLockscreenUserManager.isCurrentProfile(USER_ID)).thenReturn(true)
+ whenever(notificationLockscreenUserManager.isProfileAvailable(USER_ID)).thenReturn(true)
+ val mediaData =
+ MediaData(
+ userId = USER_ID,
+ packageName = PACKAGE_NAME,
+ notificationKey = key,
+ instanceId = instanceId
+ )
+
+ mediaDataFilter.onMediaDataLoaded(key, key, mediaData)
+ }
+
+ private fun loadMediaRecommendations(key: String = KEY_MEDIA_SMARTSPACE) {
+ mediaDataFilter.onSmartspaceMediaDataLoaded(key, smartspaceMediaData)
+ }
+
+ companion object {
+ private const val USER_ID = 0
+ private const val KEY = "key"
+ private const val KEY_2 = "key2"
+ private const val PACKAGE_NAME = "com.example.app"
+ private const val KEY_MEDIA_SMARTSPACE = "MEDIA_SMARTSPACE_ID"
+ }
+}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModelTest.kt
index 3727c11..719828c 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModelTest.kt
@@ -19,13 +19,20 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.compose.animation.scene.Back
+import com.android.compose.animation.scene.Edge
import com.android.compose.animation.scene.Swipe
import com.android.compose.animation.scene.SwipeDirection
import com.android.compose.animation.scene.UserActionResult
import com.android.systemui.SysuiTestCase
+import com.android.systemui.authentication.data.repository.fakeAuthenticationRepository
+import com.android.systemui.authentication.shared.model.AuthenticationMethodModel
import com.android.systemui.coroutines.collectLastValue
+import com.android.systemui.deviceentry.data.repository.fakeDeviceEntryRepository
+import com.android.systemui.deviceentry.domain.interactor.deviceEntryInteractor
import com.android.systemui.flags.Flags
import com.android.systemui.flags.fakeFeatureFlagsClassic
+import com.android.systemui.keyguard.data.repository.fakeDeviceEntryFingerprintAuthRepository
+import com.android.systemui.keyguard.shared.model.SuccessFingerprintAuthenticationStatus
import com.android.systemui.kosmos.testScope
import com.android.systemui.qs.FooterActionsController
import com.android.systemui.qs.footer.ui.viewmodel.FooterActionsViewModel
@@ -41,6 +48,7 @@
import com.android.systemui.util.mockito.mock
import com.android.systemui.util.mockito.whenever
import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.runTest
import org.junit.Before
import org.junit.Test
@@ -66,12 +74,15 @@
private lateinit var underTest: QuickSettingsSceneViewModel
+ @OptIn(ExperimentalCoroutinesApi::class)
@Before
fun setUp() {
kosmos.fakeFeatureFlagsClassic.set(Flags.NEW_NETWORK_SLICE_UI, false)
underTest =
QuickSettingsSceneViewModel(
+ applicationScope = testScope.backgroundScope,
+ deviceEntryInteractor = kosmos.deviceEntryInteractor,
brightnessMirrorViewModel = kosmos.brightnessMirrorViewModel,
shadeHeaderViewModel = kosmos.shadeHeaderViewModel,
qsSceneAdapter = qsFlexiglassAdapter,
@@ -83,17 +94,27 @@
}
@Test
- fun destinations_whenNotCustomizing() =
+ fun destinations_whenNotCustomizing_unlocked() =
testScope.runTest {
overrideResource(R.bool.config_use_split_notification_shade, false)
val destinations by collectLastValue(underTest.destinationScenes)
qsFlexiglassAdapter.setCustomizing(false)
+ kosmos.fakeAuthenticationRepository.setAuthenticationMethod(
+ AuthenticationMethodModel.Pin
+ )
+ kosmos.fakeDeviceEntryFingerprintAuthRepository.setAuthenticationStatus(
+ SuccessFingerprintAuthenticationStatus(0, true)
+ )
assertThat(destinations)
.isEqualTo(
mapOf(
Back to UserActionResult(Scenes.Shade),
Swipe(SwipeDirection.Up) to UserActionResult(Scenes.Shade),
+ Swipe(
+ fromSource = Edge.Bottom,
+ direction = SwipeDirection.Up,
+ ) to UserActionResult(Scenes.Gone)
)
)
}
@@ -106,17 +127,44 @@
val destinations by collectLastValue(underTest.destinationScenes)
val currentScene by collectLastValue(sceneInteractor.currentScene)
- val previousScene by collectLastValue(sceneInteractor.previousScene)
+ val previousScene by collectLastValue(sceneInteractor.previousScene())
sceneInteractor.changeScene(Scenes.Lockscreen, "reason")
sceneInteractor.changeScene(Scenes.QuickSettings, "reason")
assertThat(currentScene).isEqualTo(Scenes.QuickSettings)
assertThat(previousScene).isEqualTo(Scenes.Lockscreen)
-
assertThat(destinations)
.isEqualTo(
mapOf(
Back to UserActionResult(Scenes.Lockscreen),
Swipe(SwipeDirection.Up) to UserActionResult(Scenes.Lockscreen),
+ Swipe(
+ fromSource = Edge.Bottom,
+ direction = SwipeDirection.Up,
+ ) to UserActionResult(Scenes.Lockscreen)
+ )
+ )
+ }
+
+ @Test
+ fun destinations_whenNotCustomizing_authMethodSwipe_lockscreenNotDismissed() =
+ testScope.runTest {
+ overrideResource(R.bool.config_use_split_notification_shade, false)
+ val destinations by collectLastValue(underTest.destinationScenes)
+ qsFlexiglassAdapter.setCustomizing(false)
+ kosmos.fakeDeviceEntryRepository.setLockscreenEnabled(true)
+ kosmos.fakeAuthenticationRepository.setAuthenticationMethod(
+ AuthenticationMethodModel.None
+ )
+
+ assertThat(destinations)
+ .isEqualTo(
+ mapOf(
+ Back to UserActionResult(Scenes.Shade),
+ Swipe(SwipeDirection.Up) to UserActionResult(Scenes.Shade),
+ Swipe(
+ fromSource = Edge.Bottom,
+ direction = SwipeDirection.Up,
+ ) to UserActionResult(Scenes.Lockscreen)
)
)
}
@@ -132,17 +180,27 @@
}
@Test
- fun destinations_whenNotCustomizing_inSplitShade() =
+ fun destinations_whenNotCustomizing_inSplitShade_unlocked() =
testScope.runTest {
overrideResource(R.bool.config_use_split_notification_shade, true)
val destinations by collectLastValue(underTest.destinationScenes)
qsFlexiglassAdapter.setCustomizing(false)
+ kosmos.fakeAuthenticationRepository.setAuthenticationMethod(
+ AuthenticationMethodModel.Pin
+ )
+ kosmos.fakeDeviceEntryFingerprintAuthRepository.setAuthenticationStatus(
+ SuccessFingerprintAuthenticationStatus(0, true)
+ )
assertThat(destinations)
.isEqualTo(
mapOf(
Back to UserActionResult(Scenes.Shade),
Swipe(SwipeDirection.Up) to UserActionResult(Scenes.Shade),
+ Swipe(
+ fromSource = Edge.Bottom,
+ direction = SwipeDirection.Up,
+ ) to UserActionResult(Scenes.Gone),
)
)
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/SceneFrameworkIntegrationTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/SceneFrameworkIntegrationTest.kt
index 65fd101..6643bcb 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/SceneFrameworkIntegrationTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/SceneFrameworkIntegrationTest.kt
@@ -36,53 +36,40 @@
import com.android.systemui.authentication.shared.model.AuthenticationMethodModel
import com.android.systemui.bouncer.domain.interactor.BouncerActionButtonInteractor
import com.android.systemui.bouncer.domain.interactor.bouncerActionButtonInteractor
-import com.android.systemui.bouncer.domain.interactor.bouncerInteractor
-import com.android.systemui.bouncer.domain.interactor.simBouncerInteractor
import com.android.systemui.bouncer.ui.viewmodel.BouncerViewModel
import com.android.systemui.bouncer.ui.viewmodel.PasswordBouncerViewModel
import com.android.systemui.bouncer.ui.viewmodel.PinBouncerViewModel
import com.android.systemui.bouncer.ui.viewmodel.bouncerViewModel
import com.android.systemui.classifier.domain.interactor.falsingInteractor
-import com.android.systemui.classifier.falsingCollector
-import com.android.systemui.classifier.falsingManager
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.deviceentry.domain.interactor.deviceUnlockedInteractor
import com.android.systemui.flags.EnableSceneContainer
import com.android.systemui.flags.Flags
import com.android.systemui.flags.fakeFeatureFlagsClassic
-import com.android.systemui.keyguard.domain.interactor.keyguardInteractor
import com.android.systemui.keyguard.ui.viewmodel.KeyguardLongPressViewModel
import com.android.systemui.keyguard.ui.viewmodel.LockscreenSceneViewModel
import com.android.systemui.kosmos.testScope
import com.android.systemui.media.controls.domain.pipeline.MediaDataManager
-import com.android.systemui.model.SysUiState
-import com.android.systemui.model.sceneContainerPlugin
import com.android.systemui.power.domain.interactor.PowerInteractor.Companion.setAsleepForTest
import com.android.systemui.power.domain.interactor.PowerInteractor.Companion.setAwakeForTest
import com.android.systemui.power.domain.interactor.powerInteractor
import com.android.systemui.qs.footerActionsController
import com.android.systemui.qs.footerActionsViewModelFactory
import com.android.systemui.qs.ui.adapter.FakeQSSceneAdapter
-import com.android.systemui.scene.domain.interactor.sceneContainerOcclusionInteractor
+import com.android.systemui.scene.domain.interactor.sceneContainerStartable
import com.android.systemui.scene.domain.interactor.sceneInteractor
-import com.android.systemui.scene.domain.startable.SceneContainerStartable
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.scene.shared.model.fakeSceneDataSource
import com.android.systemui.scene.ui.viewmodel.SceneContainerViewModel
-import com.android.systemui.settings.FakeDisplayTracker
import com.android.systemui.settings.brightness.ui.viewmodel.brightnessMirrorViewModel
import com.android.systemui.shade.domain.interactor.shadeInteractor
import com.android.systemui.shade.ui.viewmodel.ShadeSceneViewModel
import com.android.systemui.shade.ui.viewmodel.shadeHeaderViewModel
-import com.android.systemui.statusbar.notification.stack.domain.interactor.headsUpNotificationInteractor
import com.android.systemui.statusbar.notification.stack.ui.viewmodel.notificationsPlaceholderViewModel
import com.android.systemui.statusbar.pipeline.mobile.data.repository.FakeMobileConnectionsRepository
import com.android.systemui.statusbar.pipeline.mobile.data.repository.fakeMobileConnectionsRepository
-import com.android.systemui.statusbar.policy.domain.interactor.deviceProvisioningInteractor
import com.android.systemui.telephony.data.repository.fakeTelephonyRepository
import com.android.systemui.testKosmos
import com.android.systemui.unfold.domain.interactor.unfoldTransitionInteractor
@@ -150,12 +137,11 @@
sceneInteractor = sceneInteractor,
falsingInteractor = kosmos.falsingInteractor,
powerInteractor = kosmos.powerInteractor,
+ scenes = kosmos.scenes,
)
.apply { setTransitionState(transitionState) }
}
- private val bouncerInteractor by lazy { kosmos.bouncerInteractor }
-
private lateinit var mobileConnectionsRepository: FakeMobileConnectionsRepository
private lateinit var bouncerActionButtonInteractor: BouncerActionButtonInteractor
private lateinit var bouncerViewModel: BouncerViewModel
@@ -176,7 +162,6 @@
private lateinit var shadeSceneViewModel: ShadeSceneViewModel
- private val keyguardInteractor by lazy { kosmos.keyguardInteractor }
private val powerInteractor by lazy { kosmos.powerInteractor }
private var bouncerSceneJob: Job? = null
@@ -232,32 +217,7 @@
unfoldTransitionInteractor = kosmos.unfoldTransitionInteractor,
)
- val displayTracker = FakeDisplayTracker(context)
- val sysUiState = SysUiState(displayTracker, kosmos.sceneContainerPlugin)
- val startable =
- SceneContainerStartable(
- applicationScope = testScope.backgroundScope,
- sceneInteractor = sceneInteractor,
- deviceEntryInteractor = deviceEntryInteractor,
- deviceUnlockedInteractor = kosmos.deviceUnlockedInteractor,
- bouncerInteractor = bouncerInteractor,
- keyguardInteractor = keyguardInteractor,
- sysUiState = sysUiState,
- displayId = displayTracker.defaultDisplayId,
- sceneLogger = mock(),
- falsingCollector = kosmos.falsingCollector,
- falsingManager = kosmos.falsingManager,
- powerInteractor = powerInteractor,
- simBouncerInteractor = dagger.Lazy { kosmos.simBouncerInteractor },
- authenticationInteractor = dagger.Lazy { kosmos.authenticationInteractor },
- windowController = mock(),
- deviceProvisioningInteractor = kosmos.deviceProvisioningInteractor,
- centralSurfaces = mock(),
- headsUpInteractor = kosmos.headsUpNotificationInteractor,
- occlusionInteractor = kosmos.sceneContainerOcclusionInteractor,
- faceUnlockInteractor = kosmos.deviceEntryFaceAuthInteractor,
- shadeInteractor = kosmos.shadeInteractor,
- )
+ val startable = kosmos.sceneContainerStartable
startable.start()
assertWithMessage("Initial scene key mismatch!")
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/interactor/SceneInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/interactor/SceneInteractorTest.kt
index 63f4816..871ce6d 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/interactor/SceneInteractorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/interactor/SceneInteractorTest.kt
@@ -296,7 +296,7 @@
fun previousScene() =
testScope.runTest {
val currentScene by collectLastValue(underTest.currentScene)
- val previousScene by collectLastValue(underTest.previousScene)
+ val previousScene by collectLastValue(underTest.previousScene())
assertThat(previousScene).isNull()
val firstScene = currentScene
@@ -306,4 +306,19 @@
underTest.changeScene(toScene = Scenes.QuickSettings, "reason")
assertThat(previousScene).isEqualTo(Scenes.Shade)
}
+
+ @Test
+ fun previousScene_withIgnoredScene() =
+ testScope.runTest {
+ val currentScene by collectLastValue(underTest.currentScene)
+ val previousScene by collectLastValue(underTest.previousScene(ignored = Scenes.Shade))
+ assertThat(previousScene).isNull()
+
+ val firstScene = currentScene
+ underTest.changeScene(toScene = Scenes.Shade, "reason")
+ assertThat(previousScene).isEqualTo(firstScene)
+
+ underTest.changeScene(toScene = Scenes.QuickSettings, "reason")
+ assertThat(previousScene).isNull()
+ }
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/startable/SceneContainerStartableTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/startable/SceneContainerStartableTest.kt
index 1472a4d..6fa2273 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
@@ -27,47 +27,40 @@
import com.android.compose.animation.scene.SceneKey
import com.android.systemui.SysuiTestCase
import com.android.systemui.authentication.data.repository.fakeAuthenticationRepository
-import com.android.systemui.authentication.domain.interactor.authenticationInteractor
import com.android.systemui.authentication.shared.model.AuthenticationMethodModel
import com.android.systemui.bouncer.domain.interactor.bouncerInteractor
-import com.android.systemui.bouncer.domain.interactor.simBouncerInteractor
import com.android.systemui.classifier.FalsingCollector
+import com.android.systemui.classifier.falsingCollector
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.deviceentry.domain.interactor.deviceUnlockedInteractor
import com.android.systemui.flags.EnableSceneContainer
import com.android.systemui.keyguard.data.repository.deviceEntryFingerprintAuthRepository
import com.android.systemui.keyguard.data.repository.fakeDeviceEntryFaceAuthRepository
import com.android.systemui.keyguard.data.repository.fakeDeviceEntryFingerprintAuthRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
-import com.android.systemui.keyguard.domain.interactor.keyguardInteractor
import com.android.systemui.keyguard.shared.model.SuccessFingerprintAuthenticationStatus
import com.android.systemui.kosmos.testScope
import com.android.systemui.model.sysUiState
import com.android.systemui.power.data.repository.fakePowerRepository
import com.android.systemui.power.domain.interactor.PowerInteractor.Companion.setAsleepForTest
import com.android.systemui.power.domain.interactor.PowerInteractor.Companion.setAwakeForTest
-import com.android.systemui.power.domain.interactor.PowerInteractorFactory
+import com.android.systemui.power.domain.interactor.powerInteractor
import com.android.systemui.power.shared.model.WakefulnessState
-import com.android.systemui.scene.domain.interactor.sceneContainerOcclusionInteractor
+import com.android.systemui.scene.domain.interactor.sceneContainerStartable
import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.scene.shared.model.fakeSceneDataSource
import com.android.systemui.shade.domain.interactor.shadeInteractor
import com.android.systemui.shared.system.QuickStepContract
-import com.android.systemui.statusbar.NotificationShadeWindowController
import com.android.systemui.statusbar.domain.interactor.keyguardOcclusionInteractor
import com.android.systemui.statusbar.notification.data.repository.FakeHeadsUpRowRepository
import com.android.systemui.statusbar.notification.data.repository.HeadsUpRowRepository
import com.android.systemui.statusbar.notification.stack.data.repository.headsUpNotificationRepository
-import com.android.systemui.statusbar.notification.stack.domain.interactor.headsUpNotificationInteractor
-import com.android.systemui.statusbar.phone.CentralSurfaces
+import com.android.systemui.statusbar.notificationShadeWindowController
+import com.android.systemui.statusbar.phone.centralSurfaces
import com.android.systemui.statusbar.pipeline.mobile.data.repository.fakeMobileConnectionsRepository
import com.android.systemui.statusbar.policy.data.repository.fakeDeviceProvisioningRepository
-import com.android.systemui.statusbar.policy.domain.interactor.deviceProvisioningInteractor
import com.android.systemui.testKosmos
import com.android.systemui.util.mockito.mock
import com.google.common.truth.Truth.assertThat
@@ -82,10 +75,8 @@
import org.junit.runner.RunWith
import org.mockito.ArgumentMatchers.anyBoolean
import org.mockito.ArgumentMatchers.anyInt
-import org.mockito.Mock
import org.mockito.Mockito.clearInvocations
import org.mockito.Mockito.never
-import org.mockito.Mockito.spy
import org.mockito.Mockito.times
import org.mockito.Mockito.verify
import org.mockito.MockitoAnnotations
@@ -95,21 +86,17 @@
@EnableSceneContainer
class SceneContainerStartableTest : SysuiTestCase() {
- @Mock private lateinit var windowController: NotificationShadeWindowController
- @Mock private lateinit var centralSurfaces: CentralSurfaces
-
private val kosmos = testKosmos()
private val testScope = kosmos.testScope
private val sceneInteractor by lazy { kosmos.sceneInteractor }
- private val authenticationInteractor by lazy { kosmos.authenticationInteractor }
private val bouncerInteractor by lazy { kosmos.bouncerInteractor }
private val faceAuthRepository by lazy { kosmos.fakeDeviceEntryFaceAuthRepository }
- private val deviceEntryInteractor by lazy { kosmos.deviceEntryInteractor }
- private val keyguardInteractor by lazy { kosmos.keyguardInteractor }
- private val sysUiState = spy(kosmos.sysUiState)
- private val falsingCollector: FalsingCollector = mock()
- private val powerInteractor = PowerInteractorFactory.create().powerInteractor
+ private val sysUiState = kosmos.sysUiState
+ private val falsingCollector = mock<FalsingCollector>().also { kosmos.falsingCollector = it }
private val fakeSceneDataSource = kosmos.fakeSceneDataSource
+ private val windowController = kosmos.notificationShadeWindowController
+ private val centralSurfaces = kosmos.centralSurfaces
+ private val powerInteractor = kosmos.powerInteractor
private lateinit var underTest: SceneContainerStartable
@@ -117,30 +104,7 @@
fun setUp() {
MockitoAnnotations.initMocks(this)
- underTest =
- SceneContainerStartable(
- applicationScope = testScope.backgroundScope,
- sceneInteractor = sceneInteractor,
- deviceEntryInteractor = deviceEntryInteractor,
- deviceUnlockedInteractor = kosmos.deviceUnlockedInteractor,
- bouncerInteractor = bouncerInteractor,
- keyguardInteractor = keyguardInteractor,
- sysUiState = sysUiState,
- displayId = Display.DEFAULT_DISPLAY,
- sceneLogger = mock(),
- falsingCollector = falsingCollector,
- falsingManager = kosmos.falsingManager,
- powerInteractor = powerInteractor,
- simBouncerInteractor = { kosmos.simBouncerInteractor },
- authenticationInteractor = { authenticationInteractor },
- windowController = windowController,
- deviceProvisioningInteractor = kosmos.deviceProvisioningInteractor,
- centralSurfaces = centralSurfaces,
- headsUpInteractor = kosmos.headsUpNotificationInteractor,
- occlusionInteractor = kosmos.sceneContainerOcclusionInteractor,
- faceUnlockInteractor = kosmos.deviceEntryFaceAuthInteractor,
- shadeInteractor = kosmos.shadeInteractor,
- )
+ underTest = kosmos.sceneContainerStartable
}
@Test
@@ -879,7 +843,7 @@
}
@Test
- fun hydrateWindowFocus() =
+ fun hydrateWindowController_setNotificationShadeFocusable() =
testScope.runTest {
val currentDesiredSceneKey by collectLastValue(sceneInteractor.currentScene)
val transitionStateFlow =
@@ -933,6 +897,89 @@
}
@Test
+ fun hydrateWindowController_setKeyguardShowing() =
+ testScope.runTest {
+ underTest.start()
+ val notificationShadeWindowController = kosmos.notificationShadeWindowController
+ val transitionStateFlow = prepareState(initialSceneKey = Scenes.Lockscreen)
+ val currentScene by collectLastValue(sceneInteractor.currentScene)
+ assertThat(currentScene).isEqualTo(Scenes.Lockscreen)
+ verify(notificationShadeWindowController).setKeyguardShowing(true)
+
+ emulateSceneTransition(transitionStateFlow, Scenes.Bouncer)
+ verify(notificationShadeWindowController, times(1)).setKeyguardShowing(true)
+
+ emulateSceneTransition(transitionStateFlow, Scenes.Lockscreen)
+ verify(notificationShadeWindowController, times(1)).setKeyguardShowing(true)
+
+ emulateSceneTransition(transitionStateFlow, Scenes.Shade)
+ verify(notificationShadeWindowController, times(1)).setKeyguardShowing(true)
+
+ emulateSceneTransition(transitionStateFlow, Scenes.Lockscreen)
+ verify(notificationShadeWindowController, times(1)).setKeyguardShowing(true)
+ }
+
+ @Test
+ fun hydrateWindowController_setBouncerShowing() =
+ testScope.runTest {
+ underTest.start()
+ val notificationShadeWindowController = kosmos.notificationShadeWindowController
+ val transitionStateFlow = prepareState(initialSceneKey = Scenes.Lockscreen)
+ val currentScene by collectLastValue(sceneInteractor.currentScene)
+ assertThat(currentScene).isEqualTo(Scenes.Lockscreen)
+ verify(notificationShadeWindowController, never()).setBouncerShowing(true)
+ verify(notificationShadeWindowController, times(1)).setBouncerShowing(false)
+
+ emulateSceneTransition(transitionStateFlow, Scenes.Bouncer)
+ verify(notificationShadeWindowController, times(1)).setBouncerShowing(true)
+ verify(notificationShadeWindowController, times(1)).setBouncerShowing(false)
+
+ emulateSceneTransition(transitionStateFlow, Scenes.Lockscreen)
+ verify(notificationShadeWindowController, times(1)).setBouncerShowing(true)
+ verify(notificationShadeWindowController, times(2)).setBouncerShowing(false)
+
+ kosmos.deviceEntryFingerprintAuthRepository.setAuthenticationStatus(
+ SuccessFingerprintAuthenticationStatus(0, true)
+ )
+ assertThat(currentScene).isEqualTo(Scenes.Gone)
+ verify(notificationShadeWindowController, times(1)).setBouncerShowing(true)
+ verify(notificationShadeWindowController, times(2)).setBouncerShowing(false)
+
+ emulateSceneTransition(transitionStateFlow, Scenes.Lockscreen)
+ verify(notificationShadeWindowController, times(1)).setBouncerShowing(true)
+ verify(notificationShadeWindowController, times(2)).setBouncerShowing(false)
+
+ emulateSceneTransition(transitionStateFlow, Scenes.Bouncer)
+ verify(notificationShadeWindowController, times(2)).setBouncerShowing(true)
+ verify(notificationShadeWindowController, times(2)).setBouncerShowing(false)
+ }
+
+ @Test
+ fun hydrateWindowController_setKeyguardOccluded() =
+ testScope.runTest {
+ underTest.start()
+ val notificationShadeWindowController = kosmos.notificationShadeWindowController
+ prepareState(initialSceneKey = Scenes.Lockscreen)
+ val currentScene by collectLastValue(sceneInteractor.currentScene)
+ assertThat(currentScene).isEqualTo(Scenes.Lockscreen)
+ verify(notificationShadeWindowController, never()).setKeyguardOccluded(true)
+ verify(notificationShadeWindowController, times(1)).setKeyguardOccluded(false)
+
+ kosmos.keyguardOcclusionInteractor.setWmNotifiedShowWhenLockedActivityOnTop(
+ true,
+ mock()
+ )
+ runCurrent()
+ verify(notificationShadeWindowController, times(1)).setKeyguardOccluded(true)
+ verify(notificationShadeWindowController, times(1)).setKeyguardOccluded(false)
+
+ kosmos.keyguardOcclusionInteractor.setWmNotifiedShowWhenLockedActivityOnTop(false)
+ runCurrent()
+ verify(notificationShadeWindowController, times(1)).setKeyguardOccluded(true)
+ verify(notificationShadeWindowController, times(2)).setKeyguardOccluded(false)
+ }
+
+ @Test
fun hydrateInteractionState_whileLocked() =
testScope.runTest {
val transitionStateFlow =
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/shared/flag/SceneContainerFlagParameterizationTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/shared/flag/SceneContainerFlagParameterizationTest.kt
index db31ad5..4d69f0d 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/shared/flag/SceneContainerFlagParameterizationTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/shared/flag/SceneContainerFlagParameterizationTest.kt
@@ -24,6 +24,7 @@
import com.android.systemui.Flags.FLAG_SCENE_CONTAINER
import com.android.systemui.SysuiTestCase
import com.android.systemui.flags.andSceneContainer
+import com.android.systemui.flags.parameterizeSceneContainerFlag
import com.google.common.truth.Truth
import org.junit.Test
import org.junit.runner.RunWith
@@ -41,6 +42,14 @@
}
@Test
+ fun parameterizeSceneContainer() {
+ val result = parameterizeSceneContainerFlag()
+ Truth.assertThat(result).hasSize(2)
+ Truth.assertThat(result[0].mOverrides[FLAG_SCENE_CONTAINER]).isFalse()
+ Truth.assertThat(result[1].mOverrides[FLAG_SCENE_CONTAINER]).isTrue()
+ }
+
+ @Test
fun oneUnrelatedAndSceneContainer() {
val unrelatedFlag = FLAG_EXAMPLE_FLAG
val result = FlagsParameterization.allCombinationsOf(unrelatedFlag).andSceneContainer()
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/ui/viewmodel/SceneContainerViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/ui/viewmodel/SceneContainerViewModelTest.kt
index ea95aab..5c30379 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/ui/viewmodel/SceneContainerViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/scene/ui/viewmodel/SceneContainerViewModelTest.kt
@@ -28,8 +28,10 @@
import com.android.systemui.power.data.repository.fakePowerRepository
import com.android.systemui.power.domain.interactor.powerInteractor
import com.android.systemui.scene.domain.interactor.sceneInteractor
+import com.android.systemui.scene.fakeScenes
import com.android.systemui.scene.sceneContainerConfig
import com.android.systemui.scene.sceneKeys
+import com.android.systemui.scene.scenes
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.scene.shared.model.fakeSceneDataSource
import com.android.systemui.testKosmos
@@ -64,6 +66,7 @@
sceneInteractor = sceneInteractor,
falsingInteractor = kosmos.falsingInteractor,
powerInteractor = kosmos.powerInteractor,
+ scenes = kosmos.scenes,
)
}
@@ -214,4 +217,23 @@
assertThat(isVisible).isFalse()
}
+
+ @Test
+ fun currentDestinationScenes_onlyTheCurrentSceneIsCollected() =
+ testScope.runTest {
+ val unused by collectLastValue(underTest.currentDestinationScenes(backgroundScope))
+ val currentScene by collectLastValue(sceneInteractor.currentScene)
+ kosmos.fakeScenes.forEach { scene ->
+ fakeSceneDataSource.changeScene(toScene = scene.key)
+ runCurrent()
+ assertThat(currentScene).isEqualTo(scene.key)
+
+ assertThat(scene.isDestinationScenesBeingCollected).isTrue()
+ kosmos.fakeScenes
+ .filter { it.key != scene.key }
+ .forEach { otherScene ->
+ assertThat(otherScene.isDestinationScenesBeingCollected).isFalse()
+ }
+ }
+ }
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java
similarity index 77%
rename from packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java
rename to packages/SystemUI/multivalentTests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java
index b89ccef..a8da116 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/NotificationShadeWindowControllerImplTest.java
@@ -29,7 +29,6 @@
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.clearInvocations;
-import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.spy;
@@ -37,12 +36,10 @@
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;
-import static kotlinx.coroutines.flow.StateFlowKt.MutableStateFlow;
-
import android.app.IActivityManager;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
-import android.testing.AndroidTestingRunner;
+import android.platform.test.flag.junit.FlagsParameterization;
import android.testing.TestableLooper.RunWithLooper;
import android.view.View;
import android.view.WindowManager;
@@ -50,51 +47,26 @@
import androidx.test.filters.SmallTest;
import com.android.internal.colorextraction.ColorExtractor;
-import com.android.keyguard.KeyguardSecurityModel;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.biometrics.AuthController;
-import com.android.systemui.bouncer.data.repository.FakeKeyguardBouncerRepository;
import com.android.systemui.colorextraction.SysuiColorExtractor;
-import com.android.systemui.common.ui.data.repository.FakeConfigurationRepository;
-import com.android.systemui.common.ui.domain.interactor.ConfigurationInteractor;
import com.android.systemui.communal.domain.interactor.CommunalInteractor;
-import com.android.systemui.deviceentry.domain.interactor.DeviceEntryUdfpsInteractor;
import com.android.systemui.dump.DumpManager;
-import com.android.systemui.flags.FakeFeatureFlagsClassic;
+import com.android.systemui.flags.SceneContainerFlagParameterizationKt;
import com.android.systemui.keyguard.KeyguardViewMediator;
-import com.android.systemui.keyguard.data.repository.FakeCommandQueue;
-import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository;
-import com.android.systemui.keyguard.domain.interactor.FromLockscreenTransitionInteractor;
-import com.android.systemui.keyguard.domain.interactor.FromPrimaryBouncerTransitionInteractor;
-import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor;
-import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor;
import com.android.systemui.kosmos.KosmosJavaAdapter;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
-import com.android.systemui.power.domain.interactor.PowerInteractor;
import com.android.systemui.res.R;
import com.android.systemui.scene.FakeWindowRootViewComponent;
-import com.android.systemui.scene.data.repository.SceneContainerRepository;
-import com.android.systemui.scene.domain.interactor.SceneInteractor;
-import com.android.systemui.scene.shared.logger.SceneLogger;
import com.android.systemui.settings.UserTracker;
-import com.android.systemui.shade.data.repository.FakeShadeRepository;
-import com.android.systemui.shade.domain.interactor.ShadeInteractor;
-import com.android.systemui.shade.domain.interactor.ShadeInteractorImpl;
-import com.android.systemui.shade.domain.interactor.ShadeInteractorLegacyImpl;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.SysuiStatusBarStateController;
-import com.android.systemui.statusbar.disableflags.data.repository.FakeDisableFlagsRepository;
-import com.android.systemui.statusbar.notification.stack.domain.interactor.SharedNotificationContainerInteractor;
import com.android.systemui.statusbar.phone.DozeParameters;
import com.android.systemui.statusbar.phone.KeyguardBypassController;
-import com.android.systemui.statusbar.phone.ScreenOffAnimationController;
import com.android.systemui.statusbar.phone.ScrimController;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.KeyguardStateController;
-import com.android.systemui.statusbar.policy.ResourcesSplitShadeStateController;
-import com.android.systemui.statusbar.policy.data.repository.FakeUserSetupRepository;
import com.android.systemui.user.domain.interactor.SelectedUserInteractor;
-import com.android.systemui.user.domain.interactor.UserSwitcherInteractor;
import com.google.common.util.concurrent.MoreExecutors;
@@ -110,13 +82,13 @@
import java.util.List;
import java.util.concurrent.Executor;
-import kotlinx.coroutines.test.TestScope;
+import platform.test.runner.parameterized.ParameterizedAndroidJunit4;
+import platform.test.runner.parameterized.Parameters;
-@RunWith(AndroidTestingRunner.class)
+@RunWith(ParameterizedAndroidJunit4.class)
@RunWithLooper(setAsMainLooper = true)
@SmallTest
public class NotificationShadeWindowControllerImplTest extends SysuiTestCase {
-
@Mock private WindowManager mWindowManager;
@Mock private DozeParameters mDozeParameters;
@Spy private final NotificationShadeWindowView mNotificationShadeWindowView = spy(
@@ -128,29 +100,31 @@
@Mock private SysuiColorExtractor mColorExtractor;
@Mock private ColorExtractor.GradientColors mGradientColors;
@Mock private DumpManager mDumpManager;
- @Mock private KeyguardSecurityModel mKeyguardSecurityModel;
@Mock private KeyguardStateController mKeyguardStateController;
@Mock private AuthController mAuthController;
@Mock private ShadeWindowLogger mShadeWindowLogger;
@Mock private SelectedUserInteractor mSelectedUserInteractor;
@Mock private UserTracker mUserTracker;
- @Mock private LargeScreenHeaderHelper mLargeScreenHeaderHelper;
@Captor private ArgumentCaptor<WindowManager.LayoutParams> mLayoutParameters;
@Captor private ArgumentCaptor<StatusBarStateController.StateListener> mStateListener;
private final Executor mMainExecutor = MoreExecutors.directExecutor();
private final Executor mBackgroundExecutor = MoreExecutors.directExecutor();
private final KosmosJavaAdapter mKosmos = new KosmosJavaAdapter(this);
- private final TestScope mTestScope = mKosmos.getTestScope();
- private ShadeInteractor mShadeInteractor;
private NotificationShadeWindowControllerImpl mNotificationShadeWindowController;
private float mPreferredRefreshRate = -1;
- private FromLockscreenTransitionInteractor mFromLockscreenTransitionInteractor;
- private FromPrimaryBouncerTransitionInteractor mFromPrimaryBouncerTransitionInteractor;
- private ScreenOffAnimationController mScreenOffAnimationController;
private SysuiStatusBarStateController mStatusBarStateController;
+ @Parameters(name = "{0}")
+ public static List<FlagsParameterization> getParams() {
+ return SceneContainerFlagParameterizationKt.parameterizeSceneContainerFlag();
+ }
+
+ public NotificationShadeWindowControllerImplTest(FlagsParameterization flags) {
+ mSetFlagsRule.setFlagsParameterization(flags);
+ }
+
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
@@ -164,71 +138,7 @@
when(mDozeParameters.getAlwaysOn()).thenReturn(true);
when(mColorExtractor.getNeutralColors()).thenReturn(mGradientColors);
- FakeKeyguardRepository keyguardRepository = new FakeKeyguardRepository();
- FakeFeatureFlagsClassic featureFlags = new FakeFeatureFlagsClassic();
- FakeShadeRepository shadeRepository = new FakeShadeRepository();
-
- mScreenOffAnimationController = mKosmos.getScreenOffAnimationController();
mStatusBarStateController = spy(mKosmos.getStatusBarStateController());
- PowerInteractor powerInteractor = mKosmos.getPowerInteractor();
-
- SceneInteractor sceneInteractor = new SceneInteractor(
- mTestScope.getBackgroundScope(),
- new SceneContainerRepository(
- mTestScope.getBackgroundScope(),
- mKosmos.getFakeSceneContainerConfig(),
- mKosmos.getSceneDataSource()),
- mock(SceneLogger.class),
- mKosmos.getDeviceUnlockedInteractor());
-
- FakeConfigurationRepository configurationRepository = new FakeConfigurationRepository();
- KeyguardTransitionInteractor keyguardTransitionInteractor =
- mKosmos.getKeyguardTransitionInteractor();
- KeyguardInteractor keyguardInteractor = new KeyguardInteractor(
- keyguardRepository,
- new FakeCommandQueue(),
- powerInteractor,
- new FakeKeyguardBouncerRepository(),
- new ConfigurationInteractor(configurationRepository),
- shadeRepository,
- keyguardTransitionInteractor,
- () -> sceneInteractor,
- () -> mKosmos.getFromGoneTransitionInteractor(),
- () -> mKosmos.getSharedNotificationContainerInteractor(),
- mTestScope);
- CommunalInteractor communalInteractor = mKosmos.getCommunalInteractor();
-
- mFromLockscreenTransitionInteractor = mKosmos.getFromLockscreenTransitionInteractor();
- mFromPrimaryBouncerTransitionInteractor =
- mKosmos.getFromPrimaryBouncerTransitionInteractor();
-
- DeviceEntryUdfpsInteractor deviceEntryUdfpsInteractor =
- mock(DeviceEntryUdfpsInteractor.class);
- when(deviceEntryUdfpsInteractor.isUdfpsSupported()).thenReturn(MutableStateFlow(false));
-
- mShadeInteractor = new ShadeInteractorImpl(
- mTestScope.getBackgroundScope(),
- mKosmos.getDeviceProvisioningInteractor(),
- new FakeDisableFlagsRepository(),
- mock(DozeParameters.class),
- keyguardRepository,
- keyguardTransitionInteractor,
- powerInteractor,
- new FakeUserSetupRepository(),
- mock(UserSwitcherInteractor.class),
- new ShadeInteractorLegacyImpl(
- mTestScope.getBackgroundScope(),
- keyguardRepository,
- new SharedNotificationContainerInteractor(
- configurationRepository,
- mContext,
- new ResourcesSplitShadeStateController(),
- keyguardInteractor,
- deviceEntryUdfpsInteractor,
- () -> mLargeScreenHeaderHelper),
- shadeRepository
- )
- );
mNotificationShadeWindowController = new NotificationShadeWindowControllerImpl(
mContext,
@@ -245,13 +155,13 @@
mColorExtractor,
mDumpManager,
mKeyguardStateController,
- mScreenOffAnimationController,
+ mKosmos.getScreenOffAnimationController(),
mAuthController,
- () -> mShadeInteractor,
+ mKosmos::getShadeInteractor,
mShadeWindowLogger,
() -> mSelectedUserInteractor,
mUserTracker,
- () -> communalInteractor) {
+ mKosmos::getCommunalInteractor) {
@Override
protected boolean isDebuggable() {
return false;
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeBackActionInteractorImplTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeBackActionInteractorImplTest.kt
index 26f342a..468c39d 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeBackActionInteractorImplTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeBackActionInteractorImplTest.kt
@@ -22,7 +22,12 @@
import com.android.compose.animation.scene.ObservableTransitionState
import com.android.compose.animation.scene.SceneKey
import com.android.systemui.SysuiTestCase
+import com.android.systemui.authentication.data.repository.fakeAuthenticationRepository
+import com.android.systemui.authentication.shared.model.AuthenticationMethodModel
+import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.flags.EnableSceneContainer
+import com.android.systemui.keyguard.data.repository.deviceEntryFingerprintAuthRepository
+import com.android.systemui.keyguard.shared.model.SuccessFingerprintAuthenticationStatus
import com.android.systemui.kosmos.testScope
import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.scene.shared.model.Scenes
@@ -31,77 +36,93 @@
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
import org.junit.Assume
import org.junit.Before
-import org.junit.Ignore
import org.junit.Test
import org.junit.runner.RunWith
@OptIn(ExperimentalCoroutinesApi::class)
@SmallTest
@RunWith(AndroidJUnit4::class)
-@Ignore("b/328827631")
@EnableSceneContainer
class ShadeBackActionInteractorImplTest : SysuiTestCase() {
val kosmos = testKosmos()
val testScope = kosmos.testScope
- val sceneInteractor = kosmos.sceneInteractor
- val underTest = kosmos.shadeBackActionInteractor
+ val sceneInteractor by lazy { kosmos.sceneInteractor }
+ val shadeInteractor by lazy { kosmos.shadeInteractor }
+ val fakeAuthenticationRepository by lazy { kosmos.fakeAuthenticationRepository }
+ val deviceEntryFingerprintAuthRepository by lazy { kosmos.deviceEntryFingerprintAuthRepository }
+
+ lateinit var underTest: ShadeBackActionInteractor
@Before
- fun ignoreSplitShade() {
+ fun ignoreSplitShadeAndSetup() {
Assume.assumeFalse(Utilities.isLargeScreen(kosmos.applicationContext))
+ underTest = kosmos.shadeBackActionInteractor
}
@Test
fun animateCollapseQs_notOnQs() =
testScope.runTest {
+ val actual by collectLastValue(sceneInteractor.currentScene)
setScene(Scenes.Shade)
underTest.animateCollapseQs(true)
runCurrent()
- assertThat(sceneInteractor.currentScene.value).isEqualTo(Scenes.Shade)
+ assertThat(actual).isEqualTo(Scenes.Shade)
}
@Test
fun animateCollapseQs_fullyCollapse_entered() =
testScope.runTest {
+ val actual by collectLastValue(sceneInteractor.currentScene)
enterDevice()
setScene(Scenes.QuickSettings)
underTest.animateCollapseQs(true)
runCurrent()
- assertThat(sceneInteractor.currentScene.value).isEqualTo(Scenes.Gone)
+ assertThat(actual).isEqualTo(Scenes.Gone)
}
@Test
fun animateCollapseQs_fullyCollapse_locked() =
testScope.runTest {
+ val actual by collectLastValue(sceneInteractor.currentScene)
setScene(Scenes.QuickSettings)
underTest.animateCollapseQs(true)
runCurrent()
- assertThat(sceneInteractor.currentScene.value).isEqualTo(Scenes.Lockscreen)
+ assertThat(actual).isEqualTo(Scenes.Lockscreen)
}
@Test
fun animateCollapseQs_notFullyCollapse() =
testScope.runTest {
+ val actual by collectLastValue(sceneInteractor.currentScene)
setScene(Scenes.QuickSettings)
underTest.animateCollapseQs(false)
runCurrent()
- assertThat(sceneInteractor.currentScene.value).isEqualTo(Scenes.Shade)
+ assertThat(actual).isEqualTo(Scenes.Shade)
}
- private fun enterDevice() {
- testScope.runCurrent()
+ private fun TestScope.enterDevice() {
+ // configure device unlocked state
+ fakeAuthenticationRepository.setAuthenticationMethod(AuthenticationMethodModel.Pin)
+ runCurrent()
+ deviceEntryFingerprintAuthRepository.setAuthenticationStatus(
+ SuccessFingerprintAuthenticationStatus(0, true)
+ )
+ runCurrent()
setScene(Scenes.Gone)
}
- private fun setScene(key: SceneKey) {
+ private fun TestScope.setScene(key: SceneKey) {
+ val actual by collectLastValue(sceneInteractor.currentScene)
sceneInteractor.changeScene(key, "test")
sceneInteractor.setTransitionState(
MutableStateFlow<ObservableTransitionState>(ObservableTransitionState.Idle(key))
)
- testScope.runCurrent()
+ runCurrent()
+ assertThat(actual).isEqualTo(key)
}
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeInteractorImplTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeInteractorImplTest.kt
index 5b33ecb..aa0ca18 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeInteractorImplTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeInteractorImplTest.kt
@@ -19,11 +19,12 @@
import android.app.StatusBarManager.DISABLE2_NONE
import android.app.StatusBarManager.DISABLE2_NOTIFICATION_SHADE
import android.app.StatusBarManager.DISABLE2_QUICK_SETTINGS
-import androidx.test.ext.junit.runners.AndroidJUnit4
+import android.platform.test.flag.junit.FlagsParameterization
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.common.ui.data.repository.fakeConfigurationRepository
import com.android.systemui.coroutines.collectLastValue
+import com.android.systemui.flags.parameterizeSceneContainerFlag
import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository
import com.android.systemui.keyguard.shared.model.DozeStateModel
@@ -36,9 +37,7 @@
import com.android.systemui.power.data.repository.fakePowerRepository
import com.android.systemui.power.shared.model.WakeSleepReason
import com.android.systemui.power.shared.model.WakefulnessState
-import com.android.systemui.res.R
-import com.android.systemui.scene.domain.interactor.sceneInteractor
-import com.android.systemui.shade.data.repository.fakeShadeRepository
+import com.android.systemui.shade.shadeTestUtil
import com.android.systemui.statusbar.disableflags.data.model.DisableFlagsModel
import com.android.systemui.statusbar.disableflags.data.repository.fakeDisableFlagsRepository
import com.android.systemui.statusbar.phone.dozeParameters
@@ -52,28 +51,47 @@
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
+import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
+import platform.test.runner.parameterized.ParameterizedAndroidJunit4
+import platform.test.runner.parameterized.Parameters
@OptIn(ExperimentalCoroutinesApi::class)
@SmallTest
-@RunWith(AndroidJUnit4::class)
-class ShadeInteractorImplTest : SysuiTestCase() {
+@RunWith(ParameterizedAndroidJunit4::class)
+class ShadeInteractorImplTest(flags: FlagsParameterization?) : SysuiTestCase() {
val kosmos = testKosmos()
val testScope = kosmos.testScope
- val configurationRepository = kosmos.fakeConfigurationRepository
- val deviceProvisioningRepository = kosmos.fakeDeviceProvisioningRepository
- val disableFlagsRepository = kosmos.fakeDisableFlagsRepository
- val keyguardRepository = kosmos.fakeKeyguardRepository
- val keyguardTransitionRepository = kosmos.fakeKeyguardTransitionRepository
- val powerRepository = kosmos.fakePowerRepository
- val sceneInteractor = kosmos.sceneInteractor
- val shadeRepository = kosmos.fakeShadeRepository
- val userRepository = kosmos.fakeUserRepository
- val userSetupRepository = kosmos.fakeUserSetupRepository
- val dozeParameters = kosmos.dozeParameters
+ val configurationRepository by lazy { kosmos.fakeConfigurationRepository }
+ val deviceProvisioningRepository by lazy { kosmos.fakeDeviceProvisioningRepository }
+ val disableFlagsRepository by lazy { kosmos.fakeDisableFlagsRepository }
+ val keyguardRepository by lazy { kosmos.fakeKeyguardRepository }
+ val keyguardTransitionRepository by lazy { kosmos.fakeKeyguardTransitionRepository }
+ val powerRepository by lazy { kosmos.fakePowerRepository }
+ val shadeTestUtil by lazy { kosmos.shadeTestUtil }
+ val userRepository by lazy { kosmos.fakeUserRepository }
+ val userSetupRepository by lazy { kosmos.fakeUserSetupRepository }
+ val dozeParameters by lazy { kosmos.dozeParameters }
- val underTest = kosmos.shadeInteractorImpl
+ lateinit var underTest: ShadeInteractorImpl
+
+ companion object {
+ @JvmStatic
+ @Parameters(name = "{0}")
+ fun getParams(): List<FlagsParameterization> {
+ return parameterizeSceneContainerFlag()
+ }
+ }
+
+ init {
+ mSetFlagsRule.setFlagsParameterization(flags!!)
+ }
+
+ @Before
+ fun setup() {
+ underTest = kosmos.shadeInteractorImpl
+ }
@Test
fun isShadeEnabled_matchesDisableFlagsRepo() =
@@ -284,88 +302,13 @@
}
@Test
- fun fullShadeExpansionWhenShadeLocked() =
- testScope.runTest {
- val actual by collectLastValue(underTest.shadeExpansion)
-
- keyguardRepository.setStatusBarState(StatusBarState.SHADE_LOCKED)
- shadeRepository.setLockscreenShadeExpansion(0.5f)
-
- assertThat(actual).isEqualTo(1f)
- }
-
- @Test
- fun fullShadeExpansionWhenStatusBarStateIsNotShadeLocked() =
- testScope.runTest {
- val actual by collectLastValue(underTest.shadeExpansion)
-
- keyguardRepository.setStatusBarState(StatusBarState.KEYGUARD)
-
- shadeRepository.setLockscreenShadeExpansion(0.5f)
- assertThat(actual).isEqualTo(0.5f)
-
- shadeRepository.setLockscreenShadeExpansion(0.8f)
- assertThat(actual).isEqualTo(0.8f)
- }
-
- @Test
- fun shadeExpansionWhenInSplitShadeAndQsExpanded() =
- testScope.runTest {
- val actual by collectLastValue(underTest.shadeExpansion)
-
- // WHEN split shade is enabled and QS is expanded
- keyguardRepository.setStatusBarState(StatusBarState.SHADE)
- overrideResource(R.bool.config_use_split_notification_shade, true)
- configurationRepository.onAnyConfigurationChange()
- shadeRepository.setQsExpansion(.5f)
- shadeRepository.setLegacyShadeExpansion(.7f)
- runCurrent()
-
- // THEN legacy shade expansion is passed through
- assertThat(actual).isEqualTo(.7f)
- }
-
- @Test
- fun shadeExpansionWhenNotInSplitShadeAndQsPartiallyExpanded() =
- testScope.runTest {
- val actual by collectLastValue(underTest.shadeExpansion)
-
- // WHEN split shade is not enabled and QS is expanded
- keyguardRepository.setStatusBarState(StatusBarState.SHADE)
- overrideResource(R.bool.config_use_split_notification_shade, false)
- shadeRepository.setQsExpansion(.5f)
- shadeRepository.setLegacyShadeExpansion(1f)
- runCurrent()
-
- // THEN shade expansion is zero
- assertThat(actual).isEqualTo(.5f)
- }
-
- @Test
- fun shadeExpansionWhenNotInSplitShadeAndQsFullyExpanded() =
- testScope.runTest {
- val actual by collectLastValue(underTest.shadeExpansion)
-
- // WHEN split shade is not enabled and QS is expanded
- keyguardRepository.setStatusBarState(StatusBarState.SHADE)
- overrideResource(R.bool.config_use_split_notification_shade, false)
- shadeRepository.setQsExpansion(1f)
- shadeRepository.setLegacyShadeExpansion(1f)
- runCurrent()
-
- // THEN shade expansion is zero
- assertThat(actual).isEqualTo(0f)
- }
-
- @Test
fun shadeExpansionWhenNotInSplitShadeAndQsCollapsed() =
testScope.runTest {
val actual by collectLastValue(underTest.shadeExpansion)
// WHEN split shade is not enabled and QS is expanded
keyguardRepository.setStatusBarState(StatusBarState.SHADE)
- shadeRepository.setQsExpansion(0f)
- shadeRepository.setLegacyShadeExpansion(.6f)
+ shadeTestUtil.setShadeAndQsExpansion(.6f, 0f)
// THEN shade expansion is zero
assertThat(actual).isEqualTo(.6f)
@@ -375,8 +318,7 @@
fun anyExpansion_shadeGreater() =
testScope.runTest() {
// WHEN shade is more expanded than QS
- shadeRepository.setLegacyShadeExpansion(.5f)
- shadeRepository.setQsExpansion(0f)
+ shadeTestUtil.setShadeAndQsExpansion(.5f, 0f)
runCurrent()
// THEN anyExpansion is .5f
@@ -387,8 +329,7 @@
fun anyExpansion_qsGreater() =
testScope.runTest() {
// WHEN qs is more expanded than shade
- shadeRepository.setLegacyShadeExpansion(0f)
- shadeRepository.setQsExpansion(.5f)
+ shadeTestUtil.setShadeAndQsExpansion(0f, .5f)
runCurrent()
// THEN anyExpansion is .5f
@@ -396,229 +337,6 @@
}
@Test
- fun userInteractingWithShade_shadeDraggedUpAndDown() =
- testScope.runTest() {
- val actual by collectLastValue(underTest.isUserInteractingWithShade)
- // GIVEN shade collapsed and not tracking input
- shadeRepository.setLegacyShadeExpansion(0f)
- shadeRepository.setLegacyShadeTracking(false)
- runCurrent()
-
- // THEN user is not interacting
- assertThat(actual).isFalse()
-
- // WHEN shade tracking starts
- shadeRepository.setLegacyShadeTracking(true)
- runCurrent()
-
- // THEN user is interacting
- assertThat(actual).isTrue()
-
- // WHEN shade dragged down halfway
- shadeRepository.setLegacyShadeExpansion(.5f)
- runCurrent()
-
- // THEN user is interacting
- assertThat(actual).isTrue()
-
- // WHEN shade fully expanded but tracking is not stopped
- shadeRepository.setLegacyShadeExpansion(1f)
- runCurrent()
-
- // THEN user is interacting
- assertThat(actual).isTrue()
-
- // WHEN shade fully collapsed but tracking is not stopped
- shadeRepository.setLegacyShadeExpansion(0f)
- runCurrent()
-
- // THEN user is interacting
- assertThat(actual).isTrue()
-
- // WHEN shade dragged halfway and tracking is stopped
- shadeRepository.setLegacyShadeExpansion(.6f)
- shadeRepository.setLegacyShadeTracking(false)
- runCurrent()
-
- // THEN user is interacting
- assertThat(actual).isTrue()
-
- // WHEN shade completes expansion stopped
- shadeRepository.setLegacyShadeExpansion(1f)
- runCurrent()
-
- // THEN user is not interacting
- assertThat(actual).isFalse()
- }
-
- @Test
- fun userInteractingWithShade_shadeExpanded() =
- testScope.runTest() {
- val actual by collectLastValue(underTest.isUserInteractingWithShade)
- // GIVEN shade collapsed and not tracking input
- shadeRepository.setLegacyShadeExpansion(0f)
- shadeRepository.setLegacyShadeTracking(false)
- runCurrent()
-
- // THEN user is not interacting
- assertThat(actual).isFalse()
-
- // WHEN shade tracking starts
- shadeRepository.setLegacyShadeTracking(true)
- runCurrent()
-
- // THEN user is interacting
- assertThat(actual).isTrue()
-
- // WHEN shade dragged down halfway
- shadeRepository.setLegacyShadeExpansion(.5f)
- runCurrent()
-
- // THEN user is interacting
- assertThat(actual).isTrue()
-
- // WHEN shade fully expanded and tracking is stopped
- shadeRepository.setLegacyShadeExpansion(1f)
- shadeRepository.setLegacyShadeTracking(false)
- runCurrent()
-
- // THEN user is not interacting
- assertThat(actual).isFalse()
- }
-
- @Test
- fun userInteractingWithShade_shadePartiallyExpanded() =
- testScope.runTest() {
- val actual by collectLastValue(underTest.isUserInteractingWithShade)
- // GIVEN shade collapsed and not tracking input
- shadeRepository.setLegacyShadeExpansion(0f)
- shadeRepository.setLegacyShadeTracking(false)
- runCurrent()
-
- // THEN user is not interacting
- assertThat(actual).isFalse()
-
- // WHEN shade tracking starts
- shadeRepository.setLegacyShadeTracking(true)
- runCurrent()
-
- // THEN user is interacting
- assertThat(actual).isTrue()
-
- // WHEN shade partially expanded
- shadeRepository.setLegacyShadeExpansion(.4f)
- runCurrent()
-
- // THEN user is interacting
- assertThat(actual).isTrue()
-
- // WHEN tracking is stopped
- shadeRepository.setLegacyShadeTracking(false)
- runCurrent()
-
- // THEN user is interacting
- assertThat(actual).isTrue()
-
- // WHEN shade goes back to collapsed
- shadeRepository.setLegacyShadeExpansion(0f)
- runCurrent()
-
- // THEN user is not interacting
- assertThat(actual).isFalse()
- }
-
- @Test
- fun userInteractingWithShade_shadeCollapsed() =
- testScope.runTest() {
- val actual by collectLastValue(underTest.isUserInteractingWithShade)
- // GIVEN shade expanded and not tracking input
- shadeRepository.setLegacyShadeExpansion(1f)
- shadeRepository.setLegacyShadeTracking(false)
- runCurrent()
-
- // THEN user is not interacting
- assertThat(actual).isFalse()
-
- // WHEN shade tracking starts
- shadeRepository.setLegacyShadeTracking(true)
- runCurrent()
-
- // THEN user is interacting
- assertThat(actual).isTrue()
-
- // WHEN shade dragged up halfway
- shadeRepository.setLegacyShadeExpansion(.5f)
- runCurrent()
-
- // THEN user is interacting
- assertThat(actual).isTrue()
-
- // WHEN shade fully collapsed and tracking is stopped
- shadeRepository.setLegacyShadeExpansion(0f)
- shadeRepository.setLegacyShadeTracking(false)
- runCurrent()
-
- // THEN user is not interacting
- assertThat(actual).isFalse()
- }
-
- @Test
- fun userInteractingWithQs_qsDraggedUpAndDown() =
- testScope.runTest() {
- val actual by collectLastValue(underTest.isUserInteractingWithQs)
- // GIVEN qs collapsed and not tracking input
- shadeRepository.setQsExpansion(0f)
- shadeRepository.setLegacyQsTracking(false)
- runCurrent()
-
- // THEN user is not interacting
- assertThat(actual).isFalse()
-
- // WHEN qs tracking starts
- shadeRepository.setLegacyQsTracking(true)
- runCurrent()
-
- // THEN user is interacting
- assertThat(actual).isTrue()
-
- // WHEN qs dragged down halfway
- shadeRepository.setQsExpansion(.5f)
- runCurrent()
-
- // THEN user is interacting
- assertThat(actual).isTrue()
-
- // WHEN qs fully expanded but tracking is not stopped
- shadeRepository.setQsExpansion(1f)
- runCurrent()
-
- // THEN user is interacting
- assertThat(actual).isTrue()
-
- // WHEN qs fully collapsed but tracking is not stopped
- shadeRepository.setQsExpansion(0f)
- runCurrent()
-
- // THEN user is interacting
- assertThat(actual).isTrue()
-
- // WHEN qs dragged halfway and tracking is stopped
- shadeRepository.setQsExpansion(.6f)
- shadeRepository.setLegacyQsTracking(false)
- runCurrent()
-
- // THEN user is interacting
- assertThat(actual).isTrue()
-
- // WHEN qs completes expansion stopped
- shadeRepository.setQsExpansion(1f)
- runCurrent()
-
- // THEN user is not interacting
- assertThat(actual).isFalse()
- }
-
- @Test
fun isShadeTouchable_isFalse_whenDeviceAsleepAndNotPulsing() =
testScope.runTest {
powerRepository.updateWakefulness(
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeInteractorLegacyImplTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeInteractorLegacyImplTest.kt
index 0ae95e7..109cd05 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeInteractorLegacyImplTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeInteractorLegacyImplTest.kt
@@ -21,6 +21,7 @@
import com.android.systemui.SysuiTestCase
import com.android.systemui.common.ui.data.repository.fakeConfigurationRepository
import com.android.systemui.coroutines.collectLastValue
+import com.android.systemui.flags.DisableSceneContainer
import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository
import com.android.systemui.keyguard.shared.model.StatusBarState
@@ -40,6 +41,7 @@
@OptIn(ExperimentalCoroutinesApi::class)
@SmallTest
@RunWith(AndroidJUnit4::class)
+@DisableSceneContainer
class ShadeInteractorLegacyImplTest : SysuiTestCase() {
val kosmos = testKosmos()
val testScope = kosmos.testScope
@@ -95,6 +97,22 @@
}
@Test
+ fun shadeExpansionWhenNotInSplitShadeAndQsPartiallyExpanded() =
+ testScope.runTest {
+ val actual by collectLastValue(underTest.shadeExpansion)
+
+ // WHEN split shade is not enabled and QS is expanded
+ keyguardRepository.setStatusBarState(StatusBarState.SHADE)
+ overrideResource(R.bool.config_use_split_notification_shade, false)
+ shadeRepository.setQsExpansion(.5f)
+ shadeRepository.setLegacyShadeExpansion(1f)
+ runCurrent()
+
+ // THEN shade expansion is zero
+ assertThat(actual).isEqualTo(.5f)
+ }
+
+ @Test
fun shadeExpansionWhenNotInSplitShadeAndQsFullyExpanded() =
testScope.runTest {
val actual by collectLastValue(underTest.shadeExpansion)
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeInteractorSceneContainerImplTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeInteractorSceneContainerImplTest.kt
index 8c9036a..e1908b9 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeInteractorSceneContainerImplTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/interactor/ShadeInteractorSceneContainerImplTest.kt
@@ -23,7 +23,6 @@
import com.android.systemui.common.ui.data.repository.fakeConfigurationRepository
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
-import com.android.systemui.keyguard.data.repository.keyguardTransitionRepository
import com.android.systemui.keyguard.shared.model.StatusBarState
import com.android.systemui.kosmos.testScope
import com.android.systemui.res.R
@@ -32,7 +31,6 @@
import com.android.systemui.shade.data.repository.shadeRepository
import com.android.systemui.shade.shared.model.ShadeMode
import com.android.systemui.testKosmos
-import com.android.systemui.user.data.repository.userRepository
import com.google.common.truth.Truth
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.ExperimentalCoroutinesApi
@@ -52,9 +50,7 @@
private val testScope = kosmos.testScope
private val configurationRepository = kosmos.fakeConfigurationRepository
private val keyguardRepository = kosmos.fakeKeyguardRepository
- private val keyguardTransitionRepository = kosmos.keyguardTransitionRepository
private val sceneInteractor = kosmos.sceneInteractor
- private val userRepository = kosmos.userRepository
private val shadeRepository = kosmos.shadeRepository
private val underTest = kosmos.shadeInteractorSceneContainerImpl
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/startable/ShadeStartableTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/startable/ShadeStartableTest.kt
index 2ab934c..07c4b00 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/startable/ShadeStartableTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/domain/startable/ShadeStartableTest.kt
@@ -16,7 +16,7 @@
package com.android.systemui.shade.domain.startable
-import androidx.test.ext.junit.runners.AndroidJUnit4
+import android.platform.test.flag.junit.FlagsParameterization
import androidx.test.filters.SmallTest
import com.android.compose.animation.scene.ObservableTransitionState
import com.android.compose.animation.scene.SceneKey
@@ -25,9 +25,8 @@
import com.android.systemui.authentication.shared.model.AuthenticationMethodModel
import com.android.systemui.common.ui.data.repository.fakeConfigurationRepository
import com.android.systemui.coroutines.collectLastValue
-import com.android.systemui.deviceentry.data.repository.fakeDeviceEntryRepository
-import com.android.systemui.deviceentry.domain.interactor.deviceUnlockedInteractor
import com.android.systemui.flags.EnableSceneContainer
+import com.android.systemui.flags.parameterizeSceneContainerFlag
import com.android.systemui.keyguard.data.repository.fakeDeviceEntryFingerprintAuthRepository
import com.android.systemui.keyguard.shared.model.SuccessFingerprintAuthenticationStatus
import com.android.systemui.kosmos.testScope
@@ -50,24 +49,42 @@
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
+import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
+import platform.test.runner.parameterized.ParameterizedAndroidJunit4
+import platform.test.runner.parameterized.Parameters
@OptIn(ExperimentalCoroutinesApi::class)
@SmallTest
-@RunWith(AndroidJUnit4::class)
-class ShadeStartableTest : SysuiTestCase() {
+@RunWith(ParameterizedAndroidJunit4::class)
+class ShadeStartableTest(flags: FlagsParameterization?) : SysuiTestCase() {
private val kosmos = testKosmos()
private val testScope = kosmos.testScope
- private val shadeInteractor = kosmos.shadeInteractor
- private val sceneInteractor = kosmos.sceneInteractor
- private val shadeExpansionStateManager = kosmos.shadeExpansionStateManager
- private val deviceEntryRepository = kosmos.fakeDeviceEntryRepository
- private val deviceUnlockedInteractor = kosmos.deviceUnlockedInteractor
- private val fakeConfigurationRepository = kosmos.fakeConfigurationRepository
- private val fakeSceneDataSource = kosmos.fakeSceneDataSource
+ private val shadeInteractor by lazy { kosmos.shadeInteractor }
+ private val sceneInteractor by lazy { kosmos.sceneInteractor }
+ private val shadeExpansionStateManager by lazy { kosmos.shadeExpansionStateManager }
+ private val fakeConfigurationRepository by lazy { kosmos.fakeConfigurationRepository }
+ private val fakeSceneDataSource by lazy { kosmos.fakeSceneDataSource }
- private val underTest = kosmos.shadeStartable
+ private lateinit var underTest: ShadeStartable
+
+ companion object {
+ @JvmStatic
+ @Parameters(name = "{0}")
+ fun getParams(): List<FlagsParameterization> {
+ return parameterizeSceneContainerFlag()
+ }
+ }
+
+ init {
+ mSetFlagsRule.setFlagsParameterization(flags!!)
+ }
+
+ @Before
+ fun setup() {
+ underTest = kosmos.shadeStartable
+ }
@Test
fun hydrateShadeMode() =
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/ui/viewmodel/ShadeSceneViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/ui/viewmodel/ShadeSceneViewModelTest.kt
index 2397de6..5312ad8 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/ui/viewmodel/ShadeSceneViewModelTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/shade/ui/viewmodel/ShadeSceneViewModelTest.kt
@@ -28,6 +28,7 @@
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.deviceentry.data.repository.fakeDeviceEntryRepository
import com.android.systemui.deviceentry.domain.interactor.deviceEntryInteractor
+import com.android.systemui.flags.EnableSceneContainer
import com.android.systemui.keyguard.data.repository.fakeDeviceEntryFingerprintAuthRepository
import com.android.systemui.keyguard.shared.model.SuccessFingerprintAuthenticationStatus
import com.android.systemui.kosmos.testScope
@@ -65,6 +66,7 @@
@SmallTest
@RunWith(AndroidJUnit4::class)
@TestableLooper.RunWithLooper
+@EnableSceneContainer
class ShadeSceneViewModelTest : SysuiTestCase() {
private val kosmos = testKosmos()
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarStateControllerImplTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/StatusBarStateControllerImplTest.kt
similarity index 69%
rename from packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarStateControllerImplTest.kt
rename to packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/StatusBarStateControllerImplTest.kt
index be5af88..fc9535c 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarStateControllerImplTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/StatusBarStateControllerImplTest.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2020 The Android Open Source Project
+ * Copyright (C) 2024 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -19,60 +19,32 @@
package com.android.systemui.statusbar
import android.animation.ObjectAnimator
-import android.testing.AndroidTestingRunner
+import android.platform.test.flag.junit.FlagsParameterization
import android.testing.TestableLooper
import androidx.test.filters.SmallTest
import com.android.internal.logging.testing.UiEventLoggerFake
import com.android.systemui.SysuiTestCase
import com.android.systemui.authentication.data.repository.fakeAuthenticationRepository
import com.android.systemui.authentication.shared.model.AuthenticationMethodModel
-import com.android.systemui.bouncer.data.repository.FakeKeyguardBouncerRepository
-import com.android.systemui.classifier.FalsingCollectorFake
-import com.android.systemui.common.ui.data.repository.FakeConfigurationRepository
-import com.android.systemui.common.ui.domain.interactor.ConfigurationInteractor
import com.android.systemui.coroutines.collectLastValue
-import com.android.systemui.deviceentry.domain.interactor.DeviceEntryUdfpsInteractor
import com.android.systemui.deviceentry.domain.interactor.deviceUnlockedInteractor
import com.android.systemui.flags.DisableSceneContainer
import com.android.systemui.flags.EnableSceneContainer
-import com.android.systemui.flags.FakeFeatureFlagsClassic
+import com.android.systemui.flags.parameterizeSceneContainerFlag
import com.android.systemui.jank.interactionJankMonitor
-import com.android.systemui.keyguard.data.repository.FakeCommandQueue
-import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository
-import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository
import com.android.systemui.keyguard.data.repository.fakeDeviceEntryFingerprintAuthRepository
-import com.android.systemui.keyguard.domain.interactor.FromLockscreenTransitionInteractor
-import com.android.systemui.keyguard.domain.interactor.FromPrimaryBouncerTransitionInteractor
-import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
-import com.android.systemui.keyguard.domain.interactor.fromGoneTransitionInteractor
-import com.android.systemui.keyguard.domain.interactor.fromLockscreenTransitionInteractor
-import com.android.systemui.keyguard.domain.interactor.fromPrimaryBouncerTransitionInteractor
import com.android.systemui.keyguard.domain.interactor.keyguardClockInteractor
-import com.android.systemui.keyguard.domain.interactor.keyguardTransitionInteractor
import com.android.systemui.keyguard.shared.model.SuccessFingerprintAuthenticationStatus
import com.android.systemui.kosmos.testScope
import com.android.systemui.plugins.statusbar.StatusBarStateController
-import com.android.systemui.power.data.repository.FakePowerRepository
-import com.android.systemui.power.domain.interactor.PowerInteractor
import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.scene.shared.model.Scenes
-import com.android.systemui.shade.LargeScreenHeaderHelper
-import com.android.systemui.shade.data.repository.FakeShadeRepository
-import com.android.systemui.shade.domain.interactor.ShadeInteractor
-import com.android.systemui.shade.domain.interactor.ShadeInteractorImpl
-import com.android.systemui.shade.domain.interactor.ShadeInteractorLegacyImpl
-import com.android.systemui.statusbar.disableflags.data.repository.FakeDisableFlagsRepository
-import com.android.systemui.statusbar.notification.stack.domain.interactor.SharedNotificationContainerInteractor
-import com.android.systemui.statusbar.notification.stack.domain.interactor.sharedNotificationContainerInteractor
-import com.android.systemui.statusbar.policy.ResourcesSplitShadeStateController
-import com.android.systemui.statusbar.policy.data.repository.FakeUserSetupRepository
-import com.android.systemui.statusbar.policy.domain.interactor.deviceProvisioningInteractor
+import com.android.systemui.shade.domain.interactor.shadeInteractor
import com.android.systemui.testKosmos
import com.android.systemui.util.kotlin.JavaAdapter
import com.android.systemui.util.mockito.mock
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.ExperimentalCoroutinesApi
-import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
import org.junit.Assert.assertEquals
@@ -87,26 +59,34 @@
import org.mockito.Mockito.mock
import org.mockito.Mockito.verify
import org.mockito.MockitoAnnotations
-import org.mockito.Mockito.`when` as whenever
+import platform.test.runner.parameterized.ParameterizedAndroidJunit4
+import platform.test.runner.parameterized.Parameters
@SmallTest
-@RunWith(AndroidTestingRunner::class)
+@RunWith(ParameterizedAndroidJunit4::class)
@TestableLooper.RunWithLooper
-class StatusBarStateControllerImplTest : SysuiTestCase() {
+class StatusBarStateControllerImplTest(flags: FlagsParameterization?) : SysuiTestCase() {
private val kosmos = testKosmos()
private val testScope = kosmos.testScope
- private lateinit var shadeInteractor: ShadeInteractor
- private lateinit var fromLockscreenTransitionInteractor: FromLockscreenTransitionInteractor
- private lateinit var fromPrimaryBouncerTransitionInteractor:
- FromPrimaryBouncerTransitionInteractor
+
private val mockDarkAnimator = mock<ObjectAnimator>()
- private val deviceEntryUdfpsInteractor = mock<DeviceEntryUdfpsInteractor>()
- private val largeScreenHeaderHelper = mock<LargeScreenHeaderHelper>()
private lateinit var underTest: StatusBarStateControllerImpl
private lateinit var uiEventLogger: UiEventLoggerFake
+ companion object {
+ @JvmStatic
+ @Parameters(name = "{0}")
+ fun getParams(): List<FlagsParameterization> {
+ return parameterizeSceneContainerFlag()
+ }
+ }
+
+ init {
+ mSetFlagsRule.setFlagsParameterization(flags!!)
+ }
+
@Before
fun setUp() {
MockitoAnnotations.initMocks(this)
@@ -118,7 +98,7 @@
uiEventLogger,
kosmos.interactionJankMonitor,
JavaAdapter(testScope.backgroundScope),
- { shadeInteractor },
+ { kosmos.shadeInteractor },
{ kosmos.deviceUnlockedInteractor },
{ kosmos.sceneInteractor },
{ kosmos.keyguardClockInteractor },
@@ -127,59 +107,6 @@
return mockDarkAnimator
}
}
-
- val powerInteractor =
- PowerInteractor(FakePowerRepository(), FalsingCollectorFake(), mock(), underTest)
- val keyguardRepository = FakeKeyguardRepository()
- val keyguardTransitionRepository = FakeKeyguardTransitionRepository()
- val featureFlags = FakeFeatureFlagsClassic()
- val shadeRepository = FakeShadeRepository()
- val configurationRepository = FakeConfigurationRepository()
- val keyguardTransitionInteractor = kosmos.keyguardTransitionInteractor
- fromLockscreenTransitionInteractor = kosmos.fromLockscreenTransitionInteractor
- fromPrimaryBouncerTransitionInteractor = kosmos.fromPrimaryBouncerTransitionInteractor
-
- val keyguardInteractor =
- KeyguardInteractor(
- keyguardRepository,
- FakeCommandQueue(),
- powerInteractor,
- FakeKeyguardBouncerRepository(),
- ConfigurationInteractor(configurationRepository),
- shadeRepository,
- keyguardTransitionInteractor,
- { kosmos.sceneInteractor },
- { kosmos.fromGoneTransitionInteractor },
- { kosmos.sharedNotificationContainerInteractor },
- testScope,
- )
-
- whenever(deviceEntryUdfpsInteractor.isUdfpsSupported).thenReturn(MutableStateFlow(false))
- shadeInteractor =
- ShadeInteractorImpl(
- testScope.backgroundScope,
- kosmos.deviceProvisioningInteractor,
- FakeDisableFlagsRepository(),
- mock(),
- keyguardRepository,
- keyguardTransitionInteractor,
- powerInteractor,
- FakeUserSetupRepository(),
- mock(),
- ShadeInteractorLegacyImpl(
- testScope.backgroundScope,
- keyguardRepository,
- SharedNotificationContainerInteractor(
- configurationRepository,
- mContext,
- ResourcesSplitShadeStateController(),
- keyguardInteractor,
- deviceEntryUdfpsInteractor,
- largeScreenHeaderHelperLazy = { largeScreenHeaderHelper }
- ),
- shadeRepository,
- )
- )
}
@Test
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/phone/DozeServiceHostCoroutinesTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/phone/DozeServiceHostCoroutinesTest.kt
new file mode 100644
index 0000000..1cd12f0
--- /dev/null
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/phone/DozeServiceHostCoroutinesTest.kt
@@ -0,0 +1,94 @@
+/*
+ * 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.
+ */
+
+@file:OptIn(ExperimentalCoroutinesApi::class)
+
+package com.android.systemui.statusbar.phone
+
+import android.testing.TestableLooper.RunWithLooper
+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.doze.DozeHost
+import com.android.systemui.flags.EnableSceneContainer
+import com.android.systemui.keyguard.domain.interactor.keyguardInteractor
+import com.android.systemui.kosmos.testScope
+import com.android.systemui.scene.data.repository.sceneContainerRepository
+import com.android.systemui.scene.shared.model.Scenes
+import com.android.systemui.testKosmos
+import com.android.systemui.util.mockito.mock
+import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.test.runCurrent
+import kotlinx.coroutines.test.runTest
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mockito.verify
+
+@SmallTest
+@RunWithLooper(setAsMainLooper = true)
+@RunWith(AndroidJUnit4::class)
+class DozeServiceHostCoroutinesTest : SysuiTestCase() {
+ private val kosmos = testKosmos()
+ private val testScope = kosmos.testScope
+
+ private val sceneContainerRepository = kosmos.sceneContainerRepository
+ private val keyguardInteractor = kosmos.keyguardInteractor
+
+ val underTest =
+ kosmos.dozeServiceHost.apply {
+ initialize(
+ /* centralSurfaces = */ mock(),
+ /* statusBarKeyguardViewManager = */ mock(),
+ /* notificationShadeWindowViewController = */ mock(),
+ /* ambientIndicationContainer = */ mock(),
+ )
+ }
+
+ @Test
+ @EnableSceneContainer
+ fun startStopDozing() =
+ testScope.runTest {
+ val isDozing by collectLastValue(keyguardInteractor.isDozing)
+
+ // GIVEN a callback is set
+ val callback: DozeHost.Callback = mock()
+ underTest.addCallback(callback)
+ // AND we are on the lock screen
+ sceneContainerRepository.changeScene(Scenes.Lockscreen)
+ // AND dozing is not requested yet
+ assertThat(underTest.dozingRequested).isFalse()
+
+ // WHEN dozing started
+ underTest.startDozing()
+ runCurrent()
+
+ // THEN isDozing is set to true
+ assertThat(isDozing).isTrue()
+ assertThat(underTest.dozingRequested).isTrue()
+ verify(callback).onDozingChanged(true)
+
+ // WHEN dozing stopped
+ underTest.stopDozing()
+ runCurrent()
+
+ // THEN isDozing is set to false
+ assertThat(isDozing).isFalse()
+ assertThat(underTest.dozingRequested).isFalse()
+ verify(callback).onDozingChanged(false)
+ }
+}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/phone/DozeServiceHostTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/phone/DozeServiceHostTest.java
index 7e5205b..2114489 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/phone/DozeServiceHostTest.java
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/phone/DozeServiceHostTest.java
@@ -41,7 +41,7 @@
import com.android.systemui.biometrics.AuthController;
import com.android.systemui.doze.DozeHost;
import com.android.systemui.doze.DozeLog;
-import com.android.systemui.flags.FakeFeatureFlagsClassic;
+import com.android.systemui.flags.DisableSceneContainer;
import com.android.systemui.keyguard.WakefulnessLifecycle;
import com.android.systemui.keyguard.domain.interactor.DozeInteractor;
import com.android.systemui.shade.NotificationShadeWindowViewController;
@@ -98,13 +98,11 @@
@Mock private DozeHost.Callback mCallback;
@Mock private DozeInteractor mDozeInteractor;
- private final FakeFeatureFlagsClassic mFeatureFlags = new FakeFeatureFlagsClassic();
-
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
mDozeServiceHost = new DozeServiceHost(mDozeLog, mPowerManager, mWakefullnessLifecycle,
- mStatusBarStateController, mDeviceProvisionedController, mFeatureFlags,
+ mStatusBarStateController, mDeviceProvisionedController,
mHeadsUpManager, mBatteryController, mScrimController,
() -> mBiometricUnlockController, () -> mAssistManager, mDozeScrimController,
mKeyguardUpdateMonitor, mPulseExpansionHandler, mNotificationShadeWindowController,
@@ -119,6 +117,7 @@
}
@Test
+ @DisableSceneContainer
public void testStartStopDozing() {
mDozeServiceHost.addCallback(mCallback);
when(mStatusBarStateController.getState()).thenReturn(StatusBarState.KEYGUARD);
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/AvalancheControllerTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/AvalancheControllerTest.kt
index 29f286f..7420ea0 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/AvalancheControllerTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/AvalancheControllerTest.kt
@@ -248,6 +248,35 @@
}
@Test
+ fun testGetDurationMs_untrackedEntryEmptyAvalanche_useAutoDismissTime() {
+ val givenEntry = createHeadsUpEntry(id = 0)
+
+ // Nothing is showing
+ mAvalancheController.headsUpEntryShowing = null
+
+ // Nothing is next
+ mAvalancheController.clearNext()
+
+ val durationMs = mAvalancheController.getDurationMs(givenEntry, autoDismissMs = 5000)
+ Truth.assertThat(durationMs).isEqualTo(5000)
+ }
+
+ @Test
+ fun testGetDurationMs_untrackedEntryNonEmptyAvalanche_useAutoDismissTime() {
+ val givenEntry = createHeadsUpEntry(id = 0)
+
+ // Given entry not tracked
+ mAvalancheController.headsUpEntryShowing = createHeadsUpEntry(id = 1)
+
+ mAvalancheController.clearNext()
+ val nextEntry = createHeadsUpEntry(id = 2)
+ mAvalancheController.addToNext(nextEntry, runnableMock!!)
+
+ val durationMs = mAvalancheController.getDurationMs(givenEntry, autoDismissMs = 5000)
+ Truth.assertThat(durationMs).isEqualTo(5000)
+ }
+
+ @Test
fun testGetDurationMs_lastEntry_useAutoDismissTime() {
// Entry is showing
val showingEntry = createHeadsUpEntry(id = 0)
@@ -261,7 +290,7 @@
}
@Test
- fun testGetDurationMs_nextEntryLowerPriority_500() {
+ fun testGetDurationMs_nextEntryLowerPriority_5000() {
// Entry is showing
val showingEntry = createFsiHeadsUpEntry(id = 1)
mAvalancheController.headsUpEntryShowing = showingEntry
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/BaseHeadsUpManagerTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/BaseHeadsUpManagerTest.java
index 7c130be..db8e14c1 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/BaseHeadsUpManagerTest.java
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/BaseHeadsUpManagerTest.java
@@ -38,9 +38,9 @@
import android.app.Notification;
import android.app.PendingIntent;
import android.app.Person;
+import android.platform.test.flag.junit.FlagsParameterization;
import android.testing.TestableLooper;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;
import com.android.internal.logging.testing.UiEventLoggerFake;
@@ -62,9 +62,14 @@
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
+import java.util.List;
+
+import platform.test.runner.parameterized.ParameterizedAndroidJunit4;
+import platform.test.runner.parameterized.Parameters;
+
@SmallTest
@TestableLooper.RunWithLooper
-@RunWith(AndroidJUnit4.class)
+@RunWith(ParameterizedAndroidJunit4.class)
public class BaseHeadsUpManagerTest extends SysuiTestCase {
@Rule
public MockitoRule rule = MockitoJUnit.rule();
@@ -129,10 +134,18 @@
}
}
+ @Parameters(name = "{0}")
+ public static List<FlagsParameterization> getFlags() {
+ return FlagsParameterization.allCombinationsOf(NotificationThrottleHun.FLAG_NAME);
+ }
+
+ public BaseHeadsUpManagerTest(FlagsParameterization flags) {
+ mSetFlagsRule.setFlagsParameterization(flags);
+ }
+
@Override
public void SysuiSetup() throws Exception {
super.SysuiSetup();
- mSetFlagsRule.disableFlags(NotificationThrottleHun.FLAG_NAME);
mAvalancheController = new AvalancheController(dumpManager);
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/HeadsUpManagerPhoneTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/HeadsUpManagerPhoneTest.java
index a8a75c0..f66e75a 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/HeadsUpManagerPhoneTest.java
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/HeadsUpManagerPhoneTest.java
@@ -26,9 +26,9 @@
import static org.mockito.Mockito.when;
import android.content.Context;
+import android.platform.test.flag.junit.FlagsParameterization;
import android.testing.TestableLooper;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;
import com.android.internal.logging.UiEventLogger;
@@ -58,10 +58,14 @@
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
+import java.util.List;
+
import kotlinx.coroutines.flow.StateFlowKt;
+import platform.test.runner.parameterized.ParameterizedAndroidJunit4;
+import platform.test.runner.parameterized.Parameters;
@SmallTest
-@RunWith(AndroidJUnit4.class)
+@RunWith(ParameterizedAndroidJunit4.class)
@TestableLooper.RunWithLooper
public class HeadsUpManagerPhoneTest extends BaseHeadsUpManagerTest {
@Rule public MockitoRule rule = MockitoJUnit.rule();
@@ -141,12 +145,17 @@
);
}
+ @Parameters(name = "{0}")
+ public static List<FlagsParameterization> getFlags() {
+ return FlagsParameterization.allCombinationsOf(NotificationThrottleHun.FLAG_NAME);
+ }
+
+ public HeadsUpManagerPhoneTest(FlagsParameterization flags) {
+ super(flags);
+ }
+
@Before
public void setUp() {
- // TODO(b/315362456) create separate test with the flag disabled
- // then modify this file to test with the flag enabled
- mSetFlagsRule.disableFlags(NotificationThrottleHun.FLAG_NAME);
-
when(mShadeInteractor.isAnyExpanded()).thenReturn(StateFlowKt.MutableStateFlow(false));
final AccessibilityManagerWrapper accessibilityMgr =
mDependency.injectMockDependency(AccessibilityManagerWrapper.class);
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/util/kotlin/BooleanFlowOperatorsTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/util/kotlin/BooleanFlowOperatorsTest.kt
index 96d1c0d..03a39f8 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/util/kotlin/BooleanFlowOperatorsTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/util/kotlin/BooleanFlowOperatorsTest.kt
@@ -20,6 +20,7 @@
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.coroutines.collectLastValue
+import com.android.systemui.coroutines.collectValues
import com.android.systemui.kosmos.testScope
import com.android.systemui.testKosmos
import com.android.systemui.util.kotlin.BooleanFlowOperators.and
@@ -27,6 +28,7 @@
import com.android.systemui.util.kotlin.BooleanFlowOperators.or
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.test.runTest
import org.junit.Test
@@ -62,6 +64,21 @@
}
@Test
+ fun and_onlyEmitsWhenValueChanges() =
+ testScope.runTest {
+ val flow1 = MutableStateFlow(false)
+ val flow2 = MutableStateFlow(false)
+ val values by collectValues(and(flow1, flow2))
+
+ assertThat(values).containsExactly(false)
+ flow1.value = true
+ // Overall value is still false, we should not have emitted again.
+ assertThat(values).containsExactly(false)
+ flow2.value = true
+ assertThat(values).containsExactly(false, true).inOrder()
+ }
+
+ @Test
fun or_allTrue_returnsTrue() =
testScope.runTest {
val result by collectLastValue(or(TRUE, TRUE))
@@ -83,6 +100,20 @@
}
@Test
+ fun or_onlyEmitsWhenValueChanges() =
+ testScope.runTest {
+ val flow1 = MutableStateFlow(false)
+ val flow2 = MutableStateFlow(false)
+ val values by collectValues(or(flow1, flow2))
+
+ assertThat(values).containsExactly(false)
+ flow1.value = true
+ assertThat(values).containsExactly(false, true).inOrder()
+ flow2.value = true
+ assertThat(values).containsExactly(false, true).inOrder()
+ }
+
+ @Test
fun not_true_returnsFalse() =
testScope.runTest {
val result by collectLastValue(not(TRUE))
diff --git a/packages/SystemUI/res/anim/shortcut_helper_close_anim.xml b/packages/SystemUI/res/anim/shortcut_helper_close_anim.xml
new file mode 100644
index 0000000..47fd78a
--- /dev/null
+++ b/packages/SystemUI/res/anim/shortcut_helper_close_anim.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ 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.
+ -->
+
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+ android:interpolator="@android:anim/accelerate_interpolator"
+ android:zAdjustment="top">
+
+ <translate
+ android:fromYDelta="0"
+ android:toYDelta="100%"
+ android:duration="@android:integer/config_shortAnimTime" />
+</set>
diff --git a/packages/SystemUI/res/anim/shortcut_helper_launch_anim.xml b/packages/SystemUI/res/anim/shortcut_helper_launch_anim.xml
new file mode 100644
index 0000000..77edf58
--- /dev/null
+++ b/packages/SystemUI/res/anim/shortcut_helper_launch_anim.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ 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.
+ -->
+
+<!-- Animation for when a dock window at the bottom of the screen is entering. -->
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+ android:interpolator="@android:anim/accelerate_decelerate_interpolator"
+ android:zAdjustment="top">
+
+ <translate android:fromYDelta="100%"
+ android:toYDelta="0"
+ android:startOffset="@android:integer/config_shortAnimTime"
+ android:duration="@android:integer/config_mediumAnimTime"/>
+</set>
diff --git a/packages/SystemUI/res/drawable/notification_material_bg.xml b/packages/SystemUI/res/drawable/notification_material_bg.xml
index 587a5a0..715be07 100644
--- a/packages/SystemUI/res/drawable/notification_material_bg.xml
+++ b/packages/SystemUI/res/drawable/notification_material_bg.xml
@@ -28,9 +28,10 @@
<solid android:color="@color/notification_state_color_default" />
</shape>
</item>
- <item>
+ <item android:id="@+id/notification_focus_overlay">
<shape>
- <stroke android:width="3dp" android:color="@color/notification_focus_overlay_color"/>
+ <stroke android:width="@dimen/notification_focus_stroke_width"
+ android:color="@color/notification_focus_overlay_color"/>
</shape>
</item>
</layer-list>
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/activity_keyboard_shortcut_helper.xml b/packages/SystemUI/res/layout/activity_keyboard_shortcut_helper.xml
new file mode 100644
index 0000000..292e496
--- /dev/null
+++ b/packages/SystemUI/res/layout/activity_keyboard_shortcut_helper.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:id="@+id/shortcut_helper_sheet_container"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <LinearLayout
+ android:id="@+id/shortcut_helper_sheet"
+ style="@style/Widget.Material3.BottomSheet"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior">
+
+ <!-- Drag handle for accessibility -->
+ <com.google.android.material.bottomsheet.BottomSheetDragHandleView
+ android:id="@+id/drag_handle"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" />
+
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:layout_weight="1"
+ android:gravity="center"
+ android:textAppearance="?textAppearanceDisplayLarge"
+ android:background="?colorTertiaryContainer"
+ android:text="Shortcut Helper Content" />
+ </LinearLayout>
+</androidx.coordinatorlayout.widget.CoordinatorLayout>
diff --git a/packages/SystemUI/res/layout/combined_qs_header.xml b/packages/SystemUI/res/layout/combined_qs_header.xml
index beb481a..b9ef88e 100644
--- a/packages/SystemUI/res/layout/combined_qs_header.xml
+++ b/packages/SystemUI/res/layout/combined_qs_header.xml
@@ -129,7 +129,7 @@
android:id="@+id/hover_system_icons_container"
android:layout_width="wrap_content"
android:layout_height="match_parent"
- android:layout_gravity="right|center_vertical"
+ android:layout_gravity="end|center_vertical"
android:gravity="center_vertical"
android:paddingStart="@dimen/hover_system_icons_container_padding_start"
android:paddingEnd="@dimen/hover_system_icons_container_padding_end"
diff --git a/packages/SystemUI/res/layout/media_carousel.xml b/packages/SystemUI/res/layout/media_carousel.xml
index 825ece85..ffe269a 100644
--- a/packages/SystemUI/res/layout/media_carousel.xml
+++ b/packages/SystemUI/res/layout/media_carousel.xml
@@ -19,7 +19,7 @@
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
- android:layout_height="wrap_content"
+ android:layout_height="match_parent"
android:clipChildren="false"
android:clipToPadding="false"
android:forceHasOverlappingRendering="false"
@@ -27,7 +27,7 @@
<com.android.systemui.media.controls.ui.view.MediaScrollView
android:id="@+id/media_carousel_scroller"
android:layout_width="match_parent"
- android:layout_height="wrap_content"
+ android:layout_height="match_parent"
android:scrollbars="none"
android:clipChildren="false"
android:clipToPadding="false"
diff --git a/packages/SystemUI/res/layout/screenshot_shelf.xml b/packages/SystemUI/res/layout/screenshot_shelf.xml
index 6a5b999f..26d3f43 100644
--- a/packages/SystemUI/res/layout/screenshot_shelf.xml
+++ b/packages/SystemUI/res/layout/screenshot_shelf.xml
@@ -147,4 +147,11 @@
<include layout="@layout/screenshot_work_profile_first_run" />
<include layout="@layout/screenshot_detection_notice" />
</FrameLayout>
+ <ImageView
+ android:id="@+id/screenshot_flash"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:visibility="gone"
+ android:elevation="12dp"
+ android:src="@android:color/white"/>
</com.android.systemui.screenshot.ui.ScreenshotShelfView>
diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml
index 0e1bed8..6f5984e 100644
--- a/packages/SystemUI/res/values-af/strings.xml
+++ b/packages/SystemUI/res/values-af/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Kennisgewingskerm."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Vinnige instellings."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Kitsinstellings en kennisgewingskerm."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Sluitskerm."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Sluit skerm"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Werksluitskerm"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Maak toe"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"volkome stilte"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"Sien alles"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"Gebruik Bluetooth"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"Gekoppel"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"Oudiodeling"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"Gestoor"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"ontkoppel"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"aktiveer"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"Skakel dit môre outomaties weer aan"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"Kenmerke soos Kitsdeel en Kry My Toestel gebruik Bluetooth"</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"Bluetooth sal môreoggend aanskakel"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"Oudiodeling"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"Deel tans oudio"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g> batterykrag"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Oudio"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Kopstuk"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Gehoortoestelle"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Bind nuwe toestel saam"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Klik om nuwe toestel saam te bind"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Deblokkeer toestelmikrofoon?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Deblokkeer toestelkamera?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Deblokkeer toestelkamera en mikrofoon?"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Laai tans vinnig • Vol oor <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Laai tans stadig • Vol oor <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Laai tans • Vol oor <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Legstukke op sluitskerm"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Swiep links om die gemeenskaplike tutoriaal te begin"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Pasmaak"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Maak toe"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Maak instellings oop"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Hervat werkapps?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"Hervat"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Maak legstukke op sluitskerm toe"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Legstukke op sluitskerm"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Wissel gebruiker"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"aftrekkieslys"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Alle programme en data in hierdie sessie sal uitgevee word."</string>
diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml
index 3709a900..b890a1b 100644
--- a/packages/SystemUI/res/values-am/strings.xml
+++ b/packages/SystemUI/res/values-am/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"ášáá³ááá« á¥áá¢"</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"áá£á á
áá¥á®áœá¢"</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"áá£á á
áá¥á®áœ á¥á ášáá³ááá« á¥áá¢"</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"áá« áá
áááá¢"</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"áá« áᜠááá"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"ášáµá« áá« áá
ááá"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"áá"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"áá ááá áá¥á³"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"áááá áááášá±"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"á¥áá±áá áá áá"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"á°áááá·á"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"ášáµáᜠááá«áµ"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"á°ááá§á"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"áááááµá á ááá¥"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"á«áá¥á©"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"áá á¥áá°áá á á«áµ-á°á á áµááá"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"á¥áá° áá£á ááá«áµ á¥á ášá¥áá áá£áªá« á áá á«á á£á
áªáᜠá¥áá±áá áá ááá"</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"á¥áá±á áá á ááµ áá á«á"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"ášáµáᜠááá«áµ"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"áµááœá á ááá«áµ áá"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g> á£áµáª"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"áŠá²á®"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"áá³áá«"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"ášááµááµ áœáá³ áá£áªá«"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"á á²áµ áá£áªá« á«á£áá©"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"á á²áµ áá£áªá« ááá£áá á á
á«áµáá"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"ášáá£áªá« áááá®áá á¥áá³ ááá³?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"ášáá£áªá« á«áá« á¥áá³ ááá³?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"ášáá£áªá« á«áá« á¥á áááá®áá á¥áá³ ááá³?"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • á áá¥ááµ áááá á ááááµ áá • á <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> ááµá¥ áááá"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • á ááá³ áááá á ááááµ áá • á <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> ááµá¥ áááá"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ááá á ááááµ áá • á <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> ááµá¥ áááá"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"ááá¥á®áœ á áá« áᜠááá áá"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"ášáá« á áᥠá¥áá ááá ááááá áá° áá« á«áážá«áµá±á¢"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"á á¥á
"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"á á°áá¥áµ"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"á
áá¥á®áœá áááµ"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"ášá¥á« áá°áá áªá«áᜠášááá áµ ááá¥á?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"ášááá áµ áá¥á"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"ááá¥á®áœá á áá« áᜠááá áá áá"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"ááá¥á®áœ á áá« áᜠááá áá"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"á°á áá ááá"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"áá°á³áœ á°áá³áœ ááá"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"á áá
ááá-áá ááµá¥ á«á ááá áá°áá áªá«áᜠá¥á ááᥠáá°ášááá¢"</string>
diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml
index 0a7250a..8762619 100644
--- a/packages/SystemUI/res/values-ar/strings.xml
+++ b/packages/SystemUI/res/values-ar/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Ù
Ø±ÙØ² Ø§ÙØ¥ØŽØ¹Ø§Ø±Ø§Øª."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Ø§ÙØ¥Ø¹Ø¯Ø§Ø¯Ø§Øª Ø§ÙØ³Ø±Ùعة."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"\"Ø§ÙØ¥Ø¹Ø¯Ø§Ø¯Ø§Øª Ø§ÙØ³Ø±Ùعة\" Ù\"Ù
Ø±ÙØ² Ø§ÙØ¥ØŽØ¹Ø§Ø±Ø§Øª\""</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"؎ا؎ة اÙÙÙÙ."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"؎ا؎ة اÙÙÙÙ"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"؎ا؎ة ÙÙÙ ØšÙØ§Ùات Ø§ÙØ¹Ù
Ù"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Ø¥ØºÙØ§Ù"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"ÙØªÙ
Ø§ÙØµÙت تÙ
اÙ
ÙØ§"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"عرض اÙÙÙ"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"استخداÙ
Ø§ÙØšÙÙØªÙØ«"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"Ù
ØªÙØµÙ"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"Ù
ØŽØ§Ø±ÙØ© Ø§ÙØµÙت"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"Ù
ØÙÙØž"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"Ø¥ÙØºØ§Ø¡ Ø§ÙØ±ØšØ·"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"ØªÙØ¹ÙÙ"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"ØªÙØ¹ÙÙ Ø§ÙØšÙÙØªÙØ« تÙÙØ§ØŠÙÙØ§ Ù
رة Ø£Ø®Ø±Ù ØºØ¯ÙØ§"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"ÙÙØ³ØªØ®Ø¯ÙÙ
Ø§ÙØšÙÙØªÙØ« ÙÙ Ù
ÙØ²Ø§Øª Ù
ث٠Quick Share Ù\"Ø§ÙØ¹Ø«Ùر عÙÙ Ø¬ÙØ§Ø²Ù\""</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"Ø³ÙØªÙ
ØªÙØ¹ÙÙ Ø§ÙØšÙÙØªÙØ« ØµØšØ§Ø Ø§ÙØºØ¯"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"Ù
ØŽØ§Ø±ÙØ© Ø§ÙØµÙت"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"Ù
ØŽØ§Ø±ÙØ© Ø§ÙØµÙت"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"Ù
ستÙÙ Ø·Ø§ÙØ© Ø§ÙØšØ·Ø§Ø±ÙØ© <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g>"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"ØµÙØª"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"سÙ
اعة Ø§ÙØ±Ø£Ø³"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"سÙ
اعات Ø§ÙØ£Ø°Ù Ø§ÙØ·ØšÙØ©"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Ø¥ÙØ±Ø§Ù Ø¬ÙØ§Ø² Ø¬Ø¯ÙØ¯"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"اÙÙØ± ÙØ¥ÙØ±Ø§Ù Ø¬ÙØ§Ø² Ø¬Ø¯ÙØ¯"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"ÙÙ ØªØ±ÙØ¯ Ø¥Ø²Ø§ÙØ© ØØžØ± Ù
ÙÙØ±ÙÙÙÙ Ø§ÙØ¬ÙازØ"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"ÙÙ ØªØ±ÙØ¯ Ø¥Ø²Ø§ÙØ© ØØžØ± ÙØ§Ù
ÙØ±Ø§ Ø§ÙØ¬ÙازØ"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"ÙÙ ØªØ±ÙØ¯ Ø¥Ø²Ø§ÙØ© ØØžØ± اÙÙØ§Ù
ÙØ±Ø§ ÙØ§ÙÙ
ÙÙØ±ÙÙÙÙØ"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Ø¬Ø§Ø±Ù Ø§ÙØŽØÙ Ø³Ø±ÙØ¹Ùا • ستÙ
ØªÙØŠ Ø§ÙØšØ·Ø§Ø±ÙØ© Ø®ÙØ§Ù <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Ø¬Ø§Ø±Ù Ø§ÙØŽØÙ ØšØšØ·Ø¡ • ستÙ
ØªÙØŠ Ø§ÙØšØ·Ø§Ø±ÙØ© Ø®ÙØ§Ù <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Ø¬Ø§Ø±Ù Ø§ÙØŽØÙ • ستÙ
ØªÙØŠ Ø§ÙØšØ·Ø§Ø±ÙØ© Ø®ÙØ§Ù <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Ø§ÙØªØ·ØšÙÙØ§Øª اÙÙ
ØµØºÙØ±Ø© عÙ٠؎ا؎ة اÙÙÙÙ"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Ù
رÙÙØ± Ø³Ø±ÙØ¹Ùا ÙÙÙÙ
ÙÙ ÙØšØ¯Ø¡ Ø§ÙØ¯ÙÙÙ Ø§ÙØªÙجÙÙÙ Ø§ÙØ¹Ø§Ù
."</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"ØªØ®ØµÙØµ"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Ø¥ØºÙØ§Ù"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"ÙØªØ Ø§ÙØ¥Ø¹Ø¯Ø§Ø¯Ø§Øª"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Ø£ØªØ±ÙØ¯ إعادة ØªÙØ¹Ù٠تطؚÙÙØ§Øª Ø§ÙØ¹Ù
ÙØ"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"إعادة Ø§ÙØªÙعÙÙ"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Ø¥ØºÙØ§Ù Ø§ÙØªØ·ØšÙÙØ§Øª اÙÙ
ØµØºÙØ±Ø© عÙ٠؎ا؎ة اÙÙÙÙ"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Ø§ÙØªØ·ØšÙÙØ§Øª اÙÙ
ØµØºÙØ±Ø© عÙ٠؎ا؎ة اÙÙÙÙ"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"تؚدÙ٠اÙÙ
ستخدÙ
"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"اÙÙØ§ØŠÙ
Ø© اÙÙ
ÙØ³Ø¯ÙØ©"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Ø³ÙØªÙ
ØØ°Ù ÙÙ Ø§ÙØªØ·ØšÙÙØ§Øª ÙØ§ÙØšÙØ§Ùات ÙÙ ÙØ°Ù Ø§ÙØ¬Ùسة."</string>
diff --git a/packages/SystemUI/res/values-as/strings.xml b/packages/SystemUI/res/values-as/strings.xml
index 3311588..03dddf0 100644
--- a/packages/SystemUI/res/values-as/strings.xml
+++ b/packages/SystemUI/res/values-as/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"àŠàŠŸàŠšàŠšà§ àŠªà§àŠšà§àŠ²à¥€"</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"àŠà§àŠ·àŠ¿àŠªà§à§° àŠà§àŠàŠ¿àŠà¥€"</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"àŠà§àŠ·àŠ¿àŠªà§à§° àŠà§àŠàŠ¿àŠ àŠàŠŸàŠšàŠšà§ àŠªà§àŠšà§àŠ²à¥€"</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"àŠ¬àŠšà§àЧ àŠžà§àŠà§à§°à§àŠšà¥€"</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"àŠ²àŠ àŠžà§àŠà§à§°à§àŠš"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"àŠà§°à§àŠ®àŠžà§àŠ¥àŠŸàŠšà§° àŠªà§à§°\'àŠ«àŠŸàŠàŠ²à§° àŠ²àŠ àŠžà§àŠà§à§°à§àŠš"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"àŠ¬àŠšà§àЧ àŠà§°àŠ"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"àŠžàŠ®à§àŠªà§à§°à§àŠ£ àŠšàŠ¿à§°à§±àŠ€àŠŸ"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"àŠàŠàŠŸàŠàЬà§à§° àŠàŠŸàŠàŠ"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"àŠ¬à§àвà§àŠà§àŠ¥ àŠ¬à§àŠ¯à§±àŠ¹àŠŸà§° àŠà§°àŠ"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"àŠžàŠàНà§àŠà§àŠ€ àŠàŠà§"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"àŠ
àŠ¡àŠ¿àŠ
’ àŠ¶à§àЬà§àŠ¯àŠŒàŠŸà§° àŠà§°àŠŸ"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"àŠà§àŠ àŠà§°àŠŸ àŠ¹à§àŠà§"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"àŠžàŠàНà§àŠ àŠ¬àŠ¿àŠà§àŠàŠ¿àŠšà§àŠš àŠà§°àŠ"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"àŠžàŠà§à§°àŠ¿àŠ¯àŠŒ àŠà§°àŠ"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"àŠàŠŸàŠàŠ²à§ àŠªà§àŠšà§° àŠžà§àŠ¬àŠ¯àŠŒàŠàŠà§à§°àŠ¿àŠ¯àŠŒàŠàŠŸà§±à§ àŠ
àŠš àŠà§°àŠ"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"Quick Share àŠà§°à§ Find My Deviceà§° àŠŠà§°à§ àŠžà§àŠ¬àŠ¿àŠ§àŠŸàŠžàŠ®à§àŠ¹à§ àŠ¬à§àвà§àŠà§àŠ¥ àŠ¬à§àŠ¯à§±àŠ¹àŠŸà§° àŠà§°à§"</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"àŠàŠŸàŠàŠ²à§ àŠªà§à§±àŠŸ àŠ¬à§àвà§àŠà§àŠ¥ àŠ
àŠš àŠ¹’àŠ¬"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"àŠ
àŠ¡àŠ¿àŠ
’ àŠ¶à§àЬà§àŠ¯àŠŒàŠŸà§° àŠà§°àŠŸ"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"àŠ
àŠ¡àŠ¿àŠ
’ àŠ¶à§àЬà§àŠ¯àŠŒàŠŸà§° àŠà§°àŠ¿ àŠ¥àŠàŠŸ àŠ¹à§àŠà§"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"àŠ¬à§àŠàŠŸà§°à§ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g>"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"àŠ
àŠ¡àŠ¿àŠ
’"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"àŠ¹à§àŠ¡àŠà§àŠ"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"àŠ¶à§àŠšàŠŸà§° àŠ¡àŠ¿àŠàŠŸàŠàŠ"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"àŠšàŠ€à§àŠš àŠ¡àŠ¿àŠàŠŸàŠàŠ àŠªà§àŠ¯àŠŒàŠŸà§° àŠà§°àŠ"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"àŠšàŠ€à§àŠš àŠ¡àŠ¿àŠàŠŸàŠàŠ àŠªà§àŠ¯àŠŒàŠŸà§° àŠà§°àŠ¿àŠ¬àŠ²à§ àŠà§àŠ²àŠ¿àŠ àŠà§°àŠ"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"àŠ¡àŠ¿àŠàŠŸàŠàŠà§° àŠ®àŠŸàŠàŠà§à§°\'àŠ«\'àŠš àŠ
ৱৰà§àŠ§à§° àŠªà§°àŠŸ àŠàŠàŠ€à§°àŠŸàŠ¬àŠšà§?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"àŠ¡àŠ¿àŠàŠŸàŠàŠà§° àŠà§àŠ®à§à§°àŠŸ àŠ
ৱৰà§àŠ§à§° àŠªà§°àŠŸ àŠàŠàŠ€à§°àŠŸàŠ¬àŠšà§?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"àŠ¡àŠ¿àŠàŠŸàŠàŠà§° àŠà§àŠ®à§à§°àŠŸ àŠà§°à§ àŠ®àŠŸàŠàŠà§à§°\'àŠ«\'àŠš àŠ
ৱৰà§àŠ§à§° àŠªà§°àŠŸ àŠàŠàŠ€à§°àŠŸàŠ¬àŠšà§?"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • àŠŠà§à§°à§àŠ€àŠàŠ€àŠ¿à§°à§ àŠàŠŸà§°à§àŠ àŠ¹à§ àŠàŠà§ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>àŠ€ àŠžàŠ®à§àŠªà§à§°à§àŠ£ àŠ¹’àŠ¬"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • àŠ²àŠŸàŠ¹à§ àŠ²àŠŸàŠ¹à§ àŠàŠŸà§°à§àŠ àŠ¹à§ àŠàŠà§ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>àŠ€ àŠžàŠ®à§àŠªà§à§°à§àŠ£ àŠ¹’àŠ¬"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • àŠàŠŸà§°à§àŠ àŠ¹à§ àŠàŠà§ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>àŠ€ àŠžàŠ®à§àŠªà§à§°à§àŠ£ àŠ¹’àŠ¬"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"àŠ²àŠ àŠžà§àŠà§à§°à§àŠšàŠ€ à§±àŠ¿àŠà§àŠ"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"àŠžàŠ®à§àŠªà§à§°àŠŠàŠŸàŠ¯àŠŒ àŠžàŠ®à§àŠªà§°à§àŠà§àŠ¯àŠŒ àŠšàŠ¿à§°à§àŠŠà§àŠ¶àŠšàŠŸ àŠà§°àŠ®à§àŠ àŠà§°àŠ¿àŠ¬àŠ²à§ àŠ¬àŠŸàŠàŠàŠ«àŠŸàŠ²à§ àŠà§à§±àŠŸàŠàŠª àŠà§°àŠ"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"àŠàŠŸàŠ·à§àŠàŠ®àŠŸàŠàŠ àŠà§°àŠ"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"àŠ
àŠà§à§°àŠŸàŠ¹à§àН àŠà§°àŠ"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"àŠà§àŠàŠ¿àŠ àŠà§àвàŠ"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"àŠàŠŸàŠ® àŠžàŠ®à§àŠªà§°à§àŠà§àŠ¯àŠŒ àŠàŠªà§ àŠàŠšàŠªàŠ àŠà§°àŠ¿àŠ¬àŠšà§?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"àŠàŠšàŠªàŠ àŠà§°àŠ"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"àŠ²àŠ àŠžà§àŠà§à§°à§àŠšàŠ€ à§±àŠ¿àŠà§àŠ àŠ¬àŠšà§àЧ àŠà§°àŠ"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"àŠ²àŠ àŠžà§àŠà§à§°à§àŠšàŠ€ à§±àŠ¿àŠà§àŠ"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"àŠ¬à§àŠ¯à§±àŠ¹àŠŸà§°àŠàŠŸà§°à§ àŠžàŠ²àŠšàŠ¿ àŠà§°àŠ"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"àŠªà§àв-àŠ¡àŠŸàŠàŠšà§° àŠ®à§àŠšà§"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"àŠàŠ àŠà§àжà§àŠ¬àŠšà§° àŠàŠàŠŸàŠàЬà§à§° àŠàŠªà§ àŠà§°à§ àŠ¡à§àŠàŠŸ àŠ®àŠàŠŸ àŠ¹\'àŠ¬à¥€"</string>
diff --git a/packages/SystemUI/res/values-az/strings.xml b/packages/SystemUI/res/values-az/strings.xml
index 741cc41..b2e8aef 100644
--- a/packages/SystemUI/res/values-az/strings.xml
+++ b/packages/SystemUI/res/values-az/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"BildiriÅ kölgÉsi."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Tez ayarlar."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"SürÉtli ayarlar vÉ BildiriÅ göstÉriÅi."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Kilid ekranı."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Kilid ekranı"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Ekran kilidi"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Qapadın"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"tam sakitlik"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"Hamısına baxın"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"Bluetooth aç"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"QoÅulub"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"Audio paylaÅma"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"Yadda saxlandı"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"ÉlaqÉni kÉsin"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"aktivlÉÅdirin"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"Sabah avtomatik aktiv edin"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"CÉld PaylaÅım vÉ Cihazın Tapılması kimi funksiyalar Bluetooth istifadÉ edir"</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"Bluetooth sabah sÉhÉr aktiv edilÉcÉk"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"Audio paylaÅma"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"Audio paylaÅılır"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g> batareya"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Audio"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Qulaqlıq"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"EÅitmÉ cihazları"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Yeni cihaz birlÉÅdirin"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Yeni cihaz birlÉÅdirmÉk üçün kliklÉyin"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Cihaz mikrofonu blokdan çıxarılsın?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Cihaz kamerası blokdan çıxarılsın?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Cihaz kamerası vÉ mikrofonu blokdan çıxarılsın?"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • SürÉtlÉ Åarj edilir • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> sonra dolacaq"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Asta Åarj edilir • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> sonra dolacaq"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Åarj edilir • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> sonra dolacaq"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Kilid ekranındakı vidcetlÉr"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"İcma tÉlimatını baÅlatmaq üçün sola sürüÅdürün"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"FÉrdilÉÅdirin"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"BaÄlayın"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Ayarları açın"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"İŠtÉtbiqi üzrÉ pauza bitsin?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"Pauzanı bitirin"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Kilid ekranında vidcetlÉri baÄlayın"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Kilid ekranındakı vidcetlÉr"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Switch user"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"aÅaÄı çÉkilÉn menyu"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Bu sessiyada bütün tÉtbiqlÉr vÉ data silinÉcÉk."</string>
diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/res/values-b+sr+Latn/strings.xml
index 583ffaf..9d58a61 100644
--- a/packages/SystemUI/res/values-b+sr+Latn/strings.xml
+++ b/packages/SystemUI/res/values-b+sr+Latn/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Prozor sa obaveštenjima."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Brza podešavanja."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Brza podešavanja i traka sa obaveštenjima."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"ZakljuÄan ekran"</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"ZakljuÄani ekran"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"ZakljuÄan ekran za posao"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Zatvori"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"potpuna tišina"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"PrikaÅŸi sve"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"Koristi Bluetooth"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"Povezano"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"Deljenje zvuka"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"SaÄuvano"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"prekinite vezu"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"aktivirajte"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"Automatski ponovo ukljuÄi sutra"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"Funkcije kao što su Quick Share i PronaÄi moj ureÄaj koriste Bluetooth"</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"Bluetooth Äe se ukljuÄiti sutra ujutru"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"Deljenje zvuka"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"Deli se zvuk"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"Nivo baterije je <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g>"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Audio"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Slušalice"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Slušni aparati"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Upari novi ureÄaj"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Kliknite da biste uparili nov ureÄaj"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Åœelite da odblokirate mikrofon ureÄaja?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Åœelite da odblokirate kameru ureÄaja?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Åœelite da odblokirate kameru i mikrofon ureÄaja?"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Brzo se puni • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> do kraja punjenja"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Sporo se puni • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> do kraja punjenja"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Puni se • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> do kraja punjenja"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"VidÅŸeti na zakljuÄanom ekranu"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Prevucite ulevo da biste zapoÄeli zajedniÄki vodiÄ"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Prilagodite"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Odbaci"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Otvori podešavanja"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"UkljuÄiti poslovne aplikacije?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"Ponovo aktiviraj"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Zatvorite vidÅŸete na zakljuÄanom ekranu"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"VidÅŸeti na zakljuÄanom ekranu"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Zameni korisnika"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"padajuÄi meni"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Sve aplikacije i podaci u ovoj sesiji Äe biti izbrisani."</string>
@@ -772,7 +772,7 @@
<string name="group_system_cycle_back" msgid="8194102916946802902">"Pregledaj nedavno korišÄene aplikacije unazad"</string>
<string name="group_system_access_all_apps_search" msgid="1553588630154197469">"Otvori listu aplikacija"</string>
<string name="group_system_access_system_settings" msgid="8731721963449070017">"Otvori podešavanja"</string>
- <string name="group_system_access_google_assistant" msgid="7210074957915968110">"Otvori pomoÄnika"</string>
+ <string name="group_system_access_google_assistant" msgid="7210074957915968110">"Otvori PomoÄnik"</string>
<string name="group_system_lock_screen" msgid="7391191300363416543">"ZakljuÄavanje ekrana"</string>
<string name="group_system_quick_memo" msgid="3764560265935722903">"Napravi belešku"</string>
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"Obavljanje više zadataka istovremeno"</string>
diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml
index 50b407f..378d7e3 100644
--- a/packages/SystemUI/res/values-be/strings.xml
+++ b/packages/SystemUI/res/values-be/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"ÐŠÐµÐœÑ Ð°Ð¿Ð°Ð²ÑÑÑÑММÑ.."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Ð¥ÑÑкÑÑ ÐœÐ°Ð»Ð°ÐŽÑ."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Ð¥ÑÑкÑÑ ÐœÐ°Ð»Ð°ÐŽÑ Ñ ÑÑÑÑПк апавÑÑÑÑММÑÑ."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"ÐкÑаМ блакÑÑПÑкÑ."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"ÐкÑаМ блакÑÑПÑкÑ"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"ÐкÑаМ блакÑÑПÑÐºÑ ÐŽÐ·ÐµÐ¹ÐœÐ°ÑÑÑ"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"ÐакÑÑÑÑ"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"пПÑÐœÐ°Ñ ÑÑÑÑМÑ"</string>
@@ -376,6 +376,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"СлÑÑ
авÑÑ Ð°Ð¿Ð°ÑаÑÑ"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"СпалÑÑÑÑÑ ÐœÐŸÐ²ÑÑ Ð¿ÑÑлаЎÑ"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"ÐаÑÑÑМÑÑе, каб ÑпалÑÑÑÑÑ ÐœÐŸÐ²ÑÑ Ð¿ÑÑлаЎÑ"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"РазблакÑÑаваÑÑ ÐŒÑкÑаÑПМ пÑÑлаЎÑ?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"РазблакÑÑаваÑÑ ÐºÐ°ÐŒÐµÑÑ Ð¿ÑÑлаЎÑ?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"РазблакÑÑаваÑÑ ÐºÐ°ÐŒÐµÑÑ Ñ ÐŒÑкÑаÑПМ пÑÑлаЎÑ?"</string>
@@ -441,6 +443,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ÐЎзе Ñ
ÑÑÐºÐ°Ñ Ð·Ð°ÑаЎка • ÐПÑÐœÑ Ð·Ð°ÑаЎ пÑаз <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ÐЎзе павПлÑÐœÐ°Ñ Ð·Ð°ÑаЎка • ÐПÑÐœÑ Ð·Ð°ÑаЎ пÑаз <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ÐЎзе заÑаЎка • ÐПÑÐœÑ Ð·Ð°ÑаЎ пÑаз <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"ÐÑЎжÑÑÑ ÐœÐ° ÑкÑаМе блакÑÑПÑкÑ"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"ÐÑавÑЎзÑÑе палÑÑаЌ па ÑкÑаМе Ñлева, каб азМаÑÐŒÑÑÑа з ЎапаЌПжМÑкаЌ"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"ÐалаЎзÑÑÑ"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"ÐакÑÑÑÑ"</string>
@@ -459,6 +462,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"ÐЎкÑÑÑÑ ÐœÐ°Ð»Ð°ÐŽÑ"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"УклÑÑÑÑÑ Ð¿ÑаÑПÑМÑÑ Ð¿ÑагÑаЌÑ?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"УклÑÑÑÑÑ"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"ÐакÑÑÑÑ Ð²ÑЎжÑÑÑ ÐœÐ° ÑкÑаМе блакÑÑПÑкÑ"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"ÐÑЎжÑÑÑ ÐœÐ° ÑкÑаМе блакÑÑПÑкÑ"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"ÐеÑайÑÑÑ ÐŽÐ° ÑМÑага каÑÑÑÑалÑМÑка"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"вÑÑПÑМае ЌеМÑ"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"УÑе пÑагÑÐ°ÐŒÑ Ñ ÐŽÐ°ÐœÑÑ Ð³ÑÑага ÑеаМÑа бÑÐŽÑÑÑ Ð²ÑЎалеМÑ."</string>
diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml
index 3a28329..d4ffad3 100644
--- a/packages/SystemUI/res/values-bg/strings.xml
+++ b/packages/SystemUI/res/values-bg/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"ÐÐ°ÐŽÐ°Ñ Ð¿Ð°ÐœÐµÐ» Ñ ÐžÐ·Ð²ÐµÑÑОÑ."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"ÐÑÑзО МаÑÑÑПйкО."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"ÐÐ°ÐŽÐ°Ñ Ð¿Ð°ÐœÐµÐ» Ñ Ð±ÑÑзО МаÑÑÑПйкО О ОзвеÑÑОÑ."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"ÐаклÑÑваМе Ма екÑаМа."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"ÐаклÑÑеМ екÑаМ"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"ÐаклÑÑеМ екÑаМ Ма ÑлÑÐ¶ÐµÐ±ÐœÐžÑ Ð¿ÑПÑОл"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"ÐаÑваÑÑМе"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"пÑлМа ÑОÑОМа"</string>
@@ -376,6 +376,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"СлÑÑ
ПвО апаÑаÑО"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"СЎвПÑваМе Ма МПвП ÑÑÑÑПйÑÑвП"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"ÐлОкМеÑе за ÑЎвПÑваМе Ма МПвП ÑÑÑÑПйÑÑвП"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Ðа Ñе ПÑблПкОÑа лО ЌОкÑПÑПМÑÑ ÐœÐ° ÑÑÑÑПйÑÑвПÑП?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Ðа Ñе ПÑблПкОÑа лО каЌеÑаÑа Ма ÑÑÑÑПйÑÑвПÑП?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Ðа Ñе ПÑблПкОÑÐ°Ñ Ð»Ðž каЌеÑаÑа О ЌОкÑПÑПМÑÑ ÐœÐ° ÑÑÑÑПйÑÑвПÑП?"</string>
@@ -441,6 +443,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ÐаÑежЎа Ñе бÑÑзП • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> ЎП пÑлМП заÑежЎаМе"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ÐаÑежЎа Ñе бавМП • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> ЎП пÑлМП заÑежЎаМе"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ÐаÑежЎа Ñе • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> ЎП пÑлМП заÑежЎаМе"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"ÐÑОÑпПÑÐŸÐ±Ð»ÐµÐœÐžÑ ÐœÐ° заклÑÑÐµÐœÐžÑ ÐµÐºÑаМ"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"ÐÑекаÑайÑе пÑÑÑÑ ÐœÐ°Ð»ÑвП, за Ўа ÑÑаÑÑОÑаÑе ПбÑÐžÑ ÑÑПк"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"ÐеÑÑПМалОзОÑаМе"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"ÐÑÑ
вÑÑлÑМе"</string>
@@ -459,6 +462,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"ÐÑваÑÑМе Ма МаÑÑÑПйкОÑе"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"ÐÑÐŒÑМа Ма паÑзаÑа за ÑлÑж. пÑОл.?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"ÐÑÐŒÑМа Ма паÑзаÑа"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"ÐаÑваÑÑМе Ма пÑОÑпПÑПблеМОÑÑа Ма заклÑÑÐµÐœÐžÑ ÐµÐºÑаМ"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"ÐÑОÑпПÑÐŸÐ±Ð»ÐµÐœÐžÑ ÐœÐ° заклÑÑÐµÐœÐžÑ ÐµÐºÑаМ"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"ÐÑевклÑÑваМе ÐŒÐµÐ¶ÐŽÑ Ð¿ÐŸÑÑебОÑелОÑе"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"паЎаÑП ЌеМÑ"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"ÐÑОÑкО пÑÐžÐ»ÐŸÐ¶ÐµÐœÐžÑ Ðž ЎаММО в ÑазО ÑеÑÐžÑ Ñе бÑÐŽÐ°Ñ ÐžÐ·ÑÑОÑО."</string>
diff --git a/packages/SystemUI/res/values-bn/strings.xml b/packages/SystemUI/res/values-bn/strings.xml
index ec704b8..7c2a9fc 100644
--- a/packages/SystemUI/res/values-bn/strings.xml
+++ b/packages/SystemUI/res/values-bn/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"àŠ¬àŠ¿àŠà§àŠàŠªà§àŠ€àŠ¿ àŠ¶à§àŠ¡à§·"</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"àŠŠà§àаà§àŠ€ àŠžà§àŠàŠ¿àŠàŠžà§·"</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"àŠŠà§àаà§àŠ€ àŠžà§àŠàŠ¿àŠàŠž àŠàŠ¬àŠ àŠ¬àŠ¿àŠà§àŠàŠªà§àŠ€àŠ¿ àŠ¶à§àŠ¡à¥€"</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"àŠ²àŠ àŠžà§àŠà§àŠ°àŠ¿àŠšà¥€"</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"àŠ²àŠ àŠžà§àŠà§àŠ°àŠ¿àŠš"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"àŠàаà§àŠ®àŠžà§àŠ¥àŠ²à§àа àŠžà§àŠà§àŠ°àŠ¿àŠš àŠ²àŠ"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"àŠ¬àŠšà§àЧ àŠàаà§àŠš"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"àŠžàŠ®à§àŠªà§àаà§àŠ£ àŠšà§àŠ°àŠ¬"</string>
@@ -376,6 +376,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"àŠ¹àŠ¿àŠ¯àŠŒàŠŸàŠ°àŠ¿àŠ àŠ¡àŠ¿àŠàŠŸàŠàŠž"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"àŠšàŠ€à§àŠš àŠ¡àŠ¿àŠàŠŸàŠàŠž àŠªà§àŠ¯àŠŒàŠŸàŠ° àŠàаà§àŠš"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"àŠšàŠ€à§àŠš àŠ¡àŠ¿àŠàŠŸàŠàŠž àŠªà§àŠ¯àŠŒàŠŸàŠ° àŠàŠ°àŠ€à§ àŠà§àŠ²àŠ¿àŠ àŠàаà§àŠš"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"àŠ¡àŠ¿àŠàŠŸàŠàŠžà§àа àŠ®àŠŸàŠàŠà§àаà§àŠ«à§àŠš àŠàŠšàŠ¬à§àŠ²àŠ àŠàŠ°àŠ€à§ àŠàŠŸàŠš?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"àŠ¡àŠ¿àŠàŠŸàŠàŠžà§àа àŠà§àŠ¯àŠŸàŠ®à§àŠ°àŠŸ àŠàŠšàŠ¬à§àŠ²àŠ àŠàŠ°àŠ€à§ àŠàŠŸàŠš?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"àŠ¡àŠ¿àŠàŠŸàŠàŠžà§àа àŠà§àŠ¯àŠŸàŠ®à§àŠ°àŠŸ àŠàŠ¬àŠ àŠ®àŠŸàŠàŠà§àаà§àŠ«à§àŠš àŠàŠšàŠ¬à§àŠ²àŠ àŠàŠ°àŠ€à§ àŠàŠŸàŠš?"</string>
@@ -441,6 +443,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • àŠŠà§àаà§àŠ€ àŠàŠŸàŠ°à§àŠ àŠ¹àŠà§àŠà§ • àŠªà§àŠ°à§ àŠàŠŸàŠ°à§àŠ àŠ¹àŠ€à§ <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> àŠ²àŠŸàŠàЬà§"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • àŠ§à§àŠ°à§ àŠàŠŸàŠ°à§àŠ àŠ¹àŠà§àŠà§ • àŠªà§àŠ°à§ àŠàŠŸàŠ°à§àŠ àŠ¹àŠ€à§ <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> àŠ²àŠŸàŠàЬà§"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • àŠàŠŸàŠ°à§àŠ àŠ¹àŠà§àŠà§ • àŠªà§àŠ°à§ àŠàŠŸàŠ°à§àŠ àŠ¹àŠ€à§ àŠàŠ°àŠ <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> àŠžàŠ®àŠ¯àŠŒ àŠ²àŠŸàŠàЬà§"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"àŠ²àŠ àŠžà§àŠà§àŠ°àŠ¿àŠšà§ àŠàŠàŠà§àŠ"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"àŠàŠ®àŠ¿àŠàŠšàŠ¿àŠàŠ¿ àŠàŠ¿àŠàŠà§àŠ°àŠ¿àŠ¯àŠŒàŠŸàŠ² àŠàŠŸàŠ²à§ àŠàŠ°àŠ€à§ àŠ¬àŠŸàŠàŠŠàŠ¿àŠà§ àŠžà§àŠ¯àŠŒàŠŸàŠàŠª àŠàаà§àŠš"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"àŠàŠŸàŠžà§àŠàŠ®àŠŸàŠàŠ àŠàаà§àŠš"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"àŠ¬àŠŸàŠ€àŠ¿àŠ² àŠàаà§àŠš"</string>
@@ -459,6 +462,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"àŠžà§àŠàŠ¿àŠàŠž àŠà§àвà§àŠš"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"àŠ
àŠ«àŠ¿àŠžà§àа àŠ
à§àŠ¯àŠŸàŠª àŠàŠšàŠªàŠ àŠàŠ°àŠ€à§ àŠàŠŸàŠš?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"àŠàŠšàŠªàŠ àŠàаà§àŠš"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"àŠ²àŠ àŠžà§àŠà§àŠ°àŠ¿àŠšà§ àŠàŠàŠà§àŠ àŠ¬àŠšà§àЧ àŠàаà§àŠš"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"àŠ²àŠ àŠžà§àŠà§àŠ°àŠ¿àŠšà§ àŠàŠàŠà§àŠ"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"àŠ¬à§àŠ¯àŠ¬àŠ¹àŠŸàŠ°àŠàŠŸàŠ°à§ àŠªàŠŸàŠ²à§àŠà§ àŠŠàŠ¿àŠš"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"àŠªà§àŠ²àŠ¡àŠŸàŠàŠš àŠ®à§àŠšà§"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"àŠàŠ àŠžà§àŠ¶àŠšà§àа àŠžàŠ¬ àŠ
à§àŠ¯àŠŸàŠª àŠ àŠ¡à§àŠàŠŸ àŠ®à§àŠà§ àŠ«à§àŠ²àŠŸ àŠ¹àŠ¬à§à¥€"</string>
diff --git a/packages/SystemUI/res/values-bs/strings.xml b/packages/SystemUI/res/values-bs/strings.xml
index fd77f14..a7f87e4 100644
--- a/packages/SystemUI/res/values-bs/strings.xml
+++ b/packages/SystemUI/res/values-bs/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Obavještenja sa sjenÄenjem."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Brze postavke."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Brze postavke i lokacija za obavještenja."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"ZakljuÄan ekran."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"ZakljuÄavanje ekrana"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"ZakljuÄan ekran radnog profila"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Zatvori"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"potpuna tišina"</string>
@@ -376,6 +376,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Slušni aparati"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Uparite novi ureÄaj"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Kliknite da uparite novi ureÄaj"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Deblokirati mikrofon ureÄaja?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Deblokirati kameru ureÄaja?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Deblokirati kameru i mikrofon ureÄaja?"</string>
@@ -441,6 +443,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Brzo punjenje • Potpuna napunjenost za <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Sporo punjenje • Potpuna napunjenost za <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Punjenje • Potpuna napunjenost za <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"VidÅŸeti na zakljuÄanom ekranu"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Prevucite ulijevo da pokrenete zajedniÄki vodiÄ"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Prilagodite"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Odbaci"</string>
@@ -459,6 +462,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Otvori postavke"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Pokrenuti poslovne aplikacije?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"Ponovo pokreni"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Zatvaranje vidÅŸeta na zakljuÄanom ekranu"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"VidÅŸeti na zakljuÄanom ekranu"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Zamijeni korisnika"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"padajuÄi meni"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Sve aplikacije i podaci iz ove sesije Äe se izbrisati."</string>
@@ -1010,7 +1015,7 @@
<string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Pomjeranje izvan ivice i prikaz"</string>
<string name="accessibility_floating_button_action_remove_menu" msgid="6730432848162552135">"Uklanjanje"</string>
<string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"aktiviranje/deaktiviranje"</string>
- <string name="accessibility_floating_button_action_edit" msgid="1688227814600463987">"Uredite"</string>
+ <string name="accessibility_floating_button_action_edit" msgid="1688227814600463987">"UreÄivanje"</string>
<string name="quick_controls_title" msgid="6839108006171302273">"Kontrole ureÄaja"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Odaberite aplikaciju da dodate kontrole"</string>
<string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{Dodana je # kontrola.}one{Dodana je # kontrola.}few{Dodane su # kontrole.}other{Dodano je # kontrola.}}"</string>
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index aeb0ef0..fde008e 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Àrea de notificacions"</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Configuració ràpida"</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Configuració ràpida i àrea de notificacions."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Pantalla de bloqueig"</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Pantalla de bloqueig"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Pantalla de bloqueig per a la feina"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Tanca"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"silenci total"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"Mostra-ho tot"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"Utilitza\'l"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"Connectat"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"Compartició d\'àudio"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"Desat"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"desconnecta"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"activa"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"Torna\'l a activar automàticament demà"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"Les funcions com Quick Share i Troba el meu dispositiu utilitzen el Bluetooth"</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"El Bluetooth s\'activarà demà al matí"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"Compartició d\'àudio"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"S\'està compartint l\'àudio"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g> de bateria"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Àudio"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Auriculars"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Audiòfons"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Vincula un dispositiu nou"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Fes clic per vincular un dispositiu nou"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Vols desbloquejar el micròfon del dispositiu?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Vols desbloquejar la càmera del dispositiu?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Vols desbloquejar la càmera i el micròfon del dispositiu?"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Carregant ràpidament • Es completarà d\'aquí a <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Carregant lentament • Es completarà d\'aquí a <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • S\'està carregant • Es completarà d\'aquí a <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Widgets a la pantalla de bloqueig"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Llisca cap a l\'esquerra per iniciar el tutorial de la comunitat"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Personalitza"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Ignora"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Obre la configuració"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Reactivar les apps de treball?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"Reactiva"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Tanca els widgets a la pantalla de bloqueig"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Widgets a la pantalla de bloqueig"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Canvia d\'usuari"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"menú desplegable"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Totes les aplicacions i les dades d\'aquesta sessió se suprimiran."</string>
@@ -1006,7 +1006,7 @@
<string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Mou a dalt a la dreta"</string>
<string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Mou a baix a l\'esquerra"</string>
<string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Mou a baix a la dreta"</string>
- <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Mou dins de les vores i amaga"</string>
+ <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Mou fins la vora i amaga"</string>
<string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Mou fora de les vores i mostra"</string>
<string name="accessibility_floating_button_action_remove_menu" msgid="6730432848162552135">"Suprimeix"</string>
<string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"commuta"</string>
diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml
index 891f836..b659109 100644
--- a/packages/SystemUI/res/values-cs/strings.xml
+++ b/packages/SystemUI/res/values-cs/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Panel oznámení."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Rychlé nastavení."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Rychlé nastavení a panel oznámení"</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Obrazovka uzamÄení"</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Obrazovka uzamÄení"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Obrazovka uzamÄení pracovního profilu"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"ZavÅít"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"úplné ticho"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"Zobrazit vše"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"PouÅŸít Bluetooth"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"PÅipojeno"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"Sdílení zvuku"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"UloÅŸeno"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"odpojit"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"aktivovat"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"Zítra znovu automaticky zapnout"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"Funkce jako Quick Share a Najdi moje zaÅízení vyuÅŸívají Bluetooth"</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"Bluetooth se zapne zítra ráno"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"Sdílení zvuku"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"Sdílení zvuku"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"Baterie: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g>"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Zvuk"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Sluchátka"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Naslouchátka"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Spárovat nové zaÅízení"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Kliknutím spárujete nové zaÅízení"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Odblokovat mikrofon zaÅízení?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Odblokovat fotoaparát zaÅízení?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Odblokovat fotoaparát a mikrofon zaÅízení?"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Rychlé nabíjení • PlnÄ nabito za <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Pomalé nabíjení • PlnÄ nabito za <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Nabíjení • PlnÄ nabito za <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Widgety na obrazovce uzamÄení"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"PÅejetím doleva spustíte komunitní výukový program"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"PÅizpůsobit"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"ZavÅít"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"OtevÅít nastavení"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Zrušit pozastavení pracovních aplikací?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"Zrušit pozastavení"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"ZavÅít widgety na obrazovce uzamÄení"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Widgety na obrazovce uzamÄení"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"PÅepnout uÅŸivatele"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"rozbalovací nabídka"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Veškeré aplikace a data v této relaci budou vymazána."</string>
diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml
index 5c721a1..685a044 100644
--- a/packages/SystemUI/res/values-da/strings.xml
+++ b/packages/SystemUI/res/values-da/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Notifikationspanel."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Kvikmenu."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Kvikmenu og notifikationspanel."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Låseskærm."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Låseskærm"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Låseskærm til arbejde"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Luk"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"total stilhed"</string>
@@ -376,6 +376,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Høreapparater"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Par ny enhed"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Klik for at parre en ny enhed"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Vil du fjerne blokeringen af enhedens mikrofon?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Vil du fjerne blokeringen af enhedens kamera?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Vil du fjerne blokeringen af enhedens kamera og mikrofon?"</string>
@@ -441,6 +443,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Oplader hurtigt • Fuldt opladet om <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Oplader langsomt • Fuldt opladet om <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Oplader • Fuldt opladet om <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Widgets på låseskærmen"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Stryg mod venstre for at starte den fælles vejledning"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Tilpas"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Luk"</string>
@@ -459,6 +462,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Åbn Indstillinger"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Vil du genoptage arbejdsapps?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"Genoptag"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Luk widgets på låseskærmen"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Widgets på låseskærmen"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Skift bruger"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"rullemenu"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Alle apps og data i denne session slettes."</string>
@@ -1156,7 +1161,7 @@
<string name="status_before_loading" msgid="1500477307859631381">"Indhold dukker snart op"</string>
<string name="missed_call" msgid="4228016077700161689">"Ubesvaret opkald"</string>
<string name="messages_count_overflow_indicator" msgid="7850934067082006043">"<xliff:g id="NUMBER">%d</xliff:g>+"</string>
- <string name="people_tile_description" msgid="8154966188085545556">"Se dine seneste beskeder, mistede opkald og statusopdateringer"</string>
+ <string name="people_tile_description" msgid="8154966188085545556">"Se dine seneste beskeder, ubesvarede opkald og statusopdateringer"</string>
<string name="people_tile_title" msgid="6589377493334871272">"Samtale"</string>
<string name="paused_by_dnd" msgid="7856941866433556428">"Sat på pause af Forstyr ikke"</string>
<string name="new_notification_text_content_description" msgid="2915029960094389291">"<xliff:g id="NAME">%1$s</xliff:g> har sendt en besked: <xliff:g id="NOTIFICATION">%2$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml
index 510dba9..a520cc8 100644
--- a/packages/SystemUI/res/values-de/strings.xml
+++ b/packages/SystemUI/res/values-de/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Benachrichtigungsleiste"</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Schnelleinstellungen"</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Schnelleinstellungen und Benachrichtigungsleiste."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Sperrbildschirm"</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Sperrbildschirm"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Sperrbildschirm für Arbeitsprofil"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Schließen"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"lautlos"</string>
@@ -376,6 +376,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Hörgeräte"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Neues Gerät koppeln"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Klicken, um neues Gerät zu koppeln"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Blockierung des Gerätemikrofons aufheben?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Blockierung der Gerätekamera aufheben?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Blockierung von Gerätekamera und Gerätemikrofon aufheben?"</string>
@@ -441,6 +443,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Wird schnell geladen • Voll in <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Wird langsam geladen • Voll in <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Wird geladen • Voll in <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Widgets auf dem Sperrbildschirm"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Wische nach links, um das gemeinsame Tutorial zu starten"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Anpassen"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Schließen"</string>
@@ -459,6 +462,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Einstellungen öffnen"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Geschäftliche Apps nicht mehr pausieren?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"Nicht mehr pausieren"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Widgets auf dem Sperrbildschirm schließen"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Widgets auf dem Sperrbildschirm"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Nutzer wechseln"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"Pull-down-Menü"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Alle Apps und Daten in dieser Sitzung werden gelöscht."</string>
@@ -1003,7 +1008,7 @@
<string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"Verknüpfung für „<xliff:g id="FEATURE_NAME">%s</xliff:g>“ entfernt"</string>
<string name="accessibility_floating_button_undo_message_number_text" msgid="4909270290725226075">"{count,plural, =1{# Verknüpfung entfernt}other{# Verknüpfungen entfernt}}"</string>
<string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Nach oben links verschieben"</string>
- <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Nach rechts oben verschieben"</string>
+ <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Nach oben rechts verschieben"</string>
<string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Nach unten links verschieben"</string>
<string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Nach unten rechts verschieben"</string>
<string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"An den Rand verschieben und verbergen"</string>
diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml
index a881536..be273e5 100644
--- a/packages/SystemUI/res/values-el/strings.xml
+++ b/packages/SystemUI/res/values-el/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Πλαίσιο σκίασης ειδοποιήσεων."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Γρήγορες ρυθμίσεις."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Γρήγορες ρυθμίσεις και πλαίσιο σκίασης ειδοποιήσεων."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"ΟθÏνη κλειδÏματος"</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Κλείδωμα οθÏνης"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"ΟθÏνη κλειδωμÎνης εργασίας"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Κλείσιμο"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"πλήρης σίγαση"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"Εμφάνιση Ïλων"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"Χρήση Bluetooth"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"ΣυνδÎθηκε"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"Κοινή χρήση ήχου"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"ΑποθηκεÏτηκε"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"αποσÏνδεση"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"ενεργοποίηση"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"ΑυτÏματη ενεργοποίηση ξανά αÏριο"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"Λειτουργίες Ïπως το Quick Share και η ΕÏρεση συσκευής χρησιμοποιοÏν το Bluetooth"</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"Το Bluetooth θα ενεργοποιηθεί αÏριο το πρωί"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"Κοινή χρήση ήχου"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"Κοινή χρήση ήχου"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"Μπαταρία <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g>"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Îχος"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Ακουστικά"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"ΣυσκευÎς ακοής"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"ΣÏζευξη νÎας συσκευής"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Κάντε κλικ για σÏζευξη νÎας συσκευής"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Κατάργηση αποκλεισμοÏ μικροφÏνου συσκευής;"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Κατάργηση αποκλεισμοÏ κάμερας συσκευής;"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Κατάργηση αποκλεισμοÏ κάμερας και μικροφÏνου συσκευής;"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Γρήγορη φÏρτιση • Πλήρης φÏρτιση σε <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Αργή φÏρτιση • Πλήρης φÏρτιση σε <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ΦÏρτιση • Πλήρης φÏρτιση σε <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Γραφικά στοιχεία στην οθÏνη κλειδÏματος"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"ΣÏρετε προς τα αριστερά για να ξεκινήσετε τον κοινÏχρηστο οδηγÏ"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Προσαρμογή"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Παράβλεψη"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Îνοιγμα ρυθμίσεων"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Αναίρ. παÏσης εφαρμ. εργασιÏν;"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"Αναίρεση παÏσης"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Κλείσιμο γραφικÏν στοιχείων στην οθÏνη κλειδÏματος"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Γραφικά στοιχεία στην οθÏνη κλειδÏματος"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Εναλλαγή χρήστη"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"αναπτυσσÏμενο μενοÏ"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Îλες οι εφαρμογÎς και τα δεδομÎνα αυτής της περιÏδου σÏνδεσης θα διαγραφοÏν."</string>
diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml
index d2af8a6..0cc3ffe 100644
--- a/packages/SystemUI/res/values-en-rAU/strings.xml
+++ b/packages/SystemUI/res/values-en-rAU/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Notification shade."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Quick settings."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Quick Settings and notification shade."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Lock screen."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Lock screen"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Work lock screen"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Close"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"total silence"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"See all"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"Use Bluetooth"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"Connected"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"Audio sharing"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"Saved"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"disconnect"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"activate"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"Automatically turn on again tomorrow"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"Features like Quick Share and Find My Device use Bluetooth"</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"Bluetooth will turn on tomorrow morning"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"Audio sharing"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"Sharing audio"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g> battery"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Audio"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Headset"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Hearing devices"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Pair new device"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Click to pair new device"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Unblock device microphone?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Unblock device camera?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Unblock device camera and microphone?"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Charging rapidly • Full in <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Charging slowly • Full in <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Charging • Full in <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Widgets on lock screen"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Swipe left to start the communal tutorial"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Customise"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Dismiss"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Open settings"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Unpause work apps?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"Unpause"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Close widgets on lock screen"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Widgets on lock screen"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Switch user"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"pulldown menu"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"All apps and data in this session will be deleted."</string>
diff --git a/packages/SystemUI/res/values-en-rCA/strings.xml b/packages/SystemUI/res/values-en-rCA/strings.xml
index 836eefa..4290264 100644
--- a/packages/SystemUI/res/values-en-rCA/strings.xml
+++ b/packages/SystemUI/res/values-en-rCA/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Notification shade."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Quick settings."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Quick settings and Notification shade."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Lock screen."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Lock screen"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Work lock screen"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Close"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"total silence"</string>
@@ -371,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Hearing devices"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Pair new device"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Click to pair new device"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Unblock device microphone?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Unblock device camera?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Unblock device camera and microphone?"</string>
@@ -436,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Charging rapidly • Full in <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Charging slowly • Full in <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Charging • Full in <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Widgets on lock screen"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Swipe left to start the communal tutorial"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Customize"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Dismiss"</string>
@@ -454,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Open settings"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Unpause work apps?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"Unpause"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Close widgets on lock screen"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Widgets on lock screen"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Switch user"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"pulldown menu"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"All apps and data in this session will be deleted."</string>
diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml
index d2af8a6..0cc3ffe 100644
--- a/packages/SystemUI/res/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res/values-en-rGB/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Notification shade."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Quick settings."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Quick Settings and notification shade."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Lock screen."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Lock screen"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Work lock screen"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Close"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"total silence"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"See all"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"Use Bluetooth"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"Connected"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"Audio sharing"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"Saved"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"disconnect"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"activate"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"Automatically turn on again tomorrow"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"Features like Quick Share and Find My Device use Bluetooth"</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"Bluetooth will turn on tomorrow morning"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"Audio sharing"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"Sharing audio"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g> battery"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Audio"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Headset"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Hearing devices"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Pair new device"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Click to pair new device"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Unblock device microphone?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Unblock device camera?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Unblock device camera and microphone?"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Charging rapidly • Full in <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Charging slowly • Full in <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Charging • Full in <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Widgets on lock screen"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Swipe left to start the communal tutorial"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Customise"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Dismiss"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Open settings"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Unpause work apps?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"Unpause"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Close widgets on lock screen"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Widgets on lock screen"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Switch user"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"pulldown menu"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"All apps and data in this session will be deleted."</string>
diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml
index d2af8a6..0cc3ffe 100644
--- a/packages/SystemUI/res/values-en-rIN/strings.xml
+++ b/packages/SystemUI/res/values-en-rIN/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Notification shade."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Quick settings."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Quick Settings and notification shade."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Lock screen."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Lock screen"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Work lock screen"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Close"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"total silence"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"See all"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"Use Bluetooth"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"Connected"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"Audio sharing"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"Saved"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"disconnect"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"activate"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"Automatically turn on again tomorrow"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"Features like Quick Share and Find My Device use Bluetooth"</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"Bluetooth will turn on tomorrow morning"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"Audio sharing"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"Sharing audio"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g> battery"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Audio"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Headset"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Hearing devices"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Pair new device"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Click to pair new device"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Unblock device microphone?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Unblock device camera?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Unblock device camera and microphone?"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Charging rapidly • Full in <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Charging slowly • Full in <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Charging • Full in <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Widgets on lock screen"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Swipe left to start the communal tutorial"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Customise"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Dismiss"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Open settings"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Unpause work apps?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"Unpause"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Close widgets on lock screen"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Widgets on lock screen"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Switch user"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"pulldown menu"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"All apps and data in this session will be deleted."</string>
diff --git a/packages/SystemUI/res/values-en-rXC/strings.xml b/packages/SystemUI/res/values-en-rXC/strings.xml
index 77ef52e..bd578d7 100644
--- a/packages/SystemUI/res/values-en-rXC/strings.xml
+++ b/packages/SystemUI/res/values-en-rXC/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Notification shade."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Quick settings."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Quick settings and Notification shade."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Lock screen."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Lock screen"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Work lock screen"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Close"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"total silence"</string>
@@ -371,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Hearing devices"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Pair new device"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Click to pair new device"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Unblock device microphone?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Unblock device camera?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Unblock device camera and microphone?"</string>
@@ -436,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Charging rapidly • Full in <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Charging slowly • Full in <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Charging • Full in <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Widgets on lock screen"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Swipe left to start the communal tutorial"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Customize"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Dismiss"</string>
@@ -454,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Open settings"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Unpause work apps?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"Unpause"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Close widgets on lock screen"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Widgets on lock screen"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Switch user"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"pulldown menu"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"All apps and data in this session will be deleted."</string>
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index c33213a..c98dd54 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Pantalla de notificaciones"</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Configuración rápida"</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Configuración rápida y panel de notificaciones."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Pantalla de bloqueo"</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Pantalla de bloqueo"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Pantalla bloqueada del perfil de trabajo"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Cerrar"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"silencio total"</string>
@@ -376,6 +376,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Dispositivos auditivos"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Vincular dispositivo nuevo"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Haz clic para vincular un dispositivo nuevo"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"¿Quieres desbloquear el micrófono del dispositivo?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"¿Quieres desbloquear la cámara del dispositivo?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"¿Quieres desbloquear la cámara y el micrófono del dispositivo?"</string>
@@ -441,6 +443,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Carga rápida • Se completará en <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Cargando lento • Se completará en <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Cargando • Se completará en <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Widgets en la pantalla de bloqueo"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Desliza el dedo a la izquierda para iniciar el instructivo comunal"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Personalizar"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Descartar"</string>
@@ -459,6 +462,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Abrir configuración"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"¿Reanudar apps de trabajo?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"Reanudar"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Cerrar widgets en la pantalla de bloqueo"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Widgets en la pantalla de bloqueo"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Cambiar usuario"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"menú expandible"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Se eliminarán las aplicaciones y los datos de esta sesión."</string>
@@ -1006,7 +1011,7 @@
<string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Mover arriba a la derecha"</string>
<string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Mover abajo a la izquierda"</string>
<string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Mover abajo a la derecha"</string>
- <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Mover fuera de borde y ocultar"</string>
+ <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Mover al borde y ocultar"</string>
<string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Mover fuera de borde y mostrar"</string>
<string name="accessibility_floating_button_action_remove_menu" msgid="6730432848162552135">"Quitar"</string>
<string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"activar o desactivar"</string>
diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml
index 1dc93fde..58e18d0 100644
--- a/packages/SystemUI/res/values-es/strings.xml
+++ b/packages/SystemUI/res/values-es/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Pantalla de notificaciones"</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Ajustes rápidos"</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Ajustes rápidos y pantalla de notificaciones."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Pantalla de bloqueo."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Pantalla de bloqueo"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Pantalla de bloqueo para el perfil de trabajo"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Cerrar"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"silencio total"</string>
@@ -376,6 +376,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Audífonos"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Emparejar nuevo dispositivo"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Haz clic para emparejar un nuevo dispositivo"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"¿Desbloquear el micrófono del dispositivo?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"¿Desbloquear la cámara del dispositivo?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"¿Desbloquear la cámara y el micrófono del dispositivo?"</string>
@@ -441,6 +443,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Carga rápida • En <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> terminará de cargarse"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Carga lenta • En <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> terminará de cargarse"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Cargando • Carga completa en <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Widgets en la pantalla de bloqueo"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Desliza hacia la izquierda para iniciar el tutorial de la comunidad"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Personalizar"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Cerrar"</string>
@@ -459,6 +462,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Abrir ajustes"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"¿Reactivar apps de trabajo?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"Reactivar"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Cerrar widgets en la pantalla de bloqueo"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Widgets en la pantalla de bloqueo"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Cambiar de usuario"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"menú desplegable"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Se eliminarán todas las aplicaciones y datos de esta sesión."</string>
diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml
index fea407d..1613e79 100644
--- a/packages/SystemUI/res/values-et/strings.xml
+++ b/packages/SystemUI/res/values-et/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Märguande vari."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Kiirseaded."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Kiirseaded ja märguandeala."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Kuva lukustamine."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Lukustuskuva"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Töö lukustuskuva"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Sulgemine"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"täielik vaikus"</string>
@@ -376,6 +376,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Kuuldeseadmed"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Uue seadme sidumine"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Uue seadme sidumiseks klõpsake"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Kas tühistada seadme mikrofoni blokeerimine?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Kas tühistada seadme kaamera blokeerimine?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Kas tühistada seadme kaamera ja mikrofoni blokeerimine?"</string>
@@ -441,6 +443,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Kiirlaadimine • Täis <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> pärast"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Aeglane laadimine • Täis <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> pärast"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Laadimine • Täis <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> pärast"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Lukustuskuva vidinad"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Ühise õpetuse käivitamiseks pühkige vasakule"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Kohandage"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Loobuge"</string>
@@ -459,6 +462,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Ava seaded"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Kas lõpetada töörakenduste peatamine?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"Lõpeta peatamine"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Lukustuskuva vidinate sulgemine"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Lukustuskuva vidinad"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Kasutaja vahetamine"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"rippmenüü"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Seansi kõik rakendused ja andmed kustutatakse."</string>
@@ -1006,7 +1011,7 @@
<string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Teisalda üles paremale"</string>
<string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Teisalda alla vasakule"</string>
<string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Teisalda alla paremale"</string>
- <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Teisalda serva ja kuva"</string>
+ <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Teisalda serva ja peida"</string>
<string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Teisalda servast eemale ja kuva"</string>
<string name="accessibility_floating_button_action_remove_menu" msgid="6730432848162552135">"Eemalda"</string>
<string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"lülita"</string>
diff --git a/packages/SystemUI/res/values-eu/strings.xml b/packages/SystemUI/res/values-eu/strings.xml
index 41de1d4..358c152 100644
--- a/packages/SystemUI/res/values-eu/strings.xml
+++ b/packages/SystemUI/res/values-eu/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Jakinarazpenen panela."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Ezarpen bizkorrak."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Ezarpen bizkorrak eta jakinarazpenen panela."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Pantaila blokeatzeko aukera."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Pantaila blokeatua"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Laneko pantaila blokeatua"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Itxi"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"isiltasun osoa"</string>
@@ -376,6 +376,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Entzumen-gailuak"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Parekatu beste gailu bat"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Egin klik beste gailu bat parekatzeko"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Gailuaren mikrofonoa desblokeatu nahi duzu?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Gailuaren kamera desblokeatu nahi duzu?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Gailuaren kamera eta mikrofonoa desblokeatu nahi dituzu?"</string>
@@ -441,6 +443,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Bizkor kargatzen • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> guztiz kargatu arte"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Mantso kargatzen • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> guztiz kargatu arte"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Kargatzen • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> guztiz kargatu arte"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Pantaila blokeatuko widgetak"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Tutorial komuna hasteko, pasatu hatza ezkerrera"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Pertsonalizatu"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Baztertu"</string>
@@ -459,6 +462,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Ireki ezarpenak"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Laneko aplikazioak berraktibatu?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"Berraktibatu"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Itxi pantaila blokeatuko widgetak"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Pantaila blokeatuko widgetak"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Aldatu erabiltzailea"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"zabaldu menua"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Saioko aplikazio eta datu guztiak ezabatuko dira."</string>
diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml
index 8e72450..0e4b34fc 100644
--- a/packages/SystemUI/res/values-fa/strings.xml
+++ b/packages/SystemUI/res/values-fa/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Ù
جÙ
ÙØ¹Ù Ø§Ø¹ÙØ§Ù."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"ØªÙØžÛÙ
ات Ø³Ø±ÛØ¹."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"ØªÙØžÛÙ
ات ÙÙØ±Û Ù Ú©ØŽÙÛ Ø§Ø¹ÙØ§Ùات."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"ØµÙØÙ ÙÙÙ."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"ØµÙØÙ ÙÙÙ"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"ØµÙØÙ ÙÙ٠کارÛ"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"ؚستÙ"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"Ø³Ú©ÙØª کاÙ
Ù"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"Ø¯ÛØ¯Ù ÙÙ
Ù"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"Ø§Ø³ØªÙØ§Ø¯Ù از ØšÙÙØªÙØ«"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"Ù
تصÙ"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"ا؎تراک صدا"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"Ø°Ø®ÛØ±Ù؎دÙ"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"ÙØ·Ø¹ اتصاÙ"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"ÙØ¹Ø§Ù کردÙ"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"ÙØ±Ø¯Ø§ Ø¯ÙØšØ§Ø±Ù ØšÙØ·Ùر Ø®ÙØ¯Ú©Ø§Ø± Ø±ÙØŽÙ ØŽÙØ¯"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"ÙÛÚÚ¯ÛÙØ§ÛÛ Ù
ث٠«ÙÙ
رساÙÛ Ø³Ø±ÛØ¹» Ù «ÙŸÛدا کرد٠دستگاÙÙ
» از ØšÙÙØªÙØ« Ø§Ø³ØªÙØ§Ø¯Ù Ù
ÛÚ©ÙÙØ¯"</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"ØšÙÙØªÙØ« ÙØ±Ø¯Ø§ ØµØšØ Ø±ÙØŽÙ Ø®ÙØ§Ùد ؎د"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"ا؎تراک صدا"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"Ø¯Ø±ØØ§Ù Ø§ØŽØªØ±Ø§Ú©Ú¯Ø°Ø§Ø±Û ØµØ¯Ø§"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"ØŽØ§Ø±Ú ØšØ§ØªØ±Û <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g>"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"ØµÙØª"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"ÙØ¯Ø³Øª"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"سÙ
عک"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Ø¬ÙØª Ú©Ø±Ø¯Ù Ø¯Ø³ØªÚ¯Ø§Ù Ø¬Ø¯ÛØ¯"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"ØšØ±Ø§Û Ø¬ÙØª Ú©Ø±Ø¯Ù Ø¯Ø³ØªÚ¯Ø§Ù Ø¬Ø¯ÛØ¯Ø Ú©ÙÛÚ© Ú©ÙÛØ¯"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Ù
ÛکرÙÙÙÙ Ø¯Ø³ØªÚ¯Ø§Ù ÙØºÙ Ø§ÙØ³Ø¯Ø§Ø¯ ØŽÙØ¯Ø"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Ø¯ÙØ±ØšÛÙ Ø¯Ø³ØªÚ¯Ø§Ù ÙØºÙ Ø§ÙØ³Ø¯Ø§Ø¯ ØŽÙØ¯Ø"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Ø¯ÙØ±ØšÛÙ Ù Ù
ÛکرÙÙÙÙ Ø¯Ø³ØªÚ¯Ø§Ù ÙØºÙ Ø§ÙØ³Ø¯Ø§Ø¯ ØŽÙØ¯Ø"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Ø¯Ø±ØØ§Ù ØŽØ§Ø±Ú Ú©Ø±Ø¯Ù Ø³Ø±ÛØ¹ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> تا ØŽØ§Ø±Ú Ú©Ø§Ù
Ù"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Ø¯Ø±ØØ§Ù ØŽØ§Ø±Ú Ú©Ø±Ø¯Ù Ø¢ÙØ³ØªÙ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> تا ØŽØ§Ø±Ú Ú©Ø§Ù
Ù"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Ø¯Ø±ØØ§Ù ØŽØ§Ø±Ú ØŽØ¯Ù • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> تا ØŽØ§Ø±Ú Ú©Ø§Ù
Ù"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Ø§ØšØ²Ø§Ø±Ú©ÙØ§ در ØµÙØÙ ÙÙÙ"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"ØšØ±Ø§Û ØŽØ±ÙØ¹ Ø¢Ù
ÙØ²ØŽ گاÙ
ØšÙگاÙ
عÙ
ÙÙ
ÛØ ØªÙØ¯ ØšÙÚÙŸ ØšÚ©ØŽÛØ¯"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Ø³ÙØ§Ø±ØŽÛسازÛ"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"ؚستÙ"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"ؚاز Ú©Ø±Ø¯Ù ØªÙØžÛÙ
ات"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Ù
Ú©Ø« ØšØ±ÙØ§Ù
ÙÙØ§Û Ú©Ø§Ø±Û ÙØºÙ ØŽÙØ¯Ø"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"ÙØºÙ Ù
Ú©Ø«"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"ØšØ³ØªÙ Ø§ØšØ²Ø§Ø±Ú©ÙØ§ در ØµÙØÙ ÙÙÙ"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Ø§ØšØ²Ø§Ø±Ú©ÙØ§ در ØµÙØÙ ÙÙÙ"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"تغÛÛØ± کارؚر"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"Ù
ÙÙÛ ÙŸØ§ÛÛÙٟر"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"ÙÙ
Ù ØšØ±ÙØ§Ù
ÙÙØ§ ٠دادÙÙØ§Û اÛÙ Ø¬ÙØ³Ù ØØ°Ù Ø®ÙØ§Ùد ؎د."</string>
diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml
index 2935d2e..e6c92c5 100644
--- a/packages/SystemUI/res/values-fi/strings.xml
+++ b/packages/SystemUI/res/values-fi/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Ilmoitusalue."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Pika-asetukset."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Pika-asetukset ja ilmoitusalue"</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Lukitse näyttö."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Lukitusnäyttö"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Työlukitusnäyttö"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Sulje"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"hiljennä kaikki"</string>
@@ -376,6 +376,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Kuulolaitteet"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Muodosta uusi laitepari"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Muodosta uusi laitepari klikkaamalla"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Kumotaanko laitteen mikrofonin esto?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Kumotaanko laitteen kameran esto?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Kumotaanko laitteen kameran ja mikrofonin esto?"</string>
@@ -441,6 +443,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Latautuu nopeasti • Täynnä <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> päästä"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Latautuu hitaasti • Täynnä <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> päästä"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Latautuu • Täynnä <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> päästä"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Widgetit lukitusnäytöllä"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Aloita yhteisöesittely pyyhkäisemällä vasemmalle"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Muokkaa"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Hylkää"</string>
@@ -459,6 +462,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Avaa asetukset"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Laita työsovellukset päälle?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"Laita päälle"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Sulje widgetit lukitusnäytöllä"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Widgetit lukitusnäytöllä"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Vaihda käyttäjää"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"alasvetovalikko"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Kaikki sovellukset ja tämän istunnon tiedot poistetaan."</string>
diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml
index bd53d85..93d4828 100644
--- a/packages/SystemUI/res/values-fr-rCA/strings.xml
+++ b/packages/SystemUI/res/values-fr-rCA/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Volet des notifications"</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Paramètres rapides"</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Paramètres rapides et volet des notifications."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Écran de verrouillage"</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Écran de verrouillage"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Verrouillage de l\'écran du profil professionnel"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Fermer"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"aucune interruption"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"Tout afficher"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"Utiliser le Bluetooth"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"Connecté"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"Partage audio"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"Enregistré"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"Déconnecter"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"Activer"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"Activer le Bluetooth automatiquement demain"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"Les fonctionnalités comme Partage rapide et Localiser mon appareil utilisent le Bluetooth"</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"Le Bluetooth s\'activera demain matin"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"Partage audio"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"Partage de l\'audio en cours…"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"Pile : <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g>"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Audio"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Écouteurs"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Appareils auditifs"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Associer un nouvel appareil"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Cliquez ici pour associer un nouvel appareil"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Débloquer le microphone de l\'appareil?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Débloquer l\'appareil photo de l\'appareil?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Débloquer l\'appareil photo et le microphone?"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"En recharge rapide : <xliff:g id="PERCENTAGE">%2$s</xliff:g> • Terminée dans <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"En recharge lente : <xliff:g id="PERCENTAGE">%2$s</xliff:g> • Terminée <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Recharge en cours… • Se terminera dans <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Widgets sur l\'écran de verrouillage"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Balayer l\'écran vers la gauche pour démarrer le tutoriel communautaire"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Personnaliser"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Fermer"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Ouvrir les paramètres"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Réactiver les applis pros?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"Réactiver"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Fermer les widgets sur l\'écran de verrouillage"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Widgets sur l\'écran de verrouillage"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Changer d\'utilisateur"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"menu déroulant"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Toutes les applications et les données de cette session seront supprimées."</string>
@@ -1006,7 +1006,7 @@
<string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Déplacer dans coin sup. droit"</string>
<string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Déplacer dans coin inf. gauche"</string>
<string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Déplacer dans coin inf. droit"</string>
- <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Éloigner du bord et masquer"</string>
+ <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Rapprocher du bord et masquer"</string>
<string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Éloigner du bord et afficher"</string>
<string name="accessibility_floating_button_action_remove_menu" msgid="6730432848162552135">"Retirer"</string>
<string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"basculer"</string>
diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml
index 109e767..cf47742 100644
--- a/packages/SystemUI/res/values-fr/strings.xml
+++ b/packages/SystemUI/res/values-fr/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Volet des notifications"</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Réglages rapides"</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Réglages rapides et volet des notifications."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Écran de verrouillage"</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Écran de verrouillage"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Écran de verrouillage du profil professionnel"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Fermer"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"aucune interruption"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"Tout afficher"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"Utiliser le Bluetooth"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"Connecté"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"Partage audio"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"Enregistré"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"dissocier"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"activer"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"Réactiver automatiquement demain"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"Certaines fonctionnalités, telles que Quick Share et Localiser mon appareil, utilisent le Bluetooth"</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"Le Bluetooth sera activé demain matin"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"Partage audio"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"Audio partagé"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g> de batterie"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Audio"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Casque"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Appareils auditifs"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Associer un nouvel appareil"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Cliquer pour associer un nouvel appareil"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Débloquer le micro de l\'appareil ?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Débloquer la caméra de l\'appareil ?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Débloquer l\'appareil photo et le micro de l\'appareil ?"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Recharge rapide • Temps restant : <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Recharge lente • Temps restant : <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Recharge • Temps restant : <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Widgets sur l\'écran de verrouillage"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Balayer vers la gauche pour démarrer le tutoriel collectif"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Personnaliser"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Fermer"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Ouvrir les paramètres"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Réactiver les applis pro ?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"Réactiver"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Fermer les widgets sur l\'écran de verrouillage"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Widgets sur l\'écran de verrouillage"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Changer d\'utilisateur"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"menu déroulant"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Toutes les applications et les données de cette session seront supprimées."</string>
diff --git a/packages/SystemUI/res/values-gl/strings.xml b/packages/SystemUI/res/values-gl/strings.xml
index 06c984a..a47a7ed 100644
--- a/packages/SystemUI/res/values-gl/strings.xml
+++ b/packages/SystemUI/res/values-gl/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Panel despregable"</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Configuración rápida"</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Configuración rápida e panel despregable."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Pantalla de bloqueo."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Bloqueo de pantalla"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Pantalla de bloqueo do perfil de traballo"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Pechar"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"silencio total"</string>
@@ -376,6 +376,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Dispositivos auditivos"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Vincular un dispositivo novo"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Fai clic para vincular un novo dispositivo"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Queres desbloquear o micrófono do dispositivo?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Queres desbloquear a cámara do dispositivo?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Queres desbloquear a cámara e o micrófono do dispositivo?"</string>
@@ -441,6 +443,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Cargando rapidamente • A carga completarase en <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Cargando lentamente • A carga completarase en <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Cargando • A carga completarase en <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Widgets na pantalla de bloqueo"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Pasa o dedo cara á esquerda para iniciar o titorial comunitario"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Personalizar"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Pechar"</string>
@@ -459,6 +462,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Abrir configuración"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Reactivar apps do traballo?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"Reactivar"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Ocultar os widgets na pantalla de bloqueo"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Widgets na pantalla de bloqueo"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Cambiar usuario"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"menú despregable"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Eliminaranse todas as aplicacións e datos desta sesión."</string>
@@ -1002,10 +1007,10 @@
<string name="accessibility_floating_button_hidden_notification_text" msgid="1457021647040915658">"Toca para mostrar o botón Accesibilidade"</string>
<string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"Quitouse o atallo de <xliff:g id="FEATURE_NAME">%s</xliff:g>"</string>
<string name="accessibility_floating_button_undo_message_number_text" msgid="4909270290725226075">"{count,plural, =1{Quitouse # atallo}other{Quitáronse # atallos}}"</string>
- <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Mover á parte super. esquerda"</string>
- <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Mover á parte superior dereita"</string>
- <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Mover á parte infer. esquerda"</string>
- <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Mover á parte inferior dereita"</string>
+ <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Mover arriba á esquerda"</string>
+ <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Mover arriba á dereita"</string>
+ <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Mover abaixo á esquerda"</string>
+ <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Mover abaixo á dereita"</string>
<string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Mover ao bordo e ocultar"</string>
<string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Mover fóra do bordo e mostrar"</string>
<string name="accessibility_floating_button_action_remove_menu" msgid="6730432848162552135">"Quitar"</string>
diff --git a/packages/SystemUI/res/values-gu/strings.xml b/packages/SystemUI/res/values-gu/strings.xml
index c9a5662..b446543 100644
--- a/packages/SystemUI/res/values-gu/strings.xml
+++ b/packages/SystemUI/res/values-gu/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"ચà«àªàª¿àª«àª¿àªà«àª¶àªš શà«àª¡."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"àªàª¡àªªà« ઞà«àªàª¿àªàª."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"àªàª¡àªªà« ઞà«àªàª¿àªàª àª
ચૠચà«àªàª¿àª«àª¿àªà«àª¶àªš શà«àª¡."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"લà«àª ઞà«àªà«àª°à«àªš."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"લà«àª ઞà«àªà«àª°à«àªš"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"àªàªŸàª°à«àª¯ લà«àª ઞà«àªà«àª°à«àªš"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"બàªàª§ àªàª°à«"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"બિલàªà«àª² àª
વટઠચહà«àª"</string>
@@ -376,6 +376,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"ઞટàªàªàª³àªµàªŸàª®àªŸàª મઊઊ àªàªªàª€àªŸ ડિવટàªàªž"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"ચવટ ડિવટàªàªž ઞટથૠàªà«àª¡àªŸàª£ àªàª°à«"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"ચવટ ડિવટàªàªž ઞટથૠàªà«àª¡àªŸàª£ àªàª°àªµàªŸ મટàªà« àªà«àª²àª¿àª àªàª°à«"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"ડિવટàªàªžàªšàªŸ મટàªàªà«àª°à«àª«à«àªšàªšà« àª
ચબà«àª²à«àª àªàª°à«àª?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"ડિવટàªàªžàªšàªŸ àªà«
મà«àª°àªŸàªšà« àª
ચબà«àª²à«àª àªàª°à«àª?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"ડિવટàªàªžàªšàªŸ àªà«
મà«àª°àªŸ àª
ચૠમટàªàªà«àª°à«àª«à«àªšàªšà« àª
ચબà«àª²à«àª àªàª°à«àª?"</string>
@@ -441,6 +443,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • àªàª¡àªªàª¥à« àªàªŸàª°à«àª થઠરહà«àª¯à«àª àªà« • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>મટઠàªàªŸàª°à«àª થઠàªàª¶à«"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ધà«àª®à«àª¥à« àªàªŸàª°à«àª થઠરહà«àª¯à«àª àªà« • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>મટઠàªàªŸàª°à«àª થઠàªàª¶à«"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • àªàªŸàª°à«àª થઠરહà«àª¯à«àª àªà« • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>મટઠપà«àª°à«àª àªàªŸàª°à«àª થઠàªàª¶à«"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"લà«àª ઞà«àªà«àª°à«àªš પર વિàªà«àª"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"àªà«àª®à«àª¯à«àªšàª² àªà«àª¯à«àªà«àª°àª¿àª
લ શરૠàªàª°àªµàªŸ મટàªà« ડટબૠઞà«àªµàªŸàªàªª àªàª°à«"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"àªàªžà«àªàª®àªŸàªàª àªàª°à«"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"àªà«àª¡à« ઊà«"</string>
@@ -459,6 +462,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"ઞà«àªàª¿àªàª àªà«àª²à«"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"àªàª«àª¿àªžàªšà« થà«àªàªŸàªµà«àª²à« àªàªª àªàªŸàª²à« àªàª°à«àª?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"ફરૠàªàªŸàª²à« àªàª°à«"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"લà«àª ઞà«àªà«àª°à«àªš પર વિàªà«àª બàªàª§ àªàª°à«"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"લà«àª ઞà«àªà«àª°à«àªš પર વિàªà«àª"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"વપરટશàªàª°à«àª€àªŸ ઞà«àªµàª¿àª àªàª°à«"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"પà«àª²àª¡àªŸàªàªš મà«àªšà«"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"ઠઞ઀à«àª°àª®àªŸàªàªšà« ઀મટમ àªàªª àª
ચૠડà«àªàªŸ àªàªŸàª¢à« ચટàªàªµàªŸàª®àªŸàª àªàªµàª¶à«."</string>
diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml
index b2b2037..8fad88d 100644
--- a/packages/SystemUI/res/values-hi/strings.xml
+++ b/packages/SystemUI/res/values-hi/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"à€žà¥à€à€šà€Ÿ à€¶à¥à€¡."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"à€€à¥à€µà€°à€¿à€€ à€žà¥à€à€¿à€à€."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"à€à¥à€µà€¿à€ à€žà¥à€à€¿à€à€ à€à€° à€šà¥à€à€¿à€«à€Œà€¿à€à¥à€¶à€š à€¶à¥à€¡."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"à€²à¥à€ à€žà¥à€à¥à€°à¥à€š."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"à€²à¥à€ à€žà¥à€à¥à€°à¥à€š"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"à€µà€°à¥à€ à€²à¥à€ à€žà¥à€à¥à€°à¥à€š"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"à€¬à€à€Š à€à€°à¥à€"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"à€à¥à€ à€à€µà€Ÿà€à€Œ à€žà¥à€šà€Ÿà€ à€šà€¹à¥à€ à€Šà¥à€à¥"</string>
@@ -376,6 +376,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"à€à€Ÿà€š à€à¥ à€®à€¶à¥à€šà¥à€"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"à€šà€¯à€Ÿ à€¡à€¿à€µà€Ÿà€à€ž à€à¥à€¡à€Œà¥à€"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"à€šà€¯à€Ÿ à€¡à€¿à€µà€Ÿà€à€ž à€à¥à€¡à€Œà€šà¥ à€à¥ à€²à€¿à€ à€à¥à€²à€¿à€ à€à€°à¥à€"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"à€à¥à€¯à€Ÿ à€à€ªà€à¥ à€¡à€¿à€µà€Ÿà€à€ž à€à€Ÿ à€®à€Ÿà€à€à¥à€°à¥à€«à€Œà¥à€š à€
à€šà€¬à¥à€²à¥à€ à€à€°à€šà€Ÿ à€¹à¥?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"à€à¥à€¯à€Ÿ à€à€ªà€à¥ à€¡à€¿à€µà€Ÿà€à€ž à€à€Ÿ à€à¥à€®à€°à€Ÿ à€
à€šà€¬à¥à€²à¥à€ à€à€°à€šà€Ÿ à€¹à¥?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"à€à¥à€¯à€Ÿ à€à€ª à€¡à€¿à€µà€Ÿà€à€ž à€à€Ÿ à€à¥à€®à€°à€Ÿ à€à€° à€®à€Ÿà€à€à¥à€°à¥à€«à€Œà¥à€š à€
à€šà€¬à¥à€²à¥à€ à€à€°à€šà€Ÿ à€à€Ÿà€¹à€€à¥ à€¹à¥à€?"</string>
@@ -441,6 +443,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • à€€à¥à€à€Œ à€à€Ÿà€°à¥à€ à€¹à¥ à€°à€¹à€Ÿ à€¹à¥ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> à€®à¥à€ à€ªà¥à€°à€Ÿ à€à€Ÿà€°à¥à€ à€¹à¥ à€à€Ÿà€à€à€Ÿ"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • à€§à¥à€°à¥ à€à€Ÿà€°à¥à€ à€¹à¥ à€°à€¹à€Ÿ à€¹à¥ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> à€®à¥à€ à€ªà¥à€°à€Ÿ à€à€Ÿà€°à¥à€ à€¹à¥ à€à€Ÿà€à€à€Ÿ"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • à€à€Ÿà€°à¥à€ à€¹à¥ à€°à€¹à€Ÿ à€¹à¥ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> à€®à¥à€ à€ªà¥à€°à€Ÿ à€à€Ÿà€°à¥à€ à€¹à¥ à€à€Ÿà€à€à€Ÿ"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"à€²à¥à€ à€žà¥à€à¥à€°à¥à€š à€ªà€° à€µà€¿à€à¥à€"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"à€à€®à¥à€¯à¥à€šà€¿à€à¥ à€à¥à€¯à¥à€à¥à€°à€¿à€¯à€² à€¶à¥à€°à¥ à€à€°à€šà¥ à€à¥ à€²à€¿à€, à€¬à€Ÿà€à€ à€à€° à€žà¥à€µà€Ÿà€à€ª à€à€°à¥à€"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"à€ªà€žà€à€Š à€à¥ à€®à¥à€€à€Ÿà€¬à€¿à€ à€¬à€šà€Ÿà€à€"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"à€à€Ÿà€°à€¿à€ à€à€°à¥à€"</string>
@@ -459,6 +462,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"à€žà¥à€à€¿à€à€ à€à¥à€²à¥à€"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"à€µà€°à¥à€ à€à€ªà¥à€²à€¿à€à¥à€¶à€š à€à€Ÿà€²à¥ à€à€°à€šà¥ à€¹à¥à€?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"à€à€Ÿà€²à¥ à€à€°à¥à€"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"à€²à¥à€ à€žà¥à€à¥à€°à¥à€š à€ªà€° à€µà€¿à€à¥à€ à€¬à€à€Š à€à€°à¥à€"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"à€²à¥à€ à€žà¥à€à¥à€°à¥à€š à€ªà€° à€µà€¿à€à¥à€"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"à€à€ªà€¯à¥à€à€à€°à¥à€€à€Ÿ à€¬à€Šà€²à¥à€"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"à€ªà¥à€²à€¡à€Ÿà€à€š à€®à¥à€šà¥à€¯à¥"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"à€à€ž à€žà¥à€¶à€š à€à¥ à€žà€à¥ à€à€ªà¥à€²à€¿à€à¥à€¶à€š à€à€° à€¡à¥à€à€Ÿ à€à¥ à€¹à€à€Ÿ à€Šà€¿à€¯à€Ÿ à€à€Ÿà€à€à€Ÿ."</string>
@@ -504,7 +509,7 @@
<string name="manage_notifications_text" msgid="6885645344647733116">"à€®à¥à€šà¥à€ à€à€°à¥à€"</string>
<string name="manage_notifications_history_text" msgid="57055985396576230">"à€à€€à€¿à€¹à€Ÿà€ž"</string>
<string name="notification_section_header_incoming" msgid="850925217908095197">"à€šà€ à€žà¥à€à€šà€Ÿà€à€"</string>
- <string name="notification_section_header_gentle" msgid="6804099527336337197">"à€¬à€¿à€šà€Ÿ à€à€µà€Ÿà€à€Œ à€à€¿à€ à€®à€¿à€²à€šà¥ à€µà€Ÿà€²à¥ à€žà¥à€à€šà€Ÿà€à€"</string>
+ <string name="notification_section_header_gentle" msgid="6804099527336337197">"à€žà€Ÿà€à€²à¥à€à€ à€®à¥à€¡ à€®à¥à€ à€®à€¿à€²à¥ à€žà¥à€à€šà€Ÿà€à€"</string>
<string name="notification_section_header_alerting" msgid="5581175033680477651">"à€žà¥à€à€šà€Ÿà€à€"</string>
<string name="notification_section_header_conversations" msgid="821834744538345661">"à€¬à€Ÿà€€à€à¥à€€"</string>
<string name="accessibility_notification_section_header_gentle_clear_all" msgid="6490207897764933919">"à€¬à€¿à€šà€Ÿ à€à€µà€Ÿà€à€Œ à€à¥ à€žà€à¥ à€žà¥à€à€šà€Ÿà€à€ à€¹à€à€Ÿà€à€"</string>
@@ -779,8 +784,8 @@
<string name="system_multitasking_rhs" msgid="8714224917276297810">"à€®à¥à€à¥à€Šà€Ÿ à€à€ªà¥à€²à€¿à€à¥à€¶à€š à€à¥ à€Šà€Ÿà€à€ à€à€° à€Šà€¿à€à€Ÿà€šà¥ à€µà€Ÿà€²à¥ à€žà¥à€ªà¥à€²à€¿à€ à€žà¥à€à¥à€°à¥à€š à€à€žà¥à€€à¥à€®à€Ÿà€² à€à€°à¥à€"</string>
<string name="system_multitasking_lhs" msgid="8402954791206308783">"à€®à¥à€à¥à€Šà€Ÿ à€à€ªà¥à€²à€¿à€à¥à€¶à€š à€à¥ à€¬à€Ÿà€à€ à€à€° à€Šà€¿à€à€Ÿà€šà¥ à€µà€Ÿà€²à¥ à€žà¥à€ªà¥à€²à€¿à€ à€žà¥à€à¥à€°à¥à€š à€à€žà¥à€€à¥à€®à€Ÿà€² à€à€°à¥à€"</string>
<string name="system_multitasking_full_screen" msgid="336048080383640562">"à€žà¥à€ªà¥à€²à€¿à€ à€žà¥à€à¥à€°à¥à€š à€žà¥ à€«à€Œà¥à€² à€žà¥à€à¥à€°à¥à€š à€®à¥à€¡ à€ªà€° à€žà¥à€µà€¿à€ à€à€°à€šà¥ à€à¥ à€²à€¿à€"</string>
- <string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"à€žà¥à€ªà¥à€²à€¿à€ à€žà¥à€à¥à€°à¥à€š à€à€žà¥à€€à¥à€®à€Ÿà€² à€à€°à€€à¥ à€žà€®à€¯ à€Šà€Ÿà€à€ à€à€° à€¯à€Ÿ à€šà¥à€à¥ à€à¥ à€à€ª à€ªà€° à€žà¥à€µà€¿à€ à€à€°à¥à€"</string>
- <string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"à€žà¥à€ªà¥à€²à€¿à€ à€žà¥à€à¥à€°à¥à€š à€à€žà¥à€€à¥à€®à€Ÿà€² à€à€°à€€à¥ à€žà€®à€¯ à€¬à€Ÿà€à€ à€à€° à€¯à€Ÿ à€à€ªà€° à€à¥ à€à€ª à€ªà€° à€žà¥à€µà€¿à€ à€à€°à¥à€"</string>
+ <string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"à€žà¥à€ªà¥à€²à€¿à€ à€žà¥à€à¥à€°à¥à€š à€ªà€°, à€Šà€Ÿà€à€ à€à€° à€¯à€Ÿ à€šà¥à€à¥ à€à¥ à€à€ª à€ªà€° à€žà¥à€µà€¿à€ à€à€°à€šà¥ à€à¥ à€²à€¿à€"</string>
+ <string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"à€žà¥à€ªà¥à€²à€¿à€ à€žà¥à€à¥à€°à¥à€š à€ªà€°, à€¬à€Ÿà€à€ à€à€° à€¯à€Ÿ à€à€ªà€° à€à¥ à€à€ª à€ªà€° à€žà¥à€µà€¿à€ à€à€°à€šà¥ à€à¥ à€²à€¿à€"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"à€žà¥à€ªà¥à€²à€¿à€ à€žà¥à€à¥à€°à¥à€š à€à¥ à€Šà¥à€°à€Ÿà€š: à€à€ à€à€ªà¥à€²à€¿à€à¥à€¶à€š à€à¥ à€Šà¥à€žà€°à¥ à€à€ªà¥à€²à€¿à€à¥à€¶à€š à€žà¥ à€¬à€Šà€²à¥à€"</string>
<string name="keyboard_shortcut_group_input" msgid="6888282716546625610">"à€à€šà€ªà¥à€"</string>
<string name="input_switch_input_language_next" msgid="3782155659868227855">"à€
à€à€²à¥ à€à€Ÿà€·à€Ÿ à€ªà€° à€žà¥à€µà€¿à€ à€à€°à€šà¥ à€à¥ à€²à€¿à€"</string>
@@ -1006,7 +1011,7 @@
<string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"à€žà€¬à€žà¥ à€à€ªà€° à€Šà€Ÿà€à€ à€à€° à€²à¥ à€à€Ÿà€à€"</string>
<string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"à€žà€¬à€žà¥ à€šà¥à€à¥ à€¬à€Ÿà€à€ à€à€° à€²à¥ à€à€Ÿà€à€"</string>
<string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"à€žà€¬à€žà¥ à€šà¥à€à¥ à€Šà€Ÿà€à€ à€à€° à€²à¥ à€à€Ÿà€à€"</string>
- <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"à€à€ à€ªà€° à€²à¥ à€à€Ÿà€à€ à€à€° à€à€¿à€ªà€Ÿà€à€"</string>
+ <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"à€à€¿à€šà€Ÿà€°à¥ à€²à¥ à€à€Ÿà€à€ à€à€° à€à€¿à€ªà€Ÿà€à€"</string>
<string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"à€à€ à€žà¥ à€šà€¿à€à€Ÿà€²à¥à€ à€à€° à€Šà€¿à€à€Ÿà€à€"</string>
<string name="accessibility_floating_button_action_remove_menu" msgid="6730432848162552135">"à€¹à€à€Ÿà€à€"</string>
<string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"à€à¥à€à€² à€à€°à¥à€"</string>
diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml
index 64c35b8..4f95ae5 100644
--- a/packages/SystemUI/res/values-hr/strings.xml
+++ b/packages/SystemUI/res/values-hr/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Zaslon obavijesti."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Brze postavke."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Brze postavke i zaslon obavijesti."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"ZakljuÄavanje zaslona."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"ZakljuÄavanje zaslona"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"ZakljuÄani zaslon radnog profila"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Zatvaranje"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"potpuna tišina"</string>
@@ -376,6 +376,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Slušni ureÄaji"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Uparivanje novog ureÄaja"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Kliknite da biste uparili novi ureÄaj"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Åœelite li deblokirati mikrofon ureÄaja?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Åœelite li deblokirati kameru ureÄaja?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Åœelite li deblokirati kameru i mikrofon ureÄaja?"</string>
@@ -441,6 +443,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • brzo punjenje • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> do napunjenosti"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • sporo punjenje • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> do napunjenosti"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • punjenje • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> do napunjenosti"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Widgeti na zakljuÄanom zaslonu"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"PrijeÄite prstom ulijevo da biste pokrenuli zajedniÄki vodiÄ"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Prilagodi"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Odbaci"</string>
@@ -459,6 +462,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Otvori postavke"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Pokrenuti poslovne aplikacije?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"Ponovno pokreni"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Zatvaranje widgeta na zakljuÄanom zaslonu"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Widgeti na zakljuÄanom zaslonu"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Promjena korisnika"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"padajuÄi izbornik"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Izbrisat Äe se sve aplikacije i podaci u ovoj sesiji."</string>
@@ -779,8 +784,8 @@
<string name="system_multitasking_rhs" msgid="8714224917276297810">"Koristite podijeljeni zaslon s trenutaÄnom aplikacijom s desne strane"</string>
<string name="system_multitasking_lhs" msgid="8402954791206308783">"Koristite podijeljeni zaslon s trenutaÄnom aplikacijom s lijeve strane"</string>
<string name="system_multitasking_full_screen" msgid="336048080383640562">"Prelazak s podijeljenog zaslona na cijeli zaslon"</string>
- <string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"PrijeÄite na aplikaciju zdesna ili ispod uz podijeljeni zaslon"</string>
- <string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"PrijeÄite na aplikaciju slijeva ili iznad uz podijeljeni zaslon"</string>
+ <string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"Prelazak na aplikaciju zdesna ili ispod uz podijeljeni zaslon"</string>
+ <string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"Prelazak na aplikaciju slijeva ili iznad uz podijeljeni zaslon"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"Tijekom podijeljenog zaslona: zamijeni aplikaciju drugom"</string>
<string name="keyboard_shortcut_group_input" msgid="6888282716546625610">"Unos"</string>
<string name="input_switch_input_language_next" msgid="3782155659868227855">"Prelazak na sljedeÄi jezik"</string>
diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml
index 96c3e83..381d84c 100644
--- a/packages/SystemUI/res/values-hu/strings.xml
+++ b/packages/SystemUI/res/values-hu/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Értesítési felület."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Gyorsbeállítások."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Gyorsbeállítások és értesítési terület"</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Lezárási képernyÅ."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Lezárási képernyÅ"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Munka lezárási képernyÅvel"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Bezárás"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"teljes némítás"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"Összes megtekintése"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"Bluetooth használata"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"Csatlakozva"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"Hang megosztása"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"Mentve"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"leválasztás"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"aktiválás"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"Automatikus visszakapcsolás holnap"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"Egyes funkciók (például a Quick Share és a KészülékkeresÅ) Bluetootht használnak"</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"A Bluetooth holnap reggel bekapcsol"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"Hang megosztása"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"Hang megosztása…"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"Akkumulátor: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g>"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Hang"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Headset"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Hallókészülékek"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Új eszköz párosítása"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Kattintson új eszköz párosításához"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Feloldja az eszköz mikrofonjának letiltását?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Feloldja az eszköz kamerájának letiltását?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Feloldja az eszköz kamerájának és mikrofonjának letiltását?"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Gyors töltés • A teljes töltöttségig: <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Lassú töltés • A teljes töltöttségig: <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Töltés • A teljes töltöttségig: <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Modulok a lezárási képernyÅn"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Csúsztasson gyorsan balra a közösségi útmutató elindításához"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Személyre szabás"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Elvetés"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Beállítások megnyitása"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Feloldja a munkahelyi appokat?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"Szüneteltetés feloldása"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"A lezárási képernyÅn lévÅ modulok bezárása"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Modulok a lezárási képernyÅn"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Felhasználóváltás"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"lehúzható menü"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"A munkamenetben található összes alkalmazás és adat törlÅdni fog."</string>
@@ -1006,7 +1006,7 @@
<string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Áthelyezés fel és jobbra"</string>
<string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Áthelyezés le és balra"</string>
<string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Áthelyezés le és jobbra"</string>
- <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Áthelyezés a szélen kívül és elrejtés"</string>
+ <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Áthelyezés a szélére és elrejtés"</string>
<string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Áthelyezés a szélen kívül és mutatás"</string>
<string name="accessibility_floating_button_action_remove_menu" msgid="6730432848162552135">"Eltávolítás"</string>
<string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"váltás"</string>
diff --git a/packages/SystemUI/res/values-hy/strings.xml b/packages/SystemUI/res/values-hy/strings.xml
index 00c3318..c699317 100644
--- a/packages/SystemUI/res/values-hy/strings.xml
+++ b/packages/SystemUI/res/values-hy/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"ÔŸÕ¡Õ¶ÕžÖÖÕžÖÕŽÕ¶Õ¥ÖÕ« ÕŸÕ¡Õ°Õ¡Õ¶Õ¡Õ¯:"</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Ô±ÖÕ¡Õ£ Õ¯Õ¡ÖÕ£Õ¡ÕŸÕžÖÕžÖÕŽÕ¶Õ¥Ö:"</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Ô±ÖÕ¡Õ£ Õ¯Õ¡ÖÕ£Õ¡ÕŸÕžÖÕžÖÕŽÕ¶Õ¥Ö Ö Õ®Õ¡Õ¶ÕžÖÖÕžÖÕŽÕ¶Õ¥ÖÕ« ÕŸÕ¡Õ°Õ¡Õ¶Õ¡Õ¯Ö"</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Ô·Õ¯ÖÕ¡Õ¶Õ« Õ¯ÕžÕ²ÕºÕžÖÕŽ:"</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Ô¿ÕžÕ²ÕºÕ§Õ¯ÖÕ¡Õ¶"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Ô±Õ·ÕÕ¡Õ¿Õ¡Õ¶ÖÕ¡ÕµÕ«Õ¶ ÕºÖÕžÖÕ«Õ¬Õ« Õ¯ÕžÕ²ÕºÕ§Õ¯ÖÕ¡Õ¶"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"ÕÕ¡Õ¯Õ¥Õ¬"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"Õ¯Õ¡Õ¿Õ¡ÖÕµÕ¡Õ¬ լՌ՞ÖÕ©ÕµÕžÖÕ¶"</string>
@@ -376,6 +376,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Ԍ՜՞ղական ՜աÖÖÕ¥Ö"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"ÕÕžÖ ÕœÕ¡ÖÖÕ« ÕŠÕžÖÕ£Õ¡Õ¯ÖÕžÖÕŽ"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"ÕÕ¥Õ²ÕŽÕ¥ÖÕ Õ¶ÕžÖ ÕœÕ¡ÖÖ ÕŠÕžÖÕ£Õ¡Õ¯ÖÕ¥Õ¬ÕžÖ Õ°Õ¡ÕŽÕ¡Ö"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Ô±ÖÕ£Õ¥Õ¬Õ¡Õ°Õ¡Õ¶Õ¥ÕÕ¬ ՜աÖÖÕ« Õ՞՜աÖÕžÕ²Õš"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Ô±ÖÕ£Õ¥Õ¬Õ¡Õ°Õ¡Õ¶Õ¥ÕÕ¬ ՜աÖÖÕ« տե՜աÕÖÕ«Õ¯Õš"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Ô±ÖÕ£Õ¥Õ¬Õ¡Õ°Õ¡Õ¶Õ¥ÕÕ¬ ՜աÖÖÕ« տե՜աÕÖÕ«Õ¯Õš Ö Õ՞՜աÖÕžÕ²Õš"</string>
@@ -441,6 +443,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Ô±ÖÕ¡Õ£ Õ¬Õ«ÖÖÕ¡ÕŸÕžÖÕžÖÕŽ • ÕÕ¶Õ¡ÖÕ¥Õ¬ Õ§ <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ÔŽÕ¡Õ¶Õ€Õ¡Õ² Õ¬Õ«ÖÖÕ¡ÕŸÕžÖÕžÖÕŽ • ÕÕ¶Õ¡ÖÕ¥Õ¬ Õ§ <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ԌիÖÖÕ¡ÕŸÕžÖÕžÖÕŽ • ÕÕ¶Õ¡ÖÕ¥Õ¬ Õ§ <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"ÕÕ«Õ»Õ¥Õ©Õ¶Õ¥Ö Õ¯ÕžÕ²ÕºÕ§Õ¯ÖÕ¡Õ¶Õ«Õ¶"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Ô¹Õ¥ÖÕ©Õ¥Ö Õ±Õ¡ÕÕ ÕžÖÕ²Õ¥ÖÕžÖÕµÖÕš Õ£ÕžÖÕ®Õ¡ÖÕ¯Õ¥Õ¬ÕžÖ Õ°Õ¡ÕŽÕ¡Ö"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Ô±Õ¶Õ°Õ¡Õ¿Õ¡Õ¯Õ¡Õ¶Õ¡ÖÕ¶Õ¥Õ¬"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"ÕÕ¡Õ¯Õ¥Õ¬"</string>
@@ -459,6 +462,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Ô²Õ¡ÖÕ¥Õ¬ Õ¯Õ¡ÖÕ£Õ¡ÕŸÕžÖÕžÖÕŽÕ¶Õ¥ÖÕš"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"ÕÕ¥Ö՜կ՜եÕÕ¬ Õ¡Õ·Õ. Õ°Õ¡ÕŸÕ¥Õ¬ÕŸÕ¡Õ®Õ¶Õ¥ÖÕš"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"ÕÕ¥Ö՜կ՜ել"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"ÕÕ¡Õ¯Õ¥Õ¬ ÕŸÕ«Õ»Õ¥Õ©Õ¶Õ¥ÖÕš Õ¯ÕžÕ²ÕºÕ§Õ¯ÖÕ¡Õ¶Õ«Õ¶"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"ÕÕ«Õ»Õ¥Õ©Õ¶Õ¥Ö Õ¯ÕžÕ²ÕºÕ§Õ¯ÖÕ¡Õ¶Õ«Õ¶"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Ô±Õ¶Õ»Õ¡Õ¿Õ¥Õ¬ Ö
Õ£Õ¿ÕŸÕžÕ²Õ«Õ¶"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"Õ«Õ»Õ¶ÕžÕ² ÕšÕ¶Õ¿ÖÕ¡ÖÕ¡Õ¶Õ¯"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Ô±ÕµÕœ Õ¡Õ·ÕÕ¡Õ¿Õ¡Õ·ÖÕ»Õ¡Õ¶Õ« Õ¢ÕžÕ¬ÕžÖ Õ°Õ¡ÕŸÕ¥Õ¬ÕŸÕ¡Õ®Õ¶Õ¥ÖÕ¶ ÕžÖ Õ¿ÕŸÕµÕ¡Õ¬Õ¶Õ¥ÖÕš Õ¯Õ»Õ¶Õ»ÕŸÕ¥Õ¶:"</string>
diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml
index 826fc1a4..e5eb0df 100644
--- a/packages/SystemUI/res/values-in/strings.xml
+++ b/packages/SystemUI/res/values-in/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Bayangan pemberitahuan."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Setelan cepat."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Setelan cepat dan Menu notifikasi."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Layar kunci."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Kunci layar"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Layar kunci kantor"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Tutup"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"senyap total"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"Lihat semua"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"Gunakan Bluetooth"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"Terhubung"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"Berbagi Audio"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"Disimpan"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"putuskan koneksi"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"aktifkan"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"Otomatis aktifkan lagi besok"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"Fitur seperti Quick Share dan Temukan Perangkat Saya menggunakan Bluetooth"</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"Bluetooth akan dinyalakan besok pagi"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"Berbagi Audio"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"Berbagi Audio"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"Baterai <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g>"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Audio"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Headset"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Alat bantu dengar"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Sambungkan perangkat baru"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Klik untuk menyambungkan perangkat baru"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Berhenti memblokir mikrofon perangkat?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Berhenti memblokir kamera perangkat?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Berhenti memblokir kamera dan mikrofon perangkat?"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Mengisi daya dengan cepat • Penuh dalam waktu <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Mengisi daya dengan lambat • Penuh dalam waktu <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Mengisi daya • Penuh dalam waktu <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Widget di layar kunci"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Geser ke kiri untuk memulai tutorial komunal"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Sesuaikan"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Tutup"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Buka setelan"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Batalkan jeda aplikasi kerja?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"Batalkan jeda"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Tutup widget di layar kunci"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Widget di layar kunci"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Beralih pengguna"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"menu pulldown"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Semua aplikasi dan data dalam sesi ini akan dihapus."</string>
diff --git a/packages/SystemUI/res/values-is/strings.xml b/packages/SystemUI/res/values-is/strings.xml
index 1a0b3f2..d2122e8 100644
--- a/packages/SystemUI/res/values-is/strings.xml
+++ b/packages/SystemUI/res/values-is/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Tilkynningasvæði."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Flýtistillingar."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Flýtistillingar og tilkynningagluggi."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Lásskjár."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Lásskjár"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Vinnulásskjár"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Loka"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"algjör þögn"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"Sjá allt"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"Nota Bluetooth"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"Tengt"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"Hljóði deilt"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"Vistað"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"aftengja"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"virkja"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"Kveikja sjálfkrafa aftur á morgun"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"Eiginleikar eins og Flýtideiling og Finna tækið mitt nota Bluetooth"</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"Kveikt verður á Bluetooth í fyrramálið"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"Hljóði deilt"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"Deilir hljóði"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g> rafhlöðuhleðsla"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Hljóð"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Höfuðtól"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Heyrnartæki"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Para nýtt tæki"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Smelltu til að para nýtt tæki"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Opna fyrir hljóðnema tækisins?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Opna fyrir myndavél tækisins?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Opna fyrir myndavél og hljóðnema tækisins?"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Hraðhleðsla • Full hleðsla eftir <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Hæg hleðsla • Full hleðsla eftir <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Í hleðslu • Full hleðsla eftir <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Græjur á lásskjá"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Strjúktu til vinstri til að hefja samfélagsleiðsögnina"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Sérsníða"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Hunsa"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Opna stillingar"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Ljúka hléi vinnuforrita?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"Ljúka hléi"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Loka græjum á lásskjá"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Græjur á lásskjá"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Skipta um notanda"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"Fellivalmynd"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Öllum forritum og gögnum í þessari lotu verður eytt."</string>
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index d7e5cdc..ed13347 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Area notifiche."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Impostazioni rapide."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Area notifiche e Impostazioni rapide."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Schermata di blocco."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Schermata di blocco"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Schermata di blocco del profilo di lavoro"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Chiudi"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"silenzio totale"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"Visualizza tutti"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"Usa Bluetooth"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"Dispositivo connesso"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"Condivisione audio"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"Dispositivo salvato"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"disconnetti"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"attiva"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"Riattiva automaticamente domani"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"Funzionalità come Quick Share e Trova il mio dispositivo usano il Bluetooth"</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"Il Bluetooth verrà attivato domani mattina"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"Condivisione audio"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"Condivisione audio in corso…"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"Batteria: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g>"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Audio"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Auricolare"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Protesi uditive"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Accoppia nuovo dispositivo"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Fai clic per accoppiare un nuovo dispositivo"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Vuoi sbloccare il microfono del dispositivo?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Vuoi sbloccare la fotocamera del dispositivo?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Vuoi sbloccare la fotocamera e il microfono del dispositivo?"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Ricarica veloce • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> alla ricarica completa"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Ricarica lenta • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> alla ricarica completa"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • In carica • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> alla ricarica completa"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Widget su schermata di blocco"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Scorri a sinistra per iniziare il tutorial della community"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Personalizza"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Chiudi"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Apri impostazioni"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Riattivare le app di lavoro?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"Riattiva"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Chiudi widget su schermata di blocco"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Widget su schermata di blocco"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Cambio utente"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"menu a discesa"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Tutte le app e i dati di questa sessione verranno eliminati."</string>
@@ -1006,7 +1006,7 @@
<string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Sposta in alto a destra"</string>
<string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Sposta in basso a sinistra"</string>
<string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Sposta in basso a destra"</string>
- <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Sposta fino a bordo e nascondi"</string>
+ <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Sposta fino al bordo e nascondi"</string>
<string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Sposta fuori da bordo e mostra"</string>
<string name="accessibility_floating_button_action_remove_menu" msgid="6730432848162552135">"Rimuovi"</string>
<string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"attiva/disattiva"</string>
diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml
index bed2fc7..90e790f 100644
--- a/packages/SystemUI/res/values-iw/strings.xml
+++ b/packages/SystemUI/res/values-iw/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"××× ×תך××ת."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"×××ך×ת ×××ך×ת."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"×××ך×ת ×××ך×ת ×××× ××תך××ת."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"××¡× × ×¢×××."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"××¡× ×× ×¢×××"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"××¡× × ×¢××× ×©× ×¢××××"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"ס××ך×"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"××©×ª×§× ×××××ת"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"×׊×ת ××××"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"Bluetooth"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"××××ך"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"ש×ת××£ ×××××"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"× ×©×ך"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"× ×ת××§"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"××€×¢××"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"×××××ך ×××€×¢× ×©×× ×××××××ת ××ך"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"ת××× ×ת ××× \'ש×ת××£ ×××ך\' ×\'×××€× ×××ש×ך ש××\' ×שת×ש×ת ×-Bluetooth"</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"××××ך ×-Bluetooth ×××€×¢× ××ך ×××קך"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"ש×ת××£ ×××××"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"×ת×׊ע ש×ת××£ ×©× ××××××"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g> ס××××"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"×××××"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"×××× ××ת"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"××ש××š× ×©×××¢×"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"×ת××× ×©× ××ש×ך ××ש"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"׊ך×× ×××××¥ ××× ××ת××× ××ש×ך ××ש"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"×××× ×ת ×ס××ת ×××קך××€×× ×©× ×××ש×ך?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"×××× ×ת ×ס××ת ××׊××× ×©× ×××ש×ך?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"×××× ×ת ×ס××ת ××׊××× ××××קך××€×× ×©× ×××ש×ך?"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ×××¢×× × ××××š× • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> ×¢× ×ס×××"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ×××¢×× × ××××ת • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> ×¢× ×ס×××"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ×××¢×× × • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> ×¢× ×ס×××"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"×××××\'××× ×××¡× ×× ×¢×××"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"×׀שך ××××××§ ש×××× ××× ×××€×¢×× ×ת ×××ך×× ××ש×תף"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"×ת××× ××ש×ת"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"ס××ך×"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"×׀ת××ת ××××ך×ת"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"×××€×¢×× ×ת ×××€××ק׊××ת ××¢××××?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"××××× ××ש×××"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"ס××ךת ×××××\'××× ×××¡× ×× ×¢×××"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"×××××\'××× ×××¡× ×× ×¢×××"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"×××׀ת ×שת×ש"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"ת׀ך×× ××ש××× ××××"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"×× ×××€××ק׊××ת ××× ×ª×× ×× ××¡×©× ××× ×××××§×."</string>
diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml
index f403308..19d6e88 100644
--- a/packages/SystemUI/res/values-ja/strings.xml
+++ b/packages/SystemUI/res/values-ja/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"éç¥ã·ã§ãŒã"</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"ã¯ã€ãã¯èšå®"</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"ã¯ã€ãã¯èšå®ãšéç¥ã·ã§ãŒãã"</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"ããã¯ç»é¢"</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"ããã¯ç»é¢"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"ä»äºçšãããã¡ã€ã«ã®ããã¯ç»é¢"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"éãã"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"ãµã€ã¬ã³ã"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"ãã¹ãŠè¡šç€º"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"Bluetooth ã䜿çš"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"æ¥ç¶ããŸãã"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"é³å£°ã®å
±æ"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"ä¿åããŸãã"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"æ¥ç¶ãè§£é€"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"æå¹å"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"ææ¥èªåçã« ON ã«æ»ã"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"Quick Share ããããã€ã¹ãæ¢ãããªã©ã®æ©èœã¯ Bluetooth ã䜿çšããŸã"</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"ææ¥ã®æã« Bluetooth ã ON ã«ãªããŸã"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"é³å£°ã®å
±æ"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"é³å£°ãå
±æäž"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"ããããªãŒ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g>"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"ãªãŒãã£ãª"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"ãããã»ãã"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"è£èŽåš"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"æ°ããããã€ã¹ãšãã¢èšå®"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"ã¯ãªãã¯ãããšãæ°ããããã€ã¹ããã¢èšå®ã§ããŸã"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"ããã€ã¹ã®ãã€ã¯ã®ãããã¯ãè§£é€ããŸããïŒ"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"ããã€ã¹ã®ã«ã¡ã©ã®ãããã¯ãè§£é€ããŸããïŒ"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"ããã€ã¹ã®ã«ã¡ã©ãšãã€ã¯ã®ãããã¯ãè§£é€ããŸããïŒ"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • æ¥éå
é»äž • å®äºãŸã§ <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • äœéå
é»äž • å®äºãŸã§ <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • å
é»äž • ãã«å
é»ãŸã§ <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"ããã¯ç»é¢ã®ãŠã£ãžã§ãã"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"å·Šã«ã¹ã¯ã€ããããšãã³ãã¥ãã㣠ãã¥ãŒããªã¢ã«ãéå§ããŸã"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"ã«ã¹ã¿ãã€ãº"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"éãã"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"èšå®ãéã"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"ä»äºçšã¢ããªã®åæ¢è§£é€"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"åæ¢è§£é€"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"ããã¯ç»é¢ã®ãŠã£ãžã§ãããéãã"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"ããã¯ç»é¢ã®ãŠã£ãžã§ãã"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"ãŠãŒã¶ãŒãåãæ¿ãã"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"ãã«ããŠã³ ã¡ãã¥ãŒ"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"ãã®ã»ãã·ã§ã³ã§ã®ã¢ããªãšããŒã¿ã¯ãã¹ãŠåé€ãããŸãã"</string>
@@ -588,7 +588,7 @@
<string name="screen_pinning_negative" msgid="6882816864569211666">"ããã"</string>
<string name="screen_pinning_start" msgid="7483998671383371313">"ã¢ããªãåºå®ããŸãã"</string>
<string name="screen_pinning_exit" msgid="4553787518387346893">"ã¢ããªã®åºå®ãè§£é€ããŸãã"</string>
- <string name="stream_voice_call" msgid="7468348170702375660">"çºä¿¡"</string>
+ <string name="stream_voice_call" msgid="7468348170702375660">"é話"</string>
<string name="stream_system" msgid="7663148785370565134">"ã·ã¹ãã "</string>
<string name="stream_ring" msgid="7550670036738697526">"çä¿¡é³"</string>
<string name="stream_music" msgid="2188224742361847580">"ã¡ãã£ã¢"</string>
diff --git a/packages/SystemUI/res/values-ka/strings.xml b/packages/SystemUI/res/values-ka/strings.xml
index d9483ec..5fa6516 100644
--- a/packages/SystemUI/res/values-ka/strings.xml
+++ b/packages/SystemUI/res/values-ka/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"ášáá¢á§áááááááááá¡ á€áá áá"</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"á¡á¬á áá€á ááá áááá¢á ááá"</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"á¡á¬á áá€á ááá áááá¢á ááá áá ášáá¢á§áááááááááá¡ á€áá áá"</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"ááá áááá¡ áááááááá."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"á©áááá¢ááá ááá ááá"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"á¡ááá¡áá®á£á áá¡ á©áááá¢ááá ááá ááá"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"ááá®á£á áá"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"á¡á á£áá á¡áá©á£áá"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"á§ááááá¡ ááá®áá"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"Bluetooth-áá¡ ááááá§ááááá"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"áááááášáá ááá£áá"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"áá£áááá¡ áááááá ááá"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"ášáááá®á£áá"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"áááášáá áá¡ ááá¬á§ááá¢á"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"áááá¥á¢áá£á ááá"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"á®áááá®áá ááá¢áááá¢á£á áá á©áá ááá á®ááá"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"áá¡ááá á€á£áá¥áªáááá, á áááá ááªáá á¡á¬á áá€á áááááá ááá áá á©ááá ááá¬á§áááááááá¡ ááááá, áá§ááááá¡ Bluetooth-á¡"</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"Bluetooth á©ááá ááááá á®ááá ááááá"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"áá£áááá¡ áááááá ááá"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"áá£áááá¡ áááááá ááá"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g> ááá¢áá áá"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"áá£ááá"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"á§á£á á¡ááªáááá"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"á¡ááááá¡ áááá áá¢ááá"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"áá®ááá ááá¬á§áááááááá¡ ááá¬á§áááááá"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"áááá¬áááá£ááá áá®ááá ááá¬á§áááááááá¡ ááá¡áá¬á§áááááááá"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"áá¡á£á á ááá¬á§áááááááá¡ áááá áá€áááá¡ ááááááááá?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"áá¡á£á á ááá¬á§áááááááá¡ ááááá áá¡ ááááááááá?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"áá¡á£á á ááá¬á§áááááááá¡ ááááá áá¡ áá áááá áá€áááá¡ ááááááááá?"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • á¡á¬á áá€áá áá¢ááááá • á¡á á£á ááá¢ááááááá <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • áááá áá¢ááááá • á¡á á£á ááá¢ááááááá <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • áá¢ááááá • á¡á á£á ááá¢ááááááá <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"ááá¯áá¢ááá á©áááá¢áá ááá áááá"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"ááááá€á£á áªááá ááá áªá®ááá, á ááá áááá¬á§áá á¡ááá áá á¡áá®áááá«áŠáááááá"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"ááá áááá"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"á£áá á§áá€á"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"ááá áááá¢á áááá¡ ááá®á¡áá"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"ááááá áááá¥á¢áá£á ááá¡ á¡ááá¡áá®á£á áá¡ ááááá?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"áááá¥á¢áá£á ááá"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"á©áááá¢áá ááá áááá ááá¯áá¢áááá¡ ááá®á£á áá"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"ááá¯áá¢ááá á©áááá¢áá ááá áááá"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"áááá®ááá ááááá¡ ááááá ááá"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"á©áááášáááá ááááá£"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"áá á¡áá¡ááá¡ á§áááá ááá áá áááááªááá á¬ááášáááá."</string>
diff --git a/packages/SystemUI/res/values-kk/strings.xml b/packages/SystemUI/res/values-kk/strings.xml
index 36ae88a..5814a8d 100644
--- a/packages/SystemUI/res/values-kk/strings.xml
+++ b/packages/SystemUI/res/values-kk/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"ХабаÑлаМЎÑÑÑ ÑаÒÑаÑÑ"</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"ÐÑлЎаЌ паÑаЌеÑÑлеÑ."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"ÐÑлЎаЌ паÑаЌеÑÑÐ»ÐµÑ ÐŒÐµÐœ Ñ
абаÑлаМЎÑÑÑ ÑаÒÑаÑÑ."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"ÐекÑÑÑ ÑкÑаМÑ."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"ÒұлÑпÑаÑÐ»Ñ ÑкÑаМ"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"ÓÑекеÑÑÑ ÒұлÑпÑÐ°Ñ ÑкÑаМÑ"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"ÐабÑ"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"үМÑÑз"</string>
@@ -376,6 +376,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"ÐÑÑÑ ÒÒ±ÑÑлÒÑлаÑÑ"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Ðаңа ÒÒ±ÑÑлÒÑÐœÑ Ð¶Ò±Ð¿ÑаÑ"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Ðаңа ÒÒ±ÑÑлÒÑÐœÑ Ð¶Ò±Ð¿ÑÐ°Ñ Ò¯ÑÑМ баÑÑÒ£Ñз."</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"ÒÒ±ÑÑлÒÑ ÐŒÐžÐºÑПÑПМÑМ блПкÑаМ ÑÑÒаÑÑ ÐºÐµÑек пе?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"ÒÒ±ÑÑлÒÑ ÐºÐ°ÐŒÐµÑаÑÑМ блПкÑаМ ÑÑÒаÑÑ ÐºÐµÑек пе?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"ÒÒ±ÑÑлÒÑ ÐºÐ°ÐŒÐµÑаÑÑ ÐŒÐµÐœ ЌОкÑПÑПМÑМ блПкÑаМ ÑÑÒаÑÑ ÐºÐµÑек пе?"</string>
@@ -441,6 +443,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ÐÑлЎаЌ заÑÑÐŽÑÐ°Ñ • ТПлÑÑМа <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> ÒалЎÑ."</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ÐаÑÑ Ð·Ð°ÑÑÐŽÑалÑЎа • ТПлÑÑМа <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> ÒалЎÑ."</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ÐаÑÑÐŽÑалÑп жаÑÑÑ. • ТПлÑÑМа <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> ÒалЎÑ."</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"ÒұлÑпÑаÑÐ»Ñ ÑкÑаМЎаÒÑ Ð²ÐžÐŽÐ¶ÐµÑÑеÑ"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"ÐÑÑÐ°Ò ÐŸÒÑлÑÒÑÑ Ð°ÑÑ Ò¯ÑÑМ ÑПлÒа ÒаÑай ÑÑÑÒÑÑÑÒ£Ñз."</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"ÐейÑЌЎеÑ"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"ÐабÑ"</string>
@@ -459,6 +462,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"ÐаÑаЌеÑÑлеÑÐŽÑ Ð°ÑÑ"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"ÐұЌÑÑ ÒПлЎаМбалаÑÑМ ÒайÑа ÒПÑаÑÑз ба?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"ÒайÑа ÒПÑÑ"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"ÒұлÑпÑаÑÐ»Ñ ÑкÑаМЎа вОЎжеÑÑеÑÐŽÑ Ð¶Ð°Ð±Ñ"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"ÒұлÑпÑаÑÐ»Ñ ÑкÑаМЎаÒÑ Ð²ÐžÐŽÐ¶ÐµÑÑеÑ"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"ÐайЎалаМÑÑÑÐœÑ Ð°ÑÑÑÑÑÑÑ"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"аÑÑÐ»ÐŒÐ°Ð»Ñ ÐŒÓзÑÑ"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"ÐÑÑ ÑеаМÑÑаÒÑ Ð±Ð°ÑлÑÒ ÒПлЎаМба ЌеМ ЎеÑек жПйÑлаЎÑ."</string>
diff --git a/packages/SystemUI/res/values-km/strings.xml b/packages/SystemUI/res/values-km/strings.xml
index c7868db..a74dc9c 100644
--- a/packages/SystemUI/res/values-km/strings.xml
+++ b/packages/SystemUI/res/values-km/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"áááâáá¶áâááŒáâáááá¹á"</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"áá¶áâáááááâáá ááá"</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"áá¶áááááááá áá áá·ááááá¶ááááŒááááá¹áá"</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"á
á¶ááâááâá¢ááááááá"</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"á
á¶ááâááâá¢áááááá"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"á¢ááááááâá
á¶ááâááâááááááâáá¶ááá¶á"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"áá·á"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"áá·áááá¡ááâáá¶áááááá»á"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"ááŸáâáá¶ááá¢áá"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"ááááŸáááááŒááŒá"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"áá¶ááááá¶áá"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"áá¶ááááá¶ááááá¡ááááœááááá¶"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"áá¶áâááááá¶áá»á"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"áááá¶á
á"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"ááŸáááááŸááá¶á"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"ááŸááááááááááááááááá·ááááááááá
ááááááá¢áá"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"áá»ááá¶áááŒá
áá¶ Quick Share áá·á \"ááá§ááááááááááááá»á\" ááááŸáááááŒááŒá"</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"áááááŒááŒááá¹áááŸááá
áááá¹áááá¢áá"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"áá¶ááááá¶ááááá¡ááááœááááá¶"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"áááá»ááááá¶ááááá¡ááááœááááá¶"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"ááá <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g>"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"ááá¡áá"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"áá¶á"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"á§áááááááááœááá¶ááááá¶áá"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"ááááŒááááâá§áááááááááž"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"á
á»á
ááŸáááážááááŒááááá§áááááááááž"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"áááááááááá¶ááâáážááááŒá áááŒáâááááá§áááááá¬?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"áááááááááá¶ááâáá¶ááááá¶âááááá§áááááá¬?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"áááááááááá¶ááâáá¶ááááá¶ áá·ááážááááŒá áááŒáâááááá§áááááá¬?"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • áááá»áâáá¶ááááááá¶áâáá¶áááá áá • ááááááá»ááááááá <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • áááá»áâáá¶ááááâááºá • ááááááá»ááááááá <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • áááá»ááá¶áááá • ááááááá»ááááááá <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"áá¶áá»âáááá¶á ááá·ááá
ááŸá¢ááááááá
á¶áááá"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"á¢áŒááá
ááááá ááŸáááážá
á¶ááááááŸáááááááá áááá"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"ááááŒááá¶ááááá"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"á
ááá¶áá
áá"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"ááŸááá¶áááááá"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"áááááá¢á¶ááááááá·áážáá¶ááá¶áá¬?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"áááááá¢á¶á"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"áá·ááá¶áá»âáááá¶á ááá·ááá
ááŸá¢ááááááá
á¶áááá"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"áá¶áá»âáááá¶á ááá·ááá
ááŸá¢ááááááá
á¶áááá"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"ááááŒáâá¢áááâááááŸ"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"áááºáá»áâáá¶áá
á»á"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"áááááá·ááž áá·ááá·ááááááâáá¶ááá¢ááâáááá»áâááááâáááâáá¹áâááááŒáâáá»áá"</string>
@@ -1006,7 +1006,7 @@
<string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"áááá¶áááážáá
áá¶áááŸááááááá¶ááááá¶á"</string>
<string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"áááá¶áááážáá
áá¶ááááááááááááá¶ááááááâ"</string>
<string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"áááá¶áááážáá
áá¶ááááááááááááá¶ááááá¶á"</string>
- <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"áááá¶áááážáá
ááááááá¶áá
á»á ááœá
áá¶áá"</string>
+ <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"áááá¶áááážáá
ááá ááœá
áá¶áá"</string>
<string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"áááá¶áááážá
áááážááááááá¶áá
á»á ááœá
áááá á¶á"</string>
<string name="accessibility_floating_button_action_remove_menu" msgid="6730432848162552135">"ááá
áá"</string>
<string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"áá·á/ááŸá"</string>
diff --git a/packages/SystemUI/res/values-kn/strings.xml b/packages/SystemUI/res/values-kn/strings.xml
index 42d655e..e914d1c 100644
--- a/packages/SystemUI/res/values-kn/strings.xml
+++ b/packages/SystemUI/res/values-kn/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"à²
ಧಿಞà³à²à²šà³à²¯ à²à²Ÿà²¯à³."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"ಀà³à²µà²°à²¿à²€ ಞà³à²à³à²à²¿à²à²à³à²à²³à³."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"ಀà³à²µà²°à²¿à²€ ಞà³à²à³à²à²¿à²à²à³à²à²³à³ ಮಀà³à²€à³ à²
ಧಿಞà³à²à²šà³à²¯ ಪರಊà³."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"ಲಟà²à³ ಞà³à²à³à²°à³à²šà³."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"ಲಟà²à³ ಞà³à²à³à²°à³à²šà³"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"à²à³à²²à²žà²Š ಲಟà²à³ ಪರಊà³"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"ಮà³à²à³à²à²¿"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"ಞà²à²ªà³à²°à³à²£ ಚಿಶà³à²¯à²¬à³à²§"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"à²à²²à³à²²à²µà²šà³à²šà³ ಚà³à²¡à²¿"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"ಬà³à²²à³à²à³à²€à³ ಬಳಞಿ"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"à²à²šà³à²à³à²à³ à²à²à²¿à²Šà³"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"à²à²¡à²¿à²¯à³ ಹà²à²à²¿à²à³à²³à³à²³à³à²µà²¿à²à³"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"ಞà³à²µà³ ಮಟಡಲಟà²à²¿à²Šà³"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"ಡಿಞà³à²à²šà³à²à³à²à³ ಮಟಡಿ"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"ಞà²à³à²°à²¿à²¯à²à³à²³à²¿à²žà²¿"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"ಚಟಳೠಪà³à²šà² ಞà³à²µà²¯à²à²à²Ÿà²²à²¿à²€à²µà²Ÿà²à²¿ à²à²šà³ ಮಟಡಿ"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"à²à³à²µà²¿à²à³ ಶà³à²°à³ ಮಀà³à²€à³ Find My Device ಚà²à²€à²¹ ಫà³à²à²°à³à²à²³à³ ಬà³à²²à³à²à³à²€à³ à²
ಚà³à²šà³ ಬಳಞà³à²€à³à²€à²µà³"</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"ಬà³à²²à³à²à³à²€à³ ಚಟಳೠಬà³à²³à²¿à²à³à²à³ à²à²šà³ à²à²à³à²€à³à²€à²Šà³"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"à²à²¡à²¿à²¯à³ ಹà²à²à²¿à²à³à²³à³à²³à³à²µà²¿à²à³"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"à²à²¡à²¿à²¯à³à²µà²šà³à²šà³ ಹà²à²à²¿à²à³à²³à³à²³à²²à²Ÿà²à³à²€à³à²€à²¿à²Šà³"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g> ಬà³à²¯à²Ÿà²à²°à²¿"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"à²à²¡à²¿à²¯à³"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"ಹà³à²¡à³à²žà³à²à³"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"ಹಿಯರಿà²à²à³ ಞಟಧಚà²à²³à³"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"ಹà³à²ž ಞಟಧಚವಚà³à²šà³ ಪà³à²°à³ ಮಟಡಿ"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"ಹà³à²ž ಞಟಧಚವಚà³à²šà³ à²à³à²¡à²¿à²žà²²à³ à²à³à²²à²¿à²à³ ಮಟಡಿ"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"ಞಟಧಚಊ ಮà³à²à³à²°à³à²«à³à²šà³ ಚಿರà³à²¬à²à²§à²µà²šà³à²šà³ ಀà³à²à³à²¯à²¬à³à²à³?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"ಞಟಧಚಊ à²à³à²¯à²Ÿà²®à²°à²Ÿ ಚಿರà³à²¬à²à²§à²µà²šà³à²šà³ ಀà³à²à³à²¯à²¬à³à²à³?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"ಞಟಧಚಊ à²à³à²¯à²Ÿà²®à²°à²Ÿ ಮಀà³à²€à³ ಮà³à²à³à²°à³à²«à³à²šà³ à²
ಚà³à²šà³ à²
ಚà³à²¬à³à²²à²Ÿà²à³ ಮಟಡಬà³à²à³?"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ವà³à²à²µà²Ÿà²à²¿ à²à²Ÿà²°à³à²à³ à²à²à³à²€à³à²€à²¿à²Šà³ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> ಞಮಯಊಲà³à²²à²¿ ಪà³à²°à³à²£à²à³à²³à³à²³à³à²€à³à²€à²Šà³"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ಚಿಧಟಚವಟà²à²¿ à²à²Ÿà²°à³à²à³ à²à²à³à²€à³à²€à²¿à²Šà³ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> ಞಮಯಊಲà³à²²à²¿ ಪà³à²°à³à²£à²à³à²³à³à²³à³à²€à³à²€à²Šà³"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • à²à²Ÿà²°à³à²à³ à²à²à³à²€à³à²€à²¿à²Šà³ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> ಊಲà³à²²à²¿ ಪà³à²°à³à²£à²à³à²³à³à²³à³à²€à³à²€à²Šà³"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"ಲಟà²à³ ಞà³à²à³à²°à³à²šà³à²šà²²à³à²²à²¿ ವಿà²à³à²à³à²à²³à³"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"ಞಮà³à²Šà²Ÿà²¯à²Š à²à³à²¯à³à²à³à²°à²¿à²¯à²²à³ à²
ಚà³à²šà³ ಪà³à²°à²Ÿà²°à²à²à²¿à²žà²²à³ à²à²¡à²à³à²à³ ಞà³à²µà³à²ªà³ ಮಟಡಿ"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"à²à²žà³à²à²®à³à²žà³ ಮಟಡಿ"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"ವà²à²Ÿà²à³à²³à²¿à²žà²¿"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"ಞà³à²à³à²à²¿à²à²à³à²à²³à²šà³à²šà³ ಀà³à²°à³à²¯à²¿à²°à²¿"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"à²à³à²²à²žà²Š à²à³à²¯à²ªà³ ವಿರಟಮ ರಊà³à²Šà³à²®à²Ÿà²¡à²¬à³à²à³"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"ವಿರಟಮವಚà³à²šà³ ರಊà³à²Šà³à²à³à²³à²¿à²žà²¿"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"ಲಟà²à³ ಞà³à²à³à²°à³à²šà³à²šà²²à³à²²à²¿ ವಿà²à³à²à³à²à²³à²šà³à²šà³ ಮà³à²à³à²à²¿à²°à²¿"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"ಲಟà²à³ ಞà³à²à³à²°à³à²šà³à²šà²²à³à²²à²¿ ವಿà²à³à²à³à²à²³à³"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"ಬಳà²à³à²Šà²Ÿà²°à²°à²šà³à²šà³ ಬಊಲಿಞಿ"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"ಪà³à²²à³à²¡à³à²šà³ ಮà³à²šà³"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"ಠಞà³à²¶à²šà³à²šà²²à³à²²à²¿à²š à²à²²à³à²²à²Ÿ à²à³à²¯à²ªà³à²à²³à³ ಮಀà³à²€à³ ಡà³à²à²Ÿà²µà²šà³à²šà³ à²
ಳಿಞಲಟà²à³à²€à³à²€à²Šà³."</string>
@@ -873,7 +873,7 @@
<string name="accessibility_quick_settings_edit" msgid="1523745183383815910">"ಞà³à²à³à²à²¿à²à²à³à²à²³ à²à³à²°à²®à²µà²šà³à²šà³ à²à²¡à²¿à²à³ ಮಟಡಿ."</string>
<string name="accessibility_quick_settings_power_menu" msgid="6820426108301758412">"ಪವರೠಮà³à²šà³"</string>
<string name="accessibility_quick_settings_page" msgid="7506322631645550961">"<xliff:g id="ID_2">%2$d</xliff:g> ರಲà³à²²à²¿ <xliff:g id="ID_1">%1$d</xliff:g> ಪà³à²"</string>
- <string name="tuner_lock_screen" msgid="2267383813241144544">"ಲಟà²à³ ಪರಊà³"</string>
+ <string name="tuner_lock_screen" msgid="2267383813241144544">"ಲಟà²à³ ಞà³à²à³à²°à³à²šà³"</string>
<string name="finder_active" msgid="7907846989716941952">"ಪವರೠà²à²«à³ à²à²à²¿à²°à³à²µà²Ÿà²à²²à³ ಚà³à²µà³ Find My Device ಮà³à²²à² ಠಫà³à²šà³ à²
ಚà³à²šà³ ಪಀà³à²€à³ ಮಟಡಬಹà³à²Šà³"</string>
<string name="shutdown_progress" msgid="5464239146561542178">"ಶà²à³ ಡà³à²šà³ ಮಟಡಲಟà²à³à²€à³à²€à²¿à²Šà³…"</string>
<string name="thermal_shutdown_dialog_help_text" msgid="6413474593462902901">"à²à²Ÿà²³à²à²¿à²¯ ಹà²à²€à²à²³à²šà³à²šà³ ವà³à²à³à²·à²¿à²žà²¿"</string>
diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml
index 3c34f8d..316d0ea 100644
--- a/packages/SystemUI/res/values-ko/strings.xml
+++ b/packages/SystemUI/res/values-ko/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"ì늌 ìžë¶ì 볎"</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"ë¹ ë¥ž ì€ì "</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"ë¹ ë¥ž ì€ì ë° ì늌 ì°œì
ëë€."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"í멎ì ì êžëë€."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"ì êž í멎"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"ì
ë¬Žì© ì êž í멎"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"ë«êž°"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"몚ë ììê±°"</string>
@@ -376,6 +376,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"ì²ê° 볎조 êž°êž°"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"ì êž°êž°ì íìŽë§"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"ì êž°êž°ì íìŽë§íë €ë©Ž íŽëŠíìžì"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"êž°êž° ë§ìŽí¬ë¥Œ ì°šëš íŽì íìê² ìµëê¹?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"êž°êž° 칎ë©ëŒë¥Œ ì°šëš íŽì íìê² ìµëê¹?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"êž°êž° 칎ë©ëŒ ë° ë§ìŽí¬ë¥Œ ì°šëš íŽì íìê² ìµëê¹?"</string>
@@ -441,6 +443,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ê³ ì ì¶©ì ì€ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> í ì¶©ì ìë£"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ì ì ì¶©ì ì€ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> í ì¶©ì ìë£"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ì¶©ì ì€ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> í ì¶©ì ìë£"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"ì êž í멎ì ìì ¯"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"ê³µë íí 늬ìŒì ììíë €ë©Ž ìŒìªœìŒë¡ ì€ììŽííìžì"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"ë§ì¶€ì€ì "</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"ë«êž°"</string>
@@ -459,6 +462,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"ì€ì ìŽêž°"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"ì§ì¥ ì± ìŒìì€ì§ë¥Œ íŽì íìê² ìµëê¹?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"ìŒìì€ì§ íŽì "</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"ì êž í멎ìì ìì ¯ ë«êž°"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"ì êž í멎ì ìì ¯"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"ì¬ì©ì ì í"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"íë€ìŽ ë©ëŽ"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"ìŽ ìžì
ì ìë 몚ë ì±ê³Œ ë°ìŽí°ê° ìì ë©ëë€."</string>
@@ -588,7 +593,7 @@
<string name="screen_pinning_negative" msgid="6882816864569211666">"ê±°ë¶"</string>
<string name="screen_pinning_start" msgid="7483998671383371313">"ì± ê³ ì ëš"</string>
<string name="screen_pinning_exit" msgid="4553787518387346893">"ì± ê³ ì íŽì ëš"</string>
- <string name="stream_voice_call" msgid="7468348170702375660">"ì í걞Ʞ"</string>
+ <string name="stream_voice_call" msgid="7468348170702375660">"íµí"</string>
<string name="stream_system" msgid="7663148785370565134">"ìì€í
"</string>
<string name="stream_ring" msgid="7550670036738697526">"벚ì늬"</string>
<string name="stream_music" msgid="2188224742361847580">"믞ëìŽ"</string>
diff --git a/packages/SystemUI/res/values-ky/strings.xml b/packages/SystemUI/res/values-ky/strings.xml
index ad9d2f7..78231a7 100644
--- a/packages/SystemUI/res/values-ky/strings.xml
+++ b/packages/SystemUI/res/values-ky/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"ÐОлЎОÑÐŒÐµÐ»ÐµÑ ÑакÑаÑÑ."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Тез ÑÑÑÑалППлПÑ."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"ЫкÑаЌ паÑаЌеÑÑÐ»ÐµÑ Ð¶Ð°ÐœÐ° бОлЎОÑÐŒÐµÐ»ÐµÑ ÑакÑаÑÑ."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"ÐÑлпÑлаМгаМ ÑкÑаМ."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"ÐкÑÐ°ÐœÐŽÑ ÐºÑлпÑлПП"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"ÐÑÐŒÑÑÑÑМ кÑлпÑлаМгаМ ÑкÑаМÑ"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"ÐабÑÑ"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"ÑÑÐŒÑÑÑÑ"</string>
@@ -376,6 +376,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"УгÑÑ Ð°Ð¿Ð¿Ð°ÑаÑÑаÑÑ"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"ÐÐ°Ò£Ñ ÑүзЌөк кПÑÑÑ"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"ÐÐ°Ò£Ñ ÑүзЌөк кПÑÑÑ Ò¯ÑүМ баÑÑÒ£Ñз"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"ТүзЌөкÑүМ ЌОкÑПÑПМÑМ бөгөÑÑөМ ÑÑгаÑаÑÑзбÑ?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"ТүзЌөкÑүМ каЌеÑаÑÑМ бөгөÑÑөМ ÑÑгаÑаÑÑзбÑ?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"ТүзЌөкÑүМ каЌеÑаÑÑ ÐŒÐµÐœÐµÐœ ЌОкÑПÑÐŸÐœÑ Ð±Ó©Ð³Ó©ÑÑөМ ÑÑгаÑÑлÑÑМбÑ?"</string>
@@ -441,6 +443,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Тез кÑбаÑÑалÑÑЎа • ТПлгПМгП ÑейОМ <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> калЎÑ"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Ðай кÑбаÑÑалÑÑЎа • ТПлгПМгП ÑейОМ <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> калЎÑ"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ÐÑбаÑÑалÑÑЎа • ТПлгПМгП ÑейОМ <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> калЎÑ"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"ÐÑлпÑлаМгаМ ÑкÑÐ°ÐœÐŽÐ°Ð³Ñ Ð²ÐžÐŽÐ¶ÐµÑÑеÑ"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"ÐÐ°Ð»Ð¿Ñ Ò¯Ð¹ÑÓ©ÑкүÑÑÒ¯ ОÑÑеÑÒ¯Ò¯ Ò¯ÑүМ ÑПлгП ÑÒ¯Ñүңүз"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"ЫңгайлаÑÑÑÑÑÑ"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"ÐабÑÑ"</string>
@@ -459,6 +462,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"ÐаÑаЌеÑÑлеÑЎО аÑÑÑ"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"ÐÑÐŒÑÑ ÐºÐŸÐ»ÐŽÐŸÐœÐŒÐŸÐ»ÐŸÑÑМ ОÑÑеÑеÑОзбО?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"ÐÑÑеÑÒ¯Ò¯"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"ÐОЎжеÑÑеÑЎО кÑлпÑлаМгаМ ÑкÑаМЎа жабÑÑ"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"ÐÑлпÑлаМгаМ ÑкÑÐ°ÐœÐŽÐ°Ð³Ñ Ð²ÐžÐŽÐ¶ÐµÑÑеÑ"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"ÐПлЎПМÑÑÑÑÐœÑ ÐºÐŸÑПÑÑÑ"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"ÑлЎÑй ÑÒ¯ÑÒ¯Ò¯ÑÒ¯ ЌеМÑ"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"ÐÑл ÑеаМÑÑÐ°Ð³Ñ Ð±Ð°ÑÐŽÑк ÐºÐŸÐ»ÐŽÐŸÐœÐŒÐŸÐ»ÐŸÑ Ð¶Ð°ÐœÐ° алаÑга байлаМÑÑÑÑÑ ÐœÐµÑÑÐµÐ»ÐµÑ Ó©ÑÒ¯ÑүлөÑ."</string>
diff --git a/packages/SystemUI/res/values-lo/strings.xml b/packages/SystemUI/res/values-lo/strings.xml
index eb9e1eb..e646c57 100644
--- a/packages/SystemUI/res/values-lo/strings.xml
+++ b/packages/SystemUI/res/values-lo/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"à»à»àº²àºà»à»àºà»àºà»àºàº·àºàº."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"àºàº²àºàºàº±à»àºàºà»àº²àºà»àº§àº."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"àºàº²àºàºàº±à»àºàºà»àº²àºà»àº§àº à»àº¥àº° à»àºàº»àº²àºàº²àºà»àºà»àºà»àºàº·àºàº."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"ລັàºàºâà»à»àº²âàºà»."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"à»à»àº²àºà»àº¥àº±àºàº"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"à»à»àº²àºà»àº¥àº±àºàºàº§àºœàº"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"àºàºŽàº"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"àºàºœàºàºàº±àºà»àº»àº"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"à»àºàºŽà»àºàºàº±àºà»àº»àº"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"à»àºà» Bluetooth"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"à»àºàº·à»àºàº¡àºà»à»à»àº¥à»àº§"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"àºàº²àºà»àºà»àºàºàº±àºàºªàºœàº"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"àºàº±àºàºàº¶àºà»àº¥à»àº§"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"àºàº±àºàºàº²àºà»àºàº·à»àºàº¡àºà»à»"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"à»àºàºµàºàºàº³à»àºà»"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"à»àºàºµàºà»àºà»à»àºàºàºàº±àºàºàº°à»àºàº¡àº±àºàºàºµàºàºàº±à»àºàº¡àº·à»àºàº·à»àº"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"àºàºžàºàºªàº»àº¡àºàº±àºàºà»àº²àºà»à»àºà» Bluetooth à»àºàº±à»àº: àºàº²àºà»àºàº£à»àºà»àº§àº à»àº¥àº° àºàºàºàº«àº²àºàºžàºàº°àºàºàºàºàºàºàºà»àºàº"</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"Bluetooth àºàº°à»àºàºµàºàº¡àº·à»àºàº·à»àºà»àºàº»à»àº²"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"àºàº²àºà»àºà»àºàºàº±àºàºªàºœàº"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"àºàº³àº¥àº±àºà»àºà»àºàºàº±àºàºªàºœàº"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"à»àºàº±àºà»àºàºµàº£àºµ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g>"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"ສຜàº"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"àºàºžàºàº«àº¹àºàº±àº"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"àºàºžàºàº°àºàºàºàºà»àº§àºàºàº±àº"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"àºàº±àºàºàº¹à»àºàºžàºàº°àºàºàºà»à»à»"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"àºàº¥àºŽàºà»àºàº·à»àºàºàº±àºàºàº¹à»àºàºžàºàº°àºàºàºà»à»à»"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"àºàº»àºàºàº¥àº±àºàºà»àº¡à»àºàº£à»àºàºàºàºžàºàº°àºàºàºàºà»?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"àºàº»àºàºàº¥àº±àºàºàºà»àºàºàºà»àº²àºàº®àº¹àºàºàºžâàºàº°âàºàºàºàºà»?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"àºàº»àºà»àº¥àºµàºàºàº²àºàºàº¥àº±àºàºàºà»àºàºàºà»àº²àºàº®àº¹àº ຫຌື à»àº¡à»àºàº£à»àºàºàºàºžâàºàº°âàºàºàºàºà»?"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • àºàº³àº¥àº±àºàºªàº²àºà»àºà»àºàºà»àº§ • àºàº°à»àºàº±àº¡à»àºàºàºµàº <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • àºàº³àº¥àº±àºàºªàº²àºà»àºà»àºàºàºà»àº² • àºàº°à»àºàº±àº¡à»àºàºàºµàº <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • àºàº³àº¥àº±àºàºªàº²àºà»àº • àºàº°à»àºàº±àº¡à»àºàºàºµàº <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"ວຎàºà»àºàº±àºàº¢àº¹à»à»à»àº²àºà»àº¥àº±àºàº"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"àºàº±àºàºà»àº²àºà»àºàº·à»àºà»àº¥àºµà»àº¡àºàº»àºà»àºàº°àºàº³àºªà»àº§àºàºàº²àº"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"àºàº±àºà»àºà»àº"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"àºà»àºàºâà»àº"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"à»àºàºµàºàºàº²àºàºàº±à»àºàºà»àº²"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"àºàº»àºà»àº¥àºµàºàºàº²àºàº¢àºžàºàºàº»à»àº§àºàº²àº§à»àºàº±àºàºà»àºàºà»àº®àº±àºàº§àºœàºàºà»?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"àºàº»àºà»àº¥àºµàºàºàº²àºàº¢àºžàºàºàº»à»àº§àºàº²àº§"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"àºàºŽàºàº§àºŽàºà»àºàº±àºàº¢àº¹à»à»à»àº²àºà»àº¥àº±àºàº"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"ວຎàºà»àºàº±àºàº¢àº¹à»à»à»àº²àºà»àº¥àº±àºàº"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"ສະຫຌັàºàºàº¹à»à»àºà»"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"à»àº¡àºàº¹à»àºàºàºàº¶àºàº¥àº»àº"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"à»àºàº±àºàº¯âà»àº¥àº°âàºà»à»âມູàºâàºàº±àºâà»àº»àºâà»àºâà»àºàºâàºàº±àºâàºàºµà»âàºàº°âàºàº·àºâລຶàºâàºàºàº."</string>
diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml
index 63971ab..9221a36 100644
--- a/packages/SystemUI/res/values-lt/strings.xml
+++ b/packages/SystemUI/res/values-lt/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Pranešimų gaubtas."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Spartieji nustatymai."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Spartieji nustatymai ir pranešimų skydelis."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"UÅŸrakinimo ekranas."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"UÅŸrakinimo ekranas"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Darbo profilio uÅŸrakinimo ekranas"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"UÅŸdaryti"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"visiška tyla"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"ÅœiÅ«rÄti viskÄ
"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"„Bluetooth“ naudojimas"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"Prisijungta"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"Garso įrašÅ³ bendrinimas"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"Išsaugota"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"atjungti"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"suaktyvinti"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"Automatiškai vÄl įjungti rytoj"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"Tokioms funkcijoms kaip „Spartusis bendrinimas“ ir „Rasti įrenginį“ naudojamas „Bluetooth“ ryšys"</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"„Bluetooth“ ryšys bus įjungtas rytoj ryte"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"Garso įrašÅ³ bendrinimas"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"Bendrinamas garso įrašas"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"Akumuliatorius: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g>"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Garsas"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Virtualiosios realybÄs įrenginys"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Klausos įrenginiai"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Susieti naujÄ
įrenginį"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"SpustelÄkite, kad susietumÄte naujÄ
įrenginį"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Panaikinti įrenginio mikrofono blokavimÄ
?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Panaikinti įrenginio fotoaparato blokavimÄ
?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Panaikinti įrenginio fotoaparato ir mikrofono blokavimÄ
?"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • SparÄiai įkraunama • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> iki visiško įkrovimo"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • LÄtai įkraunama • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> iki visiško įkrovimo"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Ä®kraunama • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> iki visiško įkrovimo"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Valdikliai uÅŸrakinimo ekrane"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Perbraukite kairÄn, paleistumÄte bendruomenÄs mokomÄ
jÄ
medÅŸiagÄ
"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Tinkinti"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Atsisakyti"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Atidaryti nustatymus"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Atš. darbo progr. pristabd.?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"Atšaukti pristabdymÄ
"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"UÅŸdaryti valdiklius uÅŸrakinimo ekrane"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Valdikliai uÅŸrakinimo ekrane"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Perjungti naudotojÄ
"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"išpleÄiamasis meniu"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Bus ištrintos visos šios sesijos programos ir duomenys."</string>
diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml
index 4b7507d..0590349 100644
--- a/packages/SystemUI/res/values-lv/strings.xml
+++ b/packages/SystemUI/res/values-lv/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"PaziÅojumu panelis"</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Ätrie iestatÄ«jumi"</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Ätrie iestatÄ«jumi un paziÅojumu panelis."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"BloÄ·Äšanas ekrÄns."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"BloÄ·Äšanas ekrÄns"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Darba profila bloÄ·Äšanas ekrÄns"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"AizvÄrt"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"pilnīgs klusums"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"Skatīt visas"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"Izmantot Bluetooth"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"Savienojums izveidots"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"Audio kopÄ«gošana"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"SaglabÄta"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"atvienot"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"aktivizÄt"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"AutomÄtiski atkal ieslÄgt rÄ«t"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"TÄdas funkcijas kÄ “ÄtrÄ kopÄ«gošana” un “Atrast ierÄ«ci” izmanto Bluetooth savienojumu"</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"Bluetooth savienojums tiks ieslÄgts rÄ«t no rÄ«ta"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"Kopīgot audio"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"Notiek audio kopÄ«gošana"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"Akumulators: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g>"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Audio"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"AustiÅas"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Dzirdes aparÄti"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Savienojiet pÄrÄ« jaunu ierÄ«ci"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"NoklikšÄ·iniet, lai savienotu pÄrÄ« jaunu ierÄ«ci"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Vai atbloÄ·Ät ierÄ«ces mikrofonu?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Vai vÄlaties atbloÄ·Ät ierÄ«ces kameru?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Vai atbloÄ·Ät ierÄ«ces kameru un mikrofonu?"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ÄtrÄ uzlÄde • Laiks lÄ«dz pilnai uzlÄdei: <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • LÄnÄ uzlÄde • Laiks lÄ«dz pilnai uzlÄdei: <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Notiek uzlÄde • Laiks lÄ«dz pilnai uzlÄdei: <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"LogrÄ«ki bloÄ·Äšanas ekrÄnÄ"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Velciet pa kreisi, lai palaistu kopienas pamÄcÄ«bu."</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"PielÄgot"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"NerÄdÄ«t"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"AtvÄrt iestatÄ«jumus"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Vai aktivizÄt darba lietotnes?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"AktivizÄt"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"AizvÄrt logrÄ«kus bloÄ·Äšanas ekrÄnÄ"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"LogrÄ«ki bloÄ·Äšanas ekrÄnÄ"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"MainÄ«t lietotÄju"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"novelkamÄ izvÄlne"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Tiks dzÄstas visas šÄ«s sesijas lietotnes un dati."</string>
diff --git a/packages/SystemUI/res/values-mk/strings.xml b/packages/SystemUI/res/values-mk/strings.xml
index ba29ee6..4fee24d 100644
--- a/packages/SystemUI/res/values-mk/strings.xml
+++ b/packages/SystemUI/res/values-mk/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"ÐаМел за ОзвеÑÑÑваÑе"</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"ÐÑзО пПÑÑавкО."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"„ÐÑзО пПÑÑавкО“ О „ÐаМел ÑП ОзвеÑÑÑваÑа“."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"ÐаклÑÑеМ екÑаМ."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"ÐаклÑÑеМ екÑаМ"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"РабПÑеМ заклÑÑеМ екÑаМ"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"ÐаÑвПÑО"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"ÑелПÑМа ÑОÑОМа"</string>
@@ -376,6 +376,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"СлÑÑМО апаÑаÑО"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"СпаÑО МПв ÑÑеЎ"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"ÐлОкМеÑе за Ўа ÑпаÑОÑе МПв ÑÑеЎ"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Ðа Ñе ПЎблПкОÑа пÑОÑÑÐ°Ð¿ÐŸÑ ÐŽÐŸ ЌОкÑПÑÐŸÐœÐŸÑ ÐœÐ° ÑÑеЎПÑ?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Ðа Ñе ПЎблПкОÑа пÑОÑÑÐ°Ð¿ÐŸÑ ÐŽÐŸ каЌеÑаÑа Ма ÑÑеЎПÑ?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Ðа Ñе ПЎблПкОÑа пÑОÑÑÐ°Ð¿ÐŸÑ ÐŽÐŸ каЌеÑаÑа О ЌОкÑПÑÐŸÐœÐŸÑ ÐœÐ° ÑÑеЎПÑ?"</string>
@@ -441,6 +443,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Се пПлМО бÑзП • ÐПлМа пП <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Се пПлМО бавМП • ÐПлМа пП <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Се пПлМО • ÐПлМа пП <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"ÐОÑеÑО Ма заклÑÑеМ екÑаМ"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"ÐПвлеÑеÑе МалевП за Ўа гП запПÑМеÑе заеЎМОÑкПÑП ÑпаÑÑÑвП"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"ÐÑОÑпПÑПбеÑе"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"ÐÑÑÑлО"</string>
@@ -459,6 +462,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"ÐÑвПÑО гО пПÑÑавкОÑе"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Ðа Ñе акÑОв. ÑабПÑМОÑе аплОк.?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"ÐÑекОМО Ñа паÑзаÑа"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"ÐаÑвПÑеÑе гО вОÑеÑОÑе Ма заклÑÑÐµÐœÐžÐŸÑ ÐµÐºÑаМ"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"ÐОÑеÑО Ма заклÑÑеМ екÑаМ"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"ÐÑПЌеМО гП кПÑОÑМОкПÑ"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"паÑаÑкП ЌеМО"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"СОÑе аплОкаÑОО О пПЎаÑПÑО вП ÑеÑОÑава Ñе Ñе ОзбÑОÑаÑ."</string>
@@ -1010,7 +1015,7 @@
<string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"ÐÑеЌеÑÑО МаЎ ÑÐ°Ð±ÐŸÑ Ðž пÑОкажО"</string>
<string name="accessibility_floating_button_action_remove_menu" msgid="6730432848162552135">"ÐÑÑÑÑаМО"</string>
<string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"вклÑÑÑваÑе/ОÑклÑÑÑваÑе"</string>
- <string name="accessibility_floating_button_action_edit" msgid="1688227814600463987">"ÐзЌеМеÑе"</string>
+ <string name="accessibility_floating_button_action_edit" msgid="1688227814600463987">"ÐзЌеМО"</string>
<string name="quick_controls_title" msgid="6839108006171302273">"ÐПМÑÑПлО за ÑÑеЎОÑе"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"ÐзбеÑеÑе аплОкаÑОÑа за Ўа ЎПЎаЎеÑе кПМÑÑПлО"</string>
<string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{ÐПЎаЎеМа е # кПМÑÑПла.}one{ÐПЎаЎеМО Ñе # кПМÑÑПла.}other{ÐПЎаЎеМО Ñе # кПМÑÑПлО.}}"</string>
diff --git a/packages/SystemUI/res/values-ml/strings.xml b/packages/SystemUI/res/values-ml/strings.xml
index 8e9392c..cea0e6b 100644
--- a/packages/SystemUI/res/values-ml/strings.xml
+++ b/packages/SystemUI/res/values-ml/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"àŽ
àŽ±àŽ¿àŽ¯àŽ¿àŽªàµàŽªàµ àŽ·àµàޝàµàŽ¡àµ."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"àŽŠàµàްàµàŽ€ àŽàµàŽ°àŽ®àµàŽàŽ°àŽ£àŽàµàŽàµŸ."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"àŽ
àŽ±àŽ¿àŽ¯àŽ¿àŽªàµàŽªàµ àŽ·àµàޝàµàŽ¡àŽ¿àŽšàµà޳àµà޳ àŽŠàµàްàµàŽ€ àŽàµàŽ°àŽ®àµàŽàŽ°àŽ£àŽ."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"àŽ²àµàŽàµàŽàµ àŽžàµàŽàµàްàµàµ»."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"àŽ²àµàŽàµàŽàµ àŽžàµàŽàµàްàµàµ»"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"àŽàŽŠàµàޝàµàŽàŽ¿àŽ àŽ²àµàŽàµàŽàµ àŽžàµàŽàµàްàµàµ»"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"àŽ
àŽµàŽžàŽŸàŽšàŽ¿àŽªàµàŽªàŽ¿àŽàµàŽàµàŽ"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"àŽªàµàµŒàŽ£àµàŽ£ àŽšàŽ¿àŽ¶àŽ¬àµàŽŠàŽ€"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"àŽà޲àµàŽ²àŽŸàŽ àŽàŽŸàŽ£àµàŽ"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"Bluetooth àŽàŽªàŽ¯àµàŽàŽ¿àŽàµàŽàµàŽ"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"àŽàŽ£àŽàµàޱàµàŽ±àµ àŽàµàޝàµàŽ€àµ"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"àŽàŽ¡àŽ¿àŽ¯àµ àŽªàŽàµàŽàŽ¿àŽàµœ"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"àŽžàŽàްàŽàµàŽ·àŽ¿àŽàµàŽàµ"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"àŽµàŽ¿àŽàµàŽàµàŽŠàŽ¿àŽàµàŽàµàŽ"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"àŽžàŽàµàŽµàŽ®àŽŸàŽàµàŽàµàŽ"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"àŽšàŽŸàŽ³àµ àŽµàµàŽ£àµàŽàµàŽ àŽžàµàŽµàŽ¯àŽ®àµà޵ àŽàŽ£àŽŸàŽàµàŽàµàŽ"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"àŽàµàŽµàŽ¿àŽàµàŽàµ àŽ·àµàŽ¯àµŒ, Find My Device àŽªàµà޲àµà޳àµà޳ àŽ«àµàŽàµàŽàޱàµàŽàµŸ Bluetooth àŽàŽªàŽ¯àµàŽàŽ¿àŽàµàŽàµàŽšàµàŽšàµ"</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"Bluetooth àŽšàŽŸàŽ³àµ àŽ°àŽŸàŽµàŽ¿àŽ²àµ àŽàŽ£àŽŸàŽàµàŽ"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"àŽàŽ¡àŽ¿àŽ¯àµ àŽªàŽàµàŽàŽ¿àŽàµœ"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"àŽàŽ¡àŽ¿àŽ¯àµ àŽªàŽàµàŽàŽ¿àŽàµàŽšàµàŽšàµ"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g> àŽ¬àŽŸàŽ±àµàŽ±àŽ±àŽ¿"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"àŽàŽ¡àŽ¿àŽ¯àµ"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"àŽ¹àµàŽ¡àµàŽžàµàޱàµàޱàµ"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"àŽàµàµŸàŽµàŽ¿àŽàµàŽàµà޳àµà޳ àŽàŽªàŽàŽ°àŽ£àŽàµàŽàµŸ"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"àŽªàµàŽ€àŽ¿àŽ¯ àŽàŽªàŽàŽ°àŽ£àŽ àŽàµàŽàŽ¿àŽ¯àŽŸàŽàµàŽàµàŽ"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"àŽªàµàŽ€àŽ¿àŽ¯ àŽàŽªàŽàŽ°àŽ£àŽ àŽàµàŽàŽ¿àŽ¯àŽŸàŽàµàŽàŽŸàµ» àŽàµàŽ²àŽ¿àŽàµàŽàµ àŽàµàޝàµàޝàµàŽ"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"àŽàŽªàŽàŽ°àŽ£ àŽ®àµàŽàµàްàµàŽ«àµàµº àŽ
àµºàŽ¬àµà޲àµàŽàµàŽàµ àŽàµàޝàµàŽ¯àŽ£àµ?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"àŽàŽªàŽàŽ°àŽ£ àŽàµàŽ¯àŽŸàŽ®àŽ± àŽ
àµºàŽ¬àµà޲àµàŽàµàŽàµ àŽàµàޝàµàŽ¯àŽ£àµ?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"àŽàŽªàŽàŽ°àŽ£ àŽàµàŽ¯àŽŸàŽ®àŽ±àŽ¯àµ àŽ®àµàŽàµàްàµàŽ«àµàŽ£àµ àŽ
àµºàŽ¬àµà޲àµàŽàµàŽàµ àŽàµàޝàµàŽ¯àŽ£àµ?"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • àŽµàµàŽàŽ€àµàŽ€àŽ¿àµœ àŽàŽŸàµŒàŽàµ àŽàµàޝàµàޝàµàŽšàµàŽšàµ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>-൜ àŽªàµàµŒàŽ€àµàŽ€àŽ¿àŽ¯àŽŸàŽàµàŽ"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • àŽªàŽ€àµàŽàµàŽàµ àŽàŽŸàµŒàŽàµ àŽàµàޝàµàޝàµàŽšàµàŽšàµ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>-൜ àŽªàµàµŒàŽ€àµàŽ€àŽ¿àŽ¯àŽŸàŽàµàŽ"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • àŽàŽŸàµŒàŽàµ àŽàµàޝàµàޝàµàŽšàµàŽšàµ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>-൜ àŽªàµàµŒàŽ€àµàŽ€àŽ¿àŽ¯àŽŸàŽàµàŽ"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"àŽ²àµàŽàµàŽàµ àŽžàµàŽàµàްàµàŽšàŽ¿àµœ àŽµàŽ¿àŽàޱàµàޱàµàŽàµŸ"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"àŽàŽ®àµàŽ®àµàޝàµàŽ£àµœ àŽàµàޝàµàŽàµàŽàµàŽ±àŽ¿àŽ¯àµœ àŽàްàŽàŽàŽ¿àŽàµàŽàŽŸàµ» àŽàŽàŽ€àµàŽ€àµàŽàµàŽàµ àŽžàµà޵àµàŽªàµàŽªàµ àŽàµàޝàµàޝàµàŽ"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"àŽàŽ·àµàŽàŽŸàŽšàµàŽžàµàŽ€àŽ®àŽŸàŽàµàŽàµàŽ"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"àŽ¡àŽ¿àŽžàµàŽ®àŽ¿àŽžàµ àŽàµàޝàµàޝàµàŽ"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"àŽàµàŽ°àŽ®àµàŽàŽ°àŽ£àŽ àŽ€àµàޱàŽàµàŽàµàŽ"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"àŽµàµŒàŽàµàŽàµ àŽàŽªàµàŽªàµàŽàµŸ àŽªàµàŽšàŽ°àŽŸàŽ°àŽàŽàŽ¿àŽàµàŽàŽ£àµ?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"àŽªàµàŽšàŽ°àŽŸàŽ°àŽàŽàŽ¿àŽàµàŽàµàŽ"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"àŽ²àµàŽàµàŽàµ àŽžàµàŽàµàްàµàŽšàŽ¿àµœ àŽµàŽ¿àŽàޱàµàޱàµàŽàµŸ àŽ
àŽàޝàµàŽàµàŽàµàŽ"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"àŽ²àµàŽàµàŽàµ àŽžàµàŽàµàްàµàŽšàŽ¿àµœ àŽµàŽ¿àŽàޱàµàޱàµàŽàµŸ"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"àŽàŽªàŽ¯àµàŽàµàŽ€àŽŸàŽµàµ àŽ®àŽŸàŽ±àµàŽ"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"àŽªàµàµŸàŽ¡àµàµº àŽ®àµàŽšàµ"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"àŽ àŽžàµàŽ·àŽšàŽ¿àŽ²àµ àŽà޲àµàŽ²àŽŸ àŽàŽªàµàŽªàµàŽà޳àµàŽ àŽ¡àŽŸàŽ±àµàŽ±àŽ¯àµàŽ àŽà޲àµàŽ²àŽŸàŽ€àŽŸàŽàµàŽàµàŽ."</string>
diff --git a/packages/SystemUI/res/values-mn/strings.xml b/packages/SystemUI/res/values-mn/strings.xml
index aab22b3..a3e1bc2 100644
--- a/packages/SystemUI/res/values-mn/strings.xml
+++ b/packages/SystemUI/res/values-mn/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"ÐÑÐŽÑгЎлОйМ Ñ
ÑÑааМгÑй ÑаЌбаÑ"</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"КÑÑÑÑ
ай ÑПÑ
ОÑгПП."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"КÑÑÑÑ
ай ÑПÑ
ОÑгПП бПлПМ ÐŒÑÐŽÑгЎлОйМ Ñ
ÑÑааМгÑй ÑаЌбаÑ."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"ÐÑлгÑÑ ÑүгжОÑ
."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"ТүгжÑÑÑÑй ÐŽÑлгÑÑ"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"ÐжлÑМ ÑүгжОгЎÑÑМ ÐŽÑлгÑÑ"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"ХааÑ
"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"бүÑ
ÐŽÑÑг Ñ
ааÑ
"</string>
@@ -376,6 +376,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"СПМÑгПлÑМ ÑÓ©Ñ
Ó©Ó©ÑөЌжүүЎ"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"ÐšÐžÐœÑ ÑÓ©Ñ
Ó©Ó©ÑөЌж Ñ
ПÑлÑÑлаÑ
"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"ÐšÐžÐœÑ ÑÓ©Ñ
Ó©Ó©ÑөЌж Ñ
ПÑлÑÑлаÑ
ÑМ ÑÑлЎ ÑПвÑОМП ÑÑ"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"ТөÑ
Ó©Ó©ÑөЌжОйМ ЌОкÑПÑПМÑг Ð±Ð»ÐŸÐºÐŸÐŸÑ Ð³Ð°ÑгаÑ
ÑÑ?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"ТөÑ
Ó©Ó©ÑөЌжОйМ каЌеÑÑг Ð±Ð»ÐŸÐºÐŸÐŸÑ Ð³Ð°ÑгаÑ
ÑÑ?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"ТөÑ
Ó©Ó©ÑөЌжОйМ ÐºÐ°ÐŒÐµÑ Ð±ÐŸÐ»ÐŸÐœ ЌОкÑПÑПМÑг Ð±Ð»ÐŸÐºÐŸÐŸÑ Ð³Ð°ÑгаÑ
ÑÑ?"</string>
@@ -441,6 +443,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Ð¥ÑÑÐŽÑай ÑÑМÑглÑж байМа • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>-М ЎаÑаа ÐŽÒ¯Ò¯ÑМÑ"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • УЎааМ ÑÑМÑглÑж байМа • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>-М ЎаÑаа ÐŽÒ¯Ò¯ÑМÑ"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ЊÑМÑглÑж байМа • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>-М ЎаÑаа ÐŽÒ¯Ò¯ÑМÑ"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"ТүгжÑÑÑÑй ÐŽÑлгÑÑ ÐŽÑÑÑÑ
вОЎжеÑүүЎ"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"ÐОйÑОйМ пÑакÑОк Ñ
ОÑÑÑлОйг ÑÑ
лүүлÑÑ
ОйМ ÑÑлЎ зүүМ ÑÐžÐ¹Ñ ÑÑЎаÑМа ÑÑ"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"ÓšÓ©ÑÑлөÑ
"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"ХааÑ
"</string>
@@ -459,6 +462,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"ТПÑ
ОÑгППг МÑÑÑ
"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"ÐжлÑМ аппÑг Ò¯ÑгÑлжлүүлÑÑ
Ò¯Ò¯?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"Ò®ÑгÑлжлүүлÑÑ
"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"ТүгжÑÑÑÑй ÐŽÑлгÑÑ ÐŽÑÑÑ Ð²ÐžÐŽÐ¶ÐµÑүүЎОйг Ñ
ааÑ
"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"ТүгжÑÑÑÑй ÐŽÑлгÑÑ ÐŽÑÑÑÑ
вОЎжеÑүүЎ"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Ð¥ÑÑÑглÑгÑОйг ÑÑлгÑÑ
"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"ÑвÑ
ÐŒÑл ÑÑÑ"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"ÐÐœÑ Ñ
аÑОлÑаМ үйлЎлОйМ бүÑ
апп бПлПМ ЎаÑа ÑÑÑаÑ
бПлМП."</string>
diff --git a/packages/SystemUI/res/values-mr/strings.xml b/packages/SystemUI/res/values-mr/strings.xml
index 071935a..c46e3e7 100644
--- a/packages/SystemUI/res/values-mr/strings.xml
+++ b/packages/SystemUI/res/values-mr/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"à€žà¥à€à€šà€Ÿ à€¶à¥à€¡."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"à€à¥à€µà€¿à€ à€žà¥à€à€¿à€à€à¥à€."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"à€à¥à€µà€¿à€ à€žà¥à€à€¿à€à€à¥à€ à€à€£à€¿ à€žà¥à€à€šà€Ÿ à€¶à¥à€¡."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"à€²à¥à€ à€žà¥à€à¥à€°à¥à€š."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"à€²à¥à€ à€žà¥à€à¥à€°à¥à€š"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"à€à€Ÿà€°à¥à€¯ à€²à¥à€ à€žà¥à€à¥à€°à¥à€š"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"à€¬à€à€Š à€à€°à€Ÿ"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"à€žà€à€ªà¥à€°à¥à€£ à€¶à€Ÿà€à€€à€€à€Ÿ"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"à€žà€°à¥à€µ à€ªà€¹à€Ÿ"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"à€¬à¥à€²à¥à€à¥à€¥ à€µà€Ÿà€ªà€°à€Ÿ"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"à€à€šà¥à€à¥à€ à€à¥à€²à¥"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"à€à€¡à€¿à€ à€¶à¥à€
à€°à€¿à€à€"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"à€žà¥à€µà¥à€¹ à€à¥à€²à¥"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"à€¡à€¿à€žà¥à€à€šà¥à€à¥à€ à€à€°à€Ÿ"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"ॲà€à¥à€à€¿à€µà¥à€¹à¥à€ à€à€°à€Ÿ"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"à€à€Šà¥à€¯à€Ÿ à€ªà¥à€šà¥à€¹à€Ÿ à€à€ªà¥à€à€ª à€žà¥à€°à¥ à€à€°à€Ÿ"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"à€à¥à€µà€¿à€ à€¶à¥à€
à€° à€à€£à€¿ Find My Device à€¯à€Ÿà€à€žà€Ÿà€°à€à¥ à€µà¥à€¶à€¿à€·à¥à€à¥à€¯à¥ à€¬à¥à€²à¥à€à¥à€¥ à€µà€Ÿà€ªà€°à€€à€Ÿà€€"</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"à€¬à¥à€²à¥à€à¥à€¥ à€à€Šà¥à€¯à€Ÿ à€žà€à€Ÿà€³à¥ à€žà¥à€°à¥ à€¹à¥à€à€²"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"à€à€¡à€¿à€ à€¶à¥à€
à€°à€¿à€à€"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"à€à€¡à€¿à€ à€¶à¥à€
à€° à€à€°à€€ à€à€¹à¥"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g> à€¬à¥
à€à€°à¥"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"à€à€¡à€¿à€"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"à€¹à¥à€¡à€žà¥à€"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"à€¶à¥à€°à€µà€£à€¯à€à€€à¥à€°à¥"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"à€šà€µà¥à€š à€¡à€¿à€µà¥à€¹à€Ÿà€à€ž à€ªà¥à€
à€° à€à€°à€Ÿ"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"à€šà€µà¥à€š à€¡à€¿à€µà¥à€¹à€Ÿà€à€ž à€ªà¥à€
à€° à€à€°à€£à¥à€¯à€Ÿà€žà€Ÿà€ ॠà€à¥à€²à€¿à€ à€à€°à€Ÿ"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"à€¡à€¿à€µà¥à€¹à€Ÿà€à€žà€à€Ÿ à€®à€Ÿà€¯à€à¥à€°à¥à€«à¥à€š à€
à€šà€¬à¥à€²à¥à€ à€à€°à€Ÿà€¯à€à€Ÿ à€à€¹à¥ à€à€Ÿ?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"à€¡à€¿à€µà¥à€¹à€Ÿà€à€žà€à€Ÿ à€à¥
à€®à¥à€°à€Ÿ à€
à€šà€¬à¥à€²à¥à€ à€à€°à€Ÿà€¯à€à€Ÿ à€à€¹à¥ à€à€Ÿ?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"à€¡à€¿à€µà¥à€¹à€Ÿà€à€žà€à€Ÿ à€à¥
à€®à¥à€°à€Ÿ à€à€£à€¿ à€®à€Ÿà€¯à€à¥à€°à¥à€«à¥à€š à€
à€šà€¬à¥à€²à¥à€ à€à€°à€Ÿà€¯à€à€Ÿ à€à€¹à¥ à€à€Ÿ?"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • à€µà¥à€à€Ÿà€šà¥ à€à€Ÿà€°à¥à€ à€¹à¥à€€ à€à€¹à¥ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> à€®à€§à¥à€¯à¥ à€ªà¥à€°à¥à€£ à€¹à¥à€à€²"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • à€¹à€³à¥ à€à€Ÿà€°à¥à€ à€¹à¥à€€ à€à€¹à¥ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> à€®à€§à¥à€¯à¥ à€ªà¥à€°à¥à€£ à€¹à¥à€à€²"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • à€à€Ÿà€°à¥à€ à€¹à¥à€€ à€à€¹à¥ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> à€®à€§à¥à€¯à¥ à€ªà¥à€°à¥à€£ à€¹à¥à€à€²"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"à€²à¥à€ à€žà¥à€à¥à€°à¥à€šà€µà€°à¥à€² à€µà€¿à€à¥à€"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"à€žà€Ÿà€®à¥à€Šà€Ÿà€¯à€¿à€ à€à¥à€¯à¥à€à¥à€°à€¿à€¯à€² à€žà¥à€°à¥ à€à€°à€£à¥à€¯à€Ÿà€žà€Ÿà€ à¥ à€¡à€Ÿà€µà¥à€à€¡à¥ à€žà¥à€µà€Ÿà€à€ª à€à€°à€Ÿ"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"à€à€žà¥à€à€®à€Ÿà€à€ à€à€°à€Ÿ"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"à€¡à€¿à€žà€®à€¿à€ž à€à€°à€Ÿ"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"à€žà¥à€à€¿à€à€à¥à€ à€à€à€¡à€Ÿ"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"à€µà€°à¥à€ à¥²à€ªà¥à€ž à€ªà¥à€šà¥à€¹à€Ÿ à€žà¥à€°à¥ à€à€°à€Ÿà€¯à€à¥?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"à€ªà¥à€šà¥à€¹à€Ÿ à€žà¥à€°à¥ à€à€°à€Ÿ"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"à€²à¥à€ à€žà¥à€à¥à€°à¥à€šà€µà€°à¥à€² à€µà€¿à€à¥à€ à€¬à€à€Š à€à€°à€Ÿ"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"à€²à¥à€ à€žà¥à€à¥à€°à¥à€šà€µà€°à¥à€² à€µà€¿à€à¥à€"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"à€µà€Ÿà€ªà€°à€à€°à¥à€€à€Ÿ à€žà¥à€µà€¿à€ à€à€°à€Ÿ"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"à€ªà¥à€²à€¡à€Ÿà€à€š à€®à¥à€šà¥"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"à€¯à€Ÿ à€žà€€à¥à€°à€Ÿà€€à¥à€² à€žà€°à¥à€µ à€
à¥
à€ªà¥à€ž à€à€£à€¿ à€¡à¥à€à€Ÿ à€¹à€à€µà€²à€Ÿ à€à€Ÿà€à€²."</string>
diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml
index 95d4237..fb5efc8 100644
--- a/packages/SystemUI/res/values-ms/strings.xml
+++ b/packages/SystemUI/res/values-ms/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Bidai pemberitahuan."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Tetapan pantas."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Tetapan pantas dan Bidai pemberitahuan."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Kunci skrin."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Kunci skrin"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Skrin kunci kerja"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Tutup"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"senyap sepenuhnya"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"Lihat semua"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"Gunakan Bluetooth"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"Disambungkan"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"Perkongsian Audio"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"Disimpan"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"putuskan sambungan"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"aktifkan"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"Dihidupkan sekali lagi esok secara automatik"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"Ciri seperti Quick Share dan Find My Device menggunakan Bluetooth"</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"Bluetooth akan dihidupkan esok pagi"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"Perkongsian Audio"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"Berkongsi Audio"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g> bateri"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Audio"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Set Kepala"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Peranti pendengaran"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Gandingkan peranti baharu"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Klik untuk menggandingkan peranti baharu"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Nyahsekat mikrofon peranti?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Nyahsekat kamera peranti?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Nyahsekat kamera dan mikrofon peranti?"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Mengecas dengan cepat • Penuh dalam masa <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Mengecas dengan perlahan • Penuh dalam masa <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Mengecas • Penuh dalam masa <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Widget pada skrin kunci"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Leret ke kiri untuk memulakan tutorial umum"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Sesuaikan"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Ketepikan"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Buka tetapan"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Nyahjeda apl kerja?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"Nyahjeda"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Tutup widget pada skrin kunci"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Widget pada skrin kunci"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Tukar pengguna"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"menu tarik turun"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Semua apl dan data dalam sesi ini akan dipadam."</string>
diff --git a/packages/SystemUI/res/values-my/strings.xml b/packages/SystemUI/res/values-my/strings.xml
index 7941935..42bcfa6 100644
--- a/packages/SystemUI/res/values-my/strings.xml
+++ b/packages/SystemUI/res/values-my/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"á¡âááŒá±á¬ááºážááŒá¬ážá
á¬á¡ááœááº"</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"á¡ááŒááºáá¯áẠá¡ááŒááºá¡áááº"</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"‘á¡ááŒááºáááºáááºáá»á¬áž’ ááŸáá·áº ‘á¡ááŒá±á¬ááºážááŒá¬ážá
á¬á¡ááœáẒá"</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"áá±á¬á·ááºáá»ááºááŸá¬ááŒááº"</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"áá±á¬á·ááºáá»ááºááŸá¬ááŒááº"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"á¡áá¯ááºáá¯á¶áž áá±á¬á·ááºáá»ááºááŸá¬ááŒááº"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"ááááºáááº"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"áá¯á¶ážá á¡áá¶ááááºáá¬ážáááº"</string>
@@ -376,6 +376,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"áá¬ážááŒá¬ážáááááá¬"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"á
ááºá¡áá
áºááœá²áá»áááºáááº"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"á
ááºá¡áá
Ạááœá²áá»áááºááẠááŸáááºáá«"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"á
ááºáááá¯ááºáááá¯áá¯ááºážááᯠááŒááºááœáá·áºááá¬ážá"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"á
ááºááááºááá¬ááᯠááŒááºááœáá·áºááá¬ážá"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"á
ááºááááºááá¬ááŸáá·áº ááá¯ááºáááá¯áá¯ááºážááᯠááŒááºááœáá·áºááá¬ážá"</string>
@@ -441,6 +443,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • á¡ááŒááºá¡á¬ážááœááºážáá±ááẠ• á¡á¬ážááŒáá·áºááẠ<xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> ááá¯áááº"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ááŸá±ážááœá±ážá
áœá¬ á¡á¬ážááœááºážáá±ááẠ• á¡á¬ážááŒáá·áºááẠ<xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> ááá¯áááº"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • á¡á¬ážááœááºážáá±ááẠ• á¡á¬ážááŒáá·áºááẠ<xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> ááá¯áááº"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"áá±á¬á·ááºáá»ááºááŸá¬ááŒááºááŸá áááá»ááºáá»á¬áž"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"á¡áá»á¬ážáá¯á¶ážááŸááºážáááºážááá¯á·áá»áá»áẠá
áááºááẠáááºááá¯á·ááœááºááœá²áá«"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"á
áááºááŒáá¯ááºáá¯ááºáááº"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"áááºáááº"</string>
@@ -459,6 +462,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"áááºáááºáá»á¬áž ááœáá·áºáááº"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"á¡áá¯ááºáá¯á¶ážá¡ááºáẠááŒááºááœáá·áºááá¬ážá"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"ááŒááºááœáá·áºáááº"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"áá±á¬á·ááºáá»ááºááŸá¬ááŒááºááŸá áááá»ááºáá»á¬ážááᯠááááºáááº"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"áá±á¬á·ááºáá»ááºááŸá¬ááŒááºááŸá áááá»ááºáá»á¬áž"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"á¡áá¯á¶ážááŒá¯áá°ááᯠááŒá±á¬ááºážáá²áááº"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"ááœá²áá»áá®áá°áž"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"áá®áá»áááºáááºááŸá¯ áá²á á¡ááºááºáá»á¬áž á¡á¬ážáá¯á¶áž ááŸáá·áº áá±áá¬ááᯠáá»ááºáá
áºáááºá"</string>
diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml
index 59afb3e..2ef225e 100644
--- a/packages/SystemUI/res/values-nb/strings.xml
+++ b/packages/SystemUI/res/values-nb/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Varselskygge."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Hurtiginnstillinger."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Hurtiginnstillinger og varselpanelet"</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Låseskjerm."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Låseskjerm"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Låseskjerm for arbeid"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Lukk"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"total stillhet"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"Se alle"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"Bruk Bluetooth"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"Tilkoblet"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"Lyddeling"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"Lagret"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"koble fra"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"aktiver"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"Slå på igjen i morgen automatisk"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"Funksjoner som Quick Share og Finn enheten min bruker Bluetooth"</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"Bluetooth slås på i morgen tidlig"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"Lyddeling"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"Deler lyd"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g> batteri"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Lyd"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Hodetelefoner"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Høreapparater"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Koble til en ny enhet"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Klikk for å koble til en ny enhet"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Vil du oppheve blokkeringen av enhetsmikrofonen?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Vil du oppheve blokkeringen av enhetskameraet?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Vil du oppheve blokkeringen av enhetskameraet og -mikrofonen?"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Lader raskt • Fulladet om <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Lader sakte • Fulladet om <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Lader • Fulladet om <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Moduler på låseskjermen"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Sveip til venstre for å starte fellesveiledningen"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Tilpass"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Lukk"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Åpne innstillingene"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Vil du slå på jobbapper igjen?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"Slå på"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Lukk moduler på låseskjermen"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Moduler på låseskjermen"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Bytt bruker"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"rullegardinmeny"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Alle apper og data i denne økten blir slettet."</string>
diff --git a/packages/SystemUI/res/values-ne/strings.xml b/packages/SystemUI/res/values-ne/strings.xml
index 3ab647f..459a17f 100644
--- a/packages/SystemUI/res/values-ne/strings.xml
+++ b/packages/SystemUI/res/values-ne/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"à€žà¥à€à€šà€Ÿ à€à€à¥à€·à¥€"</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"à€Šà¥à€°à¥à€€ à€žà¥à€à€¿à€à€¹à€°à¥"</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"à€Šà¥à€°à¥à€€ à€žà¥à€à€¿à€ à€€à€¥à€Ÿ à€žà¥à€à€šà€Ÿ à€à€à¥à€·à¥€"</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"à€žà¥à€à¥à€°à¥à€š à€¬à€šà¥à€Š à€à€°à¥à€šà¥à€¹à¥à€žà¥à¥€"</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"à€²à€ à€žà¥à€à¥à€°à€¿à€š"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"à€à€Ÿà€°à¥à€¯ à€ªà¥à€°à¥à€«à€Ÿà€à€²à€à¥ à€²à€ à€žà¥à€à¥à€°à€¿à€š"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"à€¬à€šà¥à€Š à€à€°à¥à€šà¥à€¹à¥à€žà¥"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"à€ªà¥à€°à¥à€£ à€®à¥à€šà€€à€Ÿ"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"à€žà€¬à¥ à€¡à€¿à€à€Ÿà€à€žà€¹à€°à¥ à€¹à¥à€°à¥à€šà¥à€¹à¥à€žà¥"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"à€¬à¥à€²à¥à€à¥à€¥ à€ªà¥à€°à€¯à¥à€ à€à€°à¥à€šà¥à€¹à¥à€žà¥"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"à€à€šà¥à€à¥à€ à€à€°à€¿à€à€à¥ à€"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"à€
à€¡à€¿à€¯à¥ à€žà¥à€¯à€°à€¿à€"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"à€žà¥à€ à€à€°à€¿à€à€à¥ à€"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"à€¡à€¿à€žà¥à€à€šà¥à€à¥à€ à€à€°à¥à€šà¥à€¹à¥à€žà¥"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"à€à€à¥à€à€¿à€à¥à€ à€à€°à¥à€šà¥à€¹à¥à€žà¥"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"à€à¥à€²à€¿ à€«à¥à€°à€¿ à€žà¥à€µà€€à€ à€
à€š à€à€°à¥à€šà¥à€¹à¥à€žà¥"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"à€à¥à€µà€¿à€ à€žà¥à€¯à€° à€° Find My Device à€à€žà¥à€€à€Ÿ à€žà¥à€µà€¿à€§à€Ÿà€¹à€°à¥ à€ªà¥à€°à€¯à¥à€ à€à€°à¥à€š à€¬à¥à€²à¥à€à¥à€¥ à€à€Ÿà€¹à€¿à€šà¥à€"</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"à€¬à¥à€²à¥à€à¥à€¥ à€à¥à€²à€¿ à€¬à€¿à€¹à€Ÿà€š à€
à€š à€¹à¥à€šà¥ à€"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"à€
à€¡à€¿à€¯à¥ à€žà¥à€¯à€°à€¿à€"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"à€
à€¡à€¿à€¯à¥ à€žà¥à€¯à€° à€à€°à€¿à€à€Šà¥ à€"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g> à€¬à¥à€¯à€Ÿà€à¥à€°à¥"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"à€
à€¡à€¿à€¯à¥"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"à€¹à¥à€¡à€žà¥à€"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"à€¹à€¿à€¯à€°à€¿à€ à€¡à€¿à€à€Ÿà€à€žà€¹à€°à¥"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"à€šà€¯à€Ÿà€ à€¡à€¿à€à€Ÿà€à€ž à€à€šà¥à€à¥à€ à€à€°à¥à€šà¥à€¹à¥à€žà¥"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"à€šà€¯à€Ÿà€ à€¡à€¿à€à€Ÿà€à€žà€®à€Ÿ à€à€šà¥à€à¥à€ à€à€°à¥à€š à€à¥à€²à€¿à€ à€à€°à¥à€šà¥à€¹à¥à€žà¥"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"à€¡à€¿à€à€Ÿà€à€žà€à¥ à€®à€Ÿà€à€à¥à€°à¥à€«à¥à€š à€
à€šà€¬à¥à€²à€ à€à€°à¥à€šà¥ à€¹à¥?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"à€¡à€¿à€à€Ÿà€à€žà€à¥ à€à¥à€¯à€Ÿà€®à¥à€°à€Ÿ à€
à€šà€¬à¥à€²à€ à€à€°à¥à€šà¥ à€¹à¥?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"à€¡à€¿à€à€Ÿà€à€žà€à¥ à€à¥à€¯à€Ÿà€®à¥à€°à€Ÿ à€° à€®à€Ÿà€à€à¥à€°à¥à€«à¥à€š à€
à€šà€¬à¥à€²à€ à€à€°à¥à€šà¥ à€¹à¥?"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • à€à€¿à€à¥ à€à€Ÿà€°à¥à€ à€¹à¥à€à€Šà¥ à€ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> à€®à€Ÿ à€ªà¥à€°à¥ à€à€Ÿà€°à¥à€ à€¹à¥à€šà¥à€"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • à€¬à€¿à€žà¥à€€à€Ÿà€°à¥ à€à€Ÿà€°à¥à€ à€¹à¥à€à€Šà¥ à€ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> à€®à€Ÿ à€ªà¥à€°à¥ à€à€Ÿà€°à¥à€ à€¹à¥à€šà¥à€"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • à€à€Ÿà€°à¥à€ à€¹à¥à€à€Šà¥ à€ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> à€®à€Ÿ à€«à¥à€² à€à€Ÿà€°à¥à€ à€¹à¥à€šà¥ à€"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"à€²à€ à€žà¥à€à¥à€°à€¿à€šà€®à€Ÿ à€à€à€à€Ÿ à€µà€¿à€à¥à€à€¹à€°à¥"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"à€à€®à¥à€¯à¥à€šà€² à€à¥à€¯à¥à€à¥à€°à€¿à€¯à€² à€žà¥à€°à¥ à€à€°à¥à€š à€¬à€Ÿà€¯à€Ÿà€à€€à€¿à€° à€žà¥à€µà€Ÿà€à€ª à€à€°à¥à€šà¥à€¹à¥à€žà¥"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"à€à€žà¥à€à€®à€Ÿà€à€ à€à€°à¥à€šà¥à€¹à¥à€žà¥"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"à€à€Ÿà€°à¥à€ à€à€°à¥à€šà¥à€¹à¥à€žà¥"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"à€žà¥à€à€¿à€ à€à¥à€²à¥à€šà¥à€¹à¥à€žà¥"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"à€à€Ÿà€®à€žà€®à¥à€¬à€šà¥à€§à¥ à€à€ªà€¹à€°à¥ à€
à€šà€ªà€ à€à€°à¥à€šà¥ à€¹à¥?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"à€
à€šà€ªà€ à€à€°à¥à€šà¥à€¹à¥à€žà¥"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"à€²à€ à€žà¥à€à¥à€°à€¿à€šà€®à€Ÿ à€à€à€à€Ÿ à€µà€¿à€à¥à€à€¹à€°à¥ à€¬à€šà¥à€Š à€à€°à¥à€šà¥à€¹à¥à€žà¥"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"à€²à€ à€žà¥à€à¥à€°à€¿à€šà€®à€Ÿ à€à€à€à€Ÿ à€µà€¿à€à¥à€à€¹à€°à¥"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"à€ªà¥à€°à€¯à¥à€à€à€°à¥à€€à€Ÿ à€«à¥à€°à¥à€šà¥à€¹à¥à€žà¥"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"à€ªà¥à€²à€¡à€Ÿà€à€š à€®à¥à€šà¥"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"à€¯à¥ à€žà€€à¥à€°à€®à€Ÿ à€à€à€à€Ÿ à€žà€¬à¥ à€à€ªà€¹à€°à¥ à€° à€¡à¥à€à€Ÿ à€®à¥à€à€Ÿà€à€šà¥ à€à¥€"</string>
@@ -1006,7 +1006,7 @@
<string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"à€žà€¿à€°à€Ÿà€šà€à¥ à€Šà€Ÿà€¯à€Ÿà€à€€à€¿à€° à€žà€Ÿà€°à¥à€šà¥à€¹à¥à€žà¥"</string>
<string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"à€ªà¥à€à€Ÿà€°à€à¥ à€¬à€Ÿà€¯à€Ÿà€à€€à€¿à€° à€žà€Ÿà€°à¥à€šà¥à€¹à¥à€žà¥"</string>
<string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"à€ªà¥à€à€Ÿà€°à€à¥ à€Šà€Ÿà€¯à€Ÿà€à€€à€¿à€° à€žà€Ÿà€°à¥à€šà¥à€¹à¥à€žà¥"</string>
- <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"à€à€¿à€šà€Ÿà€°à€Ÿà€®à€Ÿ à€žà€Ÿà€°à¥à€šà¥à€¹à¥à€žà¥ à€° à€šà€Šà¥à€à€¿à€šà¥ à€ªà€Ÿà€°à¥à€šà¥…"</string>
+ <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"à€à€¿à€šà€Ÿà€°à€Ÿà€®à€Ÿ à€žà€Ÿà€°à¥à€šà¥à€¹à¥à€žà¥ à€° à€²à¥à€à€Ÿà€à€šà¥à€¹à¥à€žà¥"</string>
<string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"à€à€¿à€šà€Ÿà€°à€Ÿà€¬à€Ÿà€ à€žà€Ÿà€°à¥à€šà¥à€¹à¥à€žà¥ à€° à€Šà¥à€à€¿à€šà¥ à€ªà€Ÿà€°à¥à€šà¥…"</string>
<string name="accessibility_floating_button_action_remove_menu" msgid="6730432848162552135">"à€¹à€à€Ÿà€à€šà¥à€¹à¥à€žà¥"</string>
<string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"à€à€à€² à€à€°à¥à€šà¥à€¹à¥à€žà¥"</string>
@@ -1033,8 +1033,8 @@
<string name="controls_favorite_rearrange_button" msgid="2942788904364641185">"à€ªà¥à€šà€ à€®à€¿à€²à€Ÿà€à€šà¥à€¹à¥à€žà¥"</string>
<string name="controls_favorite_add_controls" msgid="1221420435546694004">"à€à€šà¥à€à¥à€°à¥à€²à€¹à€°à¥ à€¹à€Ÿà€²à¥à€šà¥à€¹à¥à€žà¥"</string>
<string name="controls_favorite_back_to_editing" msgid="184125114090062713">"à€žà€®à¥à€ªà€Ÿà€Šà€š à€à€°à¥à€šà¥ à€žà¥à€à¥à€°à€¿à€šà€®à€Ÿ à€«à€°à¥à€à€šà¥à€¹à¥à€žà¥"</string>
- <string name="controls_favorite_load_error" msgid="5126216176144877419">"à€šà€¿à€¯à€šà¥à€€à¥à€°à€£ à€žà¥à€µà€¿à€§à€Ÿà€¹à€°à¥ à€²à¥à€¡ à€à€°à¥à€š à€žà€à€¿à€à€šà¥€ <xliff:g id="APP">%s</xliff:g> à€à€ªà€à€Ÿ à€žà¥à€à€¿à€ à€ªà€°à€¿à€µà€°à¥à€€à€š à€à€°à€¿à€à€à€Ÿ à€à¥à€šà€šà¥ à€à€šà¥à€šà¥ à€à¥à€°à€Ÿ à€žà¥à€šà€¿à€¶à¥à€à€¿à€€ à€à€°à¥à€š à€à€à¥à€€ à€à€ª à€à€Ÿà€à€à¥à€šà¥à€¹à¥à€žà¥à¥€"</string>
- <string name="controls_favorite_load_none" msgid="7687593026725357775">"à€®à€¿à€²à¥à€Šà€Ÿ à€šà€¿à€¯à€šà¥à€€à¥à€°à€£ à€žà¥à€µà€¿à€§à€Ÿà€¹à€°à¥ à€à€ªà€²à€¬à¥à€§ à€à¥à€šà€šà¥"</string>
+ <string name="controls_favorite_load_error" msgid="5126216176144877419">"à€à€šà¥à€à¥à€°à¥à€² à€²à¥à€¡ à€à€°à¥à€š à€žà€à€¿à€à€šà¥€ <xliff:g id="APP">%s</xliff:g> à€à€ªà€à€Ÿ à€žà¥à€à€¿à€ à€ªà€°à€¿à€µà€°à¥à€€à€š à€à€°à€¿à€à€à€Ÿ à€à¥à€šà€šà¥ à€à€šà¥à€šà¥ à€à¥à€°à€Ÿ à€žà¥à€šà€¿à€¶à¥à€à€¿à€€ à€à€°à¥à€š à€à€à¥à€€ à€à€ª à€à€Ÿà€à€à¥à€šà¥à€¹à¥à€žà¥à¥€"</string>
+ <string name="controls_favorite_load_none" msgid="7687593026725357775">"à€®à€¿à€²à¥à€Šà€Ÿ à€à€šà¥à€à¥à€°à¥à€² à€à€ªà€²à€¬à¥à€§ à€à¥à€šà€šà¥"</string>
<string name="controls_favorite_other_zone_header" msgid="9089613266575525252">"à€
à€šà¥à€¯"</string>
<string name="controls_dialog_title" msgid="2343565267424406202">"à€¡à€¿à€à€Ÿà€à€ž à€šà€¿à€¯à€šà¥à€€à¥à€°à€£ à€à€°à¥à€šà¥ à€µà€¿à€à¥à€à€¹à€°à¥à€à¥ à€žà¥à€à¥à€®à€Ÿ à€¥à€ªà¥à€šà¥à€¹à¥à€žà¥"</string>
<string name="controls_dialog_ok" msgid="2770230012857881822">"à€¥à€ªà¥à€šà¥à€¹à¥à€žà¥"</string>
diff --git a/packages/SystemUI/res/values-night/styles.xml b/packages/SystemUI/res/values-night/styles.xml
index 291f8a2..546bf1c 100644
--- a/packages/SystemUI/res/values-night/styles.xml
+++ b/packages/SystemUI/res/values-night/styles.xml
@@ -72,4 +72,8 @@
<item name="android:textColor">@color/material_dynamic_secondary80</item>
</style>
+ <style name="ShortcutHelperTheme" parent="@style/ShortcutHelperThemeCommon">
+ <item name="android:windowLightNavigationBar">false</item>
+ </style>
+
</resources>
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index e85a1da..3595fb8 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Meldingenpaneel."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Snelle instellingen."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Snelle instellingen en meldingenpaneel."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Vergrendelscherm."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Vergrendelscherm"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Vergrendelscherm voor werk"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Sluiten"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"totale stilte"</string>
@@ -376,6 +376,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Hoortoestellen"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Nieuw apparaat koppelen"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Klik om nieuw apparaat te koppelen"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Microfoon van apparaat niet meer blokkeren?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Apparaatcamera niet meer blokkeren?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Blokkeren van apparaatcamera en -microfoon opheffen?"</string>
@@ -441,6 +443,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Snel opladen • Vol over <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Langzaam opladen • Vol over <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Opladen • Vol over <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Widgets op het vergrendelscherm"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Swipe naar links om de communitytutorial te starten"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Aanpassen"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Sluiten"</string>
@@ -459,6 +462,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Instellingen openen"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Werk-apps hervatten?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"Hervatten"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Widgets op het vergrendelscherm sluiten"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Widgets op het vergrendelscherm"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Gebruiker wijzigen"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"pull-downmenu"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Alle apps en gegevens in deze sessie worden verwijderd."</string>
diff --git a/packages/SystemUI/res/values-or/strings.xml b/packages/SystemUI/res/values-or/strings.xml
index 77ed062..3064f1f 100644
--- a/packages/SystemUI/res/values-or/strings.xml
+++ b/packages/SystemUI/res/values-or/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"ବିà¬àà¬à¬ªà଀ି ଶàଡàी"</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"à¬àà±à¬¿à¬à ଞàà¬à¬¿à¬à¬žàी"</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"à¬àà¬à¬ ଞàà¬à¬¿à¬à¬ž à¬à¬¬à¬ ବିà¬àà¬à¬ªà଀ି ଞàଡी"</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"ଲଠଞàà¬àରିଚी"</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"ଲଠଞàà¬àରିଚ"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"à±à¬°àଠଲà¬à ଞàà¬àରàଚà"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"ବଚàଊ à¬à¬°à¬šà଀à"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"ଞମàପàରàଣàଣ ଚàରବ଀ଟ"</string>
@@ -376,6 +376,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"ହିà¬
ରିଠଡିà¬à¬Ÿà¬à¬žà¬àଡଌିà¬"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"ଚàଠଡିà¬à¬Ÿà¬à¬ž ପààଟର à¬à¬°"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"ଚàଠଡିà¬à¬Ÿà¬à¬ž ପààଟର à¬à¬°à¬¿à¬¬à¬Ÿà¬à à¬àଲିଠà¬à¬°à¬šà଀à"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"ଡିà¬à¬Ÿà¬à¬žà¬° ମଟà¬à¬àରàଫàଚà¬à à¬
ଚବàଲଠà¬à¬°à¬¿à¬¬à?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"ଡିà¬à¬Ÿà¬à¬žà¬° à¬àମàରଟà¬à à¬
ଚବàଲଠà¬à¬°à¬¿à¬¬à?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"ଡିà¬à¬Ÿà¬à¬žà¬° à¬ààଟମàରଟ à¬à¬¬à¬ ମଟà¬à¬àରàଫàଚà¬à à¬
ଚବàଲà¬à à¬à¬°à¬¿à¬¬à?"</string>
@@ -441,6 +443,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ଶàà¬àର à¬à¬Ÿà¬°àଠହàà¬à¬à¬¿ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>ରà ଞମàପàରàଣàଣ ହàବ"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ଧàରà à¬à¬Ÿà¬°àଠହàà¬à¬à¬¿ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>ରà ଞମàପàରàଣàଣ ହàବ"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • à¬à¬Ÿà¬°àଠହàà¬à¬à¬¿ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>ରà ଞମàପàରàଣàଣ ହàବ"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"ଲଠଞàà¬àରିଚରà ଥିବଟ à±à¬¿à¬àà¬à¬àଡଌିà¬"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"à¬à¬®àààଚଟଲ à¬àààà¬àରିà¬à¬² à¬à¬°à¬®àଠà¬à¬°à¬¿à¬¬à¬Ÿ ପଟà¬à¬ ବଟମà¬à ଞàà±à¬Ÿà¬à¬ª à¬à¬°à¬šà଀à"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"à¬à¬·àà¬à¬®à¬Ÿà¬à¬ à¬à¬°à¬šà଀à"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"à¬à¬Ÿà¬°à¬ à¬à¬°à¬šà଀à"</string>
@@ -459,6 +462,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"ଞàà¬à¬¿à¬à¬ž à¬àଲଚà଀à"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"à±à¬Ÿà¬°àଠà¬à¬ªàଞà¬à ପàଣି à¬à¬Ÿà¬²à à¬à¬°à¬¿à¬¬à?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"ପàଣି à¬à¬Ÿà¬²à à¬à¬°à¬šà଀à"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"ଲଠଞàà¬àରିଚରà ଥିବଟ à±à¬¿à¬àà¬à¬àଡଌିà¬à ବଚàଊ à¬à¬°à¬šà଀à"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"ଲଠଞàà¬àରିଚରà ଥିବଟ à±à¬¿à¬àà¬à¬àଡଌିà¬"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"ààà¬à¬°à ବଊଳଟଚà଀à"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"ପàଲଡଟà¬à¬š ମàଚà"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"à¬à¬¹à¬¿ ଞàଞଚର ଞମଞà଀ à¬à¬ªà ଠଡଟà¬à¬Ÿ ଡିଲିà¬à ହàà¬à¬¯à¬¿à¬¬à¥€"</string>
@@ -1002,7 +1007,7 @@
<string name="accessibility_floating_button_hidden_notification_text" msgid="1457021647040915658">"à¬à¬àଞàଞିବିଲିà¬à ବà¬à¬š ଊàà¬à¬Ÿà¬à¬¬à¬Ÿà¬à à¬à¬Ÿà¬ª à¬à¬°à¬šà଀à"</string>
<string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"<xliff:g id="FEATURE_NAME">%s</xliff:g> ଞରàà¬à¬à¬à¬à à¬à¬Ÿà¬¢à¬Œà¬¿ ଊିà¬à¬¯à¬Ÿà¬à¬à¬¿"</string>
<string name="accessibility_floating_button_undo_message_number_text" msgid="4909270290725226075">"{count,plural, =1{#à¬à¬¿ ଞରàà¬à¬à¬à¬à à¬à¬Ÿà¬¢à¬Œà¬¿ ଊିà¬à¬¯à¬Ÿà¬à¬à¬¿}other{#à¬à¬¿ ଞରàà¬à¬à¬à¬à à¬à¬Ÿà¬¢à¬Œà¬¿ ଊିà¬à¬¯à¬Ÿà¬à¬à¬¿}}"</string>
- <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"ଶàରàଷ ବଟମà¬à ମàà¬à à¬à¬°à¬šà଀à"</string>
+ <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"ଶàରàଷ ବଟମà¬à ମàଠà¬à¬°à¬šà଀à"</string>
<string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"ଶàରàଷ ଡଟହଟଣà¬à ମàà¬à à¬à¬°à¬šà଀à"</string>
<string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"ଚିମàଚ ବଟମà¬à ମàà¬à à¬à¬°à¬šà଀à"</string>
<string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"ଚିମàଚ ଡଟହଟଣà¬à ମàà¬à à¬à¬°à¬šà଀à"</string>
diff --git a/packages/SystemUI/res/values-pa/strings.xml b/packages/SystemUI/res/values-pa/strings.xml
index 0cc753b..16c148e 100644
--- a/packages/SystemUI/res/values-pa/strings.xml
+++ b/packages/SystemUI/res/values-pa/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"àšžà©àšàššàšŸ àšžàšŒà©àš¡à¥€"</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"àš€àš€àšàšŸàš² àšžà©àšàš¿à©°àšàšŸàšà¥€"</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"àš€àš€àšàšŸàš² àšžà©àšàš¿à©°àšàšŸàš àš
àš€à© àšžà©àšàššàšŸ àšžàšŒà©àš¡à¥€"</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">" àš²àšŸàš àšžàšà©àš°à©àššà¥€"</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"àš²àšŸàš àšžàšà©àš°à©àšš"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"àšàšŸàš°àš-àšžàš¥àšŸàšš àš²àšŸàš àšžàšà©àš°à©àšš"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"àš¬à©°àšŠ àšàš°à©"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"àšªà©àš°àšŸ àšžàšŒàšŸàšàš€"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"àšžàš àšŠà©àšà©"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"àš¬àš²à©àšà©à©±àš¥ àšµàš°àš€à©"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"àšàššà©àšàš àš¹à©"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"àšàš¡à©àš àšžàšŸàšàšàšŸàšàš°àšš"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"àš°à©±àšàš¿àš
àš€ àšà©àš€àšŸ àšàš¿àš"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"àš¡àš¿àšžàšàššà©àšàš àšàš°à©"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"àšàš¿àš°àš¿àšàšžàšŒà©àš² àšàš°à©"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"àšà©±àš²à©àš¹ àššà©à©° àšàšªàš£à© àšàšª àšàšŸàš²à© àš¹à© àšàšŸàšµà©àšàšŸ"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"àšàšµàš¿à©±àš àšžàšŒà©àš
àš° àš
àš€à© Find My Device àšµàš°àšà©àšàš àšµàš¿àšžàšŒà©àšžàšŒàš€àšŸàšµàšŸàš àš¬àš²à©àšà©à©±àš¥ àšµàš°àš€àšŠà©àšàš àš¹àšš"</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"àš¬àš²à©àšà©à©±àš¥ àšà©±àš²à©àš¹ àšžàšµà©àš°à© àšàšŸàš²à© àš¹à© àšàšŸàšµà©àšàšŸ"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"àšàš¡à©àš àšžàšŸàšàšàšŸàšàš°àšš"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"àšàš¡à©àš àššà©à©° àšžàšŸàšàšàšŸ àšà©àš€àšŸ àšàšŸ àš°àš¿àš¹àšŸ àš¹à©"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g> àš¬à©àšàš°à©"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"àšàš¡à©àš"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"àš¹à©à©±àš¡àšžà©à©±àš"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"àšžà©àš£àšš àšµàšŸàš²à© àš¡à©àšµàšŸàšàšž"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"àššàšµàšŸàš àš¡à©àšµàšŸàšàšž àšà©à©àšŸàš¬à©±àš§ àšàš°à©"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"\'àššàšµàšŸàš àš¡à©àšµàšŸàšàšž àšà©à©àšŸàš¬à©±àš§ àšàš°à©\' \'àš€à© àšàš²àš¿à©±àš àšàš°à©"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"àšà© àš¡à©àšµàšŸàšàšž àšŠà© àš®àšŸàšàšà©àš°à©àš«àšŒà©àšš àššà©à©° àš
àš£àš¬àš²àšŸàš àšàš°àššàšŸ àš¹à©?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"àšà© àš¡à©àšµàšŸàšàšž àšŠà© àšà©àš®àš°à© àššà©à©° àš
àš£àš¬àš²àšŸàš àšàš°àššàšŸ àš¹à©?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"àšà© àš¡à©àšµàšŸàšàšž àšŠà© àšà©àš®àš°à© àš
àš€à© àš®àšŸàšàšà©àš°à©àš«àšŒà©àšš àššà©à©° àš
àš£àš¬àš²àšŸàš àšàš°àššàšŸ àš¹à©?"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • àš€à©àšàšŒ àšàšŸàš°àš àš¹à© àš°àš¿àš¹àšŸ àš¹à© • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> àšµàš¿à©±àš àšªà©àš°àšŸ àšàšŸàš°àš àš¹à©àšµà©àšàšŸ"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • àš¹à©àš²à© àšàšŸàš°àš àš¹à© àš°àš¿àš¹àšŸ àš¹à© • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> àšµàš¿à©±àš àšªà©àš°àšŸ àšàšŸàš°àš àš¹à©àšµà©àšàšŸ"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • àšàšŸàš°àš àš¹à© àš°àš¿àš¹àšŸ àš¹à© • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> àšµàš¿à©±àš àšªà©àš°àšŸ àšàšŸàš°àš àš¹à©àšµà©àšàšŸ"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"àš²àšŸàš àšžàšà©àš°à©àšš \'àš€à© àšµàš¿àšà©àš"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"àšàšŸàšàšàšŸàš°àš àšàš¿àšàšà©àš°à©àš
àš² àšžàšŒà©àš°à© àšàš°àšš àš²àš àšà©±àš¬à© àšªàšŸàšžà© àšµà©±àš² àšžàšµàšŸàšàšª àšàš°à©"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"àšµàš¿àšàšàš€àš¬à©±àš§ àšàš°à©"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"àšàšŸàš°àš àšàš°à©"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"àšžà©àšàš¿à©°àšàšŸàš àšà©àš²à©àš¹à©"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"àšà©°àš® àšžà©°àš¬à©°àš§à© àšàšªàšŸàš àš€à©àš àš°à©àš àš¹àšàšŸàšàš?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"àš°à©àš àš¹àšàšŸàš"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"àš²àšŸàš àšžàšà©àš°à©àšš \'àš€à© àšµàš¿àšà©àš àš¬à©°àšŠ àšàš°à©"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"àš²àšŸàš àšžàšà©àš°à©àšš \'àš€à© àšµàš¿àšà©àš"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"àšµàš°àš€à©àšàšàšŸàš° àšžàšµàš¿à©±àš àšàš°à©"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"àšªà©à©±àš²àš¡àšŸàšàšš àš®à©àššà©"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"àšàšž àšžà©àšžàšŒàšš àšµàš¿àšàš²à©àšàš àšžàšŸàš°à©àšàš àšàšªàšŸàš àš
àš€à© àš¡àšŸàšà© àššà©à©° àš®àš¿àšàšŸ àšŠàš¿à©±àš€àšŸ àšàšŸàšµà©àšàšŸà¥€"</string>
@@ -588,9 +588,9 @@
<string name="screen_pinning_negative" msgid="6882816864569211666">"àššàš¹à©àš àš§à©°àššàšµàšŸàšŠ"</string>
<string name="screen_pinning_start" msgid="7483998671383371313">"àšàšª àššà©à©° àšªàš¿à©°àšš àšà©àš€àšŸ àšàš¿àš"</string>
<string name="screen_pinning_exit" msgid="4553787518387346893">"àšàšª àššà©à©° àš
àššàšªàš¿à©°àšš àšà©àš€àšŸ àšàš¿àš"</string>
- <string name="stream_voice_call" msgid="7468348170702375660">"àšàšŸàš² àšàš°à©"</string>
+ <string name="stream_voice_call" msgid="7468348170702375660">"àšàšŸàš²"</string>
<string name="stream_system" msgid="7663148785370565134">"àšžàš¿àšžàšàš®"</string>
- <string name="stream_ring" msgid="7550670036738697526">"àšà©°àšà© àšµàšàšŸàš"</string>
+ <string name="stream_ring" msgid="7550670036738697526">"àšà©°àšà©"</string>
<string name="stream_music" msgid="2188224742361847580">"àš®à©àš¡à©àš"</string>
<string name="stream_alarm" msgid="16058075093011694">"àš
àš²àšŸàš°àš®"</string>
<string name="stream_notification" msgid="7930294049046243939">"àšžà©àšàššàšŸ"</string>
diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index 814d321..0a0bea2 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Obszar powiadomieÅ."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Szybkie ustawienia."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Szybkie ustawienia i obszar powiadomieÅ."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Ekran blokady."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Ekran blokady"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Ekran blokady wyÅwietlany podczas dziaÅania"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Zamknij"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"caÅkowita cisza"</string>
@@ -371,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"UrzÄ
dzenia sÅuchowe"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Sparuj nowe urzÄ
dzenie"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Kliknij, aby sparowaÄ nowe urzÄ
dzenie"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"OdblokowaÄ mikrofon urzÄ
dzenia?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"OdblokowaÄ aparat urzÄ
dzenia?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"OdblokowaÄ aparat i mikrofon urzÄ
dzenia?"</string>
@@ -436,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Szybkie Åadowanie • PeÅne naÅadowanie za <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Wolne Åadowanie • PeÅne naÅadowanie za <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Åadowanie • PeÅne naÅadowanie za <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"WidÅŒety na ekranie blokady"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Aby uruchomiÄ wspólny samouczek, przeciÄ
gnij palcem w lewo"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Dostosuj"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Zamknij"</string>
@@ -454,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Otwórz ustawienia"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"CofnÄ
Ä wstrzymanie aplikacji sÅuÅŒbowych?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"Cofnij wstrzymanie"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Zamknij widÅŒety na ekranie blokady"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"WidÅŒety na ekranie blokady"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"PrzeÅÄ
cz uÅŒytkownika"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"menu"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Wszystkie aplikacje i dane w tej sesji zostanÄ
usuniÄte."</string>
diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml
index 17fde25..9317528 100644
--- a/packages/SystemUI/res/values-pt-rBR/strings.xml
+++ b/packages/SystemUI/res/values-pt-rBR/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Aba de notificações."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Configurações rápidas."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Configurações rápidas e aba de notificações."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Tela de bloqueio."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Tela de bloqueio"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Tela de bloqueio de trabalho"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Fechar"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"silêncio total"</string>
@@ -376,6 +376,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Aparelhos auditivos"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Parear novo dispositivo"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Clique para parear o novo dispositivo"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Desbloquear o microfone do dispositivo?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Desbloquear a câmera do dispositivo?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Desbloquear a câmera e o microfone do dispositivo?"</string>
@@ -441,6 +443,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Carregamento rápido • Conclusão em <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Carga lenta • Conclusão em <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Carregando • Conclusão em <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Widgets na tela de bloqueio"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Deslize para a esquerda para iniciar o tutorial compartilhado"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Personalizar"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Dispensar"</string>
@@ -459,6 +462,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Abrir as configurações"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Reativar apps de trabalho?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"Reativar"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Fechar widgets na tela de bloqueio"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Widgets na tela de bloqueio"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Trocar usuário"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"menu suspenso"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Todos os apps e dados nesta sessão serão excluídos."</string>
@@ -602,8 +607,8 @@
<string name="volume_ringer_status_silent" msgid="3691324657849880883">"Desativar som"</string>
<string name="media_device_cast" msgid="4786241789687569892">"Transmitir"</string>
<string name="stream_notification_unavailable" msgid="4313854556205836435">"Indisponível com o toque silenciado"</string>
- <string name="stream_alarm_unavailable" msgid="4059817189292197839">"Indisponível porque o Não perturbe está ativado"</string>
- <string name="stream_media_unavailable" msgid="6823020894438959853">"Indisponível porque o Não perturbe está ativado"</string>
+ <string name="stream_alarm_unavailable" msgid="4059817189292197839">"Indisponível com o Não perturbe ativado"</string>
+ <string name="stream_media_unavailable" msgid="6823020894438959853">"Indisponível com o Não perturbe ativado"</string>
<string name="volume_stream_content_description_unmute" msgid="7729576371406792977">"%1$s. Toque para ativar o som."</string>
<string name="volume_stream_content_description_vibrate" msgid="4858111994183089761">"%1$s. Toque para configurar para vibrar. É possível que os serviços de acessibilidade sejam silenciados."</string>
<string name="volume_stream_content_description_mute" msgid="4079046784917920984">"%1$s. Toque para silenciar. É possível que os serviços de acessibilidade sejam silenciados."</string>
diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml
index dfb7695..2c1a9d1 100644
--- a/packages/SystemUI/res/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Painel de notificações."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Definições rápidas."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Definições rápidas e painel de notificações."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Ecrã de bloqueio."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Ecrã de bloqueio"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Ecrã de bloqueio de trabalho"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Fechar"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"silêncio total"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"Ver tudo"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"Usar Bluetooth"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"Ligado"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"Partilha de áudio"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"Guardado"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"desassociar"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"ativar"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"Reativar amanhã automaticamente"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"As funcionalidades como a Partilha rápida e o serviço Localizar o meu dispositivo usam o Bluetooth"</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"O Bluetooth vai ser ativado amanhã de manhã"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"Partilha de áudio"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"A partilhar áudio"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g> de bateria"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Áudio"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Ausc. c/ mic. integ."</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Dispositivos auditivos"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Sincronizar novo dispositivo"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Clique para sincronizar um novo dispositivo"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Desbloquear o microfone do dispositivo?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Desbloquear a câmara do dispositivo?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Quer desbloquear a câmara e o microfone?"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • A carregar rapidamente • Carga completa em <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • A carregar lentamente • Carga completa em <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • A carregar • Carga completa em <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Widgets no ecrã de bloqueio"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Deslize rapidamente para a esquerda para iniciar o tutorial coletivo"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Personalizar"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Ignorar"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Abrir definições"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Retomar apps de trabalho?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"Retomar"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Fechar widgets no ecrã de bloqueio"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Widgets no ecrã de bloqueio"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Mudar utilizador"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"menu pendente"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Todas as apps e dados desta sessão serão eliminados."</string>
@@ -1003,9 +1003,9 @@
<string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"Atalho de <xliff:g id="FEATURE_NAME">%s</xliff:g> removido"</string>
<string name="accessibility_floating_button_undo_message_number_text" msgid="4909270290725226075">"{count,plural, =1{# atalho removido}many{# atalhos removidos}other{# atalhos removidos}}"</string>
<string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Mover p/ parte sup. esquerda"</string>
- <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Mover parte superior direita"</string>
+ <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Mover p/ parte sup. direita"</string>
<string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Mover p/ parte infer. esquerda"</string>
- <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Mover parte inferior direita"</string>
+ <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Mover p/ parte infer. direita"</string>
<string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Mover p/ extremidade e ocultar"</string>
<string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Retirar extremidade e mostrar"</string>
<string name="accessibility_floating_button_action_remove_menu" msgid="6730432848162552135">"Remover"</string>
diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml
index 17fde25..9317528 100644
--- a/packages/SystemUI/res/values-pt/strings.xml
+++ b/packages/SystemUI/res/values-pt/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Aba de notificações."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Configurações rápidas."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Configurações rápidas e aba de notificações."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Tela de bloqueio."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Tela de bloqueio"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Tela de bloqueio de trabalho"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Fechar"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"silêncio total"</string>
@@ -376,6 +376,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Aparelhos auditivos"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Parear novo dispositivo"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Clique para parear o novo dispositivo"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Desbloquear o microfone do dispositivo?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Desbloquear a câmera do dispositivo?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Desbloquear a câmera e o microfone do dispositivo?"</string>
@@ -441,6 +443,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Carregamento rápido • Conclusão em <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Carga lenta • Conclusão em <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Carregando • Conclusão em <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Widgets na tela de bloqueio"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Deslize para a esquerda para iniciar o tutorial compartilhado"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Personalizar"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Dispensar"</string>
@@ -459,6 +462,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Abrir as configurações"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Reativar apps de trabalho?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"Reativar"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Fechar widgets na tela de bloqueio"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Widgets na tela de bloqueio"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Trocar usuário"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"menu suspenso"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Todos os apps e dados nesta sessão serão excluídos."</string>
@@ -602,8 +607,8 @@
<string name="volume_ringer_status_silent" msgid="3691324657849880883">"Desativar som"</string>
<string name="media_device_cast" msgid="4786241789687569892">"Transmitir"</string>
<string name="stream_notification_unavailable" msgid="4313854556205836435">"Indisponível com o toque silenciado"</string>
- <string name="stream_alarm_unavailable" msgid="4059817189292197839">"Indisponível porque o Não perturbe está ativado"</string>
- <string name="stream_media_unavailable" msgid="6823020894438959853">"Indisponível porque o Não perturbe está ativado"</string>
+ <string name="stream_alarm_unavailable" msgid="4059817189292197839">"Indisponível com o Não perturbe ativado"</string>
+ <string name="stream_media_unavailable" msgid="6823020894438959853">"Indisponível com o Não perturbe ativado"</string>
<string name="volume_stream_content_description_unmute" msgid="7729576371406792977">"%1$s. Toque para ativar o som."</string>
<string name="volume_stream_content_description_vibrate" msgid="4858111994183089761">"%1$s. Toque para configurar para vibrar. É possível que os serviços de acessibilidade sejam silenciados."</string>
<string name="volume_stream_content_description_mute" msgid="4079046784917920984">"%1$s. Toque para silenciar. É possível que os serviços de acessibilidade sejam silenciados."</string>
diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml
index 2af8013..95194c5 100644
--- a/packages/SystemUI/res/values-ro/strings.xml
+++ b/packages/SystemUI/res/values-ro/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"FereastrÄ pentru notificÄri."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"SetÄri rapide."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"FereastrÄ de SetÄri rapide Èi notificÄri."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Ecranul de blocare."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Ecranul de blocare"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Ecran de blocare pentru serviciu"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Închide"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"niciun sunet"</string>
@@ -376,6 +376,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Aparate auditive"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"AsociazÄ un nou dispozitiv"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"DÄ clic pentru a asocia un nou dispozitiv"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Deblochezi microfonul dispozitivului?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Deblochezi camera dispozitivului?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Deblochezi camera Èi microfonul dispozitivului?"</string>
@@ -441,6 +443,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Se încarcÄ rapid • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> pânÄ la încÄrcarea completÄ"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Se încarcÄ lent • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> pânÄ la încÄrcarea completÄ"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Se încarcÄ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> pânÄ la încÄrcarea completÄ"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Widgeturi pe ecranul de blocare"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"GliseazÄ spre stânga pentru a începe tutorialul pentru comunitate"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"PersonalizeazÄ"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Respinge"</string>
@@ -459,6 +462,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Deschide setÄrile"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Reactivezi aplicaÈii de lucru?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"ReactiveazÄ"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Închide widgeturile de pe ecranul de blocare"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Widgeturi pe ecranul de blocare"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"SchimbÄ utilizatorul"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"meniu vertical"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Toate aplicaÈiile Èi datele din aceastÄ sesiune vor fi Èterse."</string>
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index 16fe331..2ab3a741 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"ÐÐ°ÐœÐµÐ»Ñ ÑвеЎПЌлеМОй"</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"ÐÑÑÑÑÑе МаÑÑÑПйкО"</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"ÐÑÑÑÑÑе МаÑÑÑПйкО О Ð¿Ð°ÐœÐµÐ»Ñ ÑвеЎПЌлеМОй."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"ÐкÑаМ блПкОÑПвкО."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"ÐлПкОÑПвка ÑкÑаМа"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"ÐаблПкОÑПваМП"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"ÐакÑÑÑÑ"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"Ð¿ÐŸÐ»ÐœÐ°Ñ ÑОÑОМа"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"ÐÑе"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"ÐÑпПлÑзПваÑÑ"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"ÐПЎклÑÑеМП"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"ÐÑпÑавка аÑЎОП"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"СПÑ
ÑаМеМП"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"ПÑклÑÑОÑÑ"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"акÑОвОÑПваÑÑ"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"ÐклÑÑОÑÑ Ð·Ð°Ð²ÑÑа авÑПЌаÑОÑеÑкО"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"Bluetooth ОÑпПлÑзÑеÑÑÑ Ð² ÑакОÑ
ÑÑМкÑОÑÑ
О ÑеÑвОÑаÑ
, как \"ÐÑÑÑÑÐ°Ñ ÐŸÑпÑавка\" О \"ÐайÑО ÑÑÑÑПйÑÑвП\""</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"Bluetooth вклÑÑОÑÑÑ Ð·Ð°Ð²ÑÑа ÑÑÑПЌ"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"ÐÑпÑавка аÑЎОП"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"ÐклÑÑеМа ПÑпÑавка аÑЎОП"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"ÐаÑÑÐŽ: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g>"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"ÐÑЎОПÑÑÑÑПйÑÑвП"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"ÐаÑМОÑÑÑа"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"СлÑÑ
ПвÑе аппаÑаÑÑ"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"ÐПЎклÑÑОÑÑ ÐœÐŸÐ²ÐŸÐµ ÑÑÑÑПйÑÑвП"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"ÐажЌОÑе, ÑÑÐŸÐ±Ñ Ð¿ÐŸÐŽÐºÐ»ÑÑОÑÑ ÐœÐŸÐ²ÐŸÐµ ÑÑÑÑПйÑÑвП"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"РазблПкОÑПваÑÑ ÐŒÐžÐºÑПÑПМ ÑÑÑÑПйÑÑва?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"РазблПкОÑПваÑÑ ÐºÐ°ÐŒÐµÑÑ ÑÑÑÑПйÑÑва?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"РазблПкОÑПваÑÑ ÐºÐ°ÐŒÐµÑÑ Ðž ЌОкÑПÑПМ ÑÑÑÑПйÑÑва?"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ÐÑÑÑÑÐ°Ñ Ð·Ð°ÑÑЎка • ÐÑÑалПÑÑ <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ÐÐµÐŽÐ»ÐµÐœÐœÐ°Ñ Ð·Ð°ÑÑЎка • ÐÑÑалПÑÑ <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ÐаÑÑЎка • ÐÑÑалПÑÑ <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"ÐОЎжеÑÑ ÐœÐ° заблПкОÑПваММПЌ ÑкÑаМе"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"ЧÑÐŸÐ±Ñ ÐŸÐ·ÐœÐ°ÐºÐŸÐŒÐžÑÑÑÑ Ñ ÑÑкПвПЎÑÑвПЌ, пÑПвеЎОÑе пП ÑкÑÐ°ÐœÑ Ð²Ð»ÐµÐ²ÐŸ"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"ÐаÑÑÑПОÑÑ"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"ÐакÑÑÑÑ"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"ÐÑкÑÑÑÑ ÐœÐ°ÑÑÑПйкО"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"ÐклÑÑОÑÑ ÑабПÑОе пÑОлПжеМОÑ?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"ÐклÑÑОÑÑ"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"ÐакÑÑÑÑ Ð²ÐžÐŽÐ¶ÐµÑÑ ÐœÐ° заблПкОÑПваММПЌ ÑкÑаМе"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"ÐОЎжеÑÑ ÐœÐ° заблПкОÑПваММПЌ ÑкÑаМе"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"СЌеМОÑÑ Ð¿ÐŸÐ»ÑзПваÑелÑ."</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"ÑаÑкÑÑваÑÑееÑÑ ÐŒÐµÐœÑ"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"ÐÑе пÑÐžÐ»ÐŸÐ¶ÐµÐœÐžÑ Ðž ЎаММÑе ÑÑПгП пÑПÑÐžÐ»Ñ Ð±ÑÐŽÑÑ ÑЎалеМÑ."</string>
@@ -612,8 +612,8 @@
<string name="volume_panel_noise_control_title" msgid="7413949943872304474">"ÐПМÑÑÐŸÐ»Ñ ÑÑÐŸÐ²ÐœÑ ÑÑЌа"</string>
<string name="volume_panel_spatial_audio_title" msgid="3367048857932040660">"ÐÑПÑÑÑаМÑÑвеММПе звÑÑаМОе"</string>
<string name="volume_panel_spatial_audio_off" msgid="4177490084606772989">"ÐÑклÑÑеМП"</string>
- <string name="volume_panel_spatial_audio_fixed" msgid="3136080137827746046">"Ðез ПÑÑлежОваМОÑ"</string>
- <string name="volume_panel_spatial_audio_tracking" msgid="5711115234001762974">"С ПÑÑлежОваМОеЌ"</string>
+ <string name="volume_panel_spatial_audio_fixed" msgid="3136080137827746046">"Ðез ПÑÑлежОваМОÑ"</string>
+ <string name="volume_panel_spatial_audio_tracking" msgid="5711115234001762974">"С ПÑÑлежОваМОеЌ"</string>
<string name="volume_ringer_change" msgid="3574969197796055532">"ÐажЌОÑе, ÑÑÐŸÐ±Ñ ÐžÐ·ÐŒÐµÐœÐžÑÑ ÑежОЌ звПМка."</string>
<string name="volume_ringer_hint_mute" msgid="4263821214125126614">"ПÑклÑÑОÑÑ Ð·Ð²Ñк"</string>
<string name="volume_ringer_hint_unmute" msgid="6119086890306456976">"вклÑÑОÑÑ Ð·Ð²Ñк"</string>
@@ -1002,11 +1002,11 @@
<string name="accessibility_floating_button_hidden_notification_text" msgid="1457021647040915658">"ЧÑÐŸÐ±Ñ Ð²ÐµÑМÑÑÑ ÐµÐµ, МажЌОÑе Ма ÑвеЎПЌлеМОе."</string>
<string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"<xliff:g id="FEATURE_NAME">%s</xliff:g>: ÑПÑеÑаМОе ÐºÐ»Ð°Ð²ÐžÑ ÑЎалеМП."</string>
<string name="accessibility_floating_button_undo_message_number_text" msgid="4909270290725226075">"{count,plural, =1{# ÑПÑеÑаМОе ÐºÐ»Ð°Ð²ÐžÑ ÑЎалеМП}one{# ÑПÑеÑаМОе ÐºÐ»Ð°Ð²ÐžÑ ÑЎалеМП}few{# ÑПÑеÑÐ°ÐœÐžÑ ÐºÐ»Ð°Ð²ÐžÑ ÑЎалеМП}many{# ÑПÑеÑаМОй ÐºÐ»Ð°Ð²ÐžÑ ÑЎалеМП}other{# ÑПÑеÑÐ°ÐœÐžÑ ÐºÐ»Ð°Ð²ÐžÑ ÑЎалеМП}}"</string>
- <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"ÐеÑеМеÑÑО в левÑй веÑÑ
МОй ÑгПл"</string>
- <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"ÐеÑеМеÑÑО в пÑавÑй веÑÑ
МОй ÑгПл"</string>
- <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"ÐеÑеМеÑÑО в левÑй МОжМОй ÑгПл"</string>
- <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"ÐеÑеМеÑÑО в пÑавÑй МОжМОй ÑгПл"</string>
- <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"ÐеÑеМеÑÑО к кÑÐ°Ñ Ðž ÑкÑÑÑÑ"</string>
+ <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"ÐеÑеЌеÑÑОÑÑ Ð² левÑй веÑÑ
МОй ÑгПл"</string>
+ <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"ÐеÑеЌеÑÑОÑÑ Ð² пÑавÑй веÑÑ
МОй ÑгПл"</string>
+ <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"ÐеÑеЌеÑÑОÑÑ Ð² левÑй МОжМОй ÑгПл"</string>
+ <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"ÐеÑеЌеÑÑОÑÑ Ð² пÑавÑй МОжМОй ÑгПл"</string>
+ <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"ÐеÑеЌеÑÑОÑÑ Ðº кÑÐ°Ñ Ðž ÑкÑÑÑÑ"</string>
<string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"ÐеÑМÑÑÑ ÐžÐ·-за кÑÐ°Ñ Ðž пПказаÑÑ"</string>
<string name="accessibility_floating_button_action_remove_menu" msgid="6730432848162552135">"УбÑаÑÑ"</string>
<string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"вклÑÑОÑÑ ÐžÐ»Ðž ПÑклÑÑОÑÑ"</string>
diff --git a/packages/SystemUI/res/values-si/strings.xml b/packages/SystemUI/res/values-si/strings.xml
index 458d9ee..df8ddda 100644
--- a/packages/SystemUI/res/values-si/strings.xml
+++ b/packages/SystemUI/res/values-si/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"දà·à¶±à·à¶žà·à¶¯à·à¶žà· à¶à·à¶»à¶«à¶º."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"à¶à·à·à¶«à·à¶ à·à·à¶à·à·à¶žà·."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"à¶à¶à·à¶žà¶±à· à·à·à¶à·à·à¶žà· à·à· දà·à¶±à·à¶žà·à¶¯à·à¶žà· à¶¡à·à¶ºà·à¶à¶º."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"à¶
à¶à·à·
à· à¶à·à¶»à¶º."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"à¶
à¶à·à·
à· à¶à·à¶»à¶º"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"à¶à·à¶»à·à¶ºà·à¶œ à¶
à¶à·à¶œà· à¶à·à¶»à¶º"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"à·à·à¶±à·à¶±"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"à·à¶žà·à¶Žà·à¶»à·à¶« à¶±à·à·à¶¬à¶à·à·"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"à·à·à¶ºà¶œà·à¶œ බගනà·à¶±"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"à¶¶à·à¶œà·à¶§à·à¶à· à¶·à·à·à·à¶à· à¶à¶»à¶±à·à¶±"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"à·à¶žà·à¶¶à¶±à·à¶°à·à¶à¶ºà·"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"à·à·à¶»à·à·à¶º à¶¶à·à¶¯à· à¶à·à¶±à·à¶ž"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"à·à·à¶»à·à¶à·à¶«à·"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"à·à·à·à¶±à·à¶°à· à¶à¶»à¶±à·à¶±"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"à·à¶à·à¶»à·à¶º à¶à¶»à¶±à·à¶±"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"à·à·à¶§ à·à·à·à¶ºà¶à¶à·à¶»à·à¶ºà· à¶±à·à·à¶ à¶à·à¶»à·à¶ºà·à¶à·à¶žà¶ à¶à¶»à¶±à·à¶±"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"à¶à¶à·à¶žà¶±à· à¶¶à·à¶¯à· à¶à·à¶±à·à¶ž à·à· à¶žà¶à· à¶à¶Žà·à¶à¶à¶º à·à·à·à·à¶ž à·à·à¶±à· à·à·à·à·à·à·à¶à¶ à¶¶à·à¶œà·à¶§à·à¶à· à¶·à·à·à·à¶ à¶à¶»à¶ºà·"</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"à¶¶à·à¶œà·à¶§à·à¶à· à·à·à¶§ à¶à¶¯à· à·à¶à·à¶»à·à¶º à·à·à¶ºà·"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"à·à·à¶»à·à·à¶º à¶¶à·à¶¯à· à¶à·à¶±à·à¶ž"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"à·à·à¶»à·à·à¶ºà¶º à¶¶à·à¶¯à· à¶à·à¶±à·à¶ž"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"à¶¶à·à¶§à¶»à·à¶º <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g>"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"à·à·à¶»à·à·à¶º"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"à·à·à¶©à·à·à·à¶§à¶º"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"à·à·à¶»à·à¶« à¶à¶Žà·à¶à¶"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"න෠à¶à¶Žà·à¶à¶à¶º යà·à¶à¶œ à¶à¶»à¶±à·à¶±"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"න෠à¶à¶Žà·à¶à¶à¶º යà·à¶à¶œ à¶à·à¶»à·à¶žà¶§ à¶à·à¶œà·à¶à· à¶à¶»à¶±à·à¶±"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"à¶à¶Žà·à¶à¶ ඞයà·à¶à·à¶»à·à·à¶±à¶º à¶
à·à·à·à¶» à¶à·à¶»à·à¶ž à¶à·à¶à· à¶à¶»à¶±à·à¶±à¶¯?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"à¶à¶Žà·à¶à¶ à¶à·à¶žà¶»à·à· à¶
à·à·à·à¶» à¶à·à¶»à·à¶ž à¶à·à¶à· à¶à¶»à¶±à·à¶±à¶¯?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"à¶à¶Žà·à¶à¶ à¶à·à¶žà¶»à·à· à·à· ඞයà·à¶à·à¶»à·à·à¶±à¶º à¶
à·à·à·à¶» à¶à·à¶»à·à¶ž à¶à·à¶à· à¶à¶»à¶±à·à¶±à¶¯?"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • à·à·à¶à¶ºà·à¶±à· à¶à¶»à·à¶Žà¶«à¶º à·à·à¶žà·à¶±à· • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>à¶à·à¶±à· à·à¶žà·à¶Žà·à¶»à·à¶« à·à·"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • à·à·à¶žà·à¶±à· à¶à¶»à·à¶Žà¶«à¶º à·à·à¶žà·à¶±à· • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>à¶à·à¶±à· à·à¶žà·à¶Žà·à¶»à·à¶« à·à·"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • à¶à¶»à·à¶Žà¶«à¶º à·à·à¶žà·à¶±à· • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>à¶à·à¶±à· à·à¶žà·à¶Žà·à¶»à·à¶« à·à·"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"à¶
à¶à·à·
à· à¶à·à¶»à¶ºà·à·à· à·à·à¶¢à¶§à·"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"à¶Žà·à¶¯à· à¶±à·à¶¶à¶±à·à¶°à¶±à¶º à¶à¶»à¶žà·à¶· à¶à·à¶»à·à¶žà¶§ à·à¶žà¶§ à·à·à·à¶ºà·à¶Žà· à¶à¶»à¶±à·à¶±"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"à¶
à¶·à·à¶»à·à¶ à·à¶à¶»à¶«à¶º à¶à¶»à¶±à·à¶±"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"à¶
à·à· à¶à¶»à¶±à·à¶±"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"à·à·à¶à·à·à¶žà· à·à·à·à·à¶ à¶à¶»à¶±à·à¶±"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"à¶à·à¶»à·à¶º යà·à¶¯à·à¶žà· à·à·à¶»à·à¶ž à¶±à·à¶à¶»à¶±à·à¶± ද?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"à·à·à¶»à·à¶ž à¶±à·à¶à¶»à¶±à·à¶±"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"à¶
à¶à·à·
à· à¶à·à¶»à¶ºà·à·à· à·à·à¶¢à¶§à· à·à·à¶±à·à¶±"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"à¶
à¶à·à·
à· à¶à·à¶»à¶ºà·à·à· à·à·à¶¢à¶§à·"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"à¶Žà¶»à·à·à·à¶œà¶ à¶žà·à¶»à·à·"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"à¶±à·à¶Žà¶à¶± à¶žà·à¶±à·à·"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"à¶žà·à¶ž à·à·à·à·à¶ºà· à·à·à¶ºà·
à·à¶ž යà·à¶¯à·à¶žà· à·à· දà¶à·à¶ à¶žà¶à·à·à·."</string>
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index c8c2ee5..a2a967e 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Panel upozornení."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Rýchle nastavenia."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Rýchle nastavenia a panel upozornení"</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Uzamknutá obrazovka"</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Uzamknutá obrazovka"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Uzamknutá obrazovka pracovného profilu"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Zavrieť"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"úplné ticho"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"ZobraziÅ¥ všetko"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"Pouşiť Bluetooth"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"Pripojené"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"ZdieÄŸanie zvuku"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"UloÅŸené"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"odpojiť"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"aktivovať"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"Automaticky zajtra znova zapnúÅ¥"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"Funkcie ako Quick Share a Nájdi moje zariadenie pouÅŸívajú Bluetooth"</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"Bluetooth sa zapne zajtra ráno"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"ZdieÄŸanie zvuku"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"ZdieÄŸa sa zvuk"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"Batéria: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g>"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Zvuk"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Náhlavná súprava"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"NaÄúvacie zariadenia"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Párovanie nového zariadenia"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Kliknutím spárujete nové zariadenie"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Chcete odblokovaÅ¥ mikrofón zariadenia?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Chcete odblokovať kameru zariadenia?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Chcete odblokovaÅ¥ fotoaparát a mikrofón zariadenia?"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Nabíja sa rýchlo • Do úplného nabitia zostáva <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Nabíja sa pomaly • Do úplného nabitia zostáva <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Nabíja sa • Do úplného nabitia zostáva <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Miniaplikácie na uzamknutej obrazovke"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Potiahnutím doÄŸava spustite komunitný návod"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"PrispôsobiÅ¥"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Zavrieť"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Otvoriť nastavenia"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"ZrušiÅ¥ pozast. prac. aplikácií?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"ZrušiÅ¥ pozastavenie"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"ZavrieÅ¥ miniaplikácie na uzamknutej obrazovke"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Miniaplikácie na uzamknutej obrazovke"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Prepnutie pouÅŸívateÄŸa"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"rozbaÄŸovacia ponuka"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Všetky aplikácie a údaje v tejto relácii budú odstránené."</string>
diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml
index 0302199..55f9c71 100644
--- a/packages/SystemUI/res/values-sl/strings.xml
+++ b/packages/SystemUI/res/values-sl/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Zaslon z obvestili."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Hitre nastavitve."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Hitre nastavitve in zaslon z obvestili"</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Zaklenjen zaslon"</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Zaklenjen zaslon"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Zaklenjen zaslon delovnega profila"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Zapri"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"popolna tišina"</string>
@@ -376,6 +376,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Slušni pripomoÄki"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Seznanitev nove naprave"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Kliknite za seznanitev nove naprave"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Åœelite odblokirati mikrofon v napravi?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Åœelite odblokirati fotoaparat v napravi?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Åœelite odblokirati fotoaparat in mikrofon v napravi?"</string>
@@ -441,6 +443,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Hitro polnjenje • Napolnjeno Äez <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • PoÄasno polnjenje • Napolnjeno Äez <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Polnjenje • Napolnjeno Äez <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"PripomoÄki na zaklenjenem zaslonu"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Povlecite levo, da zaÅŸenete vadnico za skupnost"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Prilagodi"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Opusti"</string>
@@ -459,6 +462,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Odpri nastavitve"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Åœelite znova aktivirati delovne aplikacije?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"Znova aktiviraj"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Zapiranje pripomoÄkov na zaklenjenem zaslonu"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"PripomoÄki na zaklenjenem zaslonu"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Preklop med uporabniki"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"spustni meni"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Vse aplikacije in podatki v tej seji bodo izbrisani."</string>
@@ -1010,7 +1015,7 @@
<string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Premakni z roba in pokaÅŸi"</string>
<string name="accessibility_floating_button_action_remove_menu" msgid="6730432848162552135">"Odstrani"</string>
<string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"preklop"</string>
- <string name="accessibility_floating_button_action_edit" msgid="1688227814600463987">"Urejanje"</string>
+ <string name="accessibility_floating_button_action_edit" msgid="1688227814600463987">"Uredi"</string>
<string name="quick_controls_title" msgid="6839108006171302273">"Kontrolniki naprave"</string>
<string name="controls_providers_title" msgid="6879775889857085056">"Izberite aplikacijo za dodajanje kontrolnikov"</string>
<string name="controls_number_of_favorites" msgid="4481806788981836355">"{count,plural, =1{# kontrolnik je dodan.}one{# kontrolnik je dodan.}two{# kontrolnika sta dodana.}few{# kontrolniki so dodani.}other{# kontrolnikov je dodanih.}}"</string>
diff --git a/packages/SystemUI/res/values-sq/strings.xml b/packages/SystemUI/res/values-sq/strings.xml
index 8e621ce..751f307 100644
--- a/packages/SystemUI/res/values-sq/strings.xml
+++ b/packages/SystemUI/res/values-sq/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Streha e njoftimeve."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Cilësimet e shpejta."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"\"Cilësimet e shpejta\" dhe \"Streha e njoftimeve\"."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Ekrani i kyçjes."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Ekrani i kyçjes"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Ekrani i kyçjes së punës"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Mbylle"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"heshtje e plotë"</string>
@@ -376,6 +376,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Pajisjet e dëgjimit"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Çifto pajisje të re"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Kliko për të çiftuar një pajisje të re"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Të zhbllokohet mikrofoni i pajisjes?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Të zhbllokohet kamera e pajisjes?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Të zhbllokohen kamera dhe mikrofoni i pajisjes?"</string>
@@ -441,6 +443,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Po karikohet shpejt • Plot për <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Po karikohet ngadalë • Plot për <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Po karikohet • Plot për <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Miniaplikacionet në ekranin e kyçjes"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Rrëshqit shpejt majtas për të filluar udhëzuesin e përbashkët"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Personalizo"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Hiq"</string>
@@ -459,6 +462,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Hap cilësimet"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Hiq nga pauza apl. e punës?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"Hiq nga pauza"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Mbyll miniaplikacionet në ekranin e kyçjes"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Miniaplikacionet në ekranin e kyçjes"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Ndërro përdorues"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"menyja me tërheqje poshtë"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Të gjitha aplikacionet dhe të dhënat në këtë sesion do të fshihen."</string>
diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml
index a1825bf..3efc0e3 100644
--- a/packages/SystemUI/res/values-sr/strings.xml
+++ b/packages/SystemUI/res/values-sr/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"ÐÑÐŸÐ·ÐŸÑ Ñа ПбавеÑÑеÑОЌа."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"ÐÑза пПЎеÑаваÑа."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"ÐÑза пПЎеÑаваÑа О ÑÑака Ñа ПбавеÑÑеÑОЌа."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"ÐакÑÑÑаМ екÑаМ"</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"ÐакÑÑÑаМО екÑаМ"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"ÐакÑÑÑаМ екÑаМ за пПÑаП"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"ÐаÑвПÑО"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"пПÑпÑМа ÑОÑОМа"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"ÐÑОкажО Ñве"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"ÐПÑОÑÑО Bluetooth"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"ÐПвезаМП"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"ÐеÑеÑе звÑка"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"СаÑÑваМП"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"пÑекОМОÑе везÑ"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"акÑОвОÑаÑÑе"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"ÐÑÑПЌаÑÑкО пПМПвП ÑкÑÑÑО ÑÑÑÑа"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"ЀÑМкÑОÑе каП ÑÑП ÑÑ Quick Share О ÐÑПМаÑО ÐŒÐŸÑ ÑÑеÑÐ°Ñ ÐºÐŸÑОÑÑе Bluetooth"</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"Bluetooth Ñе Ñе ÑкÑÑÑОÑО ÑÑÑÑа ÑÑÑÑÑÑ"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"ÐеÑеÑе звÑка"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"ÐелО Ñе звÑк"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"ÐОвП баÑеÑОÑе Ñе <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g>"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"ÐÑЎОП"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"СлÑÑалОÑе"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"СлÑÑМО апаÑаÑО"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"УпаÑО МПвО ÑÑеÑаÑ"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"ÐлОкМОÑе Ўа бОÑÑе ÑпаÑОлО МПв ÑÑеÑаÑ"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"ÐелОÑе Ўа ПЎблПкОÑаÑе ЌОкÑПÑПМ ÑÑеÑаÑа?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"ÐелОÑе Ўа ПЎблПкОÑаÑе каЌеÑÑ ÑÑеÑаÑа?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"ÐелОÑе Ўа ПЎблПкОÑаÑе каЌеÑÑ Ðž ЌОкÑПÑПМ ÑÑеÑаÑа?"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ÐÑзП Ñе пÑМО • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> ЎП кÑаÑа пÑÑеÑа"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • СпПÑП Ñе пÑМО • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> ЎП кÑаÑа пÑÑеÑа"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ÐÑМО Ñе • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> ЎП кÑаÑа пÑÑеÑа"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"ÐОÑеÑО Ма закÑÑÑаМПЌ екÑаМÑ"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"ÐÑевÑÑОÑе ÑлевП Ўа бОÑÑе запПÑелО заÑеЎМОÑкО вПЎОÑ"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"ÐÑОлагПЎОÑе"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"ÐЎбаÑО"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"ÐÑвПÑО пПЎеÑаваÑа"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"УкÑÑÑОÑО пПÑлПвМе аплОкаÑОÑе?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"ÐПМПвП акÑОвОÑаÑ"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"ÐаÑвПÑОÑе вОÑеÑе Ма закÑÑÑаМПЌ екÑаМÑ"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"ÐОÑеÑО Ма закÑÑÑаМПЌ екÑаМÑ"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"ÐаЌеМО кПÑОÑМОка"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"паЎаÑÑÑО ЌеМО"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Све аплОкаÑОÑе О пПЎаÑО Ñ ÐŸÐ²ÐŸÑ ÑеÑОÑО Ñе бОÑО ОзбÑОÑаМО."</string>
@@ -772,7 +772,7 @@
<string name="group_system_cycle_back" msgid="8194102916946802902">"ÐÑÐµÐ³Ð»ÐµÐŽÐ°Ñ ÐœÐµÐŽÐ°Ð²ÐœÐŸ кПÑОÑÑеМе аплОкаÑОÑе ÑМазаЎ"</string>
<string name="group_system_access_all_apps_search" msgid="1553588630154197469">"ÐÑвПÑО лОÑÑÑ Ð°Ð¿Ð»ÐžÐºÐ°ÑОÑа"</string>
<string name="group_system_access_system_settings" msgid="8731721963449070017">"ÐÑвПÑО пПЎеÑаваÑа"</string>
- <string name="group_system_access_google_assistant" msgid="7210074957915968110">"ÐÑвПÑО пПЌПÑМОка"</string>
+ <string name="group_system_access_google_assistant" msgid="7210074957915968110">"ÐÑвПÑО ÐПЌПÑМОк"</string>
<string name="group_system_lock_screen" msgid="7391191300363416543">"ÐакÑÑÑаваÑе екÑаМа"</string>
<string name="group_system_quick_memo" msgid="3764560265935722903">"ÐапÑавО белеÑкÑ"</string>
<string name="keyboard_shortcut_group_system_multitasking" msgid="6967816258924795558">"ÐбавÑаÑе вОÑе заЎаÑака ОÑÑПвÑеЌеМП"</string>
diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml
index abb5d09..79f5dc8 100644
--- a/packages/SystemUI/res/values-sv/strings.xml
+++ b/packages/SystemUI/res/values-sv/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Meddelandepanel."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Snabbinställningar."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Snabbinställningar och meddelandepanel."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Låsskärm."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Låsskärm"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Låsskärm för arbete"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Stäng"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"helt tyst"</string>
@@ -376,6 +376,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Hörhjälpmedel"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Parkoppla en ny enhet"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Klicka för att parkoppla en ny enhet"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Vill du återaktivera enhetens mikrofon?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Vill du återaktivera enhetens kamera?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Vill du återaktivera enhetens kamera och mikrofon?"</string>
@@ -441,6 +443,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Laddas snabbt • Fulladdat om <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Laddas långsamt • Fulladdat om <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Laddas • Fulladdat om <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Widgetar på låsskärmen"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Svep åt vänster för att börja med gruppguiden"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Anpassa"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Ignorera"</string>
@@ -459,6 +462,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Öppna inställningarna"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Vill du återuppta jobbappar?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"Återuppta"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Stäng widgetar på låsskärmen"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Widgetar på låsskärmen"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Byt användare"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"rullgardinsmeny"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Alla appar och data i denna session kommer att raderas."</string>
diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml
index 392a74d..f5f2772 100644
--- a/packages/SystemUI/res/values-sw/strings.xml
+++ b/packages/SystemUI/res/values-sw/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Kivuli cha arifa."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Mipangilio ya haraka."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Mipangilio ya haraka na Sehemu ya arifa."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Skrini iliyofungwa."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"skrini iliyofungwa"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Skrini iliyofungwa ya kazini"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Funga"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"kimya kabisa"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"Angalia vyote"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"Tumia Bluetooth"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"Imeunganishwa"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"Kusikiliza Pamoja"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"Imehifadhiwa"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"ondoa"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"anza kutumia"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"Iwashe tena kesho kiotomatiki"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"Vipengele kama vile Kutuma Haraka na Tafuta Kifaa Changu hutumia Bluetooth"</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"Bluetooth itawaka kesho asubuhi"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"Kusikiliza Pamoja"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"Mnasikiliza Pamoja"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"Chaji ya betri ni <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g>"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Sauti"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Vifaa vya sauti"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Vifaa vya kusikilizia"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Unganisha kifaa kipya"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Bofya ili uunganishe kifaa kipya"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Ungependa kuwacha kuzuia maikrofoni ya kifaa?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Ungependa kuacha kuzuia kamera ya kifaa?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Ungependa kuwacha kuzuia kamera na maikrofoni ya kifaa?"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Inachaji kwa kasi • Itajaa baada ya <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Inachaji polepole • Itajaa baada ya <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Inachaji • Itajaa baada ya <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Wijeti kwenye skrini iliyofungwa"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Telezesha kidole kushoto ili uanze mafunzo ya pamoja"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Weka mapendeleo"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Funga"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Fungua mipangilio"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Je, ungependa kuacha kusitisha programu za kazini?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"Acha kusitisha"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Funga wijeti kwenye skrini iliyofungwa"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Wijeti kwenye skrini iliyofungwa"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Badili mtumiaji"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"menyu ya kuvuta chini"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Data na programu zote katika kipindi hiki zitafutwa."</string>
diff --git a/packages/SystemUI/res/values-ta/strings.xml b/packages/SystemUI/res/values-ta/strings.xml
index dfc00df..8c7ff3a 100644
--- a/packages/SystemUI/res/values-ta/strings.xml
+++ b/packages/SystemUI/res/values-ta/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"à®
றிவிபà¯à®ªà¯ விவரமà¯."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"à®à®à®©à®à®¿ à®
à®®à¯à®ªà¯à®ªà¯."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"விரà¯à®µà¯ à®
à®®à¯à®ªà¯à®ªà¯à®à®³à¯à®®à¯ à®
றிவிபà¯à®ªà¯ விவரமà¯à®®à¯."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"லடà®à¯ ஞà¯à®à®¿à®°à¯à®©à¯."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"பà¯à®à¯à®à¯à®€à¯ ஀ிரà¯"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"பணி லடà®à¯ ஞà¯à®à®¿à®°à¯à®©à¯"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"à®®à¯à®à¯"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"à®®à¯à®Žà¯ à®
à®®à¯à®€à®¿"</string>
@@ -376,6 +376,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"à®à¯à®µà®¿à®€à¯à®€à¯à®£à¯à®à¯ à®à®°à¯à®µà®¿à®à®³à¯"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"பà¯à®€à®¿à®¯ à®à®Ÿà®€à®©à®€à¯à®€à¯ à®à®£à¯"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"பà¯à®€à®¿à®¯ à®à®Ÿà®€à®©à®€à¯à®€à¯ à®à®£à¯à®à¯à® à®à®¿à®³à®¿à®à¯ à®à¯à®¯à¯à®¯à®²à®Ÿà®®à¯"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"à®à®Ÿà®€à®©à®€à¯à®€à®¿à®©à¯ à®®à¯à®à¯à®°à¯à®à®ªà¯à®©à¯à®à¯à®à®Ÿà®© ஀à®à¯à®ªà¯à®ªà¯ சà¯à®à¯à®à®µà®Ÿ?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"à®à®Ÿà®€à®©à®€à¯à®€à®¿à®©à¯ à®à¯à®®à®°à®Ÿà®µà¯à®à¯à®à®Ÿà®© ஀à®à¯à®ªà¯à®ªà¯ சà¯à®à¯à®à®µà®Ÿ?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"à®à®Ÿà®€à®©à®€à¯à®€à®¿à®©à¯ à®à¯à®®à®°à®Ÿà®µà¯à®à¯à®à¯à®®à¯ à®®à¯à®à¯à®°à¯à®à®ªà¯à®©à¯à®à¯à®à¯à®®à®Ÿà®© ஀à®à¯à®ªà¯à®ªà¯ சà¯à®à¯à®à®µà®Ÿ?"</string>
@@ -441,6 +443,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • வà¯à®à®®à®Ÿà®à®à¯ à®à®Ÿà®°à¯à®à®Ÿà®à®¿à®±à®€à¯ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> à®à®²à¯ à®®à¯à®Žà¯à®€à¯à®®à¯ à®à®Ÿà®°à¯à®à®Ÿà®à¯à®®à¯"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • à®®à¯à®€à¯à®µà®Ÿà® à®à®Ÿà®°à¯à®à®Ÿà®à®¿à®±à®€à¯ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> à®à®²à¯ à®®à¯à®Žà¯à®€à¯à®®à¯ à®à®Ÿà®°à¯à®à®Ÿà®à¯à®®à¯"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • à®à®Ÿà®°à¯à®à®Ÿà®à®¿à®±à®€à¯ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> à®à®²à¯ à®®à¯à®Žà¯à®µà®€à¯à®®à¯ à®à®Ÿà®°à¯à®à®Ÿà®à¯à®®à¯"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"பà¯à®à¯à®à¯à®€à¯ ஀ிரà¯à®¯à®¿à®²à¯ விà®à¯à®à¯à®à¯à®à®³à¯"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"à®à®®à¯à®à®ªà¯ பயிறà¯à®à®¿à®¯à¯à®€à¯ ஀à¯à®à®à¯à® à®à®à®€à¯à®ªà¯à®±à®®à¯ ஞà¯à®µà¯à®ªà¯ à®à¯à®¯à¯à®¯à¯à®à¯à®à®³à¯"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"பிர஀à¯à®€à®¿à®¯à¯à®à®®à®Ÿà®à¯à®à¯à®à¯à®à®³à¯"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"à®®à¯à®à¯à®"</string>
@@ -459,6 +462,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"à®
à®®à¯à®ªà¯à®ªà¯à®à®³à¯à®€à¯ ஀ிற"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"பணி à®à®ªà¯à®žà¯ à®®à¯à®£à¯à®à¯à®®à¯ à®à®¯à®à¯à®à®µà®Ÿ?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"à®®à¯à®£à¯à®à¯à®®à¯ à®à®¯à®à¯à®à¯"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"பà¯à®à¯à®à¯à®€à¯ ஀ிரà¯à®¯à®¿à®²à¯ விà®à¯à®à¯à®à¯à®à®³à¯ à®®à¯à®à¯à®®à¯"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"பà¯à®à¯à®à¯à®€à¯ ஀ிரà¯à®¯à®¿à®²à¯ விà®à¯à®à¯à®à¯à®à®³à¯"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"பயனர௠மடறà¯à®±à¯"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"à®à¯à®Žà¯ à®à®Žà¯à®à¯à®à¯à®®à¯ à®®à¯à®©à¯"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"à®à®šà¯à®€ à®
மரà¯à®µà®¿à®©à¯ à®à®²à¯à®²à®Ÿ à®à®ªà¯à®žà¯à®®à¯ ஀ரவà¯à®®à¯ சà¯à®à¯à®à®ªà¯à®ªà®à¯à®®à¯."</string>
@@ -779,8 +784,8 @@
<string name="system_multitasking_rhs" msgid="8714224917276297810">"஀றà¯à®ªà¯à®€à¯ à®à®³à¯à®³ à®à®ªà¯à®žà¯à®à®©à¯ வல஀à¯à®ªà¯à®±à®€à¯à®€à®¿à®²à¯ ஀ிரà¯à®ªà¯ பிரிபà¯à®ªà¯à®ªà¯ பயனà¯à®ªà®à¯à®€à¯à®€à¯à®€à®²à¯"</string>
<string name="system_multitasking_lhs" msgid="8402954791206308783">"஀றà¯à®ªà¯à®€à¯ à®à®³à¯à®³ à®à®ªà¯à®žà¯à®à®©à¯ à®à®à®€à¯à®ªà¯à®±à®€à¯à®€à®¿à®²à¯ ஀ிரà¯à®ªà¯ பிரிபà¯à®ªà¯à®ªà¯ பயனà¯à®ªà®à¯à®€à¯à®€à¯à®€à®²à¯"</string>
<string name="system_multitasking_full_screen" msgid="336048080383640562">"஀ிரà¯à®ªà¯ பிரிபà¯à®ªà¯ பயனà¯à®®à¯à®±à¯à®¯à®¿à®²à®¿à®°à¯à®šà¯à®€à¯ à®®à¯à®Žà¯à®€à¯à®€à®¿à®°à¯à®à¯à®à¯ மடறà¯à®±à¯à®€à®²à¯"</string>
- <string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"஀ிரà¯à®ªà¯ பிரிபà¯à®ªà¯à®ªà¯ பயனà¯à®ªà®à¯à®€à¯à®€à¯à®®à¯à®ªà¯à®€à¯ வல஀à¯/à®à¯à®Žà¯ à®à®³à¯à®³ à®à®ªà¯à®žà¯à®à¯à®à¯ மடறà¯à®à¯à®à®³à¯"</string>
- <string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"஀ிரà¯à®ªà¯ பிரிபà¯à®ªà¯à®ªà¯ பயனà¯à®ªà®à¯à®€à¯à®€à¯à®®à¯à®ªà¯à®€à¯ à®à®à®€à¯/à®®à¯à®²à¯ à®à®³à¯à®³ à®à®ªà¯à®žà¯à®à¯à®à¯ மடறà¯à®à¯à®à®³à¯"</string>
+ <string name="system_multitasking_splitscreen_focus_rhs" msgid="3838578650313318508">"஀ிரà¯à®ªà¯ பிரிபà¯à®ªà¯à®ªà¯ பயனà¯à®ªà®à¯à®€à¯à®€à¯à®®à¯à®ªà¯à®€à¯ வல஀à¯/à®à¯à®Žà¯ à®à®³à¯à®³ à®à®ªà¯à®žà¯à®à¯à®à¯ மடறà¯à®€à®²à¯"</string>
+ <string name="system_multitasking_splitscreen_focus_lhs" msgid="3164261844398662518">"஀ிரà¯à®ªà¯ பிரிபà¯à®ªà¯à®ªà¯ பயனà¯à®ªà®à¯à®€à¯à®€à¯à®®à¯à®ªà¯à®€à¯ à®à®à®€à¯/à®®à¯à®²à¯ à®à®³à¯à®³ à®à®ªà¯à®žà¯à®à¯à®à¯ மடறà¯à®€à®²à¯"</string>
<string name="system_multitasking_replace" msgid="7410071959803642125">"஀ிரà¯à®ªà¯ பிரிபà¯à®ªà®¿à®©à¯à®ªà¯à®€à¯: à®à®°à¯ à®à®ªà¯à®žà¯à®à¯à®à¯à®ªà¯ ப஀ிலட஠மறà¯à®±à¯à®©à¯à®±à¯ மடறà¯à®±à¯à®€à®²à¯"</string>
<string name="keyboard_shortcut_group_input" msgid="6888282716546625610">"à®à®³à¯à®³à¯à®à¯"</string>
<string name="input_switch_input_language_next" msgid="3782155659868227855">"à®
à®à¯à®€à¯à®€ à®®à¯à®Žà®¿à®à¯à®à¯ மடறà¯à®±à¯à®€à®²à¯"</string>
diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml
index 518883f..d57cf26 100644
--- a/packages/SystemUI/res/values-te/strings.xml
+++ b/packages/SystemUI/res/values-te/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"à°šà±à°à°¿à°«à°¿à°à±à°·à°šà± à°·à±à°¡à±."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"à°¶à±à°à±à°° à°žà±à°à±à°à°¿à°à°à±à°²à±."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"à°à±à°µà°¿à°à± à°žà±à°à±à°à°¿à°à°à±à°²à±, à°šà±à°à°¿à°«à°¿à°à±à°·à°šà± à°€à±à°°."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"లటà°à± à°žà±à°à±à°°à±à°šà±."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"లటà°à± à°žà±à°à±à°°à±à°šà±"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"à°à°Ÿà°°à±à°¯à°Ÿà°²à°¯ లటà°à± à°žà±à°à±à°°à±à°šà±"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"à°®à±à°žà°¿à°µà±à°žà±à°€à±à°à°Šà°¿"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"à°®à±à°€à±à°€à° à°šà°¿à°¶à±à°¶à°¬à±à°Šà°"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"à°
à°šà±à°šà°¿à°à°à°¿à°šà± à°à±à°¡à°à°¡à°¿"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"à°¬à±à°²à±à°à±à°€à± వటడà°à°¡à°¿"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"à°à°šà±à°à±à°à± à°
యిà°à°Šà°¿"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"à°à°¡à°¿à°¯à± à°·à±à°°à°¿à°à°à±"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"à°žà±à°µà± à°à±à°¯à°¬à°¡à°¿à°à°Šà°¿"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"à°¡à°¿à°žà±à°à°šà±à°à±à°à± à°à±à°¯à°à°¡à°¿"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"యటà°à±à°à°¿à°µà±à°à± à°à±à°¯à°à°¡à°¿"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"à°°à±à°ªà± మళà±à°²à± à°à°à±à°®à±à°à°¿à°à±à°à°Ÿ à°à°šà± à°à±à°žà±à°€à±à°à°Šà°¿"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"à°à±à°µà°¿à°à± à°·à±à°°à±, Find My Device à°µà°à°à°¿ à°«à±à°à°°à±à°²à± à°¬à±à°²à±à°à±à°€à±à°šà± à°à°ªà°¯à±à°à°¿à°žà±à°€à°Ÿà°¯à°¿"</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"à°¬à±à°²à±à°à±à°€à± à°°à±à°ªà± à°à°Šà°¯à° à°à°šà± à°
à°µà±à°€à±à°à°Šà°¿"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"à°à°¡à°¿à°¯à± à°·à±à°°à°¿à°à°à±"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"à°à°¡à°¿à°¯à±à°šà± à°·à±à°°à± à°à±à°žà±à°€à±à°šà±à°šà°Ÿà°°à±"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g> à°¬à±à°¯à°Ÿà°à°°à±"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"à°à°¡à°¿à°¯à±"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"à°¹à±à°¡à±à°žà±à°à±"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"విచిà°à°¿à°¡à°¿ పరిà°à°°à°"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"à°à±à°€à±à°€ పరిà°à°°à°Ÿà°šà±à°šà°¿ à°ªà±à°¯à°¿à°°à± à°à±à°¯à°à°¡à°¿"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"à°à±à°€à±à°€ పరిà°à°°à°Ÿà°šà±à°šà°¿ à°ªà±à°¯à°¿à°°à± à°à±à°¯à°¡à°Ÿà°šà°¿à°à°¿ à°à±à°²à°¿à°à± à°à±à°¯à°à°¡à°¿"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"పరిà°à°°à° à°®à±à°à±à°°à±à°«à±à°šà±à°šà± à°
à°šà±à°¬à±à°²à°Ÿà°à± à°à±à°¯à°®à°à°à°Ÿà°°à°Ÿ?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"పరిà°à°°à°à°²à±à°šà°¿ à°à±à°®à±à°°à°Ÿà°šà± à°
à°šà±à°¬à±à°²à°Ÿà°à± à°à±à°¯à°®à°à°à°Ÿà°°à°Ÿ?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"పరిà°à°°à°à°²à±à°šà°¿ à°à±à°®à±à°°à°Ÿ, à°®à±à°à±à°°à±à°«à±à°šà±à°²à°šà± à°
à°šà±à°¬à±à°²à°Ÿà°à± à°à±à°¯à°®à°à°à°Ÿà°°à°Ÿ?"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • à°µà±à°à°à°à°Ÿ à°à°Ÿà°°à±à°à± à°
à°µà±à°€à±à°à°Šà°¿ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>లౠపà±à°°à±à°€à°¿ à°à°Ÿà°°à±à°à±"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • à°šà±à°®à±à°®à°Šà°¿à°à°Ÿ à°à°Ÿà°°à±à°à± à°
à°µà±à°€à±à°à°Šà°¿ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>లౠపà±à°°à±à°€à°¿ à°à°Ÿà°°à±à°à±"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • à°à°Ÿà°°à±à°à± à°
à°µà±à°€à±à°à°Šà°¿ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>లౠపà±à°°à±à°€à°¿à°à°Ÿ à°à°Ÿà°°à±à°à± à°
à°µà±à°€à±à°à°Šà°¿"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"లటà°à± à°žà±à°à±à°°à±à°šà±à°²à± విడà±à°à±à°à±à°²à±"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"à°à°®à±à°¯à±à°šà°²à± à°à±à°¯à±à°à±à°°à°¿à°¯à°²à±à°šà± à°ªà±à°°à°Ÿà°°à°à°à°¿à°à°à°¡à°Ÿà°šà°¿à°à°¿ à°à°¡à°® à°µà±à°ªà±à°šà°à± à°žà±à°µà±à°ªà± à°à±à°¯à°à°¡à°¿"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"à°
à°šà±à°à±à°²à°à°à°Ÿ మటరà±à°à°à°¡à°¿"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"విఞà±à°®à°°à°¿à°à°à°à°¡à°¿"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"à°žà±à°à±à°à°¿à°à°à±à°²à°šà± à°€à±à°°à°µà°à°¡à°¿"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"వరà±à°à± యటపà±à°žà± à°
à°šà±à°ªà°Ÿà°à± à°à±à°¯à°Ÿà°²à°Ÿ?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"à°
à°šà±à°ªà°Ÿà°à± à°à±à°¯à°à°¡à°¿"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"లటà°à± à°žà±à°à±à°°à±à°šà±à°²à± విడà±à°à±à°à±à°²à°šà± à°®à±à°žà°¿à°µà±à°¯à°à°¡à°¿"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"లటà°à± à°žà±à°à±à°°à±à°šà±à°²à± విడà±à°à±à°à±à°²à±"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"విచియà±à°à°Šà°Ÿà°°à±à°šà°¿ మటరà±à°à±"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"à°ªà±à°²à±à°¡à±à°šà± à°®à±à°šà±"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"à° à°žà±à°·à°šà±à°²à±à°šà°¿ à°
à°šà±à°šà°¿ యటపà±à°²à± మరియౠడà±à°à°Ÿ à°€à±à°²à°à°¿à°à°à°¬à°¡à°€à°Ÿà°¯à°¿."</string>
@@ -1002,10 +1002,10 @@
<string name="accessibility_floating_button_hidden_notification_text" msgid="1457021647040915658">"యటà°à±à°žà±à°žà°¿à°¬à°¿à°²à°¿à°à± à°¬à°à°šà±à°šà± à°à±à°¡à°à°Ÿà°šà°¿à°à°¿ à°à±à°¯à°Ÿà°ªà± à°à±à°¯à°à°¡à°¿"</string>
<string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"<xliff:g id="FEATURE_NAME">%s</xliff:g> à°·à°Ÿà°°à±à°à±à°à°à± à°€à±à°žà°¿à°µà±à°¯à°¬à°¡à°¿à°à°Šà°¿"</string>
<string name="accessibility_floating_button_undo_message_number_text" msgid="4909270290725226075">"{count,plural, =1{# à°·à°Ÿà°°à±à°à±à°à°à± à°€à±à°žà°¿à°µà±à°¯à°¬à°¡à°¿à°à°Šà°¿}other{# à°·à°Ÿà°°à±à°à±à°à°à±à°²à± à°€à±à°žà°¿à°µà±à°¯à°¬à°¡à±à°¡à°Ÿà°¯à°¿}}"</string>
- <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"à°à°à±à°µ à°à°¡à°® à°µà±à°ªà±à°šà°à± ఀరలిà°à°à±"</string>
- <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"à°à°à±à°µ à°à±à°¡à°¿ à°µà±à°ªà±à°šà°à± ఀరలిà°à°à±"</string>
- <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"à°Šà°¿à°à±à°µ à°à°¡à°® à°µà±à°ªà±à°šà°à± ఀరలిà°à°à±"</string>
- <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"à°Šà°¿à°à±à°µ à°à±à°¡à°¿ à°µà±à°ªà±à°šà°à± ఀరలిà°à°à±"</string>
+ <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"à°à°à±à°µà±à°š à°à°¡à°® à°µà±à°ªà±à°šà°à± à°µà±à°³à±à°²à°à°¡à°¿"</string>
+ <string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"à°à°à±à°µà±à°š à°à±à°¡à°¿ à°µà±à°ªà±à°šà°à± à°µà±à°³à±à°²à°à°¡à°¿"</string>
+ <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"à°Šà°¿à°à±à°µà±à°š à°à°¡à°® à°µà±à°ªà±à°šà°à± à°µà±à°³à±à°²à°à°¡à°¿"</string>
+ <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"à°Šà°¿à°à±à°µà±à°š à°à±à°¡à°¿ à°µà±à°ªà±à°šà°à± à°µà±à°³à±à°²à°à°¡à°¿"</string>
<string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"à°
à°à°à±à°à± ఀరలిà°à°à°¿ à°Šà°Ÿà°à°à°¡à°¿"</string>
<string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"à°
à°à°à±à°šà°¿ ఀరలిà°à°à°¿ à°à±à°ªà°¿à°à°à±"</string>
<string name="accessibility_floating_button_action_remove_menu" msgid="6730432848162552135">"à°€à±à°žà°¿à°µà±à°¯à°à°¡à°¿"</string>
diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml
index 77f506c..73ba8b4 100644
--- a/packages/SystemUI/res/values-th/strings.xml
+++ b/packages/SystemUI/res/values-th/strings.xml
@@ -145,7 +145,7 @@
<string name="accessibility_phone_button" msgid="4256353121703100427">"à¹àžàž£àžšàž±àžàžà¹"</string>
<string name="accessibility_voice_assist_button" msgid="6497706615649754510">"àžàž±àž§àžà¹àž§àž¢à¹àžªàžµàž¢àž"</string>
<string name="accessibility_wallet_button" msgid="1458258783460555507">"Wallet"</string>
- <string name="accessibility_qr_code_scanner_button" msgid="7521277927692910795">"à¹àžàžàžªà¹àžàžàžàžŽàž§àžàž²àž£à¹à¹àžà¹àž"</string>
+ <string name="accessibility_qr_code_scanner_button" msgid="7521277927692910795">"àžàž±àž§àžªà¹àžàžàžàžŽàž§àžàž²àž£à¹à¹àžà¹àž"</string>
<string name="accessibility_unlock_button" msgid="3613812140816244310">"àžàž¥àžàž¥à¹àžàžà¹àž¥à¹àž§"</string>
<string name="accessibility_lock_icon" msgid="661492842417875775">"àžàžžàžàžàž£àžà¹àžàž¹àžàž¥à¹àžàž"</string>
<string name="accessibility_scanning_face" msgid="3093828357921541387">"àžàž³àž¥àž±àžàžªà¹àžàžà¹àžàž«àžà¹àž²"</string>
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"àž«àžà¹àž²àžà¹àž²àžà¹àžà¹àžà¹àžàž·àžàž"</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"àžàž²àž£àžàž±à¹àžàžà¹àž²àžà¹àž§àž"</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"àžàž²àž£àžàž±à¹àžàžà¹àž²àžà¹àž§àžà¹àž¥àž°àž«àžà¹àž²àžà¹àž²àžà¹àžà¹àžà¹àžàž·àžàž"</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"àž¥à¹àžàžàž«àžà¹àž²àžàž"</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"àž«àžà¹àž²àžàžàž¥à¹àžàž"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"àž«àžà¹àž²àžàžàž¥à¹àžàžàžàžàžà¹àžàž£à¹àžàž¥à¹àžàž²àž"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"àžàžŽàž"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"àžàžŽàžà¹àžªàžµàž¢àžàžàž±à¹àžàž«àž¡àž"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"àžàž¹àžàž±à¹àžàž«àž¡àž"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"à¹àžà¹àžàž¥àž¹àžàž¹àž"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"à¹àžàž·à¹àžàž¡àžà¹àžà¹àž¥à¹àž§"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"àžàž²àž£à¹àžàž£à¹à¹àžªàžµàž¢àž"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"àžàž±àžàžàž¶àžà¹àž¥à¹àž§"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"àž¢àžà¹àž¥àžŽàžàžàž²àž£à¹àžàž·à¹àžàž¡àžà¹àž"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"à¹àžàžŽàžà¹àžà¹àžàž²àž"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"à¹àžàžŽàžàžàžµàžàžàž£àž±à¹àžà¹àžàž¢àžàž±àžà¹àžàž¡àž±àžàžŽà¹àžàž§àž±àžàžàž£àžžà¹àžàžàžµà¹"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"àžàžµà¹àžàžàž£à¹àžà¹àž²àžà¹ à¹àžà¹àž Quick Share à¹àž¥àž°àž«àž²àžàžžàžàžàž£àžà¹àžàžàžàžàž±àž à¹àžà¹àžàž¥àž¹àžàž¹àž"</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"àžàž¥àž¹àžàž¹àžàžàž°à¹àžàžŽàžàžàž£àžžà¹àžàžàžµà¹à¹àžà¹àž²"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"àžàž²àž£à¹àžàž£à¹à¹àžªàžµàž¢àž"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"àžàž³àž¥àž±àžà¹àžàž£à¹à¹àžªàžµàž¢àž"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"à¹àžàžà¹àžàžàž£àžµà¹ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g>"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"à¹àžªàžµàž¢àž"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"àžàžžàžàž«àž¹àžàž±àž"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"à¹àžàž£àž·à¹àžàžàžà¹àž§àž¢àžàž±àž"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"àžàž±àžàžàž¹à¹àžàžžàžàžàž£àžà¹à¹àž«àž¡à¹"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"àžàž¥àžŽàžà¹àžàž·à¹àžàžàž±àžàžàž¹à¹àžàžžàžàžàž£àžà¹à¹àž«àž¡à¹"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"à¹àž¥àžŽàžàžàž¥à¹àžàžà¹àž¡à¹àžàž£à¹àžàžàžàžàžàžàžžàžàžàž£àžà¹à¹àžà¹à¹àž«àž¡"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"à¹àž¥àžŽàžàžàž¥à¹àžàžàžàž¥à¹àžàžàžàžàžàžàžžàžàžàž£àžà¹à¹àžà¹à¹àž«àž¡"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"à¹àž¥àžŽàžàžàž¥à¹àžàžàžàž¥à¹àžàžà¹àž¥àž°à¹àž¡à¹àžàž£à¹àžàžàžàžàžàžàžžàžàžàž£àžà¹à¹àžà¹à¹àž«àž¡"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • àžàž³àž¥àž±àžàžàž²àž£à¹àžàžàž¢à¹àž²àžà¹àž£à¹àž§ • àžàž°à¹àžà¹àž¡à¹àžàžàžµàž <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • àžàž³àž¥àž±àžàžàž²àž£à¹àžàžàž¢à¹àž²àžàžà¹àž²à¹ • àžàž°à¹àžà¹àž¡à¹àžàžàžµàž <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • àžàž³àž¥àž±àžàžàž²àž£à¹àž • àžàž°à¹àžà¹àž¡à¹àžàžàžµàž <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"àž§àžŽàžà¹àžà¹àžà¹àžàž«àžà¹àž²àžàžàž¥à¹àžàž"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"àžàž±àžà¹àžàžàž²àžàžà¹àž²àž¢à¹àžàž·à¹àžà¹àž£àžŽà¹àž¡àžàžà¹àžàž°àžàž³àžªà¹àž§àžàžàž¥àž²àž"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"àžàž£àž±àžà¹àžà¹àž"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"àžàžŽàž"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"à¹àžàžŽàžàžàž²àž£àžàž±à¹àžàžà¹àž²"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"àž¢àžà¹àž¥àžŽàžàžàž²àž£àž«àž¢àžžàžà¹àžàžàžàž²àžàžàž±à¹àž§àžàž£àž²àž§à¹àž«àž¡"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"àž¢àžà¹àž¥àžŽàžàžàž²àž£àž«àž¢àžžàžàžàž±à¹àž§àžàž£àž²àž§"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"àžàžŽàžàž§àžŽàžà¹àžà¹àžà¹àžàž«àžà¹àž²àžàžàž¥à¹àžàž"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"àž§àžŽàžà¹àžà¹àžà¹àžàž«àžà¹àž²àžàžàž¥à¹àžàž"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"àžªàž¥àž±àžàžàž¹à¹à¹àžà¹"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"à¹àž¡àžàž¹à¹àžàžà¹àž¥àž·à¹àžàžàž¥àž"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"àž£àž°àžàžàžàž°àž¥àžà¹àžàžà¹àž¥àž°àžà¹àžàž¡àž¹àž¥àžàž±à¹àžàž«àž¡àžà¹àžà¹àžàžªàžàž±àžàžàžµà¹"</string>
@@ -642,7 +642,7 @@
<string name="wallet_secondary_label_device_locked" msgid="5175862019125370506">"àžàž¥àžàž¥à¹àžàžà¹àžàž·à¹àžà¹àžà¹"</string>
<string name="wallet_error_generic" msgid="257704570182963611">"à¹àžàžŽàžàžàž±àžàž«àž²à¹àžàžàž²àž£àžàž¶àžàžà¹àžàž¡àž¹àž¥àžàž±àžàž£àžàžàžàžàžžàž à¹àžàž£àžàž¥àžàžàžàžµàžàžàž£àž±à¹àžà¹àžàž àž²àž¢àž«àž¥àž±àž"</string>
<string name="wallet_lockscreen_settings_label" msgid="3539105300870383570">"àžàž²àž£àžàž±à¹àžàžà¹àž²àž«àžà¹àž²àžàžàž¥à¹àžàž"</string>
- <string name="qr_code_scanner_title" msgid="1938155688725760702">"à¹àžàžàžªà¹àžàžàžàžŽàž§àžàž²àž£à¹à¹àžà¹àž"</string>
+ <string name="qr_code_scanner_title" msgid="1938155688725760702">"àžàž±àž§àžªà¹àžàžàžàžŽàž§àžàž²àž£à¹à¹àžà¹àž"</string>
<string name="qr_code_scanner_updating_secondary_label" msgid="8344598017007876352">"àžàž³àž¥àž±àžàžàž±àžà¹àžàž"</string>
<string name="status_bar_work" msgid="5238641949837091056">"à¹àžàž£à¹àžàž¥à¹àžàž²àž"</string>
<string name="status_bar_airplane" msgid="4848702508684541009">"à¹àž«àž¡àžàžàžà¹àžàž£àž·à¹àžàžàžàžŽàž"</string>
@@ -1005,7 +1005,7 @@
<string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"àž¢à¹àž²àž¢à¹àžàžà¹àž²àžàžà¹àž²àž¢àžàž"</string>
<string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"àž¢à¹àž²àž¢à¹àžàžà¹àž²àžàžàž§àž²àžàž"</string>
<string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"àž¢à¹àž²àž¢à¹àžàžà¹àž²àžàžà¹àž²àž¢àž¥à¹àž²àž"</string>
- <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"àž¢à¹àž²àž¢à¹àžàžà¹àž²àžàžàž²àž§àž¥à¹àž²àž"</string>
+ <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"àž¢à¹àž²àž¢à¹àžàžà¹àž²àžàžàž§àž²àž¥à¹àž²àž"</string>
<string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"àž¢à¹àž²àž¢à¹àžàžàžµà¹àžàžàžà¹àž¥àž°àžà¹àžàž"</string>
<string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"àž¢à¹àž²àž¢àžàžàžàžàž²àžàžàžàžà¹àž¥àž°à¹àžªàžàž"</string>
<string name="accessibility_floating_button_action_remove_menu" msgid="6730432848162552135">"àžàž³àžàžàž"</string>
diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml
index 922bf88..69e16e5 100644
--- a/packages/SystemUI/res/values-tl/strings.xml
+++ b/packages/SystemUI/res/values-tl/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Notification shade."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Mga mabilisang setting."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Mga mabilisang setting at Notification shade."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Lock screen."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Lock screen"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Lock screen sa trabaho"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Isara"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"ganap na katahimikan"</string>
@@ -376,6 +376,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Mga hearing device"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Magpares ng bagong device"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"I-click para magpares ng bagong device"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"I-unblock ang mikropono ng device?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"I-unblock ang camera ng device?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"I-unblock ang camera at mikropono ng device?"</string>
@@ -441,6 +443,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Mabilis na nagcha-charge • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> na lang para mapuno"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Mabagal na nagcha-charge • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> na lang para mapuno"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Nagcha-charge • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> na lang para mapuno"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Mga widget sa lock screen"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Mag-swipe pakaliwa para simulan ang communal na tutorial"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"I-customize"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"I-dismiss"</string>
@@ -459,6 +462,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Buksan ang mga setting"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"I-unpause ang mga work app?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"I-unpause"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Isara ang mga widget sa lock screen"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Mga widget sa lock screen"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Magpalit ng user"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"pulldown menu"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Ide-delete ang lahat ng app at data sa session na ito."</string>
diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml
index 35f13de..0d19e47 100644
--- a/packages/SystemUI/res/values-tr/strings.xml
+++ b/packages/SystemUI/res/values-tr/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Bildirim gölgesi."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Hızlı ayarlar."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Hızlı ayarlar ve Bildirim gölgesi."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Kilit ekranı"</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Kilit ekranı"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"İŠprofili kilit ekranı"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Kapat"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"tamamen sessiz"</string>
@@ -376,6 +376,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"İÅitme cihazları"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Yeni cihaz eÅle"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Yeni cihaz eÅlemek için tıklayın"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Cihaz mikrofonunun engellemesi kaldırılsın mı?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Cihaz kamerasının engellemesi kaldırılsın mı?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Cihaz kamerası ile mikrofonunun engellemesi kaldırılsın mı?"</string>
@@ -441,6 +443,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Hızlı Åarj oluyor • Dolmasına <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> kaldı"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • YavaÅ Åarj oluyor • Dolmasına <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> kaldı"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Åarj oluyor • Dolmasına <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> kaldı"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Kilit ekranındaki widget\'lar"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Ortak eÄitimi baÅlatmak için sola kaydırın"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"ÖzelleÅtir"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Kapat"</string>
@@ -459,6 +462,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Ayarları açın"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"İŠuygulamaları devam ettirilsin mi?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"Devam ettir"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Kilit ekranındaki widget\'ları kapat"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Kilit ekranındaki widget\'lar"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Kullanıcı deÄiÅtirme"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"açılır menü"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Bu oturumdaki tüm uygulamalar ve veriler silinecek."</string>
diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml
index 0d97121..5e11ea7 100644
--- a/packages/SystemUI/res/values-uk/strings.xml
+++ b/packages/SystemUI/res/values-uk/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"ÐÐ°ÐœÐµÐ»Ñ ÑпПвÑÑеМÑ."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"КвОЎке МалаÑÑÑваММÑ."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"ÐšÐ²ÐžÐŽÐºÑ ÐœÐ°Ð»Ð°ÑÑÑÐ²Ð°ÐœÐœÑ Ð¹ Ð¿Ð°ÐœÐµÐ»Ñ ÑпПвÑÑеМÑ."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"ÐаблПкПваМОй екÑаМ."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"ÐаблПкПваМОй екÑаМ"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"ÐкÑаМ блПкÑÐ²Ð°ÐœÐœÑ Ð·Ð°Ð²ÐŽÐ°ÐœÐœÑ"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"ÐакÑОÑО"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"без ÑОгМалÑв"</string>
@@ -376,6 +376,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"СлÑÑ
ÐŸÐ²Ñ Ð°Ð¿Ð°ÑаÑО"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"ÐÑЎклÑÑОÑО МПвОй пÑОÑÑÑÑй"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"ÐаÑОÑМÑÑÑ, ÑПб пÑЎклÑÑОÑО МПвОй пÑОÑÑÑÑй"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"ÐаЎаÑО ЎПÑÑÑп ЎП ÐŒÑкÑПÑПМа?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"ÐаЎаÑО ЎПÑÑÑп ЎП каЌеÑО пÑОÑÑÑПÑ?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"ÐаЎаÑО ЎПÑÑÑп ЎП каЌеÑО й ÐŒÑкÑПÑПМа?"</string>
@@ -441,6 +443,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • КвОЎке заÑÑÐŽÐ¶Ð°ÐœÐœÑ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> ЎП пПвМПгП заÑÑÐŽÑ"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ÐПвÑлÑМе заÑÑÐŽÐ¶Ð°ÐœÐœÑ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> ЎП пПвМПгП заÑÑÐŽÑ"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ÐаÑÑÐŽÐ¶Ð°ÐœÐœÑ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> ЎП пПвМПгП заÑÑÐŽÑ"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"ÐÑЎжеÑО Ма Ð·Ð°Ð±Ð»ÐŸÐºÐŸÐ²Ð°ÐœÐŸÐŒÑ ÐµÐºÑаМÑ"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"ÐÑПвеЎÑÑÑ Ð¿Ð°Ð»ÑÑеЌ ÑлÑвП, ÑПб вÑЎкÑОÑО ÑпÑлÑМОй МавÑалÑМОй пПÑÑбМОк"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"ÐалаÑÑÑваÑО"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"ÐакÑОÑО"</string>
@@ -459,6 +462,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"ÐÑЎкÑОÑО МалаÑÑÑваММÑ"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"УвÑЌкМÑÑО ÑПбПÑÑ ÐŽÐŸÐŽÐ°ÑкО?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"УвÑЌкМÑÑО"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"ÐакÑОÑО вÑЎжеÑО Ма Ð·Ð°Ð±Ð»ÐŸÐºÐŸÐ²Ð°ÐœÐŸÐŒÑ ÐµÐºÑаМÑ"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"ÐÑЎжеÑО Ма Ð·Ð°Ð±Ð»ÐŸÐºÐŸÐ²Ð°ÐœÐŸÐŒÑ ÐµÐºÑаМÑ"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"ÐÐŒÑМОÑО кПÑОÑÑÑваÑа"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"ÑпаЎМе ЌеМÑ"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"УÑÑ ÐŽÐŸÐŽÐ°ÑкО й ÐŽÐ°ÐœÑ Ð· ÑÑПгП ÑеаМÑÑ Ð±ÑЎе вОЎалеМП."</string>
diff --git a/packages/SystemUI/res/values-ur/strings.xml b/packages/SystemUI/res/values-ur/strings.xml
index 888be9c..cc979d8 100644
--- a/packages/SystemUI/res/values-ur/strings.xml
+++ b/packages/SystemUI/res/values-ur/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Ø§Ø·ÙØ§Ø¹Ø§ØªÛ ØŽÛÚÛ"</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"ÙÙØ±Û ØªØ±ØªÛØšØ§ØªÛ"</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"ÙÙØ±Û ØªØ±ØªÛØšØ§Øª Ø§ÙØ± Ø§Ø·ÙØ§Ø¹Ø§ØªÛ ØŽÛÚÛ"</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Ù
ÙÙ٠اسکرÛÙÛ"</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Ù
ÙÙ٠اسکرÛÙ"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Ø¯ÙØªØ±Û Ù
ÙÙ٠اسکرÛÙ"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"ØšÙØ¯ کرÛÚº"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"Ù
Ú©Ù
٠خاÙ
ÙØŽÛ"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"Ø³ØšÚŸÛ Ø¯ÛÚ©ÚŸÛÚº"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"ØšÙÙÙ¹ÙØªÚŸ استعÙ
ا٠کرÛÚº"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"Ù
ÙØ³ÙÚ© ÛÛ"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"Ø¢ÚÛ٠کا ا؎تراک"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"Ù
ØÙÙØž ÛÛ"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"ØºÛØ± Ù
ÙØ³ÙÚ© کرÛÚº"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"ÙØ¹Ø§Ù کرÛÚº"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"Ú©Ù Ø¯ÙØšØ§Ø±Û Ø®ÙØ¯Ú©Ø§Ø± Ø·ÙØ± ٟر Ø¢Ù ÛÙگا"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"ÙÙØ±Û ا؎تراک Ø§ÙØ± \'Ù
ÛØ±Ø§ Ø¢ÙÛ ÚÚŸÙÙÚÛÚº\' Ø¬ÛØ³Û Ø®ØµÙØµÛات ØšÙÙÙ¹ÙØªÚŸ کا استعÙ
Ø§Ù Ú©Ø±ØªÛ ÛÛÚº"</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"ØšÙÙÙ¹ÙØªÚŸ Ú©Ù ØµØšØ Ø¢Ù ÛÙ Ø¬Ø§ØŠÛ Ú¯Ø§"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"Ø¢ÚÛ٠کا ا؎تراک"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"Ø¢ÚÛ٠کا ا؎تراک ÛÙ Ø±ÛØ§ ÛÛ"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g> ØšÛٹرÛ"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Ø¢ÚÛÙ"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"ÛÛÚ Ø³ÛÙ¹"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"سÙ
اعت Ú©Û Ø¢ÙØ§Øª"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"ÙØŠÛ Ø¢ÙÛ Ú©Ø§ جÙÚØ§ ØšÙØ§ØŠÛÚº"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"ÙØŠÛ Ø¢ÙÛ Ú©Ø§ جÙÚØ§ ØšÙØ§ÙÛ Ú©Û ÙÛÛ Ú©ÙÚ© کرÛÚº"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Ø¢ÙÛ Ú©Ø§ Ù
ا؊ÛکرÙÙÙÙ ØºÛØ± Ù
Ø³Ø¯ÙØ¯ کرÛÚºØ"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Ø¢ÙÛ Ú©Ø§ Ú©ÛÙ
را ØºÛØ± Ù
Ø³Ø¯ÙØ¯ کرÛÚºØ"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Ø¢ÙÛ Ú©Ø§ Ú©ÛÙ
را Ø§ÙØ± Ù
ا؊ÛکرÙÙÙÙ ØºÛØ± Ù
Ø³Ø¯ÙØ¯ کرÛÚºØ"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ØªÛØ²Û Ø³Û ÚØ§Ø±Ø¬ ÛÙ Ø±ÛØ§ ÛÛ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> Ù
ÛÚº Ù
Ú©Ù
Ù"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Ø¢ÛØ³ØªÛ ÚØ§Ø±Ø¬ ÛÙ Ø±ÛØ§ ÛÛ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> Ù
ÛÚº Ù
Ú©Ù
Ù"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • ÚØ§Ø±Ø¬ ÛÙ Ø±ÛØ§ ÛÛ • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> Ù
ÛÚº Ù
Ú©Ù
Ù"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Ù
ÙÙ٠اسکرÛ٠ٟر ÙÛØ¬Ûٹس"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Ú©Ù
ÛÙÙÙ Ù¹ÛÙÙ¹ÙØ±ÛÙ ØŽØ±ÙØ¹ کرÙÛ Ú©Û ÙÛÛ ØšØ§ØŠÛÚº Ø³ÙØ§ØŠÙŸ کرÛÚº"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"ØØ³Øš Ø¶Ø±ÙØ±Øª ØšÙØ§ØŠÛÚº"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"ؚرخاست کرÛÚº"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"ØªØ±ØªÛØšØ§Øª Ú©ÚŸÙÙÛÚº"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"ÙØ±Ú© اÛٟس Ú©Ù ØºÛØ± Ù
ÙÙÙ٠کرÛÚºØ"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"ØºÛØ± Ù
ÙÙÙ٠کرÛÚº"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Ù
ÙÙ٠اسکرÛ٠ٟر ÙÛØ¬Ù¹Ø³ ØšÙØ¯ کرÛÚº"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Ù
ÙÙ٠اسکرÛ٠ٟر ÙÛØ¬Ûٹس"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"ØµØ§Ø±Ù Ø³ÙØŠÚ کرÛÚº"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"ÙŸÙ ÚØ§Ø€Ù Ù
ÛÙÛÙ"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"اس Ø³ÛØŽÙ Ù
ÛÚº Ù
ÙØ¬Ùد Ø³ØšÚŸÛ Ø§Ûٟس Ø§ÙØ± ÚÛٹا Ú©Ù ØØ°Ù کر Ø¯ÛØ§ Ø¬Ø§ØŠÛ Ú¯Ø§Û"</string>
diff --git a/packages/SystemUI/res/values-uz/strings.xml b/packages/SystemUI/res/values-uz/strings.xml
index 6581db5..555e1e1 100644
--- a/packages/SystemUI/res/values-uz/strings.xml
+++ b/packages/SystemUI/res/values-uz/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Xabarnoma soyasi."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Tezkor sozlamalar."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Tezkor sozlamalar va eslatma soyasi."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Qulflash ekrani."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Ekran qulfi"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Ishchi ekran qulfi"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Yopish"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"jimjitlik"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"Hammasi"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"Bluetooth ishlatish"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"Ulangan"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"Audio ulashuvi"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"Saqlangan"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"uzish"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"faollashtirish"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"Ertaga yana avtomatik yoqilsin"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"Tezkor ulashuv va Qurilmamni top kabi funksiyalar Bluetooth ishlatadi"</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"Bluetooth ertaga ertalab yoqiladi"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"Audio ulashuvi"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"Audio ulashuvi yoniq"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"Batareya quvvati: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g>"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Audio"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Garnitura"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Eshitish qurilmalari"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Yangi qurilmani ulash"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Yangi qurilmani ulash uchun bosing"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Qurilma mikrofoni blokdan chiqarilsinmi?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Qurilma kamerasi blokdan chiqarilsinmi?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Qurilma kamerasi va mikrofoni blokdan chiqarilsinmi?"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Tez quvvat olmoqda • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> qoldi"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Sekin quvvat olmoqda • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> qoldi"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Quvvat olmoqda • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g> qoldi"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Ekran qulfidagi vidjetlar"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Qoʻllanma bilan tanishish uchun chapga suring"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Moslash"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Yopish"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Sozlamalarni ochish"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Ishga oid ilovalar qaytarilsinmi?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"Davom ettirish"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Ekran qulfida vidjetlarni yopish"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Ekran qulfidagi vidjetlar"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Foydalanuvchini almashtirish"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"tortib tushiriladigan menyu"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Ushbu seansdagi barcha ilovalar va ma’lumotlar o‘chirib tashlanadi."</string>
diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml
index cce810e..ff002d0 100644
--- a/packages/SystemUI/res/values-vi/strings.xml
+++ b/packages/SystemUI/res/values-vi/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Bóng thông báo."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Cài Äặt nhanh."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Cài Äặt nhanh và ngÄn thông báo."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Màn hình khóa."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Màn hình khoá"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Màn hình khóa công viá»c"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Äóng"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"hoàn toàn tắt tiếng"</string>
@@ -376,6 +376,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Thiết bá» trợ thính"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Ghép ná»i thiết bá» má»i"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Nhấp Äá» ghép ná»i thiết bá» má»i"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Bá» chặn micrô cá»§a thiết bá»?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"BỠchặn camera của thiết b�"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Bá» chặn máy ảnh và micrô cá»§a thiết bá»?"</string>
@@ -441,6 +443,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Äang sạc nhanh • Sẜ Äầy sau <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Äang sạc cháºm • Sẜ Äầy sau <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Äang sạc • Sẜ Äầy sau <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Các tiá»n ích trên màn hình khoá"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Vuá»t sang trái Äá» bắt Äầu xem hưá»ng dẫn chung"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Tuỳ chá»nh"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Äóng"</string>
@@ -459,6 +462,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Má» phần Cài Äặt"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Tiếp tục dùng ứng dụng công viá»c?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"Tiếp tục dùng"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Äóng các tiá»n ích trên màn hình khoá"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Các tiá»n ích trên màn hình khoá"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Chuyá»n Äá»i ngưá»i dùng"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"trình ÄÆ¡n kéo xuá»ng"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Tất cả ứng dụng và dữ liá»u trong phiên này sẜ bá» xóa."</string>
diff --git a/packages/SystemUI/res/values-xlarge-land/config.xml b/packages/SystemUI/res/values-xlarge-land/config.xml
new file mode 100644
index 0000000..5e4304e
--- /dev/null
+++ b/packages/SystemUI/res/values-xlarge-land/config.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+ ~ 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.
+ -->
+
+<resources>
+ <item name="shortcut_helper_screen_width_fraction" format="float" type="dimen">0.8</item>
+</resources>
diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml
index f683133..602d707 100644
--- a/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"éç¥æ ã"</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"å¿«æ·è®Ÿçœ®ã"</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"å¿«æ·è®Ÿçœ®åéç¥æ ã"</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"éå®å±å¹ã"</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"éå®çå±å¹"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"å·¥äœéå®å±å¹"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"å
³é"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"å®å
šéé³"</string>
@@ -376,6 +376,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"å©å¬è£
眮"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"äžæ°è®Ÿå€é
对"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"ç¹å»å³å¯äžæ°è®Ÿå€é
对"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"èŠè§£é讟å€éºŠå
é£åïŒ"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"èŠè§£éè®Ÿå€æå倎åïŒ"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"èŠè§£éè®Ÿå€æå倎å麊å
é£åïŒ"</string>
@@ -441,6 +443,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • æ£åšå¿«éå
çµ • å°äº <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>åå
满"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • æ£åšæ
¢éå
çµ • å°äº <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>åå
满"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • æ£åšå
çµ • å°äº <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>åå
满"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"éå®å±å¹äžç埮件"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"åå·Šæ»åšå³å¯å¯åšå
Œ
±æçš"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"èªå®ä¹"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"å
³é"</string>
@@ -459,6 +462,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"æåŒè®Ÿçœ®"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"æ¯åŠäžºå·¥äœåºçšè§£é€æåç¶æïŒ"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"è§£é€æå"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"å
³ééå®å±å¹äžç埮件"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"éå®å±å¹äžç埮件"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"åæ¢çšæ·"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"äžæèå"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"æ€äŒè¯äžçææåºçšåæ°æ®éœå°è¢«å é€ã"</string>
diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml
index e6fcb7f..c311d71d 100644
--- a/packages/SystemUI/res/values-zh-rHK/strings.xml
+++ b/packages/SystemUI/res/values-zh-rHK/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"éç¥æ¬ã"</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"å¿«éèšå®ã"</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"å¿«éèšå®åéç¥æ¬ã"</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"äžéç«é¢ã"</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"äžéç«é¢"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"å·¥äœè¢å¹éå®"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"éé"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"å®å
šéé³"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"æ¥çå
šéš"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"䜿çšèç"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"已飿¥"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"é³èšå享"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"å·²å²å"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"è§£é€é£çµ"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"åå"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"æå€©èªåéæ°éå"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"ãå¿«éå享ãåãå°æŸæçè£çœ®ãçåèœéèŠèç"</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"èçæåšæå€©æ©äžéå"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"é³èšå享"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"æ£åšå享é³èš"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"é»éïŒ<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g>"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"é³èš"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"è³æ©"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"å©èœåš"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"é
å°æ°è£çœ®"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"ã©äžäžå°±å¯ä»¥é
å°æ°è£çœ®"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"èŠè§£é€å°éè£çœ®éº¥å
颚åïŒ"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"èŠè§£é€å°éè£çœ®çžæ©åïŒ"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"èŠè§£é€å°éè£çœ®çžæ©å麥å
颚åïŒ"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • å¿«éå
é»äž • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>åŸå
滿é»"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • æ
¢éå
é»äž • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>åŸå
滿é»"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • å
é»äž • <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>åŸå
滿é»"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"äžéç«é¢äžçå°å·¥å
·"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"åå·Šæ»åå³å¯éå§å
±çšæåžèª²çš"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"èªèš"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"éé"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"éåèšå®"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"èŠåæ¶æ«åå·¥äœæçšçšåŒåïŒ"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"åæ¶æ«å"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"ééäžéç«é¢äžçå°å·¥å
·"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"äžéç«é¢äžçå°å·¥å
·"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"åæäœ¿çšè
"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"äžæåŒéžå®"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"éåå·¥äœé段äžçæææçšçšåŒåè³æéœæè¢«åªé€ã"</string>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml
index b02bf81..b1710e7 100644
--- a/packages/SystemUI/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"éç¥æ¬ã"</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"å¿«æ·èšå®ã"</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"å¿«éèšå®åéç¥æ¬ã"</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"è¢å¹éå®ã"</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"è¢å¹éå®"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Work è¢å¹éå®"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"éé"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"å®å
šéé³"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"æ¥çå
šéš"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"䜿çšèç"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"å·²é£ç·"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"é³èšå享"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"å·²å²å"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"åæ¶é£çµ"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"åçš"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"æå€©èªåéæ°éå"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"ãå¿«éå享ãåãå°æŸæçè£çœ®ãçåèœéèŠèç"</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"èçæåšæå€©æ©äžéå"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"é³èšå享"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"æ£åšå享é³èš"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"é»éïŒ<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g>"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"é³èš"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"è³æ©"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"å©èœåš"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"é
å°æ°è£çœ®"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"æäžäžå³å¯é
å°æ°è£çœ®"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"èŠè§£é€å°éè£çœ®éº¥å
颚åïŒ"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"èŠè§£é€å°éè£çœ®çžæ©åïŒ"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"èŠå°è£çœ®ççžæ©å麥å
颚解é€å°éåïŒ"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • å¿«éå
é»äž • å°æŒ <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>åŸå
飜"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • æ
¢éå
é»äž • å°æŒ <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>åŸå
飜"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • å
é»äž • å°æŒ <xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>åŸå
飜"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"è¢å¹éå®ç«é¢äžçå°å·¥å
·"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"åå·Šæ»åå³å¯ååéçšæåžèª²çš"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"èªèš"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"éé"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"éåèšå®"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"èŠè§£é€å·¥äœæçšçšåŒçæ«åçæ
åïŒ"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"åæ¶æ«å"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"ééè¢å¹éå®ç«é¢äžçå°å·¥å
·"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"è¢å¹éå®ç«é¢äžçå°å·¥å
·"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"åæäœ¿çšè
"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"äžæåŒéžå®"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"éåå·¥äœé段äžçæææçšçšåŒåè³æéœæåªé€ã"</string>
diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml
index a4d66a4..dea3db4 100644
--- a/packages/SystemUI/res/values-zu/strings.xml
+++ b/packages/SystemUI/res/values-zu/strings.xml
@@ -235,7 +235,7 @@
<string name="accessibility_desc_notification_shade" msgid="5355229129428759989">"Umthunzi wesaziso."</string>
<string name="accessibility_desc_quick_settings" msgid="4374766941484719179">"Izilingiselelo ezisheshayo."</string>
<string name="accessibility_desc_qs_notification_shade" msgid="8327226953072700376">"Amasethingi asheshayo Nomthunzi wezaziso."</string>
- <string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"Khiya isikrini."</string>
+ <string name="accessibility_desc_lock_screen" msgid="409034672704273634">"Khiya isikrini"</string>
<string name="accessibility_desc_work_lock" msgid="4355620395354680575">"Ukukhiya isikrini somsebenzi"</string>
<string name="accessibility_desc_close" msgid="8293708213442107755">"Vala"</string>
<string name="accessibility_quick_settings_dnd_none_on" msgid="3235552940146035383">"ukuthula okuphelele"</string>
@@ -270,20 +270,15 @@
<string name="see_all_bluetooth_devices" msgid="1761596816620200433">"Buka konke"</string>
<string name="turn_on_bluetooth" msgid="5681370462180289071">"Sebenzisa i-Bluetooth"</string>
<string name="quick_settings_bluetooth_device_connected" msgid="7884777006729260996">"Ixhunyiwe"</string>
- <!-- no translation found for quick_settings_bluetooth_device_audio_sharing (1496358082943301670) -->
- <skip />
+ <string name="quick_settings_bluetooth_device_audio_sharing" msgid="1496358082943301670">"Ukwabelana Ngokuqoshiwe"</string>
<string name="quick_settings_bluetooth_device_saved" msgid="7549938728928069477">"Ilondoloziwe"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_disconnect" msgid="415980329093277342">"nqamula"</string>
<string name="accessibility_quick_settings_bluetooth_device_tap_to_activate" msgid="3724301751036877403">"yenza kusebenze"</string>
<string name="turn_on_bluetooth_auto_tomorrow" msgid="414836329962473906">"Vula ngokuzenzekela futhi kusasa"</string>
- <!-- no translation found for turn_on_bluetooth_auto_info_disabled (682984290339848844) -->
- <skip />
- <!-- no translation found for turn_on_bluetooth_auto_info_enabled (7440944034584560279) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button (4499275822759907822) -->
- <skip />
- <!-- no translation found for quick_settings_bluetooth_audio_sharing_button_sharing (8626191139359072540) -->
- <skip />
+ <string name="turn_on_bluetooth_auto_info_disabled" msgid="682984290339848844">"Izakhi ezifana nokuthi Ukwabelana Ngokushesha kanye nokuthi Thola Idivayisi Yami zisebenzisa i-Bluetooth"</string>
+ <string name="turn_on_bluetooth_auto_info_enabled" msgid="7440944034584560279">"I-Bluetooth izovuleka kusasa ekuseni"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button" msgid="4499275822759907822">"Ukwabelana Ngokuqoshiwe"</string>
+ <string name="quick_settings_bluetooth_audio_sharing_button_sharing" msgid="8626191139359072540">"Ukwabelana Ngomsindo"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g> ibhethri"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"Umsindo"</string>
<string name="quick_settings_bluetooth_secondary_label_headset" msgid="2332093067553000852">"Ihedisethi"</string>
@@ -376,6 +371,8 @@
<string name="quick_settings_hearing_devices_dialog_title" msgid="9004774017688484981">"Izinsizakuzwa"</string>
<string name="quick_settings_pair_hearing_devices" msgid="5987105102207447322">"Bhangqa idivayisi entsha"</string>
<string name="accessibility_hearing_device_pair_new_device" msgid="8440082580186130090">"Chofoza ukuze ubhangqe idivayisi entsha"</string>
+ <!-- no translation found for hearing_devices_presets_error (350363093458408536) -->
+ <skip />
<string name="sensor_privacy_start_use_mic_dialog_title" msgid="563796653825944944">"Vulela imakrofoni yedivayisi?"</string>
<string name="sensor_privacy_start_use_camera_dialog_title" msgid="8807639852654305227">"Vulela ikhamera yedivayisi?"</string>
<string name="sensor_privacy_start_use_mic_camera_dialog_title" msgid="4316471859905020023">"Vulela ikhamera yedivayisi nemakrofoni?"</string>
@@ -441,6 +438,7 @@
<string name="keyguard_indication_charging_time_fast" msgid="8390311020603859480">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Ishaja ngokushesha • Izogcwala ngo-<xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_slowly" msgid="301936949731705417">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Ishaja kancane • Izogcwala ngo-<xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
<string name="keyguard_indication_charging_time_dock" msgid="3149328898931741271">"<xliff:g id="PERCENTAGE">%2$s</xliff:g> • Iyashaja • Izogcwala ngo-<xliff:g id="CHARGING_TIME_LEFT">%1$s</xliff:g>"</string>
+ <string name="accessibility_action_open_communal_hub" msgid="3081702792413787849">"Amawijethi ekukhiyeni isikrini"</string>
<string name="communal_tutorial_indicator_text" msgid="4503010353591430123">"Swayiphela kwesokunxele ukuze uqale okokufundisa komphakathi"</string>
<string name="cta_tile_button_to_open_widget_editor" msgid="3871562362382963878">"Enza ngendlela oyifisayo"</string>
<string name="cta_tile_button_to_dismiss" msgid="3377597875997861754">"Chitha"</string>
@@ -459,6 +457,8 @@
<string name="button_text_to_open_settings" msgid="1987729256950941628">"Vula amasethingi"</string>
<string name="work_mode_off_title" msgid="5794818421357835873">"Susa ukumisa ama-app omsebenzi?"</string>
<string name="work_mode_turn_on" msgid="907813741770247267">"Qhubekisa"</string>
+ <string name="accessibility_action_label_close_communal_hub" msgid="6790396569621032333">"Vala amawijethi ekukhiyeni isikrini"</string>
+ <string name="accessibility_content_description_for_communal_hub" msgid="1670220840599380118">"Amawijethi ekukhiyeni isikrini"</string>
<string name="accessibility_multi_user_switch_switcher" msgid="5330448341251092660">"Shintsha umsebenzisi"</string>
<string name="accessibility_multi_user_list_switcher" msgid="8574105376229857407">"imenyu yokudonsela phansi"</string>
<string name="guest_exit_guest_dialog_message" msgid="8183450985628495709">"Wonke ama-app nedatha kulesi sikhathi azosuswa."</string>
@@ -1002,11 +1002,11 @@
<string name="accessibility_floating_button_hidden_notification_text" msgid="1457021647040915658">"Thepha ukuze ubonise inkinobho yokufinyeleleka."</string>
<string name="accessibility_floating_button_undo_message_label_text" msgid="9017658016426242640">"Isinqamuleli se-<xliff:g id="FEATURE_NAME">%s</xliff:g> sisusiwe"</string>
<string name="accessibility_floating_button_undo_message_number_text" msgid="4909270290725226075">"{count,plural, =1{Isinqamuleli esingu-# sisusiwe}one{Izinqamuleli ezingu-# zisusiwe}other{Izinqamuleli ezingu-# zisusiwe}}"</string>
- <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Hamba phezulu kwesokunxele"</string>
+ <string name="accessibility_floating_button_action_move_top_left" msgid="6253520703618545705">"Hambisa phezulu kwesokunxele"</string>
<string name="accessibility_floating_button_action_move_top_right" msgid="6106225581993479711">"Hamba phezulu ngakwesokudla"</string>
- <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Hamba phansi ngakwesokunxele"</string>
- <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Hamba phansi ngakwesokudla"</string>
- <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Hamba onqenqemeni ufihle"</string>
+ <string name="accessibility_floating_button_action_move_bottom_left" msgid="8063394111137429725">"Hambisa phansi ngakwesokunxele"</string>
+ <string name="accessibility_floating_button_action_move_bottom_right" msgid="6196904373227440500">"Hambisa phansi ngakwesokudla"</string>
+ <string name="accessibility_floating_button_action_move_to_edge_and_hide_to_half" msgid="662401168245782658">"Hambisa onqenqemeni ufihle"</string>
<string name="accessibility_floating_button_action_move_out_edge_and_show" msgid="8354760891651663326">"Phuma onqenqemeni ubonise"</string>
<string name="accessibility_floating_button_action_remove_menu" msgid="6730432848162552135">"Susa"</string>
<string name="accessibility_floating_button_action_double_tap_to_toggle" msgid="7976492639670692037">"guqula"</string>
diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml
index fa9d507d..19273ec 100644
--- a/packages/SystemUI/res/values/config.xml
+++ b/packages/SystemUI/res/values/config.xml
@@ -70,6 +70,9 @@
<!-- The number of rows in the QuickSettings -->
<integer name="quick_settings_max_rows">4</integer>
+ <!-- The number of columns in the infinite grid QuickSettings -->
+ <integer name="quick_settings_infinite_grid_num_columns">4</integer>
+
<!-- Override column number for quick settings.
For now, this value has effect only when flag lockscreen.enable_landscape is enabled.
TODO (b/293252410) - change this comment/resource when flag is enabled -->
@@ -1007,4 +1010,7 @@
<!-- Whether volume panel should use the large screen layout or not -->
<bool name="volume_panel_is_large_screen">false</bool>
+
+ <!-- The width of the shortcut helper container, as a fraction of the screen's width. -->
+ <item name="shortcut_helper_screen_width_fraction" format="float" type="dimen">1.0</item>
</resources>
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index 82395e4..df57f2a 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -310,6 +310,9 @@
<!-- Radius for notifications corners without adjacent notifications -->
<dimen name="notification_corner_radius">28dp</dimen>
+ <!-- Stroke width for notifications focus state overlay, see id/notification_focus_outline -->
+ <dimen name="notification_focus_stroke_width">3dp</dimen>
+
<!-- Distance over which notification corner animations run, near the shelf while scrolling. -->
<dimen name="notification_corner_animation_distance">48dp</dimen>
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index 3e13043..b8e78a4 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -1178,6 +1178,8 @@
<string name="work_mode_turn_on">Unpause</string>
<!-- Label for accessibility action that navigates to lock screen. [CHAR LIMIT=NONE] -->
<string name="accessibility_action_label_close_communal_hub">Close widgets on lock screen</string>
+ <!-- Label for accessibility action that navigates to edit mode. [CHAR LIMIT=NONE] -->
+ <string name="accessibility_action_label_edit_widgets">Customize widgets</string>
<!-- Accessibility content description for communal hub. [CHAR LIMIT=NONE] -->
<string name="accessibility_content_description_for_communal_hub">Widgets on lock screen</string>
@@ -1716,6 +1718,11 @@
<!-- Accessibility label for available satellite connection [CHAR LIMIT=NONE] -->
<string name="accessibility_status_bar_satellite_available">Satellite, connection available</string>
+ <!-- Text displayed indicating that the user is connected to a satellite signal. -->
+ <string name="satellite_connected_carrier_text">Connected to satellite</string>
+ <!-- Text displayed indicating that the user is not connected to a satellite signal. -->
+ <string name="satellite_not_connected_carrier_text">Not connected to satellite</string>
+
<!-- Accessibility label for managed profile icon (not shown on screen) [CHAR LIMIT=NONE] -->
<string name="accessibility_managed_profile">Work profile</string>
@@ -1989,7 +1996,7 @@
<string name="keyboard_shortcut_clear_text">Clear search query</string>
<!-- The title for keyboard shortcut search list [CHAR LIMIT=25] -->
<string name="keyboard_shortcut_search_list_title">Keyboard Shortcuts</string>
- <!-- The hint for keyboard shortcut search list [CHAR LIMIT=25] -->
+ <!-- The hint for keyboard shortcut search list [CHAR LIMIT=50] -->
<string name="keyboard_shortcut_search_list_hint">Search shortcuts</string>
<!-- The description for no shortcuts results [CHAR LIMIT=25] -->
<string name="keyboard_shortcut_search_list_no_result">No shortcuts found</string>
diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml
index 2c9006e..3d57111 100644
--- a/packages/SystemUI/res/values/styles.xml
+++ b/packages/SystemUI/res/values/styles.xml
@@ -1654,4 +1654,28 @@
<style name="Theme.SystemUI.Dialog.StickyKeys" parent="@style/Theme.SystemUI.Dialog">
<item name="android:colorBackground">@color/transparent</item>
</style>
+
+ <style name="ShortcutHelperAnimation" parent="@android:style/Animation.Activity">
+ <item name="android:activityOpenEnterAnimation">@anim/shortcut_helper_launch_anim</item>
+ <item name="android:taskOpenEnterAnimation">@anim/shortcut_helper_launch_anim</item>
+ <item name="android:activityOpenExitAnimation">@anim/shortcut_helper_close_anim</item>
+ <item name="android:taskOpenExitAnimation">@anim/shortcut_helper_close_anim</item>
+ </style>
+
+ <style name="ShortcutHelperThemeCommon" parent="@style/Theme.Material3.DynamicColors.DayNight">
+ <item name="android:windowAnimationStyle">@style/ShortcutHelperAnimation</item>
+ <item name="android:windowIsTranslucent">true</item>
+ <item name="android:windowNoTitle">true</item>
+ <item name="android:windowBackground">@android:color/transparent</item>
+ <item name="android:backgroundDimEnabled">true</item>
+ <item name="android:statusBarColor">@android:color/transparent</item>
+ <item name="android:windowContentOverlay">@null</item>
+ <item name="android:navigationBarColor">@android:color/transparent</item>
+ <item name="android:windowLayoutInDisplayCutoutMode">always</item>
+ <item name="enableEdgeToEdge">true</item>
+ </style>
+
+ <style name="ShortcutHelperTheme" parent="@style/ShortcutHelperThemeCommon">
+ <item name="android:windowLightNavigationBar">true</item>
+ </style>
</resources>
diff --git a/packages/SystemUI/src/com/android/keyguard/CarrierTextManager.java b/packages/SystemUI/src/com/android/keyguard/CarrierTextManager.java
index b9b8fbe..5647b0b 100644
--- a/packages/SystemUI/src/com/android/keyguard/CarrierTextManager.java
+++ b/packages/SystemUI/src/com/android/keyguard/CarrierTextManager.java
@@ -19,6 +19,7 @@
import static com.android.keyguard.logging.CarrierTextManagerLogger.REASON_ACTIVE_DATA_SUB_CHANGED;
import static com.android.keyguard.logging.CarrierTextManagerLogger.REASON_ON_TELEPHONY_CAPABLE;
import static com.android.keyguard.logging.CarrierTextManagerLogger.REASON_REFRESH_CARRIER_INFO;
+import static com.android.keyguard.logging.CarrierTextManagerLogger.REASON_SATELLITE_CHANGED;
import static com.android.keyguard.logging.CarrierTextManagerLogger.REASON_SIM_ERROR_STATE_CHANGED;
import android.content.Context;
@@ -43,17 +44,22 @@
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.keyguard.WakefulnessLifecycle;
import com.android.systemui.res.R;
+import com.android.systemui.statusbar.pipeline.satellite.ui.viewmodel.DeviceBasedSatelliteViewModel;
import com.android.systemui.statusbar.pipeline.wifi.data.repository.WifiRepository;
import com.android.systemui.telephony.TelephonyListenerManager;
+import com.android.systemui.util.kotlin.JavaAdapter;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
+import java.util.concurrent.CancellationException;
import java.util.concurrent.Executor;
import java.util.concurrent.atomic.AtomicBoolean;
import javax.inject.Inject;
+import kotlinx.coroutines.Job;
+
/**
* Controller that generates text including the carrier names and/or the status of all the SIM
* interfaces in the device. Through a callback, the updates can be retrieved either as a list or
@@ -77,10 +83,17 @@
protected KeyguardUpdateMonitor mKeyguardUpdateMonitor;
private final CarrierTextManagerLogger mLogger;
private final WifiRepository mWifiRepository;
+ private final DeviceBasedSatelliteViewModel mDeviceBasedSatelliteViewModel;
+ private final JavaAdapter mJavaAdapter;
private final boolean[] mSimErrorState;
private final int mSimSlotsNumber;
@Nullable // Check for nullability before dispatching
private CarrierTextCallback mCarrierTextCallback;
+ @Nullable
+ private Job mSatelliteConnectionJob;
+
+ @Nullable private String mSatelliteCarrierText;
+
private final Context mContext;
private final TelephonyManager mTelephonyManager;
private final CharSequence mSeparator;
@@ -178,6 +191,8 @@
boolean showAirplaneMode,
boolean showMissingSim,
WifiRepository wifiRepository,
+ DeviceBasedSatelliteViewModel deviceBasedSatelliteViewModel,
+ JavaAdapter javaAdapter,
TelephonyManager telephonyManager,
TelephonyListenerManager telephonyListenerManager,
WakefulnessLifecycle wakefulnessLifecycle,
@@ -192,6 +207,8 @@
mShowAirplaneMode = showAirplaneMode;
mShowMissingSim = showMissingSim;
mWifiRepository = wifiRepository;
+ mDeviceBasedSatelliteViewModel = deviceBasedSatelliteViewModel;
+ mJavaAdapter = javaAdapter;
mTelephonyManager = telephonyManager;
mSeparator = separator;
mTelephonyListenerManager = telephonyListenerManager;
@@ -282,6 +299,11 @@
mWakefulnessLifecycle.addObserver(mWakefulnessObserver);
});
mTelephonyListenerManager.addActiveDataSubscriptionIdListener(mPhoneStateListener);
+ cancelSatelliteCollectionJob(/* reason= */ "Starting new job");
+ mSatelliteConnectionJob =
+ mJavaAdapter.alwaysCollectFlow(
+ mDeviceBasedSatelliteViewModel.getCarrierText(),
+ this::onSatelliteCarrierTextChanged);
} else {
// Don't listen and clear out the text when the device isn't a phone.
mMainExecutor.execute(() -> callback.updateCarrierInfo(
@@ -294,6 +316,7 @@
mWakefulnessLifecycle.removeObserver(mWakefulnessObserver);
});
mTelephonyListenerManager.removeActiveDataSubscriptionIdListener(mPhoneStateListener);
+ cancelSatelliteCollectionJob(/* reason= */ "Stopping listening");
}
}
@@ -311,6 +334,12 @@
return mKeyguardUpdateMonitor.getFilteredSubscriptionInfo();
}
+ private void onSatelliteCarrierTextChanged(@Nullable String text) {
+ mLogger.logUpdateCarrierTextForReason(REASON_SATELLITE_CHANGED);
+ mSatelliteCarrierText = text;
+ updateCarrierText();
+ }
+
protected void updateCarrierText() {
Trace.beginSection("CarrierTextManager#updateCarrierText");
boolean allSimsMissing = true;
@@ -411,6 +440,12 @@
airplaneMode = true;
}
+ String currentSatelliteText = mSatelliteCarrierText;
+ if (currentSatelliteText != null) {
+ mLogger.logUsingSatelliteText(currentSatelliteText);
+ displayText = currentSatelliteText;
+ }
+
final CarrierTextCallbackInfo info = new CarrierTextCallbackInfo(
displayText,
carrierNames,
@@ -616,11 +651,20 @@
return list;
}
+ private void cancelSatelliteCollectionJob(String reason) {
+ Job job = mSatelliteConnectionJob;
+ if (job != null) {
+ job.cancel(new CancellationException(reason));
+ }
+ }
+
/** Injectable Buildeer for {@#link CarrierTextManager}. */
public static class Builder {
private final Context mContext;
private final String mSeparator;
private final WifiRepository mWifiRepository;
+ private final DeviceBasedSatelliteViewModel mDeviceBasedSatelliteViewModel;
+ private final JavaAdapter mJavaAdapter;
private final TelephonyManager mTelephonyManager;
private final TelephonyListenerManager mTelephonyListenerManager;
private final WakefulnessLifecycle mWakefulnessLifecycle;
@@ -637,6 +681,8 @@
Context context,
@Main Resources resources,
@Nullable WifiRepository wifiRepository,
+ DeviceBasedSatelliteViewModel deviceBasedSatelliteViewModel,
+ JavaAdapter javaAdapter,
TelephonyManager telephonyManager,
TelephonyListenerManager telephonyListenerManager,
WakefulnessLifecycle wakefulnessLifecycle,
@@ -648,6 +694,8 @@
mSeparator = resources.getString(
com.android.internal.R.string.kg_text_message_separator);
mWifiRepository = wifiRepository;
+ mDeviceBasedSatelliteViewModel = deviceBasedSatelliteViewModel;
+ mJavaAdapter = javaAdapter;
mTelephonyManager = telephonyManager;
mTelephonyListenerManager = telephonyListenerManager;
mWakefulnessLifecycle = wakefulnessLifecycle;
@@ -682,9 +730,20 @@
public CarrierTextManager build() {
mLogger.setLocation(mDebugLocation);
return new CarrierTextManager(
- mContext, mSeparator, mShowAirplaneMode, mShowMissingSim, mWifiRepository,
- mTelephonyManager, mTelephonyListenerManager, mWakefulnessLifecycle,
- mMainExecutor, mBgExecutor, mKeyguardUpdateMonitor, mLogger);
+ mContext,
+ mSeparator,
+ mShowAirplaneMode,
+ mShowMissingSim,
+ mWifiRepository,
+ mDeviceBasedSatelliteViewModel,
+ mJavaAdapter,
+ mTelephonyManager,
+ mTelephonyListenerManager,
+ mWakefulnessLifecycle,
+ mMainExecutor,
+ mBgExecutor,
+ mKeyguardUpdateMonitor,
+ mLogger);
}
}
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java
index 790a843..47e4b49 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java
@@ -68,6 +68,8 @@
import com.android.systemui.util.concurrency.DelayableExecutor;
import com.android.systemui.util.settings.SecureSettings;
+import kotlinx.coroutines.DisposableHandle;
+
import java.io.PrintWriter;
import java.util.Locale;
import java.util.concurrent.Executor;
@@ -75,8 +77,6 @@
import javax.inject.Inject;
-import kotlinx.coroutines.DisposableHandle;
-
/**
* Injectable controller for {@link KeyguardClockSwitch}.
*/
@@ -593,7 +593,7 @@
boolean isClockTopAligned() {
if (MigrateClocksToBlueprint.isEnabled()) {
- return mKeyguardClockInteractor.getClockSize().getValue() == LARGE;
+ return mKeyguardClockInteractor.getClockSize().getValue().getLegacyValue() == LARGE;
}
return mLargeClockFrame.getVisibility() != View.VISIBLE;
}
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
index 8c51a4e..519622e 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
@@ -42,7 +42,6 @@
import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_LOCKOUT;
import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN;
import static com.android.systemui.statusbar.policy.DevicePostureController.DEVICE_POSTURE_OPENED;
-import static com.android.systemui.statusbar.policy.DevicePostureController.DEVICE_POSTURE_UNKNOWN;
import android.annotation.AnyThread;
import android.annotation.MainThread;
@@ -1868,7 +1867,9 @@
@Override
public void onPostureChanged(@DevicePostureInt int posture) {
if (posture == DEVICE_POSTURE_OPENED) {
- mLogger.d("Posture changed to open - attempting to request active unlock");
+ mLogger.d("Posture changed to open - attempting to request active"
+ + " unlock and run face auth");
+ getFaceAuthInteractor().onDeviceUnfolded();
requestActiveUnlockFromWakeReason(PowerManager.WAKE_REASON_UNFOLD_DEVICE,
false);
}
@@ -2434,9 +2435,7 @@
updateFingerprintListeningState(BIOMETRIC_ACTION_START);
}
});
- if (mConfigFaceAuthSupportedPosture != DEVICE_POSTURE_UNKNOWN) {
- mDevicePostureController.addCallback(mPostureCallback);
- }
+ mDevicePostureController.addCallback(mPostureCallback);
updateFingerprintListeningState(BIOMETRIC_ACTION_UPDATE);
mTaskStackChangeListeners.registerTaskStackListener(mTaskStackListener);
diff --git a/packages/SystemUI/src/com/android/keyguard/logging/CarrierTextManagerLogger.kt b/packages/SystemUI/src/com/android/keyguard/logging/CarrierTextManagerLogger.kt
index cb474d3..48fea55 100644
--- a/packages/SystemUI/src/com/android/keyguard/logging/CarrierTextManagerLogger.kt
+++ b/packages/SystemUI/src/com/android/keyguard/logging/CarrierTextManagerLogger.kt
@@ -77,6 +77,15 @@
)
}
+ fun logUsingSatelliteText(satelliteText: String) {
+ buffer.log(
+ TAG,
+ LogLevel.VERBOSE,
+ { str1 = satelliteText },
+ { "⣠updateCarrierText: using satellite text. text=$str1" },
+ )
+ }
+
/** De-structures the info object so that we don't have to generate new strings */
fun logCallbackSentFromUpdate(info: CarrierTextCallbackInfo) {
buffer.log(
@@ -129,6 +138,7 @@
const val REASON_ON_TELEPHONY_CAPABLE = 2
const val REASON_SIM_ERROR_STATE_CHANGED = 3
const val REASON_ACTIVE_DATA_SUB_CHANGED = 4
+ const val REASON_SATELLITE_CHANGED = 5
@Retention(AnnotationRetention.SOURCE)
@IntDef(
@@ -138,6 +148,7 @@
REASON_ON_TELEPHONY_CAPABLE,
REASON_SIM_ERROR_STATE_CHANGED,
REASON_ACTIVE_DATA_SUB_CHANGED,
+ REASON_SATELLITE_CHANGED,
]
)
annotation class CarrierTextRefreshReason
@@ -148,6 +159,7 @@
REASON_ON_TELEPHONY_CAPABLE -> "ON_TELEPHONY_CAPABLE"
REASON_SIM_ERROR_STATE_CHANGED -> "SIM_ERROR_STATE_CHANGED"
REASON_ACTIVE_DATA_SUB_CHANGED -> "ACTIVE_DATA_SUB_CHANGED"
+ REASON_SATELLITE_CHANGED -> "SATELLITE_CHANGED"
else -> "unknown"
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/CoreStartable.java b/packages/SystemUI/src/com/android/systemui/CoreStartable.java
index 39e1c41..55ccaa6 100644
--- a/packages/SystemUI/src/com/android/systemui/CoreStartable.java
+++ b/packages/SystemUI/src/com/android/systemui/CoreStartable.java
@@ -33,12 +33,23 @@
* abstract fun bind(impl: FoobarStartable): CoreStartable
* </pre>
*
- * If your CoreStartable depends on different CoreStartables starting before it, use a
- * {@link com.android.systemui.startable.Dependencies} annotation to list out those dependencies.
+ * If your CoreStartable depends on different CoreStartables starting before it, you can specify
+ * another map binding listing out its dependencies:
+ * <pre>
+ * @Provides
+ * @IntoMap
+ * @Dependencies // Important! com.android.systemui.startable.Dependencies.
+ * @ClassKey(FoobarStartable::class)
+ * fun providesDeps(): Set<Class<out CoreStartable>> {
+ * return setOf(OtherStartable::class.java)
+ * }
+ * </pre>
+ *
*
* @see SystemUIApplication#startSystemUserServicesIfNeeded()
*/
public interface CoreStartable extends Dumpable {
+ String STARTABLE_DEPENDENCIES = "startable_dependencies";
/** Main entry point for implementations. Called shortly after SysUI startup. */
void start();
diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java b/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java
index fb88f0e..4b07402 100644
--- a/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java
+++ b/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java
@@ -44,16 +44,15 @@
import com.android.systemui.dump.DumpManager;
import com.android.systemui.process.ProcessWrapper;
import com.android.systemui.res.R;
-import com.android.systemui.startable.Dependencies;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.util.NotificationChannels;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayDeque;
-import java.util.Arrays;
import java.util.Comparator;
import java.util.HashSet;
import java.util.Map;
+import java.util.Set;
import java.util.StringJoiner;
import java.util.TreeMap;
@@ -204,7 +203,7 @@
*/
public void startSystemUserServicesIfNeeded() {
- if (!mProcessWrapper.isSystemUser()) {
+ if (!shouldStartSystemUserServices()) {
Log.wtf(TAG, "Tried starting SystemUser services on non-SystemUser");
return; // Per-user startables are handled in #startSystemUserServicesIfNeeded.
}
@@ -227,7 +226,7 @@
* <p>This method must only be called from the main thread.</p>
*/
void startSecondaryUserServicesIfNeeded() {
- if (mProcessWrapper.isSystemUser()) {
+ if (!shouldStartSecondaryUserServices()) {
return; // Per-user startables are handled in #startSystemUserServicesIfNeeded.
}
// Sort the startables so that we get a deterministic ordering.
@@ -238,6 +237,14 @@
sortedStartables, "StartSecondaryServices", null);
}
+ protected boolean shouldStartSystemUserServices() {
+ return mProcessWrapper.isSystemUser();
+ }
+
+ protected boolean shouldStartSecondaryUserServices() {
+ return !mProcessWrapper.isSystemUser();
+ }
+
private void startServicesIfNeeded(
Map<Class<?>, Provider<CoreStartable>> startables,
String metricsPrefix,
@@ -292,6 +299,7 @@
int serviceIndex = 0;
do {
+ startedAny = false;
queue = nextQueue;
nextQueue = new ArrayDeque<>(startables.size());
@@ -299,9 +307,9 @@
Map.Entry<Class<?>, Provider<CoreStartable>> entry = queue.removeFirst();
Class<?> cls = entry.getKey();
- Dependencies dep = cls.getAnnotation(Dependencies.class);
- Class<?>[] deps = (dep == null ? null : dep.value());
- if (deps == null || startedStartables.containsAll(Arrays.asList(deps))) {
+ Set<Class<? extends CoreStartable>> deps =
+ mSysUIComponent.getStartableDependencies().get(cls);
+ if (deps == null || startedStartables.containsAll(deps)) {
String clsName = cls.getName();
int i = serviceIndex; // Copied to make lambda happy.
timeInitialization(
@@ -323,12 +331,12 @@
while (!nextQueue.isEmpty()) {
Map.Entry<Class<?>, Provider<CoreStartable>> entry = nextQueue.removeFirst();
Class<?> cls = entry.getKey();
- Dependencies dep = cls.getAnnotation(Dependencies.class);
- Class<?>[] deps = (dep == null ? null : dep.value());
+ Set<Class<? extends CoreStartable>> deps =
+ mSysUIComponent.getStartableDependencies().get(cls);
StringJoiner stringJoiner = new StringJoiner(", ");
- for (int i = 0; deps != null && i < deps.length; i++) {
- if (!startedStartables.contains(deps[i])) {
- stringJoiner.add(deps[i].getName());
+ for (Class<? extends CoreStartable> c : deps) {
+ if (!startedStartables.contains(c)) {
+ stringJoiner.add(c.getName());
}
}
Log.e(TAG, "Failed to start " + cls.getName()
diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIInitializer.java b/packages/SystemUI/src/com/android/systemui/SystemUIInitializer.java
index 7e94804..5c75a49 100644
--- a/packages/SystemUI/src/com/android/systemui/SystemUIInitializer.java
+++ b/packages/SystemUI/src/com/android/systemui/SystemUIInitializer.java
@@ -94,7 +94,7 @@
.setOneHanded(mWMComponent.getOneHanded())
.setBubbles(mWMComponent.getBubbles())
.setTaskViewFactory(mWMComponent.getTaskViewFactory())
- .setTransitions(mWMComponent.getTransitions())
+ .setShellTransitions(mWMComponent.getShellTransitions())
.setKeyguardTransitions(mWMComponent.getKeyguardTransitions())
.setStartingSurface(mWMComponent.getStartingSurface())
.setDisplayAreaHelper(mWMComponent.getDisplayAreaHelper())
@@ -115,7 +115,7 @@
.setOneHanded(Optional.ofNullable(null))
.setBubbles(Optional.ofNullable(null))
.setTaskViewFactory(Optional.ofNullable(null))
- .setTransitions(new ShellTransitions() {})
+ .setShellTransitions(new ShellTransitions() {})
.setKeyguardTransitions(new KeyguardTransitions() {})
.setDisplayAreaHelper(Optional.ofNullable(null))
.setStartingSurface(Optional.ofNullable(null))
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/TEST_MAPPING b/packages/SystemUI/src/com/android/systemui/accessibility/TEST_MAPPING
index be26b43..17813cf 100644
--- a/packages/SystemUI/src/com/android/systemui/accessibility/TEST_MAPPING
+++ b/packages/SystemUI/src/com/android/systemui/accessibility/TEST_MAPPING
@@ -20,5 +20,10 @@
}
]
}
+ ],
+ "postsubmit": [
+ {
+ "name": "CtsAccessibilityServiceTestCases"
+ }
]
}
diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java
index 9837e36..e66261c 100644
--- a/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java
+++ b/packages/SystemUI/src/com/android/systemui/accessibility/WindowMagnificationController.java
@@ -726,11 +726,11 @@
int windowWidth = mMagnificationFrame.width() + 2 * mMirrorSurfaceMargin;
int windowHeight = mMagnificationFrame.height() + 2 * mMirrorSurfaceMargin;
- // TODO delete TYPE_ACCESSIBILITY_MAGNIFICATION_OVERLAY, it shouldn't be needed anymore
-
+ // TODO: b/335440685 - Move to TYPE_ACCESSIBILITY_OVERLAY after the issues with
+ // that type preventing swipe to navigate are resolved.
LayoutParams params = new LayoutParams(
windowWidth, windowHeight,
- LayoutParams.TYPE_ACCESSIBILITY_OVERLAY,
+ LayoutParams.TYPE_ACCESSIBILITY_MAGNIFICATION_OVERLAY,
LayoutParams.FLAG_NOT_TOUCH_MODAL
| LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSPARENT);
diff --git a/packages/SystemUI/src/com/android/systemui/ambient/touch/BouncerSwipeTouchHandler.java b/packages/SystemUI/src/com/android/systemui/ambient/touch/BouncerSwipeTouchHandler.java
index d0f08f5..85aeb27 100644
--- a/packages/SystemUI/src/com/android/systemui/ambient/touch/BouncerSwipeTouchHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/ambient/touch/BouncerSwipeTouchHandler.java
@@ -27,6 +27,7 @@
import android.view.MotionEvent;
import android.view.VelocityTracker;
+import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
import com.android.internal.logging.UiEvent;
@@ -94,13 +95,11 @@
private Boolean mCapture;
private Boolean mExpanded;
- private boolean mBouncerInitiallyShowing;
-
private TouchSession mTouchSession;
- private ValueAnimatorCreator mValueAnimatorCreator;
+ private final ValueAnimatorCreator mValueAnimatorCreator;
- private VelocityTrackerFactory mVelocityTrackerFactory;
+ private final VelocityTrackerFactory mVelocityTrackerFactory;
private final UiEventLogger mUiEventLogger;
@@ -118,17 +117,12 @@
private final GestureDetector.OnGestureListener mOnGestureListener =
new GestureDetector.SimpleOnGestureListener() {
@Override
- public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
+ public boolean onScroll(MotionEvent e1, @NonNull MotionEvent e2, float distanceX,
float distanceY) {
if (mCapture == null) {
- mBouncerInitiallyShowing = mCentralSurfaces
- .map(CentralSurfaces::isBouncerShowing)
- .orElse(false);
-
if (Flags.dreamOverlayBouncerSwipeDirectionFiltering()) {
mCapture = Math.abs(distanceY) > Math.abs(distanceX)
- && ((distanceY < 0 && mBouncerInitiallyShowing)
- || (distanceY > 0 && !mBouncerInitiallyShowing));
+ && distanceY > 0;
} else {
// If the user scrolling favors a vertical direction, begin capturing
// scrolls.
@@ -146,13 +140,8 @@
return false;
}
- // Don't set expansion for downward scroll when the bouncer is hidden.
- if (!mBouncerInitiallyShowing && (e1.getY() < e2.getY())) {
- return true;
- }
-
- // Don't set expansion for upward scroll when the bouncer is shown.
- if (mBouncerInitiallyShowing && (e1.getY() > e2.getY())) {
+ // Don't set expansion for downward scroll.
+ if (e1.getY() < e2.getY()) {
return true;
}
@@ -176,8 +165,7 @@
final float dragDownAmount = e2.getY() - e1.getY();
final float screenTravelPercentage = Math.abs(e1.getY() - e2.getY())
/ mTouchSession.getBounds().height();
- setPanelExpansion(mBouncerInitiallyShowing
- ? screenTravelPercentage : 1 - screenTravelPercentage);
+ setPanelExpansion(1 - screenTravelPercentage);
return true;
}
};
@@ -223,9 +211,9 @@
LockPatternUtils lockPatternUtils,
UserTracker userTracker,
@Named(BouncerSwipeModule.SWIPE_TO_BOUNCER_FLING_ANIMATION_UTILS_OPENING)
- FlingAnimationUtils flingAnimationUtils,
+ FlingAnimationUtils flingAnimationUtils,
@Named(BouncerSwipeModule.SWIPE_TO_BOUNCER_FLING_ANIMATION_UTILS_CLOSING)
- FlingAnimationUtils flingAnimationUtilsClosing,
+ FlingAnimationUtils flingAnimationUtilsClosing,
@Named(BouncerSwipeModule.SWIPE_TO_BOUNCER_START_REGION) float swipeRegionPercentage,
@Named(BouncerSwipeModule.MIN_BOUNCER_ZONE_SCREEN_PERCENTAGE) float minRegionPercentage,
UiEventLogger uiEventLogger) {
@@ -247,17 +235,13 @@
public void getTouchInitiationRegion(Rect bounds, Region region, Rect exclusionRect) {
final int width = bounds.width();
final int height = bounds.height();
- final float minBouncerHeight = height * mMinBouncerZoneScreenPercentage;
final int minAllowableBottom = Math.round(height * (1 - mMinBouncerZoneScreenPercentage));
- final boolean isBouncerShowing =
- mCentralSurfaces.map(CentralSurfaces::isBouncerShowing).orElse(false);
- final Rect normalRegion = isBouncerShowing
- ? new Rect(0, 0, width, Math.round(height * mBouncerZoneScreenPercentage))
- : new Rect(0, Math.round(height * (1 - mBouncerZoneScreenPercentage)),
- width, height);
+ final Rect normalRegion = new Rect(0,
+ Math.round(height * (1 - mBouncerZoneScreenPercentage)),
+ width, height);
- if (!isBouncerShowing && exclusionRect != null) {
+ if (exclusionRect != null) {
int lowestBottom = Math.min(Math.max(0, exclusionRect.bottom), minAllowableBottom);
normalRegion.top = Math.max(normalRegion.top, lowestBottom);
}
@@ -322,8 +306,7 @@
: KeyguardBouncerConstants.EXPANSION_HIDDEN;
// Log the swiping up to show Bouncer event.
- if (!mBouncerInitiallyShowing
- && expansion == KeyguardBouncerConstants.EXPANSION_VISIBLE) {
+ if (expansion == KeyguardBouncerConstants.EXPANSION_VISIBLE) {
mUiEventLogger.log(DreamEvent.DREAM_SWIPED);
}
@@ -335,17 +318,15 @@
}
}
- private ValueAnimator createExpansionAnimator(float targetExpansion, float expansionHeight) {
+ private ValueAnimator createExpansionAnimator(float targetExpansion) {
final ValueAnimator animator =
mValueAnimatorCreator.create(mCurrentExpansion, targetExpansion);
animator.addUpdateListener(
animation -> {
float expansionFraction = (float) animation.getAnimatedValue();
- float dragDownAmount = expansionFraction * expansionHeight;
setPanelExpansion(expansionFraction);
});
- if (!mBouncerInitiallyShowing
- && targetExpansion == KeyguardBouncerConstants.EXPANSION_VISIBLE) {
+ if (targetExpansion == KeyguardBouncerConstants.EXPANSION_VISIBLE) {
animator.addListener(
new AnimatorListenerAdapter() {
@Override
@@ -381,8 +362,7 @@
final float viewHeight = mTouchSession.getBounds().height();
final float currentHeight = viewHeight * mCurrentExpansion;
final float targetHeight = viewHeight * expansion;
- final float expansionHeight = targetHeight - currentHeight;
- final ValueAnimator animator = createExpansionAnimator(expansion, expansionHeight);
+ final ValueAnimator animator = createExpansionAnimator(expansion);
if (expansion == KeyguardBouncerConstants.EXPANSION_HIDDEN) {
// Hides the bouncer, i.e., fully expands the space above the bouncer.
mFlingAnimationUtilsClosing.apply(animator, currentHeight, targetHeight, velocity,
diff --git a/packages/SystemUI/src/com/android/systemui/ambient/touch/ShadeTouchHandler.java b/packages/SystemUI/src/com/android/systemui/ambient/touch/ShadeTouchHandler.java
index 9ef9938..9c7fc9d 100644
--- a/packages/SystemUI/src/com/android/systemui/ambient/touch/ShadeTouchHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/ambient/touch/ShadeTouchHandler.java
@@ -23,7 +23,8 @@
import android.view.GestureDetector;
import android.view.MotionEvent;
-import com.android.systemui.shade.ShadeViewController;
+import androidx.annotation.NonNull;
+
import com.android.systemui.statusbar.phone.CentralSurfaces;
import java.util.Optional;
@@ -37,29 +38,34 @@
*/
public class ShadeTouchHandler implements TouchHandler {
private final Optional<CentralSurfaces> mSurfaces;
- private final ShadeViewController mShadeViewController;
private final int mInitiationHeight;
+ /**
+ * Tracks whether or not we are capturing a given touch. Will be null before and after a touch.
+ */
+ private Boolean mCapture;
+
@Inject
ShadeTouchHandler(Optional<CentralSurfaces> centralSurfaces,
- ShadeViewController shadeViewController,
@Named(NOTIFICATION_SHADE_GESTURE_INITIATION_HEIGHT) int initiationHeight) {
mSurfaces = centralSurfaces;
- mShadeViewController = shadeViewController;
mInitiationHeight = initiationHeight;
}
@Override
public void onSessionStart(TouchSession session) {
- if (mSurfaces.map(CentralSurfaces::isBouncerShowing).orElse(false)) {
+ if (mSurfaces.isEmpty()) {
session.pop();
return;
}
- session.registerInputListener(ev -> {
- mShadeViewController.handleExternalTouch((MotionEvent) ev);
+ session.registerCallback(() -> mCapture = null);
+ session.registerInputListener(ev -> {
if (ev instanceof MotionEvent) {
+ if (mCapture != null && mCapture) {
+ mSurfaces.get().handleExternalShadeWindowTouch((MotionEvent) ev);
+ }
if (((MotionEvent) ev).getAction() == MotionEvent.ACTION_UP) {
session.pop();
}
@@ -68,15 +74,25 @@
session.registerGestureListener(new GestureDetector.SimpleOnGestureListener() {
@Override
- public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
+ public boolean onScroll(MotionEvent e1, @NonNull MotionEvent e2, float distanceX,
float distanceY) {
- return true;
+ if (mCapture == null) {
+ // Only capture swipes that are going downwards.
+ mCapture = Math.abs(distanceY) > Math.abs(distanceX) && distanceY < 0;
+ if (mCapture) {
+ // Send the initial touches over, as the input listener has already
+ // processed these touches.
+ mSurfaces.get().handleExternalShadeWindowTouch(e1);
+ mSurfaces.get().handleExternalShadeWindowTouch(e2);
+ }
+ }
+ return mCapture;
}
@Override
- public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
+ public boolean onFling(MotionEvent e1, @NonNull MotionEvent e2, float velocityX,
float velocityY) {
- return true;
+ return mCapture;
}
});
}
diff --git a/packages/SystemUI/src/com/android/systemui/backup/BackupHelper.kt b/packages/SystemUI/src/com/android/systemui/backup/BackupHelper.kt
index a667de2..970699f 100644
--- a/packages/SystemUI/src/com/android/systemui/backup/BackupHelper.kt
+++ b/packages/SystemUI/src/com/android/systemui/backup/BackupHelper.kt
@@ -28,8 +28,9 @@
import android.os.UserHandle
import android.util.Log
import com.android.app.tracing.traceSection
-import com.android.systemui.Flags.communalHub
import com.android.systemui.backup.BackupHelper.Companion.ACTION_RESTORE_FINISHED
+import com.android.systemui.communal.data.backup.CommunalBackupHelper
+import com.android.systemui.communal.data.backup.CommunalBackupUtils
import com.android.systemui.communal.domain.backup.CommunalPrefsBackupHelper
import com.android.systemui.controls.controller.AuxiliaryPersistenceWrapper
import com.android.systemui.controls.controller.ControlsFavoritePersistenceWrapper
@@ -59,6 +60,7 @@
"systemui.keyguard.quickaffordance.shared_preferences"
private const val COMMUNAL_PREFS_BACKUP_KEY =
"systemui.communal.shared_preferences"
+ private const val COMMUNAL_STATE_BACKUP_KEY = "systemui.communal_state"
val controlsDataLock = Any()
const val ACTION_RESTORE_FINISHED = "com.android.systemui.backup.RESTORE_FINISHED"
const val PERMISSION_SELF = "com.android.systemui.permission.SELF"
@@ -89,6 +91,10 @@
userId = userHandle.identifier,
)
)
+ addHelper(
+ COMMUNAL_STATE_BACKUP_KEY,
+ CommunalBackupHelper(userHandle, CommunalBackupUtils(context = this)),
+ )
}
}
@@ -116,7 +122,7 @@
}
private fun communalEnabled(): Boolean {
- return resources.getBoolean(R.bool.config_communalServiceEnabled) && communalHub()
+ return resources.getBoolean(R.bool.config_communalServiceEnabled)
}
/**
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/data/repository/BiometricStatusRepository.kt b/packages/SystemUI/src/com/android/systemui/biometrics/data/repository/BiometricStatusRepository.kt
index 27bb023..cc52484 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/data/repository/BiometricStatusRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/data/repository/BiometricStatusRepository.kt
@@ -25,6 +25,15 @@
import android.hardware.biometrics.BiometricRequestConstants.REASON_ENROLL_ENROLLING
import android.hardware.biometrics.BiometricRequestConstants.REASON_ENROLL_FIND_SENSOR
import android.hardware.biometrics.BiometricSourceType
+import android.hardware.biometrics.events.AuthenticationAcquiredInfo
+import android.hardware.biometrics.events.AuthenticationErrorInfo
+import android.hardware.biometrics.events.AuthenticationFailedInfo
+import android.hardware.biometrics.events.AuthenticationHelpInfo
+import android.hardware.biometrics.events.AuthenticationStartedInfo
+import android.hardware.biometrics.events.AuthenticationStoppedInfo
+import android.hardware.biometrics.events.AuthenticationSucceededInfo
+import android.hardware.face.FaceManager
+import android.hardware.fingerprint.FingerprintManager
import com.android.systemui.biometrics.shared.model.AuthenticationReason
import com.android.systemui.biometrics.shared.model.AuthenticationReason.SettingsOperations
import com.android.systemui.biometrics.shared.model.AuthenticationState
@@ -39,6 +48,7 @@
import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.SharingStarted
+import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.filterIsInstance
import kotlinx.coroutines.flow.map
@@ -61,9 +71,17 @@
@Inject
constructor(
@Application private val applicationScope: CoroutineScope,
- private val biometricManager: BiometricManager?
+ private val biometricManager: BiometricManager?,
) : BiometricStatusRepository {
+ /**
+ * TODO(b/322555228): Replace usages of onAuthenticationError, onAuthenticationHelp,
+ * onAuthenticationSucceeded, onAuthenticationFailed, onAuthenticationAcquired in
+ * [FingerprintManager.AuthenticationCallback] and [FaceManager.AuthenticationCallback],
+ * onDetectionError in [FingerprintManager.FingerprintDetectionCallback] and
+ * [FaceManager.FaceDetectionCallback], and onEnrollmentError, onEnrollmentHelp, and
+ * onAcquired in [FingerprintManager.EnrollmentCallback] and [FaceManager.EnrollmentCallback]
+ */
private val authenticationState: Flow<AuthenticationState> =
conflatedCallbackFlow {
val updateAuthenticationState = { state: AuthenticationState ->
@@ -72,45 +90,83 @@
val authenticationStateListener =
object : AuthenticationStateListener.Stub() {
- override fun onAuthenticationStarted(requestReason: Int) {
- val authenticationReason = requestReason.toAuthenticationReason()
+ override fun onAuthenticationAcquired(
+ authInfo: AuthenticationAcquiredInfo
+ ) {
updateAuthenticationState(
- AuthenticationState.AuthenticationStarted(authenticationReason)
+ AuthenticationState.Acquired(
+ authInfo.biometricSourceType,
+ authInfo.requestReason.toAuthenticationReason(),
+ authInfo.acquiredInfo
+ )
)
}
- override fun onAuthenticationStopped() {
+ override fun onAuthenticationError(authInfo: AuthenticationErrorInfo) {
updateAuthenticationState(
- AuthenticationState.AuthenticationStopped(
+ AuthenticationState.Error(
+ authInfo.biometricSourceType,
+ authInfo.errString,
+ authInfo.errCode,
+ authInfo.requestReason.toAuthenticationReason()
+ )
+ )
+ }
+
+ override fun onAuthenticationFailed(authInfo: AuthenticationFailedInfo) {
+ updateAuthenticationState(
+ AuthenticationState.Failed(
+ authInfo.biometricSourceType,
+ authInfo.requestReason.toAuthenticationReason(),
+ authInfo.userId
+ )
+ )
+ }
+
+ override fun onAuthenticationHelp(authInfo: AuthenticationHelpInfo) {
+ updateAuthenticationState(
+ AuthenticationState.Help(
+ authInfo.biometricSourceType,
+ authInfo.helpString,
+ authInfo.helpCode,
+ authInfo.requestReason.toAuthenticationReason()
+ )
+ )
+ }
+
+ override fun onAuthenticationStarted(authInfo: AuthenticationStartedInfo) {
+ updateAuthenticationState(
+ AuthenticationState.Started(
+ authInfo.biometricSourceType,
+ authInfo.requestReason.toAuthenticationReason()
+ )
+ )
+ }
+
+ override fun onAuthenticationStopped(authInfo: AuthenticationStoppedInfo) {
+ updateAuthenticationState(
+ AuthenticationState.Stopped(
+ authInfo.biometricSourceType,
AuthenticationReason.NotRunning
)
)
}
- override fun onAuthenticationSucceeded(requestReason: Int, userId: Int) {}
-
- override fun onAuthenticationFailed(requestReason: Int, userId: Int) {}
-
- override fun onAuthenticationAcquired(
- biometricSourceType: BiometricSourceType,
- requestReason: Int,
- acquiredInfo: Int
+ override fun onAuthenticationSucceeded(
+ authInfo: AuthenticationSucceededInfo
) {
- val authReason = requestReason.toAuthenticationReason()
-
updateAuthenticationState(
- AuthenticationState.AuthenticationAcquired(
- biometricSourceType,
- authReason,
- acquiredInfo
+ AuthenticationState.Succeeded(
+ authInfo.biometricSourceType,
+ authInfo.isIsStrongBiometric,
+ authInfo.requestReason.toAuthenticationReason(),
+ authInfo.userId
)
)
}
}
- updateAuthenticationState(
- AuthenticationState.AuthenticationStarted(AuthenticationReason.NotRunning)
- )
+ updateAuthenticationState(AuthenticationState.Idle(AuthenticationReason.NotRunning))
biometricManager?.registerAuthenticationStateListener(authenticationStateListener)
awaitClose {
biometricManager?.unregisterAuthenticationStateListener(
@@ -118,21 +174,24 @@
)
}
}
+ .distinctUntilChanged()
.shareIn(applicationScope, started = SharingStarted.Eagerly, replay = 1)
override val fingerprintAuthenticationReason: Flow<AuthenticationReason> =
- authenticationState.map { it.requestReason }
+ authenticationState
+ .filter {
+ it is AuthenticationState.Idle ||
+ (it is AuthenticationState.Started &&
+ it.biometricSourceType == BiometricSourceType.FINGERPRINT) ||
+ (it is AuthenticationState.Stopped &&
+ it.biometricSourceType == BiometricSourceType.FINGERPRINT)
+ }
+ .map { it.requestReason }
override val fingerprintAcquiredStatus: Flow<FingerprintAuthenticationStatus> =
authenticationState
- .filterIsInstance<AuthenticationState.AuthenticationAcquired>()
- .filter {
- it.biometricSourceType == BiometricSourceType.FINGERPRINT &&
- // TODO(b/322555228) This check will be removed after consolidating device
- // entry auth messages (currently in DeviceEntryFingerprintAuthRepository)
- // with BP auth messages (here)
- it.requestReason == AuthenticationReason.BiometricPromptAuthentication
- }
+ .filterIsInstance<AuthenticationState.Acquired>()
+ .filter { it.biometricSourceType == BiometricSourceType.FINGERPRINT }
.map { AcquiredFingerprintAuthenticationStatus(it.requestReason, it.acquiredInfo) }
companion object {
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/data/repository/FacePropertyRepository.kt b/packages/SystemUI/src/com/android/systemui/biometrics/data/repository/FacePropertyRepository.kt
index 59b59bf..7d4ba84 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/data/repository/FacePropertyRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/data/repository/FacePropertyRepository.kt
@@ -39,6 +39,7 @@
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.dagger.qualifiers.Main
+import com.android.systemui.keyguard.shared.model.DevicePosture
import com.android.systemui.res.R
import java.util.concurrent.Executor
import javax.inject.Inject
@@ -68,6 +69,8 @@
/** The info of current available camera. */
val cameraInfo: StateFlow<CameraInfo?>
+
+ val supportedPostures: List<DevicePosture>
}
/** Describes a biometric sensor */
@@ -188,6 +191,15 @@
initialValue = if (cameraInfoList.isNotEmpty()) cameraInfoList[0] else null
)
+ private val supportedPosture =
+ applicationContext.resources.getInteger(R.integer.config_face_auth_supported_posture)
+ override val supportedPostures: List<DevicePosture> =
+ if (supportedPosture == 0) {
+ DevicePosture.entries
+ } else {
+ listOf(DevicePosture.toPosture(supportedPosture))
+ }
+
private val defaultSensorLocation: StateFlow<Point?> =
cameraInfo
.map { it?.cameraLocation }
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/domain/interactor/BiometricStatusInteractor.kt b/packages/SystemUI/src/com/android/systemui/biometrics/domain/interactor/BiometricStatusInteractor.kt
index c4967ec..6e79e46 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/domain/interactor/BiometricStatusInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/domain/interactor/BiometricStatusInteractor.kt
@@ -18,13 +18,14 @@
import android.app.ActivityTaskManager
import com.android.systemui.biometrics.data.repository.BiometricStatusRepository
+import com.android.systemui.biometrics.data.repository.FingerprintPropertyRepository
import com.android.systemui.biometrics.shared.model.AuthenticationReason
import com.android.systemui.biometrics.shared.model.AuthenticationReason.SettingsOperations
import com.android.systemui.keyguard.shared.model.FingerprintAuthenticationStatus
import javax.inject.Inject
import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.distinctUntilChanged
-import kotlinx.coroutines.flow.map
/** Encapsulates business logic for interacting with biometric authentication state. */
interface BiometricStatusInteractor {
@@ -43,12 +44,15 @@
constructor(
private val activityTaskManager: ActivityTaskManager,
biometricStatusRepository: BiometricStatusRepository,
+ fingerprintPropertyRepository: FingerprintPropertyRepository,
) : BiometricStatusInteractor {
override val sfpsAuthenticationReason: Flow<AuthenticationReason> =
- biometricStatusRepository.fingerprintAuthenticationReason.map { reason: AuthenticationReason
- ->
- if (reason.isReasonToAlwaysUpdateSfpsOverlay(activityTaskManager)) {
+ combine(
+ biometricStatusRepository.fingerprintAuthenticationReason,
+ fingerprintPropertyRepository.sensorType
+ ) { reason: AuthenticationReason, sensorType ->
+ if (sensorType.isPowerButton() && reason.isReasonToAlwaysUpdateSfpsOverlay(activityTaskManager)) {
reason
} else {
AuthenticationReason.NotRunning
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/shared/model/AuthenticationState.kt b/packages/SystemUI/src/com/android/systemui/biometrics/shared/model/AuthenticationState.kt
index 77cf840..5ceae36 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/shared/model/AuthenticationState.kt
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/shared/model/AuthenticationState.kt
@@ -16,6 +16,9 @@
package com.android.systemui.biometrics.shared.model
+import android.hardware.biometrics.BiometricFaceConstants
+import android.hardware.biometrics.BiometricFingerprintConstants
+import android.hardware.biometrics.BiometricRequestConstants
import android.hardware.biometrics.BiometricSourceType
/**
@@ -24,34 +27,113 @@
* authentication.
*/
sealed interface AuthenticationState {
+ /**
+ * Indicates [AuthenticationReason] from [BiometricRequestConstants.RequestReason] for
+ * requesting auth
+ */
val requestReason: AuthenticationReason
/**
- * Authentication started
- *
- * @param requestReason [AuthenticationReason] for starting authentication
- */
- data class AuthenticationStarted(override val requestReason: AuthenticationReason) :
- AuthenticationState
-
- /**
- * Authentication stopped
- *
- * @param requestReason [AuthenticationReason.NotRunning]
- */
- data class AuthenticationStopped(override val requestReason: AuthenticationReason) :
- AuthenticationState
-
- /**
- * Authentication acquired
+ * AuthenticationState when a biometric has been acquired.
*
* @param biometricSourceType indicates [BiometricSourceType] of acquired authentication
- * @param requestReason indicates [AuthenticationReason] for requesting auth
- * @param acquiredInfo indicates
+ * @param requestReason reason from [BiometricRequestConstants.RequestReason] for authentication
+ * @param acquiredInfo [BiometricFaceConstants.FaceAcquired] or
+ * [BiometricFingerprintConstants.FingerprintAcquired] int corresponding to a known acquired
+ * message.
*/
- data class AuthenticationAcquired(
+ data class Acquired(
val biometricSourceType: BiometricSourceType,
override val requestReason: AuthenticationReason,
val acquiredInfo: Int
) : AuthenticationState
+
+ /**
+ * AuthenticationState when an unrecoverable error is encountered during authentication.
+ *
+ * @param biometricSourceType identifies [BiometricSourceType] for auth error
+ * @param errString authentication error string shown on the UI
+ * @param errCode [BiometricFaceConstants.FaceError] or
+ * [BiometricFingerprintConstants.FingerprintError] int identifying the error message for an
+ * authentication error
+ * @param requestReason reason from [BiometricRequestConstants.RequestReason] for authentication
+ */
+ data class Error(
+ val biometricSourceType: BiometricSourceType,
+ val errString: String?,
+ val errCode: Int,
+ override val requestReason: AuthenticationReason,
+ ) : AuthenticationState
+
+ /**
+ * AuthenticationState when a biometric couldn't be authenticated.
+ *
+ * @param biometricSourceType identifies [BiometricSourceType] for failed auth
+ * @param requestReason reason from [BiometricRequestConstants.RequestReason] for authentication
+ * @param userId The user id for the requested authentication
+ */
+ data class Failed(
+ val biometricSourceType: BiometricSourceType,
+ override val requestReason: AuthenticationReason,
+ val userId: Int
+ ) : AuthenticationState
+
+ /**
+ * AuthenticationState when a recoverable error is encountered during authentication.
+ *
+ * @param biometricSourceType identifies [BiometricSourceType] for failed auth
+ * @param helpString helpString guidance help string shown on the UI
+ * @param helpCode An integer identifying the help message
+ * @param requestReason reason from [BiometricRequestConstants.RequestReason] for authentication
+ */
+ data class Help(
+ val biometricSourceType: BiometricSourceType,
+ val helpString: String?,
+ val helpCode: Int,
+ override val requestReason: AuthenticationReason,
+ ) : AuthenticationState
+
+ /**
+ * Authentication state when no auth is running
+ *
+ * @param requestReason [AuthenticationReason.NotRunning]
+ */
+ data class Idle(override val requestReason: AuthenticationReason) : AuthenticationState
+
+ /**
+ * AuthenticationState when auth is started
+ *
+ * @param biometricSourceType identifies [BiometricSourceType] for auth
+ * @param requestReason reason from [BiometricRequestConstants.RequestReason] for authentication
+ */
+ data class Started(
+ val biometricSourceType: BiometricSourceType,
+ override val requestReason: AuthenticationReason
+ ) : AuthenticationState
+
+ /**
+ * Authentication state when auth is stopped
+ *
+ * @param biometricSourceType identifies [BiometricSourceType] for auth stopped
+ * @param requestReason [AuthenticationReason.NotRunning]
+ */
+ data class Stopped(
+ val biometricSourceType: BiometricSourceType,
+ override val requestReason: AuthenticationReason
+ ) : AuthenticationState
+
+ /**
+ * AuthenticationState when a biometric is successfully authenticated.
+ *
+ * @param biometricSourceType identifies [BiometricSourceType] of successful auth
+ * @param isStrongBiometric indicates whether auth was from strong biometric
+ * @param requestReason reason from [BiometricRequestConstants.RequestReason] for authentication
+ * @param userId The user id for the requested authentication
+ */
+ data class Succeeded(
+ val biometricSourceType: BiometricSourceType,
+ val isStrongBiometric: Boolean,
+ override val requestReason: AuthenticationReason,
+ val userId: Int
+ ) : AuthenticationState
}
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/ui/viewmodel/SideFpsOverlayViewModel.kt b/packages/SystemUI/src/com/android/systemui/biometrics/ui/viewmodel/SideFpsOverlayViewModel.kt
index b72b1f3..412d0c3 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/ui/viewmodel/SideFpsOverlayViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/ui/viewmodel/SideFpsOverlayViewModel.kt
@@ -34,13 +34,13 @@
import com.android.systemui.biometrics.domain.interactor.DisplayStateInteractor
import com.android.systemui.biometrics.domain.interactor.SideFpsSensorInteractor
import com.android.systemui.biometrics.domain.model.SideFpsSensorLocation
-import com.android.systemui.biometrics.shared.model.AuthenticationReason
import com.android.systemui.biometrics.shared.model.DisplayRotation
import com.android.systemui.biometrics.shared.model.LottieCallback
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.keyguard.domain.interactor.DeviceEntrySideFpsOverlayInteractor
import com.android.systemui.keyguard.ui.viewmodel.SideFpsProgressBarViewModel
import com.android.systemui.res.R
+import com.android.systemui.util.kotlin.sample
import javax.inject.Inject
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.Flow
@@ -179,12 +179,9 @@
/** List of LottieCallbacks use for adding dynamic color to the overlayView */
val lottieCallbacks: Flow<List<LottieCallback>> =
- combine(
- biometricStatusInteractor.sfpsAuthenticationReason,
- deviceEntrySideFpsOverlayInteractor.showIndicatorForDeviceEntry,
- sideFpsProgressBarViewModel.isVisible
- ) { reason: AuthenticationReason, showIndicatorForDeviceEntry: Boolean, progressBarIsVisible
- ->
+ _lottieBounds.sample(deviceEntrySideFpsOverlayInteractor.showIndicatorForDeviceEntry) {
+ _,
+ showIndicatorForDeviceEntry: Boolean ->
val callbacks = mutableListOf<LottieCallback>()
if (showIndicatorForDeviceEntry) {
val indicatorColor =
diff --git a/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractor.kt b/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractor.kt
index dd71bc7..cb458ef 100644
--- a/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/bouncer/domain/interactor/BouncerInteractor.kt
@@ -95,7 +95,7 @@
/** The scene to show when bouncer is dismissed. */
val dismissDestination: Flow<SceneKey> =
- sceneInteractor.previousScene.map { it ?: Scenes.Lockscreen }
+ sceneInteractor.previousScene(Scenes.Bouncer).map { it ?: Scenes.Lockscreen }
/** Notifies that the user has places down a pointer, not necessarily dragging just yet. */
fun onDown() {
diff --git a/packages/SystemUI/src/com/android/systemui/communal/CommunalBackupRestoreStartable.kt b/packages/SystemUI/src/com/android/systemui/communal/CommunalBackupRestoreStartable.kt
new file mode 100644
index 0000000..cdeeb6f
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/communal/CommunalBackupRestoreStartable.kt
@@ -0,0 +1,83 @@
+/*
+ * 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.communal
+
+import android.appwidget.AppWidgetManager
+import android.content.BroadcastReceiver
+import android.content.Context
+import android.content.Intent
+import android.content.IntentFilter
+import com.android.systemui.CoreStartable
+import com.android.systemui.broadcast.BroadcastDispatcher
+import com.android.systemui.communal.domain.interactor.CommunalInteractor
+import com.android.systemui.communal.widgets.CommunalWidgetModule
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.log.LogBuffer
+import com.android.systemui.log.core.Logger
+import com.android.systemui.log.dagger.CommunalLog
+import javax.inject.Inject
+
+@SysUISingleton
+class CommunalBackupRestoreStartable
+@Inject
+constructor(
+ private val broadcastDispatcher: BroadcastDispatcher,
+ private val communalInteractor: CommunalInteractor,
+ @CommunalLog logBuffer: LogBuffer,
+) : CoreStartable, BroadcastReceiver() {
+
+ private val logger = Logger(logBuffer, TAG)
+
+ override fun start() {
+ broadcastDispatcher.registerReceiver(
+ receiver = this,
+ filter = IntentFilter(AppWidgetManager.ACTION_APPWIDGET_HOST_RESTORED),
+ )
+ }
+
+ override fun onReceive(context: Context?, intent: Intent?) {
+ if (intent == null) {
+ logger.w("On app widget host restored, but intent is null")
+ return
+ }
+
+ if (intent.action != AppWidgetManager.ACTION_APPWIDGET_HOST_RESTORED) {
+ return
+ }
+
+ val hostId = intent.getIntExtra(AppWidgetManager.EXTRA_HOST_ID, 0)
+ if (hostId != CommunalWidgetModule.APP_WIDGET_HOST_ID) {
+ return
+ }
+
+ val oldIds = intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_OLD_IDS)
+ val newIds = intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS)
+
+ if (oldIds == null || newIds == null || oldIds.size != newIds.size) {
+ logger.w("On app widget host restored, but old to new ids mapping is invalid")
+ communalInteractor.abortRestoreWidgets()
+ return
+ }
+
+ val oldToNewWidgetIdMap = oldIds.zip(newIds).toMap()
+ communalInteractor.restoreWidgets(oldToNewWidgetIdMap)
+ }
+
+ companion object {
+ const val TAG = "CommunalBackupRestoreStartable"
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/communal/CommunalSceneStartable.kt b/packages/SystemUI/src/com/android/systemui/communal/CommunalSceneStartable.kt
index 5a174b9..f437032 100644
--- a/packages/SystemUI/src/com/android/systemui/communal/CommunalSceneStartable.kt
+++ b/packages/SystemUI/src/com/android/systemui/communal/CommunalSceneStartable.kt
@@ -17,6 +17,7 @@
package com.android.systemui.communal
import android.provider.Settings
+import android.service.dreams.Flags.dreamTracksFocus
import com.android.compose.animation.scene.SceneKey
import com.android.systemui.CoreStartable
import com.android.systemui.communal.domain.interactor.CommunalInteractor
@@ -25,11 +26,13 @@
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.dagger.qualifiers.Background
+import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.dock.DockManager
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.keyguard.shared.model.TransitionStep
+import com.android.systemui.statusbar.NotificationShadeWindowController
import com.android.systemui.util.kotlin.emitOnStart
import com.android.systemui.util.kotlin.sample
import com.android.systemui.util.settings.SettingsProxyExt.observerFlow
@@ -37,15 +40,18 @@
import javax.inject.Inject
import kotlin.time.Duration.Companion.milliseconds
import kotlin.time.Duration.Companion.seconds
+import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.delay
+import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.mapLatest
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
/**
* A [CoreStartable] responsible for automatically navigating between communal scenes when certain
@@ -61,8 +67,10 @@
private val keyguardTransitionInteractor: KeyguardTransitionInteractor,
private val keyguardInteractor: KeyguardInteractor,
private val systemSettings: SystemSettings,
+ private val notificationShadeWindowController: NotificationShadeWindowController,
@Application private val applicationScope: CoroutineScope,
@Background private val bgScope: CoroutineScope,
+ @Main private val mainDispatcher: CoroutineDispatcher,
) : CoreStartable {
private var screenTimeout: Int = DEFAULT_SCREEN_TIMEOUT
@@ -134,6 +142,16 @@
}
}
}
+
+ if (dreamTracksFocus()) {
+ bgScope.launch {
+ communalInteractor.isIdleOnCommunal.collectLatest {
+ withContext(mainDispatcher) {
+ notificationShadeWindowController.setGlanceableHubShowing(it)
+ }
+ }
+ }
+ }
}
private suspend fun determineSceneAfterTransition(
diff --git a/packages/SystemUI/src/com/android/systemui/communal/dagger/CommunalModule.kt b/packages/SystemUI/src/com/android/systemui/communal/dagger/CommunalModule.kt
index 27af99e..7fa091a 100644
--- a/packages/SystemUI/src/com/android/systemui/communal/dagger/CommunalModule.kt
+++ b/packages/SystemUI/src/com/android/systemui/communal/dagger/CommunalModule.kt
@@ -16,6 +16,8 @@
package com.android.systemui.communal.dagger
+import android.content.Context
+import com.android.systemui.communal.data.backup.CommunalBackupUtils
import com.android.systemui.communal.data.db.CommunalDatabaseModule
import com.android.systemui.communal.data.repository.CommunalMediaRepositoryModule
import com.android.systemui.communal.data.repository.CommunalPrefsRepositoryModule
@@ -78,5 +80,13 @@
)
return SceneDataSourceDelegator(applicationScope, config)
}
+
+ @Provides
+ @SysUISingleton
+ fun providesCommunalBackupUtils(
+ @Application context: Context,
+ ): CommunalBackupUtils {
+ return CommunalBackupUtils(context)
+ }
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/communal/data/backup/CommunalBackupHelper.kt b/packages/SystemUI/src/com/android/systemui/communal/data/backup/CommunalBackupHelper.kt
new file mode 100644
index 0000000..b95c966
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/communal/data/backup/CommunalBackupHelper.kt
@@ -0,0 +1,114 @@
+/*
+ * 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.communal.data.backup
+
+import android.app.backup.BackupDataInputStream
+import android.app.backup.BackupDataOutput
+import android.app.backup.BackupHelper
+import android.os.ParcelFileDescriptor
+import android.os.UserHandle
+import android.util.Log
+import com.android.systemui.Flags.communalHub
+import com.android.systemui.communal.proto.toByteArray
+import java.io.IOException
+
+/** Helps with backup & restore of the communal hub widgets. */
+class CommunalBackupHelper(
+ private val userHandle: UserHandle,
+ private val communalBackupUtils: CommunalBackupUtils,
+) : BackupHelper {
+
+ override fun performBackup(
+ oldState: ParcelFileDescriptor?,
+ data: BackupDataOutput?,
+ newState: ParcelFileDescriptor?
+ ) {
+ if (!communalHub()) {
+ Log.d(TAG, "Skipping backup. Communal not enabled")
+ return
+ }
+
+ if (data == null) {
+ Log.e(TAG, "Backup failed. Data is null")
+ return
+ }
+
+ if (!userHandle.isSystem) {
+ Log.d(TAG, "Backup skipped for non-system user")
+ return
+ }
+
+ val state = communalBackupUtils.getCommunalHubState()
+ Log.i(TAG, "Backing up communal state: $state")
+
+ val bytes = state.toByteArray()
+ try {
+ data.writeEntityHeader(ENTITY_KEY, bytes.size)
+ data.writeEntityData(bytes, bytes.size)
+ } catch (e: IOException) {
+ Log.e(TAG, "Backup failed while writing data: ${e.localizedMessage}")
+ return
+ }
+
+ Log.i(TAG, "Backup complete")
+ }
+
+ override fun restoreEntity(data: BackupDataInputStream?) {
+ if (data == null) {
+ Log.e(TAG, "Restore failed. Data is null")
+ return
+ }
+
+ if (!userHandle.isSystem) {
+ Log.d(TAG, "Restore skipped for non-system user")
+ return
+ }
+
+ if (data.key != ENTITY_KEY) {
+ Log.d(TAG, "Restore skipped due to mismatching entity key")
+ return
+ }
+
+ val dataSize = data.size()
+ val bytes = ByteArray(dataSize)
+ try {
+ data.read(bytes, /* offset= */ 0, dataSize)
+ } catch (e: IOException) {
+ Log.e(TAG, "Restore failed while reading data: ${e.localizedMessage}")
+ return
+ }
+
+ try {
+ communalBackupUtils.writeBytesToDisk(bytes)
+ } catch (e: Exception) {
+ Log.e(TAG, "Restore failed while writing to disk: ${e.localizedMessage}")
+ return
+ }
+
+ Log.i(TAG, "Restore complete")
+ }
+
+ override fun writeNewStateDescription(newState: ParcelFileDescriptor?) {
+ // Do nothing because there is no partial backup
+ }
+
+ companion object {
+ private const val TAG = "CommunalBackupHelper"
+
+ const val ENTITY_KEY = "communal_hub_state"
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/communal/data/backup/CommunalBackupUtils.kt b/packages/SystemUI/src/com/android/systemui/communal/data/backup/CommunalBackupUtils.kt
new file mode 100644
index 0000000..a8e5174
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/communal/data/backup/CommunalBackupUtils.kt
@@ -0,0 +1,113 @@
+/*
+ * 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.communal.data.backup
+
+import android.content.Context
+import androidx.annotation.WorkerThread
+import com.android.systemui.communal.data.db.CommunalDatabase
+import com.android.systemui.communal.nano.CommunalHubState
+import java.io.File
+import java.io.FileInputStream
+import java.io.FileNotFoundException
+import java.io.FileOutputStream
+import java.io.IOException
+import kotlinx.coroutines.flow.first
+import kotlinx.coroutines.runBlocking
+
+/** Utilities for communal backup and restore. */
+class CommunalBackupUtils(
+ private val context: Context,
+) {
+
+ /**
+ * Retrieves a communal hub state protobuf that represents the current state of the communal
+ * database.
+ */
+ @WorkerThread
+ fun getCommunalHubState(): CommunalHubState {
+ val database = CommunalDatabase.getInstance(context)
+ val widgetsFromDb = runBlocking { database.communalWidgetDao().getWidgets().first() }
+ val widgetsState = mutableListOf<CommunalHubState.CommunalWidgetItem>()
+ widgetsFromDb.keys.forEach { rankItem ->
+ widgetsState.add(
+ CommunalHubState.CommunalWidgetItem().apply {
+ rank = rankItem.rank
+ widgetId = widgetsFromDb[rankItem]!!.widgetId
+ componentName = widgetsFromDb[rankItem]?.componentName
+ }
+ )
+ }
+ return CommunalHubState().apply { widgets = widgetsState.toTypedArray() }
+ }
+
+ /**
+ * Writes [data] to disk as a file as [FILE_NAME], overwriting existing content if any.
+ *
+ * @throws FileNotFoundException if the file exists but is a directory rather than a regular
+ * file, does not exist but cannot be created, or cannot be opened for any other reason.
+ * @throws SecurityException if write access is denied.
+ * @throws IOException if writing fails.
+ */
+ @WorkerThread
+ fun writeBytesToDisk(data: ByteArray) {
+ val output = FileOutputStream(getFile())
+ output.write(data)
+ output.close()
+ }
+
+ /**
+ * Reads bytes from [FILE_NAME], and throws if file does not exist.
+ *
+ * @throws FileNotFoundException if file does not exist.
+ * @throws SecurityException if read access is denied.
+ * @throws IOException if reading fails.
+ */
+ @WorkerThread
+ fun readBytesFromDisk(): ByteArray {
+ val input = FileInputStream(getFile())
+ val bytes = input.readAllBytes()
+ input.close()
+
+ return bytes
+ }
+
+ /**
+ * Removes the bytes written to disk at [FILE_NAME].
+ *
+ * @return True if and only if the file is successfully deleted
+ * @throws SecurityException if permission is denied
+ */
+ @WorkerThread
+ fun clear(): Boolean {
+ return getFile().delete()
+ }
+
+ /** Whether [FILE_NAME] exists. */
+ @WorkerThread
+ fun fileExists(): Boolean {
+ return getFile().exists()
+ }
+
+ @WorkerThread
+ private fun getFile(): File {
+ return File(context.filesDir, FILE_NAME)
+ }
+
+ companion object {
+ private const val FILE_NAME = "communal_restore"
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/communal/data/db/CommunalDatabase.kt b/packages/SystemUI/src/com/android/systemui/communal/data/db/CommunalDatabase.kt
index 595d320..3ce8109 100644
--- a/packages/SystemUI/src/com/android/systemui/communal/data/db/CommunalDatabase.kt
+++ b/packages/SystemUI/src/com/android/systemui/communal/data/db/CommunalDatabase.kt
@@ -16,10 +16,53 @@
package com.android.systemui.communal.data.db
+import android.content.Context
+import androidx.annotation.VisibleForTesting
import androidx.room.Database
+import androidx.room.Room
import androidx.room.RoomDatabase
+import com.android.systemui.res.R
@Database(entities = [CommunalWidgetItem::class, CommunalItemRank::class], version = 1)
abstract class CommunalDatabase : RoomDatabase() {
abstract fun communalWidgetDao(): CommunalWidgetDao
+
+ companion object {
+ private var instance: CommunalDatabase? = null
+
+ /**
+ * Gets a singleton instance of the communal database. If this is called for the first time
+ * globally, a new instance is created.
+ *
+ * @param context The context the database is created in. Only effective when a new instance
+ * is created.
+ * @param callback An optional callback registered to the database. Only effective when a
+ * new instance is created.
+ */
+ fun getInstance(
+ context: Context,
+ callback: Callback? = null,
+ ): CommunalDatabase {
+ if (instance == null) {
+ instance =
+ Room.databaseBuilder(
+ context,
+ CommunalDatabase::class.java,
+ context.resources.getString(R.string.config_communalDatabase)
+ )
+ .also { builder ->
+ builder.fallbackToDestructiveMigration(dropAllTables = false)
+ callback?.let { callback -> builder.addCallback(callback) }
+ }
+ .build()
+ }
+
+ return instance!!
+ }
+
+ @VisibleForTesting
+ fun setInstance(database: CommunalDatabase) {
+ instance = database
+ }
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/communal/data/db/CommunalDatabaseModule.kt b/packages/SystemUI/src/com/android/systemui/communal/data/db/CommunalDatabaseModule.kt
index e766290..b8161fd 100644
--- a/packages/SystemUI/src/com/android/systemui/communal/data/db/CommunalDatabaseModule.kt
+++ b/packages/SystemUI/src/com/android/systemui/communal/data/db/CommunalDatabaseModule.kt
@@ -17,10 +17,8 @@
package com.android.systemui.communal.data.db
import android.content.Context
-import androidx.room.Room
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
-import com.android.systemui.res.R
import dagger.Module
import dagger.Provides
@@ -33,14 +31,7 @@
@Application context: Context,
defaultWidgetPopulation: DefaultWidgetPopulation,
): CommunalDatabase {
- return Room.databaseBuilder(
- context,
- CommunalDatabase::class.java,
- context.resources.getString(R.string.config_communalDatabase)
- )
- .fallbackToDestructiveMigration()
- .addCallback(defaultWidgetPopulation)
- .build()
+ return CommunalDatabase.getInstance(context, defaultWidgetPopulation)
}
@SysUISingleton
diff --git a/packages/SystemUI/src/com/android/systemui/communal/data/db/CommunalWidgetDao.kt b/packages/SystemUI/src/com/android/systemui/communal/data/db/CommunalWidgetDao.kt
index 9cd77c4..d174fd1 100644
--- a/packages/SystemUI/src/com/android/systemui/communal/data/db/CommunalWidgetDao.kt
+++ b/packages/SystemUI/src/com/android/systemui/communal/data/db/CommunalWidgetDao.kt
@@ -23,6 +23,7 @@
import androidx.room.RoomDatabase
import androidx.room.Transaction
import androidx.sqlite.db.SupportSQLiteDatabase
+import com.android.systemui.communal.nano.CommunalHubState
import com.android.systemui.communal.widgets.CommunalWidgetHost
import com.android.systemui.communal.widgets.CommunalWidgetModule.Companion.DEFAULT_WIDGETS
import com.android.systemui.dagger.qualifiers.Application
@@ -116,6 +117,10 @@
@Query("UPDATE communal_item_rank_table SET rank = :order WHERE uid = :itemUid")
fun updateItemRank(itemUid: Long, order: Int)
+ @Query("DELETE FROM communal_widget_table") fun clearCommunalWidgetsTable()
+
+ @Query("DELETE FROM communal_item_rank_table") fun clearCommunalItemRankTable()
+
@Transaction
fun updateWidgetOrder(widgetIdToPriorityMap: Map<Int, Int>) {
widgetIdToPriorityMap.forEach { (id, priority) ->
@@ -128,9 +133,18 @@
@Transaction
fun addWidget(widgetId: Int, provider: ComponentName, priority: Int): Long {
- return insertWidget(
+ return addWidget(
widgetId = widgetId,
componentName = provider.flattenToString(),
+ priority = priority,
+ )
+ }
+
+ @Transaction
+ fun addWidget(widgetId: Int, componentName: String, priority: Int): Long {
+ return insertWidget(
+ widgetId = widgetId,
+ componentName = componentName,
itemId = insertItemRank(priority),
)
}
@@ -145,4 +159,13 @@
deleteWidgets(widget)
return true
}
+
+ /** Wipes current database and restores the snapshot represented by [state]. */
+ @Transaction
+ fun restoreCommunalHubState(state: CommunalHubState) {
+ clearCommunalWidgetsTable()
+ clearCommunalItemRankTable()
+
+ state.widgets.forEach { addWidget(it.widgetId, it.componentName, it.rank) }
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/communal/data/repository/CommunalWidgetRepository.kt b/packages/SystemUI/src/com/android/systemui/communal/data/repository/CommunalWidgetRepository.kt
index e395ca9..1f54e70 100644
--- a/packages/SystemUI/src/com/android/systemui/communal/data/repository/CommunalWidgetRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/communal/data/repository/CommunalWidgetRepository.kt
@@ -16,13 +16,17 @@
package com.android.systemui.communal.data.repository
+import android.app.backup.BackupManager
import android.appwidget.AppWidgetManager
import android.content.ComponentName
import android.os.UserHandle
import androidx.annotation.WorkerThread
+import com.android.systemui.communal.data.backup.CommunalBackupUtils
import com.android.systemui.communal.data.db.CommunalItemRank
import com.android.systemui.communal.data.db.CommunalWidgetDao
import com.android.systemui.communal.data.db.CommunalWidgetItem
+import com.android.systemui.communal.nano.CommunalHubState
+import com.android.systemui.communal.proto.toCommunalHubState
import com.android.systemui.communal.shared.model.CommunalWidgetContentModel
import com.android.systemui.communal.widgets.CommunalAppWidgetHost
import com.android.systemui.communal.widgets.CommunalWidgetHost
@@ -69,6 +73,15 @@
* @param widgetIdToPriorityMap mapping of the widget ids to the priority of the widget.
*/
fun updateWidgetOrder(widgetIdToPriorityMap: Map<Int, Int>) {}
+
+ /**
+ * Restores the database by reading a state file from disk and updating the widget ids according
+ * to [oldToNewWidgetIdMap].
+ */
+ fun restoreWidgets(oldToNewWidgetIdMap: Map<Int, Int>)
+
+ /** Aborts the restore process and removes files from disk if necessary. */
+ fun abortRestoreWidgets()
}
@SysUISingleton
@@ -82,6 +95,8 @@
private val communalWidgetHost: CommunalWidgetHost,
private val communalWidgetDao: CommunalWidgetDao,
@CommunalLog logBuffer: LogBuffer,
+ private val backupManager: BackupManager,
+ private val backupUtils: CommunalBackupUtils,
) : CommunalWidgetRepository {
companion object {
const val TAG = "CommunalWidgetRepository"
@@ -143,6 +158,7 @@
provider = provider,
priority = priority,
)
+ backupManager.dataChanged()
} else {
appWidgetHost.deleteAppWidgetId(id)
}
@@ -155,6 +171,7 @@
if (communalWidgetDao.deleteWidgetById(widgetId)) {
appWidgetHost.deleteAppWidgetId(widgetId)
logger.i("Deleted widget with id $widgetId.")
+ backupManager.dataChanged()
}
}
}
@@ -165,6 +182,76 @@
logger.i({ "Updated the order of widget list with ids: $str1." }) {
str1 = widgetIdToPriorityMap.toString()
}
+ backupManager.dataChanged()
+ }
+ }
+
+ override fun restoreWidgets(oldToNewWidgetIdMap: Map<Int, Int>) {
+ bgScope.launch {
+ // Read restored state file from disk
+ val state: CommunalHubState
+ try {
+ state = backupUtils.readBytesFromDisk().toCommunalHubState()
+ } catch (e: Exception) {
+ logger.e({ "Failed reading restore data from disk: $str1" }) {
+ str1 = e.localizedMessage
+ }
+ abortRestoreWidgets()
+ return@launch
+ }
+
+ val widgetsWithHost = appWidgetHost.appWidgetIds.toList()
+ val widgetsToRemove = widgetsWithHost.toMutableList()
+
+ // Produce a new state to be restored, skipping invalid widgets
+ val newWidgets =
+ state.widgets.mapNotNull { restoredWidget ->
+ val newWidgetId =
+ oldToNewWidgetIdMap[restoredWidget.widgetId] ?: restoredWidget.widgetId
+
+ // Skip if widget id is not registered with the host
+ if (!widgetsWithHost.contains(newWidgetId)) {
+ logger.d({
+ "Skipped restoring widget (old:$int1 new:$int2) " +
+ "because it is not registered with host"
+ }) {
+ int1 = restoredWidget.widgetId
+ int2 = newWidgetId
+ }
+ return@mapNotNull null
+ }
+
+ widgetsToRemove.remove(newWidgetId)
+
+ CommunalHubState.CommunalWidgetItem().apply {
+ widgetId = newWidgetId
+ componentName = restoredWidget.componentName
+ rank = restoredWidget.rank
+ }
+ }
+ val newState = CommunalHubState().apply { widgets = newWidgets.toTypedArray() }
+
+ // Restore database
+ logger.i("Restoring communal database $newState")
+ communalWidgetDao.restoreCommunalHubState(newState)
+
+ // Delete restored state file from disk
+ backupUtils.clear()
+
+ // Remove widgets from host that have not been restored
+ widgetsToRemove.forEach { widgetId ->
+ logger.i({ "Deleting widget $int1 from host since it has not been restored" }) {
+ int1 = widgetId
+ }
+ appWidgetHost.deleteAppWidgetId(widgetId)
+ }
+ }
+ }
+
+ override fun abortRestoreWidgets() {
+ bgScope.launch {
+ logger.i("Restore widgets aborted")
+ backupUtils.clear()
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/communal/domain/interactor/CommunalInteractor.kt b/packages/SystemUI/src/com/android/systemui/communal/domain/interactor/CommunalInteractor.kt
index 619e052..7448e14 100644
--- a/packages/SystemUI/src/com/android/systemui/communal/domain/interactor/CommunalInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/communal/domain/interactor/CommunalInteractor.kt
@@ -170,6 +170,23 @@
}
/**
+ * Repopulates the communal widgets database by first reading a backed-up state from disk and
+ * updating the widget ids indicated by [oldToNewWidgetIdMap]. The backed-up state is removed
+ * from disk afterwards.
+ */
+ fun restoreWidgets(oldToNewWidgetIdMap: Map<Int, Int>) {
+ widgetRepository.restoreWidgets(oldToNewWidgetIdMap)
+ }
+
+ /**
+ * Aborts the task of restoring widgets from a backup. The backed up state stored on disk is
+ * removed.
+ */
+ fun abortRestoreWidgets() {
+ widgetRepository.abortRestoreWidgets()
+ }
+
+ /**
* Updates the transition state of the hub [SceneTransitionLayout].
*
* Note that you must call is with `null` when the UI is done or risk a memory leak.
diff --git a/packages/SystemUI/src/com/android/systemui/communal/proto/CommunalHubStateExt.kt b/packages/SystemUI/src/com/android/systemui/communal/proto/CommunalHubStateExt.kt
new file mode 100644
index 0000000..2d661cd
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/communal/proto/CommunalHubStateExt.kt
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.communal.proto
+
+import com.android.systemui.communal.nano.CommunalHubState
+import com.google.protobuf.nano.InvalidProtocolBufferNanoException
+
+/** Converts a [CommunalHubState] to bytes. */
+fun CommunalHubState.toByteArray(): ByteArray {
+ return CommunalHubState.toByteArray(this)
+}
+
+/**
+ * Converts bytes to a [CommunalHubState].
+ *
+ * @throws InvalidProtocolBufferNanoException if parsing fails.
+ */
+fun ByteArray.toCommunalHubState(): CommunalHubState {
+ return CommunalHubState.parseFrom(this)
+}
diff --git a/packages/SystemUI/src/com/android/systemui/communal/proto/communal_hub_state.proto b/packages/SystemUI/src/com/android/systemui/communal/proto/communal_hub_state.proto
new file mode 100644
index 0000000..0816259
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/communal/proto/communal_hub_state.proto
@@ -0,0 +1,39 @@
+/*
+ * 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.
+ */
+
+syntax = "proto3";
+
+package com.android.systemui.communal;
+
+option java_multiple_files = true;
+
+// Represents the state of communal hub for backup & restore.
+message CommunalHubState {
+ // Widgets in the communal hub.
+ repeated CommunalWidgetItem widgets = 1;
+
+ // Represents a widget in the communal hub.
+ message CommunalWidgetItem {
+ // Id of the widget.
+ int32 widget_id = 1;
+
+ // Component name of the widget.
+ string component_name = 2;
+
+ // Rank or order of the widget in the communal hub.
+ int32 rank = 3;
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/communal/ui/viewmodel/BaseCommunalViewModel.kt b/packages/SystemUI/src/com/android/systemui/communal/ui/viewmodel/BaseCommunalViewModel.kt
index 71d719d..4ac43bc 100644
--- a/packages/SystemUI/src/com/android/systemui/communal/ui/viewmodel/BaseCommunalViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/communal/ui/viewmodel/BaseCommunalViewModel.kt
@@ -20,6 +20,7 @@
import android.os.UserHandle
import com.android.compose.animation.scene.ObservableTransitionState
import com.android.compose.animation.scene.SceneKey
+import com.android.compose.animation.scene.TransitionKey
import com.android.systemui.communal.domain.interactor.CommunalInteractor
import com.android.systemui.communal.domain.model.CommunalContentModel
import com.android.systemui.communal.widgets.WidgetConfigurator
@@ -52,8 +53,8 @@
communalInteractor.signalUserInteraction()
}
- fun changeScene(scene: SceneKey) {
- communalInteractor.changeScene(scene)
+ fun changeScene(scene: SceneKey, transitionKey: TransitionKey? = null) {
+ communalInteractor.changeScene(scene, transitionKey)
}
/**
diff --git a/packages/SystemUI/src/com/android/systemui/communal/ui/viewmodel/CommunalViewModel.kt b/packages/SystemUI/src/com/android/systemui/communal/ui/viewmodel/CommunalViewModel.kt
index c73d738..f13b5759 100644
--- a/packages/SystemUI/src/com/android/systemui/communal/ui/viewmodel/CommunalViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/communal/ui/viewmodel/CommunalViewModel.kt
@@ -30,7 +30,6 @@
import com.android.systemui.media.controls.ui.view.MediaHostState
import com.android.systemui.media.dagger.MediaModule
import com.android.systemui.shade.domain.interactor.ShadeInteractor
-import com.android.systemui.util.kotlin.BooleanFlowOperators.not
import javax.inject.Inject
import javax.inject.Named
import kotlinx.coroutines.CoroutineScope
@@ -57,7 +56,7 @@
@Application private val scope: CoroutineScope,
private val communalInteractor: CommunalInteractor,
tutorialInteractor: CommunalTutorialInteractor,
- shadeInteractor: ShadeInteractor,
+ private val shadeInteractor: ShadeInteractor,
deviceEntryInteractor: DeviceEntryInteractor,
@Named(MediaModule.COMMUNAL_HUB) mediaHost: MediaHost,
@CommunalLog logBuffer: LogBuffer,
@@ -103,9 +102,6 @@
val isEnableWorkProfileDialogShowing: Flow<Boolean> =
_isEnableWorkProfileDialogShowing.asStateFlow()
- /** Whether touches should be disabled in communal */
- val touchesAllowed: Flow<Boolean> = not(shadeInteractor.isAnyFullyExpanded)
-
val deviceUnlocked: Flow<Boolean> = deviceEntryInteractor.isUnlocked
init {
@@ -192,6 +188,11 @@
delayedHidePopupJob = null
}
+ /** Whether we can transition to a new scene based on a user gesture. */
+ fun canChangeScene(): Boolean {
+ return !shadeInteractor.isAnyFullyExpanded.value
+ }
+
companion object {
const val POPUP_AUTO_HIDE_TIMEOUT_MS = 12000L
}
diff --git a/packages/SystemUI/src/com/android/systemui/communal/widgets/CommunalWidgetModule.kt b/packages/SystemUI/src/com/android/systemui/communal/widgets/CommunalWidgetModule.kt
index 60fb8d4..aa6516d 100644
--- a/packages/SystemUI/src/com/android/systemui/communal/widgets/CommunalWidgetModule.kt
+++ b/packages/SystemUI/src/com/android/systemui/communal/widgets/CommunalWidgetModule.kt
@@ -38,7 +38,7 @@
@Module
interface CommunalWidgetModule {
companion object {
- private const val APP_WIDGET_HOST_ID = 116
+ const val APP_WIDGET_HOST_ID = 116
const val DEFAULT_WIDGETS = "default_widgets"
@SysUISingleton
diff --git a/packages/SystemUI/src/com/android/systemui/communal/widgets/EditWidgetsActivity.kt b/packages/SystemUI/src/com/android/systemui/communal/widgets/EditWidgetsActivity.kt
index 5f4b394..f20fafc 100644
--- a/packages/SystemUI/src/com/android/systemui/communal/widgets/EditWidgetsActivity.kt
+++ b/packages/SystemUI/src/com/android/systemui/communal/widgets/EditWidgetsActivity.kt
@@ -36,6 +36,7 @@
import com.android.internal.logging.UiEventLogger
import com.android.systemui.communal.shared.log.CommunalUiEvent
import com.android.systemui.communal.shared.model.CommunalScenes
+import com.android.systemui.communal.shared.model.CommunalTransitionKeys
import com.android.systemui.communal.ui.compose.CommunalHub
import com.android.systemui.communal.ui.viewmodel.CommunalEditModeViewModel
import com.android.systemui.communal.util.WidgetPickerIntentUtils.getWidgetExtraFromIntent
@@ -149,7 +150,10 @@
private fun onEditDone() {
try {
- communalViewModel.changeScene(CommunalScenes.Communal)
+ communalViewModel.changeScene(
+ CommunalScenes.Communal,
+ CommunalTransitionKeys.SimpleFade
+ )
checkNotNull(windowManagerService).lockNow(/* options */ null)
finish()
} catch (e: RemoteException) {
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/SysUIComponent.java b/packages/SystemUI/src/com/android/systemui/dagger/SysUIComponent.java
index e104166..1dd3722 100644
--- a/packages/SystemUI/src/com/android/systemui/dagger/SysUIComponent.java
+++ b/packages/SystemUI/src/com/android/systemui/dagger/SysUIComponent.java
@@ -25,6 +25,7 @@
import com.android.systemui.dump.DumpManager;
import com.android.systemui.keyguard.KeyguardSliceProvider;
import com.android.systemui.people.PeopleProvider;
+import com.android.systemui.startable.Dependencies;
import com.android.systemui.statusbar.NotificationInsetsModule;
import com.android.systemui.statusbar.QsFrameTranslateModule;
import com.android.systemui.statusbar.policy.ConfigurationController;
@@ -47,6 +48,7 @@
import java.util.Map;
import java.util.Optional;
+import java.util.Set;
import javax.inject.Provider;
@@ -92,7 +94,7 @@
Builder setTaskViewFactory(Optional<TaskViewFactory> t);
@BindsInstance
- Builder setTransitions(ShellTransitions t);
+ Builder setShellTransitions(ShellTransitions t);
@BindsInstance
Builder setKeyguardTransitions(KeyguardTransitions k);
@@ -160,6 +162,11 @@
@PerUser Map<Class<?>, Provider<CoreStartable>> getPerUserStartables();
/**
+ * Returns {@link CoreStartable} dependencies if there are any.
+ */
+ @Dependencies Map<Class<?>, Set<Class<? extends CoreStartable>>> getStartableDependencies();
+
+ /**
* Member injection into the supplied argument.
*/
void inject(SystemUIAppComponentFactoryBase factory);
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/SystemUICoreStartableModule.kt b/packages/SystemUI/src/com/android/systemui/dagger/SystemUICoreStartableModule.kt
index 23fc8ac..593196c 100644
--- a/packages/SystemUI/src/com/android/systemui/dagger/SystemUICoreStartableModule.kt
+++ b/packages/SystemUI/src/com/android/systemui/dagger/SystemUICoreStartableModule.kt
@@ -25,6 +25,7 @@
import com.android.systemui.biometrics.BiometricNotificationService
import com.android.systemui.clipboardoverlay.ClipboardListener
import com.android.systemui.communal.CommunalDreamStartable
+import com.android.systemui.communal.CommunalBackupRestoreStartable
import com.android.systemui.communal.CommunalSceneStartable
import com.android.systemui.communal.log.CommunalLoggerStartable
import com.android.systemui.communal.widgets.CommunalAppWidgetHostStartable
@@ -342,6 +343,13 @@
@Binds
@IntoMap
+ @ClassKey(CommunalBackupRestoreStartable::class)
+ abstract fun bindCommunalBackupRestoreStartable(
+ impl: CommunalBackupRestoreStartable
+ ): CoreStartable
+
+ @Binds
+ @IntoMap
@ClassKey(HomeControlsDreamStartable::class)
abstract fun bindHomeControlsDreamStartable(impl: HomeControlsDreamStartable): CoreStartable
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java
index 6b85d30..3462164 100644
--- a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java
+++ b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java
@@ -18,6 +18,7 @@
import android.app.INotificationManager;
import android.app.Service;
+import android.app.backup.BackupManager;
import android.content.Context;
import android.service.dreams.IDreamManager;
@@ -29,6 +30,7 @@
import com.android.systemui.BootCompleteCache;
import com.android.systemui.BootCompleteCacheImpl;
import com.android.systemui.CameraProtectionModule;
+import com.android.systemui.CoreStartable;
import com.android.systemui.SystemUISecondaryUserService;
import com.android.systemui.accessibility.AccessibilityModule;
import com.android.systemui.accessibility.data.repository.AccessibilityRepositoryModule;
@@ -105,6 +107,7 @@
import com.android.systemui.shade.transition.LargeScreenShadeInterpolatorImpl;
import com.android.systemui.shared.condition.Monitor;
import com.android.systemui.smartspace.dagger.SmartspaceModule;
+import com.android.systemui.startable.Dependencies;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.NotificationLockscreenUserManager;
import com.android.systemui.statusbar.NotificationShadeWindowController;
@@ -162,11 +165,14 @@
import dagger.Provides;
import dagger.multibindings.ClassKey;
import dagger.multibindings.IntoMap;
+import dagger.multibindings.Multibinds;
import kotlinx.coroutines.CoroutineScope;
import java.util.Collections;
+import java.util.Map;
import java.util.Optional;
+import java.util.Set;
import java.util.concurrent.Executor;
import javax.inject.Named;
@@ -270,6 +276,10 @@
})
public abstract class SystemUIModule {
+ @Multibinds
+ @Dependencies
+ abstract Map<Class<?>, Set<Class<? extends CoreStartable>>> startableDependencyMap();
+
@Binds
abstract BootCompleteCache bindBootCompleteCache(BootCompleteCacheImpl bootCompleteCache);
@@ -309,6 +319,13 @@
return new Monitor(executor, Collections.singleton(systemProcessCondition), logBuffer);
}
+ /** Provides the package name for SystemUI. */
+ @SysUISingleton
+ @Provides
+ static BackupManager provideBackupManager(@Application Context context) {
+ return new BackupManager(context);
+ }
+
@BindsOptionalOf
abstract CommandQueue optionalCommandQueue();
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/WMComponent.java b/packages/SystemUI/src/com/android/systemui/dagger/WMComponent.java
index e04a0e5..a3cdb2e 100644
--- a/packages/SystemUI/src/com/android/systemui/dagger/WMComponent.java
+++ b/packages/SystemUI/src/com/android/systemui/dagger/WMComponent.java
@@ -94,7 +94,7 @@
Optional<TaskViewFactory> getTaskViewFactory();
@WMSingleton
- ShellTransitions getTransitions();
+ ShellTransitions getShellTransitions();
@WMSingleton
KeyguardTransitions getKeyguardTransitions();
diff --git a/packages/SystemUI/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryFaceAuthInteractor.kt b/packages/SystemUI/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryFaceAuthInteractor.kt
index 7733de4..a32b2aa 100644
--- a/packages/SystemUI/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryFaceAuthInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryFaceAuthInteractor.kt
@@ -68,6 +68,7 @@
fun onPrimaryBouncerUserInput()
fun onAccessibilityAction()
fun onWalletLaunched()
+ fun onDeviceUnfolded()
/** Whether face auth is considered class 3 */
fun isFaceAuthStrong(): Boolean
diff --git a/packages/SystemUI/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryInteractor.kt b/packages/SystemUI/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryInteractor.kt
index 5c1ca64..662974d 100644
--- a/packages/SystemUI/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryInteractor.kt
@@ -19,6 +19,7 @@
import androidx.annotation.VisibleForTesting
import com.android.systemui.authentication.domain.interactor.AuthenticationInteractor
import com.android.systemui.authentication.shared.model.AuthenticationMethodModel
+import com.android.systemui.bouncer.domain.interactor.AlternateBouncerInteractor
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.deviceentry.data.repository.DeviceEntryRepository
@@ -63,6 +64,7 @@
private val trustInteractor: TrustInteractor,
private val deviceUnlockedInteractor: DeviceUnlockedInteractor,
private val systemPropertiesHelper: SystemPropertiesHelper,
+ private val alternateBouncerInteractor: AlternateBouncerInteractor,
) {
/**
* Whether the device is unlocked.
@@ -211,10 +213,14 @@
// 4. Transition to bouncer scene
applicationScope.launch {
if (isAuthenticationRequired()) {
- sceneInteractor.changeScene(
- toScene = Scenes.Bouncer,
- loggingReason = "request to unlock device while authentication required",
- )
+ if (alternateBouncerInteractor.canShowAlternateBouncer.value) {
+ alternateBouncerInteractor.forceShow()
+ } else {
+ sceneInteractor.changeScene(
+ toScene = Scenes.Bouncer,
+ loggingReason = "request to unlock device while authentication required",
+ )
+ }
} else {
sceneInteractor.changeScene(
toScene = Scenes.Gone,
diff --git a/packages/SystemUI/src/com/android/systemui/deviceentry/domain/interactor/NoopDeviceEntryFaceAuthInteractor.kt b/packages/SystemUI/src/com/android/systemui/deviceentry/domain/interactor/NoopDeviceEntryFaceAuthInteractor.kt
index 65f3eb7..6629f6e 100644
--- a/packages/SystemUI/src/com/android/systemui/deviceentry/domain/interactor/NoopDeviceEntryFaceAuthInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/deviceentry/domain/interactor/NoopDeviceEntryFaceAuthInteractor.kt
@@ -66,4 +66,5 @@
override fun onPrimaryBouncerUserInput() {}
override fun onAccessibilityAction() {}
override fun onWalletLaunched() = Unit
+ override fun onDeviceUnfolded() {}
}
diff --git a/packages/SystemUI/src/com/android/systemui/deviceentry/domain/interactor/SystemUIDeviceEntryFaceAuthInteractor.kt b/packages/SystemUI/src/com/android/systemui/deviceentry/domain/interactor/SystemUIDeviceEntryFaceAuthInteractor.kt
index 03819ed..6c6683a 100644
--- a/packages/SystemUI/src/com/android/systemui/deviceentry/domain/interactor/SystemUIDeviceEntryFaceAuthInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/deviceentry/domain/interactor/SystemUIDeviceEntryFaceAuthInteractor.kt
@@ -37,6 +37,7 @@
import com.android.systemui.deviceentry.shared.model.FaceAuthenticationStatus
import com.android.systemui.keyguard.data.repository.BiometricSettingsRepository
import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor
+import com.android.systemui.keyguard.shared.model.DevicePosture
import com.android.systemui.keyguard.shared.model.KeyguardState.AOD
import com.android.systemui.keyguard.shared.model.KeyguardState.DOZING
import com.android.systemui.keyguard.shared.model.KeyguardState.LOCKSCREEN
@@ -248,6 +249,12 @@
}
}
+ override fun onDeviceUnfolded() {
+ if (facePropertyRepository.supportedPostures.contains(DevicePosture.OPENED)) {
+ runFaceAuth(FaceAuthUiEvent.FACE_AUTH_UPDATED_POSTURE_CHANGED, true)
+ }
+ }
+
override fun registerListener(listener: FaceAuthenticationListener) {
listeners.add(listener)
}
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayContainerViewController.java b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayContainerViewController.java
index 5a036b1..0c2709e 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayContainerViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayContainerViewController.java
@@ -22,6 +22,7 @@
import static com.android.systemui.complication.ComplicationLayoutParams.POSITION_BOTTOM;
import static com.android.systemui.complication.ComplicationLayoutParams.POSITION_TOP;
import static com.android.systemui.doze.util.BurnInHelperKt.getBurnInOffset;
+import static com.android.systemui.util.kotlin.JavaAdapterKt.collectFlow;
import android.animation.Animator;
import android.content.res.Resources;
@@ -40,6 +41,8 @@
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dreams.dagger.DreamOverlayComponent;
import com.android.systemui.dreams.dagger.DreamOverlayModule;
+import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor;
+import com.android.systemui.keyguard.shared.model.KeyguardState;
import com.android.systemui.res.R;
import com.android.systemui.shade.ShadeExpansionChangeEvent;
import com.android.systemui.statusbar.BlurUtils;
@@ -50,6 +53,8 @@
import javax.inject.Inject;
import javax.inject.Named;
+import kotlinx.coroutines.CoroutineDispatcher;
+
/**
* View controller for {@link DreamOverlayContainerView}.
*/
@@ -62,6 +67,7 @@
private final DreamOverlayAnimationsController mDreamOverlayAnimationsController;
private final DreamOverlayStateController mStateController;
private final LowLightTransitionCoordinator mLowLightTransitionCoordinator;
+ private final KeyguardTransitionInteractor mKeyguardTransitionInteractor;
private final ComplicationHostViewController mComplicationHostViewController;
@@ -81,6 +87,7 @@
// Main thread handler used to schedule periodic tasks (e.g. burn-in protection updates).
private final Handler mHandler;
+ private final CoroutineDispatcher mMainDispatcher;
private final int mDreamOverlayMaxTranslationY;
private final PrimaryBouncerCallbackInteractor mPrimaryBouncerCallbackInteractor;
@@ -88,6 +95,7 @@
private boolean mBouncerAnimating;
private boolean mWakingUpFromSwipe;
+ private boolean mAnyBouncerShowing;
private final BouncerlessScrimController mBouncerlessScrimController;
@@ -170,6 +178,7 @@
LowLightTransitionCoordinator lowLightTransitionCoordinator,
BlurUtils blurUtils,
@Main Handler handler,
+ @Main CoroutineDispatcher mainDispatcher,
@Main Resources resources,
@Named(DreamOverlayModule.MAX_BURN_IN_OFFSET) int maxBurnInOffset,
@Named(DreamOverlayModule.BURN_IN_PROTECTION_UPDATE_INTERVAL) long
@@ -178,7 +187,8 @@
PrimaryBouncerCallbackInteractor primaryBouncerCallbackInteractor,
DreamOverlayAnimationsController animationsController,
DreamOverlayStateController stateController,
- BouncerlessScrimController bouncerlessScrimController) {
+ BouncerlessScrimController bouncerlessScrimController,
+ KeyguardTransitionInteractor keyguardTransitionInteractor) {
super(containerView);
mDreamOverlayContentView = contentView;
mStatusBarViewController = statusBarViewController;
@@ -190,6 +200,8 @@
mBouncerlessScrimController = bouncerlessScrimController;
mBouncerlessScrimController.addCallback(mBouncerlessExpansionCallback);
+ mKeyguardTransitionInteractor = keyguardTransitionInteractor;
+
mComplicationHostViewController = complicationHostViewController;
mDreamOverlayMaxTranslationY = resources.getDimensionPixelSize(
R.dimen.dream_overlay_y_offset);
@@ -200,6 +212,7 @@
ViewGroup.LayoutParams.MATCH_PARENT));
mHandler = handler;
+ mMainDispatcher = mainDispatcher;
mMaxBurnInOffset = maxBurnInOffset;
mBurnInProtectionUpdateInterval = burnInProtectionUpdateInterval;
mMillisUntilFullJitter = millisUntilFullJitter;
@@ -225,6 +238,12 @@
mView.getRootSurfaceControl().setTouchableRegion(emptyRegion);
emptyRegion.recycle();
+ collectFlow(
+ mView,
+ mKeyguardTransitionInteractor.isFinishedInStateWhere(KeyguardState::isBouncerState),
+ isFinished -> mAnyBouncerShowing = isFinished,
+ mMainDispatcher);
+
// Start dream entry animations. Skip animations for low light clock.
if (!mStateController.isLowLightActive()) {
// If this is transitioning from the low light dream to the user dream, the overlay
@@ -246,6 +265,10 @@
return mView;
}
+ boolean isBouncerShowing() {
+ return mAnyBouncerShowing;
+ }
+
private void updateBurnInOffsets() {
// Make sure the offset starts at zero, to avoid a big jump in the overlay when it first
// appears.
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayService.java b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayService.java
index 1135afe..a9ef531 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayService.java
+++ b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayService.java
@@ -19,9 +19,11 @@
import static com.android.systemui.dreams.dagger.DreamModule.DREAM_OVERLAY_WINDOW_TITLE;
import static com.android.systemui.dreams.dagger.DreamModule.DREAM_TOUCH_INSET_MANAGER;
import static com.android.systemui.dreams.dagger.DreamModule.HOME_CONTROL_PANEL_DREAM_COMPONENT;
+import static com.android.systemui.util.kotlin.JavaAdapterKt.collectFlow;
import android.content.ComponentName;
import android.content.Context;
+import android.content.Intent;
import android.graphics.drawable.ColorDrawable;
import android.util.Log;
import android.view.View;
@@ -34,7 +36,10 @@
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.lifecycle.Lifecycle;
+import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.LifecycleRegistry;
+import androidx.lifecycle.LifecycleService;
+import androidx.lifecycle.ServiceLifecycleDispatcher;
import androidx.lifecycle.ViewModelStore;
import com.android.dream.lowlight.dagger.LowLightDreamModule;
@@ -45,15 +50,21 @@
import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.systemui.ambient.touch.TouchMonitor;
import com.android.systemui.ambient.touch.dagger.AmbientTouchComponent;
+import com.android.systemui.ambient.touch.scrim.ScrimManager;
+import com.android.systemui.communal.domain.interactor.CommunalInteractor;
+import com.android.systemui.communal.shared.model.CommunalScenes;
import com.android.systemui.complication.Complication;
import com.android.systemui.complication.dagger.ComplicationComponent;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dreams.dagger.DreamOverlayComponent;
+import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor;
+import com.android.systemui.shade.ShadeExpansionChangeEvent;
import com.android.systemui.touch.TouchInsetManager;
import com.android.systemui.util.concurrency.DelayableExecutor;
import java.util.Arrays;
import java.util.HashSet;
+import java.util.function.Consumer;
import javax.inject.Inject;
import javax.inject.Named;
@@ -63,7 +74,8 @@
* dream reaches directly out to the service with a Window reference (via LayoutParams), which the
* service uses to insert its own child Window into the dream's parent Window.
*/
-public class DreamOverlayService extends android.service.dreams.DreamOverlayService {
+public class DreamOverlayService extends android.service.dreams.DreamOverlayService implements
+ LifecycleOwner {
private static final String TAG = "DreamOverlayService";
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
@@ -76,6 +88,7 @@
private DreamOverlayContainerViewController mDreamOverlayContainerViewController;
private final DreamOverlayCallbackController mDreamOverlayCallbackController;
private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
+ private final ScrimManager mScrimManager;
@Nullable
private final ComponentName mLowLightDreamComponent;
@Nullable
@@ -93,6 +106,21 @@
// True if the service has been destroyed.
private boolean mDestroyed = false;
+ /**
+ * True if the notification shade is open.
+ */
+ private boolean mShadeExpanded = false;
+
+ /**
+ * True if any part of the glanceable hub is visible.
+ */
+ private boolean mCommunalVisible = false;
+
+ /**
+ * True if the primary bouncer is visible.
+ */
+ private boolean mBouncerShowing = false;
+
private final ComplicationComponent mComplicationComponent;
private final AmbientTouchComponent mAmbientTouchComponent;
@@ -102,27 +130,72 @@
private final DreamOverlayComponent mDreamOverlayComponent;
- private final DreamOverlayLifecycleOwner mLifecycleOwner;
+ /**
+ * This {@link LifecycleRegistry} controls when dream overlay functionality, like touch
+ * handling, should be active. It will automatically be paused when the dream overlay is hidden
+ * while dreaming, such as when the notification shade, bouncer, or glanceable hub are visible.
+ */
private final LifecycleRegistry mLifecycleRegistry;
+ /**
+ * Drives the lifecycle exposed by this service's {@link #getLifecycle()}.
+ * <p>
+ * Used to mimic a {@link LifecycleService}, though we do not update the lifecycle in
+ * {@link #onBind(Intent)} since it's final in the base class.
+ */
+ private final ServiceLifecycleDispatcher mDispatcher = new ServiceLifecycleDispatcher(this);
+
private TouchMonitor mTouchMonitor;
+ private final CommunalInteractor mCommunalInteractor;
+
+ private final SystemDialogsCloser mSystemDialogsCloser;
+
private final KeyguardUpdateMonitorCallback mKeyguardCallback =
new KeyguardUpdateMonitorCallback() {
@Override
public void onShadeExpandedChanged(boolean expanded) {
mExecutor.execute(() -> {
- if (getCurrentStateLocked() != Lifecycle.State.RESUMED
- && getCurrentStateLocked() != Lifecycle.State.STARTED) {
+ if (mShadeExpanded == expanded) {
return;
}
+ mShadeExpanded = expanded;
- setCurrentStateLocked(
- expanded ? Lifecycle.State.STARTED : Lifecycle.State.RESUMED);
+ updateLifecycleStateLocked();
});
}
};
+ private final Consumer<Boolean> mCommunalVisibleConsumer = new Consumer<>() {
+ @Override
+ public void accept(Boolean communalVisible) {
+ mExecutor.execute(() -> {
+ if (mCommunalVisible == communalVisible) {
+ return;
+ }
+
+ mCommunalVisible = communalVisible;
+
+ updateLifecycleStateLocked();
+ });
+ }
+ };
+
+ private final Consumer<Boolean> mBouncerShowingConsumer = new Consumer<>() {
+ @Override
+ public void accept(Boolean bouncerShowing) {
+ mExecutor.execute(() -> {
+ if (mBouncerShowing == bouncerShowing) {
+ return;
+ }
+
+ mBouncerShowing = bouncerShowing;
+
+ updateLifecycleStateLocked();
+ });
+ }
+ };
+
private final DreamOverlayStateController.Callback mExitAnimationFinishedCallback =
new DreamOverlayStateController.Callback() {
@Override
@@ -168,19 +241,24 @@
AmbientTouchComponent.Factory ambientTouchComponentFactory,
DreamOverlayStateController stateController,
KeyguardUpdateMonitor keyguardUpdateMonitor,
+ ScrimManager scrimManager,
+ CommunalInteractor communalInteractor,
+ SystemDialogsCloser systemDialogsCloser,
UiEventLogger uiEventLogger,
@Named(DREAM_TOUCH_INSET_MANAGER) TouchInsetManager touchInsetManager,
@Nullable @Named(LowLightDreamModule.LOW_LIGHT_DREAM_COMPONENT)
- ComponentName lowLightDreamComponent,
+ ComponentName lowLightDreamComponent,
@Nullable @Named(HOME_CONTROL_PANEL_DREAM_COMPONENT)
- ComponentName homeControlPanelDreamComponent,
+ ComponentName homeControlPanelDreamComponent,
DreamOverlayCallbackController dreamOverlayCallbackController,
+ KeyguardInteractor keyguardInteractor,
@Named(DREAM_OVERLAY_WINDOW_TITLE) String windowTitle) {
super(executor);
mContext = context;
mExecutor = executor;
mWindowManager = windowManager;
mKeyguardUpdateMonitor = keyguardUpdateMonitor;
+ mScrimManager = scrimManager;
mLowLightDreamComponent = lowLightDreamComponent;
mHomeControlPanelDreamComponent = homeControlPanelDreamComponent;
mKeyguardUpdateMonitor.registerCallback(mKeyguardCallback);
@@ -188,6 +266,8 @@
mUiEventLogger = uiEventLogger;
mDreamOverlayCallbackController = dreamOverlayCallbackController;
mWindowTitle = windowTitle;
+ mCommunalInteractor = communalInteractor;
+ mSystemDialogsCloser = systemDialogsCloser;
final ViewModelStore viewModelStore = new ViewModelStore();
final Complication.Host host =
@@ -203,10 +283,32 @@
new HashSet<>(Arrays.asList(
mDreamComplicationComponent.getHideComplicationTouchHandler(),
mDreamOverlayComponent.getCommunalTouchHandler())));
- mLifecycleOwner = lifecycleOwner;
- mLifecycleRegistry = mLifecycleOwner.getRegistry();
+ mLifecycleRegistry = lifecycleOwner.getRegistry();
- mExecutor.execute(() -> setCurrentStateLocked(Lifecycle.State.CREATED));
+ mExecutor.execute(() -> setLifecycleStateLocked(Lifecycle.State.CREATED));
+
+ collectFlow(getLifecycle(), communalInteractor.isCommunalVisible(),
+ mCommunalVisibleConsumer);
+ collectFlow(getLifecycle(), keyguardInteractor.primaryBouncerShowing,
+ mBouncerShowingConsumer);
+ }
+
+ @NonNull
+ @Override
+ public Lifecycle getLifecycle() {
+ return mDispatcher.getLifecycle();
+ }
+
+ @Override
+ public void onCreate() {
+ mDispatcher.onServicePreSuperOnCreate();
+ super.onCreate();
+ }
+
+ @Override
+ public void onStart(Intent intent, int startId) {
+ mDispatcher.onServicePreSuperOnStart();
+ super.onStart(intent, startId);
}
@Override
@@ -214,19 +316,20 @@
mKeyguardUpdateMonitor.removeCallback(mKeyguardCallback);
mExecutor.execute(() -> {
- setCurrentStateLocked(Lifecycle.State.DESTROYED);
+ setLifecycleStateLocked(Lifecycle.State.DESTROYED);
resetCurrentDreamOverlayLocked();
mDestroyed = true;
});
+ mDispatcher.onServicePreSuperOnDestroy();
super.onDestroy();
}
@Override
public void onStartDream(@NonNull WindowManager.LayoutParams layoutParams) {
- setCurrentStateLocked(Lifecycle.State.STARTED);
+ setLifecycleStateLocked(Lifecycle.State.STARTED);
mUiEventLogger.log(DreamOverlayEvent.DREAM_OVERLAY_ENTER_START);
@@ -256,7 +359,7 @@
return;
}
- setCurrentStateLocked(Lifecycle.State.RESUMED);
+ setLifecycleStateLocked(Lifecycle.State.RESUMED);
mStateController.setOverlayActive(true);
final ComponentName dreamComponent = getDreamComponent();
mStateController.setLowLightActive(
@@ -276,14 +379,27 @@
resetCurrentDreamOverlayLocked();
}
- private Lifecycle.State getCurrentStateLocked() {
+ private Lifecycle.State getLifecycleStateLocked() {
return mLifecycleRegistry.getCurrentState();
}
- private void setCurrentStateLocked(Lifecycle.State state) {
+ private void setLifecycleStateLocked(Lifecycle.State state) {
mLifecycleRegistry.setCurrentState(state);
}
+ private void updateLifecycleStateLocked() {
+ if (getLifecycleStateLocked() != Lifecycle.State.RESUMED
+ && getLifecycleStateLocked() != Lifecycle.State.STARTED) {
+ return;
+ }
+
+ // If anything is on top of the dream, we should stop touch handling.
+ boolean shouldPause = mShadeExpanded || mCommunalVisible || mBouncerShowing;
+
+ setLifecycleStateLocked(
+ shouldPause ? Lifecycle.State.STARTED : Lifecycle.State.RESUMED);
+ }
+
@Override
public void onWakeUp() {
if (mDreamOverlayContainerViewController != null) {
@@ -292,6 +408,28 @@
}
}
+ @Override
+ public void onComeToFront() {
+ // Make sure the bouncer is closed. Expanding the shade effectively contracts the bouncer
+ // an equal amount.
+ if (mDreamOverlayContainerViewController != null
+ && mDreamOverlayContainerViewController.isBouncerShowing()) {
+ mScrimManager.getCurrentController().expand(
+ new ShadeExpansionChangeEvent(
+ /* fraction= */ 1.f,
+ /* expanded= */ false,
+ /* tracking= */ true));
+ }
+
+ // closeSystemDialogs takes care of closing anything that responds to the
+ // {@link Intent.ACTION_CLOSE_SYSTEM_DIALOGS} broadcast (which includes the notification
+ // shade).
+ mSystemDialogsCloser.closeSystemDialogs();
+
+ // Hide glanceable hub (this is a nop if glanceable hub is not open).
+ mCommunalInteractor.changeScene(CommunalScenes.Blank, null);
+ }
+
/**
* Inserts {@link Window} to host the dream overlay into the dream's parent window. Must be
* called from the main executing thread. The window attributes closely mirror those that are
diff --git a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt b/packages/SystemUI/src/com/android/systemui/dreams/SystemDialogsCloser.java
similarity index 71%
copy from packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt
copy to packages/SystemUI/src/com/android/systemui/dreams/SystemDialogsCloser.java
index c4476fc..6e7239a4 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt
+++ b/packages/SystemUI/src/com/android/systemui/dreams/SystemDialogsCloser.java
@@ -14,11 +14,10 @@
* limitations under the License.
*/
-package com.android.systemui.volume.panel.component.mediaoutput.shared.model
+package com.android.systemui.dreams;
-import android.media.session.PlaybackState
-
-data class SessionWithPlayback(
- val session: MediaDeviceSession,
- val playback: PlaybackState,
-)
+/** Defines an interface for a class that is responsible for closing system dialogs. */
+public interface SystemDialogsCloser {
+ /** Close any open system dialogs. */
+ void closeSystemDialogs();
+}
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamModule.java b/packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamModule.java
index 31710ac..516b8c5 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamModule.java
+++ b/packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamModule.java
@@ -31,6 +31,7 @@
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dreams.DreamOverlayNotificationCountProvider;
import com.android.systemui.dreams.DreamOverlayService;
+import com.android.systemui.dreams.SystemDialogsCloser;
import com.android.systemui.dreams.complication.dagger.ComplicationComponent;
import com.android.systemui.dreams.homecontrols.DreamActivityProvider;
import com.android.systemui.dreams.homecontrols.DreamActivityProviderImpl;
@@ -146,6 +147,15 @@
return Optional.empty();
}
+ /**
+ * Provides an implementation for {@link SystemDialogsCloser} that calls
+ * {@link Context.closeSystemDialogs}.
+ */
+ @Provides
+ static SystemDialogsCloser providesSystemDialogsCloser(Context context) {
+ return () -> context.closeSystemDialogs();
+ }
+
/** */
@Provides
@Named(DREAM_ONLY_ENABLED_FOR_DOCK_USER)
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/touch/CommunalTouchHandler.java b/packages/SystemUI/src/com/android/systemui/dreams/touch/CommunalTouchHandler.java
index 1c047dd..fff0c58 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/touch/CommunalTouchHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/dreams/touch/CommunalTouchHandler.java
@@ -98,7 +98,7 @@
// Notification shade window has its own logic to be visible if the hub is open, no need to
// do anything here other than send touch events over.
session.registerInputListener(ev -> {
- surfaces.handleDreamTouch((MotionEvent) ev);
+ surfaces.handleExternalShadeWindowTouch((MotionEvent) ev);
if (ev != null && ((MotionEvent) ev).getAction() == MotionEvent.ACTION_UP) {
var unused = session.pop();
}
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/ui/viewmodel/DreamViewModel.kt b/packages/SystemUI/src/com/android/systemui/dreams/ui/viewmodel/DreamViewModel.kt
index 2d9c14e..221f790 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/ui/viewmodel/DreamViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/dreams/ui/viewmodel/DreamViewModel.kt
@@ -47,7 +47,7 @@
configurationInteractor: ConfigurationInteractor,
keyguardTransitionInteractor: KeyguardTransitionInteractor,
fromGlanceableHubTransitionInteractor: GlanceableHubToDreamingTransitionViewModel,
- private val toGlanceableHubTransitionViewModel: DreamingToGlanceableHubTransitionViewModel,
+ toGlanceableHubTransitionViewModel: DreamingToGlanceableHubTransitionViewModel,
private val toLockscreenTransitionViewModel: DreamingToLockscreenTransitionViewModel,
private val communalInteractor: CommunalInteractor,
private val keyguardUpdateMonitor: KeyguardUpdateMonitor,
@@ -60,7 +60,6 @@
communalInteractor.isCommunalEnabled.value &&
!keyguardUpdateMonitor.isEncryptedOrLockdown(userTracker.userId)
if (showGlanceableHub) {
- toGlanceableHubTransitionViewModel.startTransition()
communalInteractor.changeScene(CommunalScenes.Communal)
} else {
toLockscreenTransitionViewModel.startTransition()
diff --git a/packages/SystemUI/src/com/android/systemui/haptics/qs/QSLongPressEffect.kt b/packages/SystemUI/src/com/android/systemui/haptics/qs/QSLongPressEffect.kt
index bccc3c5..f1a8faf 100644
--- a/packages/SystemUI/src/com/android/systemui/haptics/qs/QSLongPressEffect.kt
+++ b/packages/SystemUI/src/com/android/systemui/haptics/qs/QSLongPressEffect.kt
@@ -19,7 +19,6 @@
import android.animation.ValueAnimator
import android.os.VibrationEffect
import android.view.View
-import android.view.ViewConfiguration
import android.view.animation.AccelerateDecelerateInterpolator
import androidx.annotation.VisibleForTesting
import androidx.core.animation.doOnCancel
@@ -32,7 +31,6 @@
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.combine
-import kotlinx.coroutines.flow.map
/**
* A class that handles the long press visuo-haptic effect for a QS tile.
@@ -76,9 +74,6 @@
}
}
- // Should a tap timeout countdown begin
- val shouldWaitForTapTimeout: Flow<Boolean> = state.map { it == State.TIMEOUT_WAIT }
-
/** Haptic effects */
private val durations =
vibratorHelper?.getPrimitiveDurations(
@@ -247,12 +242,4 @@
LONG_PRESS,
RESET_AND_LONG_PRESS,
}
-
- companion object {
- /**
- * A timeout to let the tile resolve if it is being swiped/scrolled. Since QS tiles are
- * inside a scrollable container, they will be considered pressed only after a tap timeout.
- */
- val PRESSED_TIMEOUT = ViewConfiguration.getTapTimeout().toLong() + 20L
- }
}
diff --git a/packages/SystemUI/src/com/android/systemui/haptics/qs/QSLongPressEffectViewBinder.kt b/packages/SystemUI/src/com/android/systemui/haptics/qs/QSLongPressEffectViewBinder.kt
index 2ef901d..dd7a285 100644
--- a/packages/SystemUI/src/com/android/systemui/haptics/qs/QSLongPressEffectViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/haptics/qs/QSLongPressEffectViewBinder.kt
@@ -18,15 +18,13 @@
import android.annotation.SuppressLint
import android.view.MotionEvent
+import android.view.ViewConfiguration
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.repeatOnLifecycle
import com.android.app.tracing.coroutines.launch
import com.android.systemui.lifecycle.repeatWhenAttached
import com.android.systemui.qs.tileimpl.QSTileViewImpl
-import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.DisposableHandle
-import kotlinx.coroutines.delay
-import kotlinx.coroutines.flow.filter
object QSLongPressEffectViewBinder {
@@ -71,20 +69,6 @@
}
}
}
-
- // Tap timeout wait
- launch({ "${tileSpec ?: "unknownTileSpec"}#LongPressEffect#timeout" }) {
- qsLongPressEffect.shouldWaitForTapTimeout
- .filter { it }
- .collect {
- try {
- delay(QSLongPressEffect.PRESSED_TIMEOUT)
- qsLongPressEffect.handleTimeoutComplete()
- } catch (_: CancellationException) {
- qsLongPressEffect.resetEffect()
- }
- }
- }
}
}
}
@@ -93,7 +77,13 @@
private fun setTouchListener(tile: QSTileViewImpl, longPressEffect: QSLongPressEffect?) {
tile.setOnTouchListener { _, event ->
when (event.actionMasked) {
- MotionEvent.ACTION_DOWN -> longPressEffect?.handleActionDown()
+ MotionEvent.ACTION_DOWN -> {
+ tile.postDelayed(
+ { longPressEffect?.handleTimeoutComplete() },
+ ViewConfiguration.getTapTimeout().toLong(),
+ )
+ longPressEffect?.handleActionDown()
+ }
MotionEvent.ACTION_UP -> longPressEffect?.handleActionUp()
MotionEvent.ACTION_CANCEL -> longPressEffect?.handleActionCancel()
}
diff --git a/packages/SystemUI/src/com/android/systemui/haptics/slider/HapticSliderViewBinder.kt b/packages/SystemUI/src/com/android/systemui/haptics/slider/HapticSliderViewBinder.kt
index 304fdd6..ca6c8da 100644
--- a/packages/SystemUI/src/com/android/systemui/haptics/slider/HapticSliderViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/haptics/slider/HapticSliderViewBinder.kt
@@ -23,11 +23,11 @@
object HapticSliderViewBinder {
/**
- * Binds a [SeekableSliderHapticPlugin] to a [View]. The binded view should be a
+ * Binds a [SeekbarHapticPlugin] to a [View]. The binded view should be a
* [android.widget.SeekBar] or a container of a [android.widget.SeekBar]
*/
@JvmStatic
- fun bind(view: View?, plugin: SeekableSliderHapticPlugin) {
+ fun bind(view: View?, plugin: SeekbarHapticPlugin) {
view?.repeatWhenAttached {
plugin.startInScope(lifecycleScope)
try {
diff --git a/packages/SystemUI/src/com/android/systemui/haptics/slider/SeekableSliderEventProducer.kt b/packages/SystemUI/src/com/android/systemui/haptics/slider/SeekableSliderEventProducer.kt
deleted file mode 100644
index cfa5294..0000000
--- a/packages/SystemUI/src/com/android/systemui/haptics/slider/SeekableSliderEventProducer.kt
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.haptics.slider
-
-import android.widget.SeekBar
-import android.widget.SeekBar.OnSeekBarChangeListener
-import kotlinx.coroutines.flow.Flow
-import kotlinx.coroutines.flow.MutableStateFlow
-import kotlinx.coroutines.flow.asStateFlow
-import kotlinx.coroutines.flow.update
-
-/** An event producer for a Seekable element such as the Android [SeekBar] */
-class SeekableSliderEventProducer : SliderEventProducer, OnSeekBarChangeListener {
-
- /** The current event reported by a SeekBar */
- private val _currentEvent = MutableStateFlow(SliderEvent(SliderEventType.NOTHING, 0f))
-
- override fun produceEvents(): Flow<SliderEvent> = _currentEvent.asStateFlow()
-
- override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
- val eventType =
- if (fromUser) SliderEventType.PROGRESS_CHANGE_BY_USER
- else SliderEventType.PROGRESS_CHANGE_BY_PROGRAM
-
- _currentEvent.value = SliderEvent(eventType, normalizeProgress(seekBar, progress))
- }
-
- /**
- * Normalize the integer progress of a SeekBar to the range from 0F to 1F.
- *
- * @param[seekBar] The SeekBar that reports a progress.
- * @param[progress] The integer progress of the SeekBar within its min and max values.
- * @return The progress in the range from 0F to 1F.
- */
- private fun normalizeProgress(seekBar: SeekBar, progress: Int): Float {
- if (seekBar.max == seekBar.min) {
- return 1.0f
- }
- val range = seekBar.max - seekBar.min
- return (progress - seekBar.min) / range.toFloat()
- }
-
- override fun onStartTrackingTouch(seekBar: SeekBar) {
- _currentEvent.update { previousEvent ->
- SliderEvent(SliderEventType.STARTED_TRACKING_TOUCH, previousEvent.currentProgress)
- }
- }
-
- override fun onStopTrackingTouch(seekBar: SeekBar) {
- _currentEvent.update { previousEvent ->
- SliderEvent(SliderEventType.STOPPED_TRACKING_TOUCH, previousEvent.currentProgress)
- }
- }
-
- /** The arrow navigation that was operating the slider has stopped. */
- fun onArrowUp() {
- _currentEvent.update { previousEvent ->
- SliderEvent(SliderEventType.ARROW_UP, previousEvent.currentProgress)
- }
- }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/haptics/slider/SeekableSliderHapticPlugin.kt b/packages/SystemUI/src/com/android/systemui/haptics/slider/SeekbarHapticPlugin.kt
similarity index 72%
rename from packages/SystemUI/src/com/android/systemui/haptics/slider/SeekableSliderHapticPlugin.kt
rename to packages/SystemUI/src/com/android/systemui/haptics/slider/SeekbarHapticPlugin.kt
index ed82278..2007db34 100644
--- a/packages/SystemUI/src/com/android/systemui/haptics/slider/SeekableSliderHapticPlugin.kt
+++ b/packages/SystemUI/src/com/android/systemui/haptics/slider/SeekbarHapticPlugin.kt
@@ -30,12 +30,12 @@
/**
* A plugin added to a manager of a [android.widget.SeekBar] that adds dynamic haptic feedback.
*
- * A [SeekableSliderEventProducer] is used as the producer of slider events, a
+ * A [SliderStateProducer] is used as the producer of slider events, a
* [SliderHapticFeedbackProvider] is used as the listener of slider states to play haptic feedback
- * depending on the state, and a [SeekableSliderTracker] is used as the state machine handler that
+ * depending on the state, and a [SliderStateTracker] is used as the state machine handler that
* tracks and manipulates the slider state.
*/
-class SeekableSliderHapticPlugin
+class SeekbarHapticPlugin
@JvmOverloads
constructor(
vibratorHelper: VibratorHelper,
@@ -46,7 +46,7 @@
private val velocityTracker = VelocityTracker.obtain()
- private val sliderEventProducer = SeekableSliderEventProducer()
+ private val sliderEventProducer = SliderStateProducer()
private val sliderHapticFeedbackProvider =
SliderHapticFeedbackProvider(
@@ -56,7 +56,7 @@
systemClock,
)
- private var sliderTracker: SeekableSliderTracker? = null
+ private var sliderTracker: SliderStateTracker? = null
private var pluginScope: CoroutineScope? = null
@@ -86,7 +86,7 @@
fun startInScope(scope: CoroutineScope) {
if (sliderTracker != null) stop()
sliderTracker =
- SeekableSliderTracker(
+ SliderStateTracker(
sliderHapticFeedbackProvider,
sliderEventProducer,
scope,
@@ -116,28 +116,52 @@
/** onStartTrackingTouch event from the slider's [android.widget.SeekBar] */
fun onStartTrackingTouch(seekBar: SeekBar) {
if (isTracking) {
- sliderEventProducer.onStartTrackingTouch(seekBar)
+ sliderEventProducer.onStartTracking(true)
}
}
/** onProgressChanged event from the slider's [android.widget.SeekBar] */
fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
if (isTracking) {
- sliderEventProducer.onProgressChanged(seekBar, progress, fromUser)
+ if (sliderTracker?.currentState == SliderState.IDLE && !fromUser) {
+ // This case translates to the slider starting to track program changes
+ sliderEventProducer.resetWithProgress(normalizeProgress(seekBar, progress))
+ sliderEventProducer.onStartTracking(false)
+ } else {
+ sliderEventProducer.onProgressChanged(
+ fromUser,
+ normalizeProgress(seekBar, progress),
+ )
+ }
}
}
+ /**
+ * Normalize the integer progress of a SeekBar to the range from 0F to 1F.
+ *
+ * @param[seekBar] The SeekBar that reports a progress.
+ * @param[progress] The integer progress of the SeekBar within its min and max values.
+ * @return The progress in the range from 0F to 1F.
+ */
+ private fun normalizeProgress(seekBar: SeekBar, progress: Int): Float {
+ if (seekBar.max == seekBar.min) {
+ return 1.0f
+ }
+ val range = seekBar.max - seekBar.min
+ return (progress - seekBar.min) / range.toFloat()
+ }
+
/** onStopTrackingTouch event from the slider's [android.widget.SeekBar] */
fun onStopTrackingTouch(seekBar: SeekBar) {
if (isTracking) {
- sliderEventProducer.onStopTrackingTouch(seekBar)
+ sliderEventProducer.onStopTracking(true)
}
}
- /** onArrowUp event recorded */
- fun onArrowUp() {
+ /** Programmatic changes have stopped */
+ private fun onStoppedTrackingProgram() {
if (isTracking) {
- sliderEventProducer.onArrowUp()
+ sliderEventProducer.onStopTracking(false)
}
}
@@ -146,7 +170,7 @@
*
* This event is used to estimate the key-up event based on a running a timer as a waiting
* coroutine in the [pluginScope]. A key-up event in a slider corresponds to an onArrowUp event.
- * Therefore, [onArrowUp] must be called after the timeout.
+ * Therefore, [onStoppedTrackingProgram] must be called after the timeout.
*/
fun onKeyDown() {
if (!isTracking) return
@@ -158,7 +182,7 @@
keyUpJob =
pluginScope?.launch {
delay(KEY_UP_TIMEOUT)
- onArrowUp()
+ onStoppedTrackingProgram()
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/haptics/slider/SliderEventType.kt b/packages/SystemUI/src/com/android/systemui/haptics/slider/SliderEventType.kt
index 4a63941..0edef99 100644
--- a/packages/SystemUI/src/com/android/systemui/haptics/slider/SliderEventType.kt
+++ b/packages/SystemUI/src/com/android/systemui/haptics/slider/SliderEventType.kt
@@ -22,6 +22,8 @@
NOTHING,
/* The slider has captured a touch input and is tracking touch events. */
STARTED_TRACKING_TOUCH,
+ /* The slider started tracking programmatic value changes */
+ STARTED_TRACKING_PROGRAM,
/* The slider progress is changing due to user touch input. */
PROGRESS_CHANGE_BY_USER,
/* The slider progress is changing programmatically. */
@@ -29,5 +31,5 @@
/* The slider has stopped tracking touch events. */
STOPPED_TRACKING_TOUCH,
/* The external (not touch) stimulus that was modifying the slider progress has stopped. */
- ARROW_UP,
+ STOPPED_TRACKING_PROGRAM,
}
diff --git a/packages/SystemUI/src/com/android/systemui/haptics/slider/SliderStateProducer.kt b/packages/SystemUI/src/com/android/systemui/haptics/slider/SliderStateProducer.kt
new file mode 100644
index 0000000..1124ab1
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/haptics/slider/SliderStateProducer.kt
@@ -0,0 +1,62 @@
+/*
+ * 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.haptics.slider
+
+import androidx.annotation.FloatRange
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.asStateFlow
+import kotlinx.coroutines.flow.update
+
+/** A stateful producer of [SliderEvent] */
+class SliderStateProducer : SliderEventProducer {
+
+ /** The current event of a slider */
+ private val _currentEvent = MutableStateFlow(SliderEvent(SliderEventType.NOTHING, 0f))
+
+ override fun produceEvents(): Flow<SliderEvent> = _currentEvent.asStateFlow()
+
+ fun onProgressChanged(fromUser: Boolean, @FloatRange(from = 0.0, to = 1.0) progress: Float) {
+ val eventType =
+ if (fromUser) SliderEventType.PROGRESS_CHANGE_BY_USER
+ else SliderEventType.PROGRESS_CHANGE_BY_PROGRAM
+
+ _currentEvent.value = SliderEvent(eventType, progress)
+ }
+
+ fun onStartTracking(fromUser: Boolean) {
+ val eventType =
+ if (fromUser) SliderEventType.STARTED_TRACKING_TOUCH
+ else SliderEventType.STARTED_TRACKING_PROGRAM
+ _currentEvent.update { previousEvent ->
+ SliderEvent(eventType, previousEvent.currentProgress)
+ }
+ }
+
+ fun onStopTracking(fromUser: Boolean) {
+ val eventType =
+ if (fromUser) SliderEventType.STOPPED_TRACKING_TOUCH
+ else SliderEventType.STOPPED_TRACKING_PROGRAM
+ _currentEvent.update { previousEvent ->
+ SliderEvent(eventType, previousEvent.currentProgress)
+ }
+ }
+
+ fun resetWithProgress(@FloatRange(from = 0.0, to = 1.0) progress: Float) {
+ _currentEvent.value = SliderEvent(SliderEventType.NOTHING, progress)
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/haptics/slider/SeekableSliderTracker.kt b/packages/SystemUI/src/com/android/systemui/haptics/slider/SliderStateTracker.kt
similarity index 94%
rename from packages/SystemUI/src/com/android/systemui/haptics/slider/SeekableSliderTracker.kt
rename to packages/SystemUI/src/com/android/systemui/haptics/slider/SliderStateTracker.kt
index 0af3038..14cf411 100644
--- a/packages/SystemUI/src/com/android/systemui/haptics/slider/SeekableSliderTracker.kt
+++ b/packages/SystemUI/src/com/android/systemui/haptics/slider/SliderStateTracker.kt
@@ -25,11 +25,12 @@
import kotlinx.coroutines.launch
/**
- * Slider tracker attached to a seekable slider.
+ * Slider tracker attached to a slider.
*
- * The tracker runs a state machine to execute actions on touch-based events typical of a seekable
- * slider such as [android.widget.SeekBar]. Coroutines responsible for running the state machine,
- * collecting slider events and maintaining waiting states are run on the provided [CoroutineScope].
+ * The tracker runs a state machine to execute actions on touch-based events typical of a general
+ * slider (including a [android.widget.SeekBar]). Coroutines responsible for running the state
+ * machine, collecting slider events and maintaining waiting states are run on the provided
+ * [CoroutineScope].
*
* @param[sliderStateListener] Listener of the slider state.
* @param[sliderEventProducer] Producer of slider events arising from the slider.
@@ -37,7 +38,7 @@
* events and the launch of timer jobs.
* @property[config] Configuration parameters of the slider tracker.
*/
-class SeekableSliderTracker(
+class SliderStateTracker(
sliderStateListener: SliderStateListener,
sliderEventProducer: SliderEventProducer,
trackerScope: CoroutineScope,
@@ -79,7 +80,7 @@
// This will disambiguate between an imprecise touch that acquires the slider handle,
// and a select and jump operation in the slider track.
setState(SliderState.WAIT)
- } else if (newEventType == SliderEventType.PROGRESS_CHANGE_BY_PROGRAM) {
+ } else if (newEventType == SliderEventType.STARTED_TRACKING_PROGRAM) {
val state =
if (bookendReached(currentProgress)) SliderState.ARROW_HANDLE_REACHED_BOOKEND
else SliderState.ARROW_HANDLE_MOVED_ONCE
@@ -227,7 +228,7 @@
}
SliderEventType.PROGRESS_CHANGE_BY_PROGRAM ->
SliderState.ARROW_HANDLE_MOVES_CONTINUOUSLY
- SliderEventType.ARROW_UP -> SliderState.IDLE
+ SliderEventType.STOPPED_TRACKING_PROGRAM -> SliderState.IDLE
else -> SliderState.ARROW_HANDLE_MOVED_ONCE
}
setState(nextState)
@@ -237,7 +238,7 @@
val reachedBookend = bookendReached(currentProgress)
val nextState =
when (newEventType) {
- SliderEventType.ARROW_UP -> SliderState.IDLE
+ SliderEventType.STOPPED_TRACKING_PROGRAM -> SliderState.IDLE
SliderEventType.STARTED_TRACKING_TOUCH -> {
// Launching the timer and going to WAIT
timerJob = launchTimer()
diff --git a/packages/SystemUI/src/com/android/systemui/keyboard/shortcut/ShortcutHelperActivity.kt b/packages/SystemUI/src/com/android/systemui/keyboard/shortcut/ShortcutHelperActivity.kt
new file mode 100644
index 0000000..692fbb0
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyboard/shortcut/ShortcutHelperActivity.kt
@@ -0,0 +1,149 @@
+/*
+ * 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.keyboard.shortcut
+
+import android.graphics.Insets
+import android.os.Bundle
+import android.view.View
+import android.view.WindowInsets
+import androidx.activity.BackEventCompat
+import androidx.activity.ComponentActivity
+import androidx.activity.OnBackPressedCallback
+import androidx.core.view.updatePadding
+import com.android.systemui.res.R
+import com.google.android.material.bottomsheet.BottomSheetBehavior
+import com.google.android.material.bottomsheet.BottomSheetBehavior.BottomSheetCallback
+import com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_HIDDEN
+
+/**
+ * Activity that hosts the new version of the keyboard shortcut helper. It will be used both for
+ * small and large screen devices.
+ */
+class ShortcutHelperActivity : ComponentActivity() {
+
+ private val bottomSheetContainer
+ get() = requireViewById<View>(R.id.shortcut_helper_sheet_container)
+
+ private val bottomSheet
+ get() = requireViewById<View>(R.id.shortcut_helper_sheet)
+
+ private val bottomSheetBehavior
+ get() = BottomSheetBehavior.from(bottomSheet)
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ setupEdgeToEdge()
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_keyboard_shortcut_helper)
+ setUpBottomSheetWidth()
+ setUpInsets()
+ setUpPredictiveBack()
+ setUpSheetDismissListener()
+ setUpDismissOnTouchOutside()
+ }
+
+ private fun setupEdgeToEdge() {
+ // Draw behind system bars
+ window.setDecorFitsSystemWindows(false)
+ }
+
+ private fun setUpBottomSheetWidth() {
+ val sheetScreenWidthFraction =
+ resources.getFloat(R.dimen.shortcut_helper_screen_width_fraction)
+ // maxWidth needs to be set before the sheet is drawn, otherwise the call will have no
+ // effect.
+ val screenWidth = resources.displayMetrics.widthPixels
+ bottomSheetBehavior.maxWidth = (sheetScreenWidthFraction * screenWidth).toInt()
+ }
+
+ private fun setUpInsets() {
+ bottomSheetContainer.setOnApplyWindowInsetsListener { _, insets ->
+ val safeDrawingInsets = insets.safeDrawing
+ // Make sure the bottom sheet is not covered by the status bar.
+ bottomSheetContainer.updatePadding(top = safeDrawingInsets.top)
+ // Make sure the contents inside of the bottom sheet are not hidden by system bars, or
+ // cutouts.
+ bottomSheet.updatePadding(
+ left = safeDrawingInsets.left,
+ right = safeDrawingInsets.right,
+ bottom = safeDrawingInsets.bottom
+ )
+ // The bottom sheet has to be expanded only after setting up insets, otherwise there is
+ // a bug and it will not use full height.
+ expandBottomSheet()
+
+ // Return CONSUMED if you don't want want the window insets to keep passing
+ // down to descendant views.
+ WindowInsets.CONSUMED
+ }
+ }
+
+ private fun expandBottomSheet() {
+ bottomSheetBehavior.state = BottomSheetBehavior.STATE_EXPANDED
+ bottomSheetBehavior.skipCollapsed = true
+ }
+
+ private fun setUpPredictiveBack() {
+ val onBackPressedCallback =
+ object : OnBackPressedCallback(/* enabled= */ true) {
+ override fun handleOnBackStarted(backEvent: BackEventCompat) {
+ bottomSheetBehavior.startBackProgress(backEvent)
+ }
+
+ override fun handleOnBackProgressed(backEvent: BackEventCompat) {
+ bottomSheetBehavior.updateBackProgress(backEvent)
+ }
+
+ override fun handleOnBackPressed() {
+ bottomSheetBehavior.handleBackInvoked()
+ }
+
+ override fun handleOnBackCancelled() {
+ bottomSheetBehavior.cancelBackProgress()
+ }
+ }
+ onBackPressedDispatcher.addCallback(
+ owner = this,
+ onBackPressedCallback = onBackPressedCallback
+ )
+ }
+
+ private fun setUpSheetDismissListener() {
+ bottomSheetBehavior.addBottomSheetCallback(
+ object : BottomSheetCallback() {
+ override fun onStateChanged(bottomSheet: View, newState: Int) {
+ if (newState == STATE_HIDDEN) {
+ finish()
+ }
+ }
+
+ override fun onSlide(bottomSheet: View, slideOffset: Float) {}
+ }
+ )
+ }
+
+ private fun setUpDismissOnTouchOutside() {
+ bottomSheetContainer.setOnClickListener { finish() }
+ }
+}
+
+private val WindowInsets.safeDrawing
+ get() =
+ getInsets(WindowInsets.Type.systemBars())
+ .union(getInsets(WindowInsets.Type.ime()))
+ .union(getInsets(WindowInsets.Type.displayCutout()))
+
+private fun Insets.union(insets: Insets): Insets = Insets.max(this, insets)
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
index a1ac5b3..46aec25 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
@@ -176,6 +176,10 @@
import com.android.systemui.wallpapers.data.repository.WallpaperRepository;
import com.android.wm.shell.keyguard.KeyguardTransitions;
+import dagger.Lazy;
+
+import kotlinx.coroutines.CoroutineDispatcher;
+
import java.io.PrintWriter;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -185,9 +189,6 @@
import java.util.concurrent.Executor;
import java.util.function.Consumer;
-import dagger.Lazy;
-import kotlinx.coroutines.CoroutineDispatcher;
-
/**
* Mediates requests related to the keyguard. This includes queries about the
* state of the keyguard, power management events that effect whether the keyguard
@@ -3333,12 +3334,12 @@
flags |= KEYGUARD_GOING_AWAY_FLAG_TO_LAUNCHER_CLEAR_SNAPSHOT;
}
+ mKeyguardStateController.notifyKeyguardGoingAway(true);
+
if (!KeyguardWmStateRefactor.isEnabled()) {
// Handled in WmLockscreenVisibilityManager.
mActivityTaskManagerService.keyguardGoingAway(flags);
}
-
- mKeyguardStateController.notifyKeyguardGoingAway(true);
} catch (RemoteException e) {
mSurfaceBehindRemoteAnimationRequested = false;
e.printStackTrace();
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/DeviceEntryFingerprintAuthRepository.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/DeviceEntryFingerprintAuthRepository.kt
index 2bede977..0ebc92e 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/DeviceEntryFingerprintAuthRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/DeviceEntryFingerprintAuthRepository.kt
@@ -259,7 +259,6 @@
if (biometricSourceType != BiometricSourceType.FINGERPRINT) {
return
}
-
trySendWithFailureLogging(
authenticationStatus,
TAG,
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardClockRepository.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardClockRepository.kt
index 6c29bce..7087752 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardClockRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardClockRepository.kt
@@ -20,17 +20,17 @@
import android.os.UserHandle
import android.provider.Settings
import com.android.keyguard.ClockEventController
-import com.android.keyguard.KeyguardClockSwitch.ClockSize
-import com.android.keyguard.KeyguardClockSwitch.LARGE
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.flags.FeatureFlagsClassic
import com.android.systemui.flags.Flags
-import com.android.systemui.keyguard.shared.model.SettingsClockSize
+import com.android.systemui.keyguard.shared.model.ClockSize
+import com.android.systemui.keyguard.shared.model.ClockSizeSetting
import com.android.systemui.plugins.clocks.ClockController
import com.android.systemui.plugins.clocks.ClockId
import com.android.systemui.res.R
+import com.android.systemui.scene.shared.flag.SceneContainerFlag
import com.android.systemui.shared.clocks.ClockRegistry
import com.android.systemui.util.settings.SecureSettings
import com.android.systemui.util.settings.SettingsProxyExt.observerFlow
@@ -56,10 +56,10 @@
*
* @deprecated When scene container flag is on use clockSize from domain level.
*/
- val clockSize: StateFlow<Int>
+ val clockSize: StateFlow<ClockSize>
/** clock size selected in picker, DYNAMIC or SMALL */
- val selectedClockSize: StateFlow<SettingsClockSize>
+ val selectedClockSize: StateFlow<ClockSizeSetting>
/** clock id, selected from clock carousel in wallpaper picker */
val currentClockId: Flow<ClockId>
@@ -72,7 +72,7 @@
val shouldForceSmallClock: Boolean
- fun setClockSize(@ClockSize size: Int)
+ fun setClockSize(size: ClockSize)
}
@SysUISingleton
@@ -89,14 +89,15 @@
) : KeyguardClockRepository {
/** Receive SMALL or LARGE clock should be displayed on keyguard. */
- private val _clockSize: MutableStateFlow<Int> = MutableStateFlow(LARGE)
- override val clockSize: StateFlow<Int> = _clockSize.asStateFlow()
+ private val _clockSize: MutableStateFlow<ClockSize> = MutableStateFlow(ClockSize.LARGE)
+ override val clockSize: StateFlow<ClockSize> = _clockSize.asStateFlow()
- override fun setClockSize(size: Int) {
+ override fun setClockSize(size: ClockSize) {
+ SceneContainerFlag.assertInLegacyMode()
_clockSize.value = size
}
- override val selectedClockSize: StateFlow<SettingsClockSize> =
+ override val selectedClockSize: StateFlow<ClockSizeSetting> =
secureSettings
.observerFlow(
names = arrayOf(Settings.Secure.LOCKSCREEN_USE_DOUBLE_LINE_CLOCK),
@@ -154,17 +155,13 @@
// True on small landscape screens
applicationContext.resources.getBoolean(R.bool.force_small_clock_on_lockscreen)
- private fun getClockSize(): SettingsClockSize {
- return if (
+ private fun getClockSize(): ClockSizeSetting {
+ return ClockSizeSetting.fromSettingValue(
secureSettings.getIntForUser(
Settings.Secure.LOCKSCREEN_USE_DOUBLE_LINE_CLOCK,
- 1,
+ /* defaultValue= */ 1,
UserHandle.USER_CURRENT
- ) == 1
- ) {
- SettingsClockSize.DYNAMIC
- } else {
- SettingsClockSize.SMALL
- }
+ )
+ )
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/DozeInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/DozeInteractor.kt
index af1802f..d04e4f1 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/DozeInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/DozeInteractor.kt
@@ -19,6 +19,10 @@
import android.graphics.Point
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.keyguard.data.repository.KeyguardRepository
+import com.android.systemui.scene.domain.interactor.SceneInteractor
+import com.android.systemui.scene.shared.flag.SceneContainerFlag
+import com.android.systemui.scene.shared.model.Scenes
+import dagger.Lazy
import javax.inject.Inject
@SysUISingleton
@@ -26,7 +30,16 @@
@Inject
constructor(
private val keyguardRepository: KeyguardRepository,
+ // TODO(b/336364825) Remove Lazy when SceneContainerFlag is released -
+ // while the flag is off, creating this object too early results in a crash
+ private val sceneInteractor: Lazy<SceneInteractor>,
) {
+ fun canDozeFromCurrentScene(): Boolean {
+ if (SceneContainerFlag.isUnexpectedlyInLegacyMode()) {
+ return false
+ }
+ return sceneInteractor.get().currentScene.value == Scenes.Lockscreen
+ }
fun setAodAvailable(value: Boolean) {
keyguardRepository.setAodAvailable(value)
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromAlternateBouncerTransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromAlternateBouncerTransitionInteractor.kt
index dfe56c8..39aa615 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromAlternateBouncerTransitionInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromAlternateBouncerTransitionInteractor.kt
@@ -17,6 +17,7 @@
package com.android.systemui.keyguard.domain.interactor
import android.animation.ValueAnimator
+import com.android.systemui.bouncer.domain.interactor.PrimaryBouncerInteractor
import com.android.systemui.communal.domain.interactor.CommunalInteractor
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Background
@@ -32,14 +33,21 @@
import kotlin.time.Duration.Companion.milliseconds
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.distinctUntilChanged
+import kotlinx.coroutines.flow.emptyFlow
+import kotlinx.coroutines.flow.filter
+import kotlinx.coroutines.flow.flatMapLatest
+import kotlinx.coroutines.flow.map
+import kotlinx.coroutines.flow.merge
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.onStart
import kotlinx.coroutines.launch
+@ExperimentalCoroutinesApi
@SysUISingleton
class FromAlternateBouncerTransitionInteractor
@Inject
@@ -53,6 +61,7 @@
private val communalInteractor: CommunalInteractor,
powerInteractor: PowerInteractor,
keyguardOcclusionInteractor: KeyguardOcclusionInteractor,
+ private val primaryBouncerInteractor: PrimaryBouncerInteractor,
) :
TransitionInteractor(
fromState = KeyguardState.ALTERNATE_BOUNCER,
@@ -102,13 +111,14 @@
keyguardInteractor.primaryBouncerShowing,
powerInteractor.isAwake,
keyguardInteractor.isAodAvailable,
- communalInteractor.isIdleOnCommunal
+ communalInteractor.isIdleOnCommunal,
+ keyguardInteractor.isKeyguardOccluded,
)
.filterRelevantKeyguardStateAnd {
(isAlternateBouncerShowing, isPrimaryBouncerShowing, _, _, _) ->
!isAlternateBouncerShowing && !isPrimaryBouncerShowing
}
- .collect { (_, _, isAwake, isAodAvailable, isIdleOnCommunal) ->
+ .collect { (_, _, isAwake, isAodAvailable, isIdleOnCommunal, isOccluded) ->
val to =
if (!isAwake) {
if (isAodAvailable) {
@@ -119,6 +129,8 @@
} else {
if (isIdleOnCommunal) {
KeyguardState.GLANCEABLE_HUB
+ } else if (isOccluded) {
+ KeyguardState.OCCLUDED
} else {
KeyguardState.LOCKSCREEN
}
@@ -135,10 +147,19 @@
}
scope.launch {
- keyguardInteractor.isKeyguardGoingAway
- .sampleUtil(finishedKeyguardState, ::Pair)
- .collect { (isKeyguardGoingAway, keyguardState) ->
- if (isKeyguardGoingAway && keyguardState == KeyguardState.ALTERNATE_BOUNCER) {
+ merge(
+ keyguardInteractor.isKeyguardGoingAway.filter { it }.map {}, // map to Unit
+ keyguardInteractor.isKeyguardOccluded.flatMapLatest { keyguardOccluded ->
+ if (keyguardOccluded) {
+ primaryBouncerInteractor.keyguardAuthenticatedBiometricsHandled
+ } else {
+ emptyFlow()
+ }
+ }
+ )
+ .sampleUtil(finishedKeyguardState)
+ .collect { keyguardState ->
+ if (keyguardState == KeyguardState.ALTERNATE_BOUNCER) {
startTransitionTo(KeyguardState.GONE)
}
}
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 f359525..c415081 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
@@ -19,6 +19,7 @@
import android.animation.ValueAnimator
import com.android.app.animation.Interpolators
import com.android.app.tracing.coroutines.launch
+import com.android.internal.widget.LockPatternUtils
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.dagger.qualifiers.Main
@@ -28,6 +29,7 @@
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.TransitionModeOnCanceled
import com.android.systemui.power.domain.interactor.PowerInteractor
+import com.android.systemui.user.domain.interactor.SelectedUserInteractor
import com.android.systemui.util.kotlin.Utils.Companion.sample
import javax.inject.Inject
import kotlin.time.Duration.Companion.milliseconds
@@ -47,6 +49,8 @@
private val keyguardInteractor: KeyguardInteractor,
powerInteractor: PowerInteractor,
keyguardOcclusionInteractor: KeyguardOcclusionInteractor,
+ private val lockPatternUtils: LockPatternUtils,
+ private val selectedUserInteractor: SelectedUserInteractor,
) :
TransitionInteractor(
fromState = KeyguardState.AOD,
@@ -79,9 +83,8 @@
startedKeyguardTransitionStep,
keyguardInteractor.biometricUnlockState,
keyguardInteractor.primaryBouncerShowing,
- keyguardInteractor.isKeyguardShowing,
keyguardInteractor.isKeyguardOccluded,
- keyguardInteractor.isKeyguardDismissible,
+ selectedUserInteractor.selectedUser,
)
.collect {
(
@@ -89,10 +92,11 @@
startedStep,
biometricUnlockState,
primaryBouncerShowing,
- _,
isKeyguardOccludedLegacy,
- _) ->
+ currentUser,
+ ) ->
if (!maybeHandleInsecurePowerGesture()) {
+ val securityNone = lockPatternUtils.isLockScreenDisabled(currentUser)
val shouldTransitionToLockscreen =
if (KeyguardWmStateRefactor.isEnabled) {
// Check with the superclass to see if an occlusion transition is
@@ -101,11 +105,13 @@
// completes.
!maybeStartTransitionToOccludedOrInsecureCamera() &&
!isWakeAndUnlock(biometricUnlockState) &&
- !primaryBouncerShowing
+ !primaryBouncerShowing &&
+ !securityNone
} else {
!isKeyguardOccludedLegacy &&
!isWakeAndUnlock(biometricUnlockState) &&
- !primaryBouncerShowing
+ !primaryBouncerShowing &&
+ !securityNone
}
// With the refactor enabled, maybeStartTransitionToOccludedOrInsecureCamera
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromDreamingTransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromDreamingTransitionInteractor.kt
index b8ceab3..69c2c78d 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromDreamingTransitionInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromDreamingTransitionInteractor.kt
@@ -65,6 +65,7 @@
) {
override fun start() {
+ listenForDreamingToAlternateBouncer()
listenForDreamingToOccluded()
listenForDreamingToGoneWhenDismissable()
listenForDreamingToGoneFromBiometricUnlock()
@@ -75,6 +76,16 @@
listenForDreamingToPrimaryBouncer()
}
+ private fun listenForDreamingToAlternateBouncer() {
+ scope.launch("$TAG#listenForDreamingToAlternateBouncer") {
+ keyguardInteractor.alternateBouncerShowing
+ .filterRelevantKeyguardStateAnd { isAlternateBouncerShowing ->
+ isAlternateBouncerShowing
+ }
+ .collect { startTransitionTo(KeyguardState.ALTERNATE_BOUNCER) }
+ }
+ }
+
private fun listenForDreamingToGlanceableHub() {
if (!communalHub()) return
scope.launch("$TAG#listenForDreamingToGlanceableHub", mainDispatcher) {
@@ -113,18 +124,6 @@
}
}
- fun startToGlanceableHubTransition() {
- scope.launch {
- KeyguardWmStateRefactor.isUnexpectedlyInLegacyMode()
- if (
- transitionInteractor.startedKeyguardState.replayCache.last() ==
- KeyguardState.DREAMING
- ) {
- startTransitionTo(KeyguardState.GLANCEABLE_HUB)
- }
- }
- }
-
@OptIn(FlowPreview::class)
private fun listenForDreamingToOccluded() {
if (KeyguardWmStateRefactor.isEnabled) {
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardBlueprintInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardBlueprintInteractor.kt
index 720baec..da4f85e 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardBlueprintInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardBlueprintInteractor.kt
@@ -31,15 +31,14 @@
import com.android.systemui.keyguard.ui.view.layout.blueprints.SplitShadeKeyguardBlueprint
import com.android.systemui.keyguard.ui.view.layout.blueprints.transitions.IntraBlueprintTransition.Config
import com.android.systemui.keyguard.ui.view.layout.blueprints.transitions.IntraBlueprintTransition.Type
-import com.android.systemui.statusbar.policy.SplitShadeStateController
+import com.android.systemui.shade.domain.interactor.ShadeInteractor
+import com.android.systemui.shade.shared.model.ShadeMode
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.ExperimentalCoroutinesApi
-import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.StateFlow
+import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.filter
-import kotlinx.coroutines.flow.map
-import kotlinx.coroutines.flow.merge
-import kotlinx.coroutines.flow.onStart
import kotlinx.coroutines.launch
@SysUISingleton
@@ -49,14 +48,13 @@
private val keyguardBlueprintRepository: KeyguardBlueprintRepository,
@Application private val applicationScope: CoroutineScope,
private val context: Context,
- private val splitShadeStateController: SplitShadeStateController,
+ private val shadeInteractor: ShadeInteractor,
private val clockInteractor: KeyguardClockInteractor,
configurationInteractor: ConfigurationInteractor,
fingerprintPropertyInteractor: FingerprintPropertyInteractor,
) {
-
/** The current blueprint for the lockscreen. */
- val blueprint: Flow<KeyguardBlueprint> = keyguardBlueprintRepository.blueprint
+ val blueprint: StateFlow<KeyguardBlueprint> = keyguardBlueprintRepository.blueprint
/**
* Triggered when the blueprint isn't changed, but the ConstraintSet should be rebuilt and
@@ -64,32 +62,23 @@
*/
val refreshTransition = keyguardBlueprintRepository.refreshTransition
- private val configOrPropertyChange =
- merge(
+ /** Current BlueprintId */
+ val blueprintId =
+ combine(
configurationInteractor.onAnyConfigurationChange,
- fingerprintPropertyInteractor.propertiesInitialized.filter { it }.map {}, // map to Unit
- )
- init {
- applicationScope.launch {
- configOrPropertyChange.onStart { emit(Unit) }.collect { updateBlueprint() }
- }
- applicationScope.launch { clockInteractor.currentClock.collect { updateBlueprint() } }
- }
-
- /**
- * Detects when a new blueprint should be applied and calls [transitionToBlueprint]. This may
- * end up reapplying the same blueprint, which is fine as configuration may have changed.
- */
- private fun updateBlueprint() {
- val useSplitShade =
- splitShadeStateController.shouldUseSplitNotificationShade(context.resources)
-
- val blueprintId =
+ fingerprintPropertyInteractor.propertiesInitialized.filter { it },
+ clockInteractor.currentClock,
+ shadeInteractor.shadeMode,
+ ) { _, _, _, shadeMode ->
+ val useSplitShade = shadeMode == ShadeMode.Split && !ComposeLockscreen.isEnabled
when {
- useSplitShade && !ComposeLockscreen.isEnabled -> SplitShadeKeyguardBlueprint.ID
+ useSplitShade -> SplitShadeKeyguardBlueprint.ID
else -> DefaultKeyguardBlueprint.DEFAULT
}
- transitionToBlueprint(blueprintId)
+ }
+
+ init {
+ applicationScope.launch { blueprintId.collect { transitionToBlueprint(it) } }
}
/**
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardClockInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardClockInteractor.kt
index f7f60a5..142b1a0 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardClockInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardClockInteractor.kt
@@ -20,14 +20,12 @@
import android.util.Log
import com.android.keyguard.ClockEventController
import com.android.keyguard.KeyguardClockSwitch
-import com.android.keyguard.KeyguardClockSwitch.ClockSize
-import com.android.keyguard.KeyguardClockSwitch.LARGE
-import com.android.keyguard.KeyguardClockSwitch.SMALL
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.keyguard.data.repository.KeyguardClockRepository
+import com.android.systemui.keyguard.shared.model.ClockSize
+import com.android.systemui.keyguard.shared.model.ClockSizeSetting
import com.android.systemui.keyguard.shared.model.KeyguardState
-import com.android.systemui.keyguard.shared.model.SettingsClockSize
import com.android.systemui.media.controls.domain.pipeline.interactor.MediaCarouselInteractor
import com.android.systemui.plugins.clocks.ClockController
import com.android.systemui.plugins.clocks.ClockId
@@ -59,12 +57,12 @@
keyguardTransitionInteractor: KeyguardTransitionInteractor,
headsUpNotificationInteractor: HeadsUpNotificationInteractor,
@Application private val applicationScope: CoroutineScope,
- private val keyguardClockRepository: KeyguardClockRepository,
+ val keyguardClockRepository: KeyguardClockRepository,
) {
private val isOnAod: Flow<Boolean> =
keyguardTransitionInteractor.currentKeyguardState.map { it == KeyguardState.AOD }
- val selectedClockSize: StateFlow<SettingsClockSize> = keyguardClockRepository.selectedClockSize
+ val selectedClockSize: StateFlow<ClockSizeSetting> = keyguardClockRepository.selectedClockSize
val currentClockId: Flow<ClockId> = keyguardClockRepository.currentClockId
@@ -76,8 +74,7 @@
var clock: ClockController? by keyguardClockRepository.clockEventController::clock
- // TODO (b/333389512): Convert this into a more readable enum.
- val clockSize: StateFlow<Int> =
+ val clockSize: StateFlow<ClockSize> =
if (SceneContainerFlag.isEnabled) {
combine(
shadeInteractor.shadeMode,
@@ -87,20 +84,19 @@
isOnAod,
) { shadeMode, hasNotifs, hasMedia, isDozing, isOnAod ->
return@combine when {
- keyguardClockRepository.shouldForceSmallClock && !isOnAod -> SMALL
- shadeMode == ShadeMode.Single && (hasNotifs || hasMedia) -> SMALL
- shadeMode == ShadeMode.Single -> LARGE
- hasMedia && !isDozing -> SMALL
- else -> LARGE
+ keyguardClockRepository.shouldForceSmallClock && !isOnAod -> ClockSize.SMALL
+ shadeMode == ShadeMode.Single && (hasNotifs || hasMedia) -> ClockSize.SMALL
+ shadeMode == ShadeMode.Single -> ClockSize.LARGE
+ hasMedia && !isDozing -> ClockSize.SMALL
+ else -> ClockSize.LARGE
}
}
.stateIn(
scope = applicationScope,
started = SharingStarted.WhileSubscribed(),
- initialValue = LARGE
+ initialValue = ClockSize.LARGE
)
} else {
- SceneContainerFlag.assertInLegacyMode()
keyguardClockRepository.clockSize
}
@@ -130,11 +126,14 @@
}
}
} else {
- SceneContainerFlag.assertInLegacyMode()
keyguardInteractor.clockShouldBeCentered
}
- fun setClockSize(@ClockSize size: Int) {
+ fun setClockSize(@KeyguardClockSwitch.ClockSize size: Int) =
+ setClockSize(ClockSize.fromLegacy(size))
+
+ fun setClockSize(size: ClockSize) {
+ SceneContainerFlag.assertInLegacyMode()
keyguardClockRepository.setClockSize(size)
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt
index 7224536..d191768 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt
@@ -226,7 +226,7 @@
val ambientIndicationVisible: Flow<Boolean> = repository.ambientIndicationVisible.asStateFlow()
/** Whether the primary bouncer is showing or not. */
- val primaryBouncerShowing: Flow<Boolean> = bouncerRepository.primaryBouncerShow
+ @JvmField val primaryBouncerShowing: Flow<Boolean> = bouncerRepository.primaryBouncerShow
/** Whether the alternate bouncer is showing or not. */
val alternateBouncerShowing: Flow<Boolean> = bouncerRepository.alternateBouncerVisible
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractor.kt
index 8eb1a50..1e3eac8 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractor.kt
@@ -23,6 +23,7 @@
import android.content.Intent
import android.util.Log
import com.android.app.tracing.coroutines.withContext
+import com.android.compose.animation.scene.ObservableTransitionState
import com.android.internal.widget.LockPatternUtils
import com.android.systemui.animation.DialogTransitionAnimator
import com.android.systemui.animation.Expandable
@@ -45,6 +46,9 @@
import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordancesMetricsLogger
import com.android.systemui.plugins.ActivityStarter
import com.android.systemui.res.R
+import com.android.systemui.scene.domain.interactor.SceneInteractor
+import com.android.systemui.scene.shared.flag.SceneContainerFlag
+import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.settings.UserTracker
import com.android.systemui.shade.domain.interactor.ShadeInteractor
import com.android.systemui.shared.customization.data.content.CustomizationProviderContract as Contract
@@ -82,6 +86,7 @@
private val biometricSettingsRepository: BiometricSettingsRepository,
@Background private val backgroundDispatcher: CoroutineDispatcher,
@Application private val appContext: Context,
+ private val sceneInteractor: Lazy<SceneInteractor>,
) {
/**
@@ -102,7 +107,21 @@
return combine(
quickAffordanceAlwaysVisible(position),
keyguardInteractor.isDozing,
- keyguardInteractor.isKeyguardShowing,
+ if (SceneContainerFlag.isEnabled) {
+ sceneInteractor
+ .get()
+ .transitionState
+ .map {
+ when (it) {
+ is ObservableTransitionState.Idle -> it.scene == Scenes.Lockscreen
+ is ObservableTransitionState.Transition ->
+ it.fromScene == Scenes.Lockscreen || it.toScene == Scenes.Lockscreen
+ }
+ }
+ .distinctUntilChanged()
+ } else {
+ keyguardInteractor.isKeyguardShowing
+ },
shadeInteractor.anyExpansion.map { it < 1.0f }.distinctUntilChanged(),
biometricSettingsRepository.isCurrentUserInLockdown,
) { affordance, isDozing, isKeyguardShowing, isQuickSettingsVisible, isUserInLockdown ->
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardSmartspaceInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardSmartspaceInteractor.kt
index 67b5745..bb633b5 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardSmartspaceInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardSmartspaceInteractor.kt
@@ -24,8 +24,10 @@
@SysUISingleton
class KeyguardSmartspaceInteractor
@Inject
-constructor(private val keyguardSmartspaceRepository: KeyguardSmartspaceRepository) {
- var bcSmartspaceVisibility: StateFlow<Int> = keyguardSmartspaceRepository.bcSmartspaceVisibility
+constructor(
+ private val keyguardSmartspaceRepository: KeyguardSmartspaceRepository,
+) {
+ val bcSmartspaceVisibility: StateFlow<Int> = keyguardSmartspaceRepository.bcSmartspaceVisibility
fun setBcSmartspaceVisibility(visibility: Int) {
keyguardSmartspaceRepository.setBcSmartspaceVisibility(visibility)
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/TransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/TransitionInteractor.kt
index e456a55..2850165 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/TransitionInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/TransitionInteractor.kt
@@ -224,20 +224,12 @@
) {
if (!KeyguardWmStateRefactor.isEnabled) {
scope.launch {
- keyguardInteractor.onCameraLaunchDetected
- .sample(transitionInteractor.finishedKeyguardState)
- .collect { finishedKeyguardState ->
- // Other keyguard state transitions may trigger on the first power button
- // push,
- // so use the last finishedKeyguardState to determine the overriding FROM
- // state
- if (finishedKeyguardState == fromState) {
- startTransitionTo(
- toState = KeyguardState.OCCLUDED,
- modeOnCanceled = TransitionModeOnCanceled.RESET,
- )
- }
- }
+ keyguardInteractor.onCameraLaunchDetected.filterRelevantKeyguardState().collect {
+ startTransitionTo(
+ toState = KeyguardState.OCCLUDED,
+ modeOnCanceled = TransitionModeOnCanceled.RESET,
+ )
+ }
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/ClockSize.kt b/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/ClockSize.kt
new file mode 100644
index 0000000..b661297
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/ClockSize.kt
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package com.android.systemui.keyguard.shared.model
+
+import android.util.Log
+import com.android.keyguard.KeyguardClockSwitch
+
+enum class ClockSize(
+ @KeyguardClockSwitch.ClockSize val legacyValue: Int,
+) {
+ SMALL(KeyguardClockSwitch.SMALL),
+ LARGE(KeyguardClockSwitch.LARGE);
+
+ companion object {
+ private val TAG = ClockSize::class.simpleName!!
+ fun fromLegacy(@KeyguardClockSwitch.ClockSize value: Int): ClockSize {
+ for (enumVal in enumValues<ClockSize>()) {
+ if (enumVal.legacyValue == value) {
+ return enumVal
+ }
+ }
+
+ Log.e(TAG, "Unrecognized legacy clock size value: $value")
+ return LARGE
+ }
+ }
+}
+
+enum class ClockSizeSetting(
+ val settingValue: Int,
+) {
+ DYNAMIC(1),
+ SMALL(0);
+
+ companion object {
+ private val TAG = ClockSizeSetting::class.simpleName!!
+ fun fromSettingValue(value: Int): ClockSizeSetting {
+ for (enumVal in enumValues<ClockSizeSetting>()) {
+ if (enumVal.settingValue == value) {
+ return enumVal
+ }
+ }
+
+ Log.e(TAG, "Unrecognized clock setting value: $value")
+ return DYNAMIC
+ }
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/KeyguardBlueprint.kt b/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/KeyguardBlueprint.kt
index 3440440..7ca2eba 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/KeyguardBlueprint.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/KeyguardBlueprint.kt
@@ -35,16 +35,18 @@
* @param bindData: Whether to bind the data or not.
*/
fun replaceViews(
- previousBlueprint: KeyguardBlueprint?,
constraintLayout: ConstraintLayout,
+ previousBlueprint: KeyguardBlueprint? = null,
bindData: Boolean = true
) {
- previousBlueprint?.let { previousBlueprint ->
- previousBlueprint.sections.subtract(sections).forEach {
- it.removeViews(constraintLayout)
+ val prevSections =
+ previousBlueprint?.let { prev ->
+ prev.sections.subtract(sections).forEach { it.removeViews(constraintLayout) }
+ prev.sections
}
- }
- sections.subtract((previousBlueprint?.sections ?: setOf()).toSet()).forEach {
+ ?: listOf()
+
+ sections.subtract(prevSections).forEach {
it.addViews(constraintLayout)
if (bindData) {
it.bindData(constraintLayout)
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/KeyguardState.kt b/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/KeyguardState.kt
index 92612b8..7d05539 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/KeyguardState.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/KeyguardState.kt
@@ -87,6 +87,7 @@
}
/** Whether either of the bouncers are visible when we're FINISHED in the given state. */
+ @JvmStatic
fun isBouncerState(state: KeyguardState): Boolean {
return state == PRIMARY_BOUNCER || state == ALTERNATE_BOUNCER
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBlueprintViewBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBlueprintViewBinder.kt
index 6b8e896..52d7519 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBlueprintViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardBlueprintViewBinder.kt
@@ -18,7 +18,6 @@
package com.android.systemui.keyguard.ui.binder
import android.os.Handler
-import android.os.Trace
import android.transition.Transition
import android.transition.TransitionManager
import android.util.Log
@@ -30,6 +29,7 @@
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.keyguard.KeyguardBottomAreaRefactor
+import com.android.systemui.keyguard.shared.model.KeyguardBlueprint
import com.android.systemui.keyguard.ui.view.layout.blueprints.transitions.BaseBlueprintTransition
import com.android.systemui.keyguard.ui.view.layout.blueprints.transitions.IntraBlueprintTransition
import com.android.systemui.keyguard.ui.view.layout.blueprints.transitions.IntraBlueprintTransition.Config
@@ -39,12 +39,10 @@
import com.android.systemui.lifecycle.repeatWhenAttached
import com.android.systemui.res.R
import com.android.systemui.shared.R as sharedR
+import com.android.systemui.util.kotlin.pairwise
import javax.inject.Inject
import kotlin.math.max
-private const val TAG = "KeyguardBlueprintViewBinder"
-private const val DEBUG = false
-
@SysUISingleton
class KeyguardBlueprintViewBinder
@Inject
@@ -92,59 +90,59 @@
constraintLayout.repeatWhenAttached {
repeatOnLifecycle(Lifecycle.State.CREATED) {
launch("$TAG#viewModel.blueprint") {
- viewModel.blueprint.collect { blueprint ->
- Trace.beginSection("KeyguardBlueprintViewBinder#applyBlueprint")
- val prevBluePrint = viewModel.currentBluePrint
+ viewModel.blueprint
+ .pairwise(
+ null as KeyguardBlueprint?,
+ )
+ .collect { (prevBlueprint, blueprint) ->
+ val cs =
+ ConstraintSet().apply {
+ clone(constraintLayout)
+ val emptyLayout = ConstraintSet.Layout()
+ knownIds.forEach {
+ getConstraint(it).layout.copyFrom(emptyLayout)
+ }
+ blueprint.applyConstraints(this)
+ }
- val cs =
- ConstraintSet().apply {
- clone(constraintLayout)
- val emptyLayout = ConstraintSet.Layout()
- knownIds.forEach { getConstraint(it).layout.copyFrom(emptyLayout) }
- blueprint.applyConstraints(this)
- }
-
- var transition =
- if (
- !KeyguardBottomAreaRefactor.isEnabled &&
- prevBluePrint != null &&
- prevBluePrint != blueprint
- ) {
- BaseBlueprintTransition(clockViewModel)
- .addTransition(
- IntraBlueprintTransition(
- Config.DEFAULT,
- clockViewModel,
- smartspaceViewModel
+ var transition =
+ if (
+ !KeyguardBottomAreaRefactor.isEnabled &&
+ prevBlueprint != null &&
+ prevBlueprint != blueprint
+ ) {
+ BaseBlueprintTransition(clockViewModel)
+ .addTransition(
+ IntraBlueprintTransition(
+ Config.DEFAULT,
+ clockViewModel,
+ smartspaceViewModel
+ )
)
+ } else {
+ IntraBlueprintTransition(
+ Config.DEFAULT,
+ clockViewModel,
+ smartspaceViewModel
)
- } else {
- IntraBlueprintTransition(
- Config.DEFAULT,
- clockViewModel,
- smartspaceViewModel
- )
+ }
+
+ runTransition(constraintLayout, transition, Config.DEFAULT) {
+ // Add and remove views of sections that are not contained by the
+ // other.
+ blueprint.replaceViews(constraintLayout, prevBlueprint)
+ logAlphaVisibilityOfAppliedConstraintSet(cs, clockViewModel)
+ cs.applyTo(constraintLayout)
}
-
- runTransition(constraintLayout, transition, Config.DEFAULT) {
- // Add and remove views of sections that are not contained by the other.
- blueprint.replaceViews(prevBluePrint, constraintLayout)
- logAlphaVisibilityOfAppliedConstraintSet(cs, clockViewModel)
- cs.applyTo(constraintLayout)
}
-
- viewModel.currentBluePrint = blueprint
- Trace.endSection()
- }
}
launch("$TAG#viewModel.refreshTransition") {
viewModel.refreshTransition.collect { transition ->
- Trace.beginSection("KeyguardBlueprintViewBinder#refreshTransition")
val cs =
ConstraintSet().apply {
clone(constraintLayout)
- viewModel.currentBluePrint?.applyConstraints(this)
+ viewModel.blueprint.value.applyConstraints(this)
}
runTransition(
@@ -159,7 +157,6 @@
logAlphaVisibilityOfAppliedConstraintSet(cs, clockViewModel)
cs.applyTo(constraintLayout)
}
- Trace.endSection()
}
}
}
@@ -235,4 +232,9 @@
"alpha=${cs.getConstraint(smartspaceDateId).propertySet.alpha}"
)
}
+
+ companion object {
+ private const val TAG = "KeyguardBlueprintViewBinder"
+ private const val DEBUG = false
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardClockViewBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardClockViewBinder.kt
index 7178e1b..ed5d53c 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardClockViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardClockViewBinder.kt
@@ -26,11 +26,10 @@
import androidx.constraintlayout.widget.ConstraintSet
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.repeatOnLifecycle
-import com.android.keyguard.KeyguardClockSwitch.LARGE
-import com.android.keyguard.KeyguardClockSwitch.SMALL
import com.android.systemui.keyguard.MigrateClocksToBlueprint
import com.android.systemui.keyguard.domain.interactor.KeyguardBlueprintInteractor
import com.android.systemui.keyguard.domain.interactor.KeyguardClockInteractor
+import com.android.systemui.keyguard.shared.model.ClockSize
import com.android.systemui.keyguard.ui.view.layout.blueprints.transitions.IntraBlueprintTransition.Type
import com.android.systemui.keyguard.ui.view.layout.sections.ClockSection
import com.android.systemui.keyguard.ui.viewmodel.KeyguardClockViewModel
@@ -55,6 +54,7 @@
keyguardClockInteractor.clockEventController.registerListeners(keyguardRootView)
}
}
+
keyguardRootView.repeatWhenAttached {
repeatOnLifecycle(Lifecycle.State.CREATED) {
launch {
@@ -62,17 +62,19 @@
viewModel.currentClock.collect { currentClock ->
cleanupClockViews(currentClock, keyguardRootView, viewModel.burnInLayer)
addClockViews(currentClock, keyguardRootView)
- updateBurnInLayer(keyguardRootView, viewModel)
+ updateBurnInLayer(keyguardRootView, viewModel, viewModel.clockSize.value)
applyConstraints(clockSection, keyguardRootView, true)
}
}
+
launch {
if (!MigrateClocksToBlueprint.isEnabled) return@launch
- viewModel.clockSize.collect {
- updateBurnInLayer(keyguardRootView, viewModel)
+ viewModel.clockSize.collect { clockSize ->
+ updateBurnInLayer(keyguardRootView, viewModel, clockSize)
blueprintInteractor.refreshBlueprint(Type.ClockSize)
}
}
+
launch {
if (!MigrateClocksToBlueprint.isEnabled) return@launch
viewModel.clockShouldBeCentered.collect {
@@ -90,11 +92,14 @@
}
}
}
+
launch {
if (!MigrateClocksToBlueprint.isEnabled) return@launch
viewModel.isAodIconsVisible.collect {
viewModel.currentClock.value?.let {
- if (viewModel.useLargeClock && it.config.useCustomClockScene) {
+ if (
+ viewModel.isLargeClockVisible.value && it.config.useCustomClockScene
+ ) {
blueprintInteractor.refreshBlueprint(Type.DefaultTransition)
}
}
@@ -108,18 +113,19 @@
fun updateBurnInLayer(
keyguardRootView: ConstraintLayout,
viewModel: KeyguardClockViewModel,
+ clockSize: ClockSize,
) {
val burnInLayer = viewModel.burnInLayer
val clockController = viewModel.currentClock.value
clockController?.let { clock ->
- when (viewModel.clockSize.value) {
- LARGE -> {
+ when (clockSize) {
+ ClockSize.LARGE -> {
clock.smallClock.layout.views.forEach { burnInLayer?.removeView(it) }
if (clock.config.useAlternateSmartspaceAODTransition) {
clock.largeClock.layout.views.forEach { burnInLayer?.addView(it) }
}
}
- SMALL -> {
+ ClockSize.SMALL -> {
clock.smallClock.layout.views.forEach { burnInLayer?.addView(it) }
clock.largeClock.layout.views.forEach { burnInLayer?.removeView(it) }
}
@@ -136,15 +142,16 @@
if (lastClock == currentClock) {
return
}
+
lastClock?.let { clock ->
clock.smallClock.layout.views.forEach {
burnInLayer?.removeView(it)
rootView.removeView(it)
}
+
// add large clock to burn in layer only when it will have same transition with other
- // components in AOD
- // otherwise, it will have a separate scale transition while other components only have
- // translate transition
+ // components in AOD otherwise, it will have a separate scale transition while other
+ // components only have translate transition
if (clock.config.useAlternateSmartspaceAODTransition) {
clock.largeClock.layout.views.forEach { burnInLayer?.removeView(it) }
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardPreviewClockViewBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardPreviewClockViewBinder.kt
index 3ff32bf..8386628 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardPreviewClockViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardPreviewClockViewBinder.kt
@@ -36,7 +36,7 @@
import com.android.app.tracing.coroutines.launch
import com.android.internal.policy.SystemBarUtils
import com.android.systemui.customization.R as customizationR
-import com.android.systemui.keyguard.shared.model.SettingsClockSize
+import com.android.systemui.keyguard.shared.model.ClockSizeSetting
import com.android.systemui.keyguard.ui.preview.KeyguardPreviewRenderer
import com.android.systemui.keyguard.ui.view.layout.sections.ClockSection.Companion.getDimen
import com.android.systemui.keyguard.ui.view.layout.sections.setVisibility
@@ -199,14 +199,14 @@
// flickering
val largeClockVisibility =
when (viewModel.selectedClockSize.value) {
- SettingsClockSize.DYNAMIC -> VISIBLE
- SettingsClockSize.SMALL -> INVISIBLE
+ ClockSizeSetting.DYNAMIC -> VISIBLE
+ ClockSizeSetting.SMALL -> INVISIBLE
null -> INVISIBLE
}
val smallClockVisibility =
when (viewModel.selectedClockSize.value) {
- SettingsClockSize.DYNAMIC -> INVISIBLE
- SettingsClockSize.SMALL -> VISIBLE
+ ClockSizeSetting.DYNAMIC -> INVISIBLE
+ ClockSizeSetting.SMALL -> VISIBLE
null -> INVISIBLE
}
cs.apply {
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardPreviewSmartspaceViewBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardPreviewSmartspaceViewBinder.kt
index 88d9074..4b75b80 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardPreviewSmartspaceViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardPreviewSmartspaceViewBinder.kt
@@ -23,7 +23,7 @@
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.repeatOnLifecycle
import com.android.app.tracing.coroutines.launch
-import com.android.systemui.keyguard.shared.model.SettingsClockSize
+import com.android.systemui.keyguard.shared.model.ClockSizeSetting
import com.android.systemui.keyguard.ui.viewmodel.KeyguardPreviewSmartspaceViewModel
import com.android.systemui.lifecycle.repeatWhenAttached
@@ -43,12 +43,12 @@
viewModel.selectedClockSize.collect {
val topPadding =
when (it) {
- SettingsClockSize.DYNAMIC ->
+ ClockSizeSetting.DYNAMIC ->
viewModel.getLargeClockSmartspaceTopPadding(
splitShadePreview,
previewContext,
)
- SettingsClockSize.SMALL ->
+ ClockSizeSetting.SMALL ->
viewModel.getSmallClockSmartspaceTopPadding(
splitShadePreview,
previewContext,
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt
index cc54920..ccc48b5 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt
@@ -36,6 +36,7 @@
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.repeatOnLifecycle
import com.android.app.animation.Interpolators
+import com.android.app.tracing.coroutines.launch
import com.android.internal.jank.InteractionJankMonitor
import com.android.internal.jank.InteractionJankMonitor.CUJ_SCREEN_OFF_SHOW_AOD
import com.android.systemui.Flags.newAodTransition
@@ -94,8 +95,8 @@
view: ViewGroup,
viewModel: KeyguardRootViewModel,
configuration: ConfigurationState,
- occludingAppDeviceEntryMessageViewModel: OccludingAppDeviceEntryMessageViewModel,
- chipbarCoordinator: ChipbarCoordinator,
+ occludingAppDeviceEntryMessageViewModel: OccludingAppDeviceEntryMessageViewModel?,
+ chipbarCoordinator: ChipbarCoordinator?,
screenOffAnimationController: ScreenOffAnimationController,
shadeInteractor: ShadeInteractor,
clockInteractor: KeyguardClockInteractor,
@@ -121,11 +122,7 @@
}
val burnInParams = MutableStateFlow(BurnInParameters())
- val viewState =
- ViewStateAccessor(
- alpha = { view.alpha },
- )
-
+ val viewState = ViewStateAccessor(alpha = { view.alpha })
disposables +=
view.repeatWhenAttached {
repeatOnLifecycle(Lifecycle.State.CREATED) {
@@ -145,17 +142,17 @@
)
}
launch {
- occludingAppDeviceEntryMessageViewModel.message.collect { biometricMessage
+ occludingAppDeviceEntryMessageViewModel?.message?.collect { biometricMessage
->
if (biometricMessage?.message != null) {
- chipbarCoordinator.displayView(
+ chipbarCoordinator!!.displayView(
createChipbarInfo(
biometricMessage.message,
R.drawable.ic_lock,
)
)
} else {
- chipbarCoordinator.removeView(ID, "occludingAppMsgNull")
+ chipbarCoordinator!!.removeView(ID, "occludingAppMsgNull")
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/ClockSection.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/ClockSection.kt
index 78a1fcf..ef29270 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/ClockSection.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/ClockSection.kt
@@ -31,7 +31,7 @@
import androidx.constraintlayout.widget.ConstraintSet.TOP
import androidx.constraintlayout.widget.ConstraintSet.VISIBLE
import androidx.constraintlayout.widget.ConstraintSet.WRAP_CONTENT
-import com.android.systemui.customization.R as customizationR
+import com.android.systemui.customization.R as custR
import com.android.systemui.keyguard.MigrateClocksToBlueprint
import com.android.systemui.keyguard.domain.interactor.KeyguardBlueprintInteractor
import com.android.systemui.keyguard.domain.interactor.KeyguardClockInteractor
@@ -56,7 +56,7 @@
alpha: Float,
) = views.forEach { view -> this.setAlpha(view.id, alpha) }
-open class ClockSection
+class ClockSection
@Inject
constructor(
private val clockInteractor: KeyguardClockInteractor,
@@ -66,7 +66,6 @@
val blueprintInteractor: Lazy<KeyguardBlueprintInteractor>,
) : KeyguardSection() {
override fun addViews(constraintLayout: ConstraintLayout) {}
-
override fun bindData(constraintLayout: ConstraintLayout) {
if (!MigrateClocksToBlueprint.isEnabled) {
return
@@ -106,21 +105,18 @@
setVisibility(getNonTargetClockFace(clock).views, GONE)
setAlpha(getTargetClockFace(clock).views, 1F)
setAlpha(getNonTargetClockFace(clock).views, 0F)
- if (!keyguardClockViewModel.useLargeClock) {
+ if (!keyguardClockViewModel.isLargeClockVisible.value) {
connect(sharedR.id.bc_smartspace_view, TOP, sharedR.id.date_smartspace_view, BOTTOM)
}
}
}
private fun getTargetClockFace(clock: ClockController): ClockFaceLayout =
- if (keyguardClockViewModel.useLargeClock) getLargeClockFace(clock)
- else getSmallClockFace(clock)
+ if (keyguardClockViewModel.isLargeClockVisible.value) clock.largeClock.layout
+ else clock.smallClock.layout
private fun getNonTargetClockFace(clock: ClockController): ClockFaceLayout =
- if (keyguardClockViewModel.useLargeClock) getSmallClockFace(clock)
- else getLargeClockFace(clock)
-
- private fun getLargeClockFace(clock: ClockController): ClockFaceLayout = clock.largeClock.layout
- private fun getSmallClockFace(clock: ClockController): ClockFaceLayout = clock.smallClock.layout
+ if (keyguardClockViewModel.isLargeClockVisible.value) clock.smallClock.layout
+ else clock.largeClock.layout
fun constrainWeatherClockDateIconsBarrier(constraints: ConstraintSet) {
constraints.apply {
@@ -159,27 +155,27 @@
connect(R.id.lockscreen_clock_view_large, START, PARENT_ID, START)
connect(R.id.lockscreen_clock_view_large, END, guideline, END)
connect(R.id.lockscreen_clock_view_large, BOTTOM, R.id.device_entry_icon_view, TOP)
- var largeClockTopMargin = KeyguardClockViewModel.getLargeClockTopMargin(context)
- largeClockTopMargin += getDimen(DATE_WEATHER_VIEW_HEIGHT)
- largeClockTopMargin += getDimen(ENHANCED_SMARTSPACE_HEIGHT)
-
+ val largeClockTopMargin =
+ keyguardClockViewModel.getLargeClockTopMargin() +
+ getDimen(DATE_WEATHER_VIEW_HEIGHT) +
+ getDimen(ENHANCED_SMARTSPACE_HEIGHT)
connect(R.id.lockscreen_clock_view_large, TOP, PARENT_ID, TOP, largeClockTopMargin)
constrainWidth(R.id.lockscreen_clock_view_large, WRAP_CONTENT)
constrainHeight(R.id.lockscreen_clock_view_large, MATCH_CONSTRAINT)
constrainWidth(R.id.lockscreen_clock_view, WRAP_CONTENT)
constrainHeight(
R.id.lockscreen_clock_view,
- context.resources.getDimensionPixelSize(customizationR.dimen.small_clock_height)
+ context.resources.getDimensionPixelSize(custR.dimen.small_clock_height)
)
connect(
R.id.lockscreen_clock_view,
START,
PARENT_ID,
START,
- context.resources.getDimensionPixelSize(customizationR.dimen.clock_padding_start) +
+ context.resources.getDimensionPixelSize(custR.dimen.clock_padding_start) +
context.resources.getDimensionPixelSize(R.dimen.status_view_margin_horizontal)
)
- val smallClockTopMargin = keyguardClockViewModel.getSmallClockTopMargin(context)
+ val smallClockTopMargin = keyguardClockViewModel.getSmallClockTopMargin()
create(R.id.small_clock_guideline_top, ConstraintSet.HORIZONTAL_GUIDELINE)
setGuidelineBegin(R.id.small_clock_guideline_top, smallClockTopMargin)
connect(R.id.lockscreen_clock_view, TOP, R.id.small_clock_guideline_top, BOTTOM)
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/transitions/ClockSizeTransition.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/transitions/ClockSizeTransition.kt
index 91f76a4..0bc60c4 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/transitions/ClockSizeTransition.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/view/layout/sections/transitions/ClockSizeTransition.kt
@@ -223,9 +223,10 @@
duration = CLOCK_IN_MILLIS
startDelay = CLOCK_IN_START_DELAY_MILLIS
interpolator = CLOCK_IN_INTERPOLATOR
- captureSmartspace = !viewModel.useLargeClock && smartspaceViewModel.isSmartspaceEnabled
+ captureSmartspace =
+ !viewModel.isLargeClockVisible.value && smartspaceViewModel.isSmartspaceEnabled
- if (viewModel.useLargeClock) {
+ if (viewModel.isLargeClockVisible.value) {
viewModel.currentClock.value?.let {
it.largeClock.layout.views.forEach { addTarget(it) }
}
@@ -248,7 +249,7 @@
fromBounds.left = toBounds.left
fromBounds.right = toBounds.right
- if (viewModel.useLargeClock) {
+ if (viewModel.isLargeClockVisible.value) {
// Large clock shouldn't move
fromBounds.top = toBounds.top
fromBounds.bottom = toBounds.bottom
@@ -283,9 +284,10 @@
init {
duration = CLOCK_OUT_MILLIS
interpolator = CLOCK_OUT_INTERPOLATOR
- captureSmartspace = viewModel.useLargeClock && smartspaceViewModel.isSmartspaceEnabled
+ captureSmartspace =
+ viewModel.isLargeClockVisible.value && smartspaceViewModel.isSmartspaceEnabled
- if (viewModel.useLargeClock) {
+ if (viewModel.isLargeClockVisible.value) {
addTarget(R.id.lockscreen_clock_view)
} else {
viewModel.currentClock.value?.let {
@@ -308,7 +310,7 @@
toBounds.left = fromBounds.left
toBounds.right = fromBounds.right
- if (!viewModel.useLargeClock) {
+ if (!viewModel.isLargeClockVisible.value) {
// Large clock shouldn't move
toBounds.top = fromBounds.top
toBounds.bottom = fromBounds.bottom
@@ -341,7 +343,7 @@
) : VisibilityBoundsTransition() {
init {
duration =
- if (viewModel.useLargeClock) STATUS_AREA_MOVE_UP_MILLIS
+ if (viewModel.isLargeClockVisible.value) STATUS_AREA_MOVE_UP_MILLIS
else STATUS_AREA_MOVE_DOWN_MILLIS
interpolator = Interpolators.EMPHASIZED
addTarget(sharedR.id.date_smartspace_view)
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/AodBurnInViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/AodBurnInViewModel.kt
index d4844e2..644bea0 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/AodBurnInViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/AodBurnInViewModel.kt
@@ -21,7 +21,6 @@
import android.util.Log
import android.util.MathUtils
import com.android.app.animation.Interpolators
-import com.android.keyguard.KeyguardClockSwitch
import com.android.systemui.common.ui.domain.interactor.ConfigurationInteractor
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.keyguard.MigrateClocksToBlueprint
@@ -29,6 +28,7 @@
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor
import com.android.systemui.keyguard.shared.model.BurnInModel
+import com.android.systemui.keyguard.shared.model.ClockSize
import com.android.systemui.keyguard.ui.StateToValue
import com.android.systemui.res.R
import javax.inject.Inject
@@ -124,7 +124,7 @@
clock.config.useAlternateSmartspaceAODTransition
} == true
val useScaleOnly =
- useAltAod && keyguardClockViewModel.clockSize.value == KeyguardClockSwitch.LARGE
+ useAltAod && keyguardClockViewModel.clockSize.value == ClockSize.LARGE
if (useScaleOnly) {
BurnInModel(
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/DreamingToGlanceableHubTransitionViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/DreamingToGlanceableHubTransitionViewModel.kt
index d948e47..7468675 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/DreamingToGlanceableHubTransitionViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/DreamingToGlanceableHubTransitionViewModel.kt
@@ -19,7 +19,6 @@
import com.android.app.animation.Interpolators.EMPHASIZED
import com.android.systemui.common.ui.domain.interactor.ConfigurationInteractor
import com.android.systemui.dagger.SysUISingleton
-import com.android.systemui.keyguard.domain.interactor.FromDreamingTransitionInteractor
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.ui.KeyguardTransitionAnimationFlow
import com.android.systemui.res.R
@@ -38,10 +37,7 @@
constructor(
animationFlow: KeyguardTransitionAnimationFlow,
configurationInteractor: ConfigurationInteractor,
- private val fromDreamingTransitionInteractor: FromDreamingTransitionInteractor,
) {
- fun startTransition() = fromDreamingTransitionInteractor.startToGlanceableHubTransition()
-
private val transitionAnimation =
animationFlow.setup(
duration = TO_GLANCEABLE_HUB_DURATION,
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBlueprintViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBlueprintViewModel.kt
index edd3318..b1f1898 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBlueprintViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBlueprintViewModel.kt
@@ -18,7 +18,6 @@
package com.android.systemui.keyguard.ui.viewmodel
import com.android.systemui.keyguard.domain.interactor.KeyguardBlueprintInteractor
-import com.android.systemui.keyguard.shared.model.KeyguardBlueprint
import javax.inject.Inject
class KeyguardBlueprintViewModel
@@ -26,7 +25,7 @@
constructor(
keyguardBlueprintInteractor: KeyguardBlueprintInteractor,
) {
- var currentBluePrint: KeyguardBlueprint? = null
val blueprint = keyguardBlueprintInteractor.blueprint
+ val blueprintId = keyguardBlueprintInteractor.blueprintId
val refreshTransition = keyguardBlueprintInteractor.refreshTransition
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardClockViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardClockViewModel.kt
index a6d3312..1f544c1 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardClockViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardClockViewModel.kt
@@ -16,25 +16,26 @@
package com.android.systemui.keyguard.ui.viewmodel
-import android.content.Context
+import android.content.res.Resources
import androidx.annotation.VisibleForTesting
import androidx.constraintlayout.helper.widget.Layer
-import com.android.internal.policy.SystemBarUtils
-import com.android.keyguard.KeyguardClockSwitch.LARGE
-import com.android.keyguard.KeyguardClockSwitch.SMALL
-import com.android.systemui.customization.R as customizationR
+import com.android.systemui.common.ui.domain.interactor.ConfigurationInteractor
+import com.android.systemui.customization.R as customR
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
+import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.keyguard.domain.interactor.KeyguardClockInteractor
import com.android.systemui.keyguard.shared.ComposeLockscreen
-import com.android.systemui.keyguard.shared.model.SettingsClockSize
+import com.android.systemui.keyguard.shared.model.ClockSize
+import com.android.systemui.keyguard.shared.model.ClockSizeSetting
import com.android.systemui.res.R
import com.android.systemui.shade.domain.interactor.ShadeInteractor
import com.android.systemui.shade.shared.model.ShadeMode
import com.android.systemui.statusbar.notification.domain.interactor.NotificationsKeyguardInteractor
-import com.android.systemui.util.Utils
+import com.android.systemui.statusbar.ui.SystemBarUtilsProxy
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.combine
@@ -49,43 +50,44 @@
@Application private val applicationScope: CoroutineScope,
notifsKeyguardInteractor: NotificationsKeyguardInteractor,
@get:VisibleForTesting val shadeInteractor: ShadeInteractor,
+ private val systemBarUtils: SystemBarUtilsProxy,
+ configurationInteractor: ConfigurationInteractor,
+ @Main private val resources: Resources,
) {
var burnInLayer: Layer? = null
- val useLargeClock: Boolean
- get() = clockSize.value == LARGE
- val clockSize =
- combine(keyguardClockInteractor.selectedClockSize, keyguardClockInteractor.clockSize) {
- selectedSize,
- clockSize ->
- if (selectedSize == SettingsClockSize.SMALL) {
- SMALL
- } else {
- clockSize
- }
+ val clockSize: StateFlow<ClockSize> =
+ combine(
+ keyguardClockInteractor.selectedClockSize,
+ keyguardClockInteractor.clockSize,
+ ) { selectedSize, clockSize ->
+ if (selectedSize == ClockSizeSetting.SMALL) ClockSize.SMALL else clockSize
}
.stateIn(
scope = applicationScope,
started = SharingStarted.WhileSubscribed(),
- initialValue = LARGE,
+ initialValue = ClockSize.LARGE,
)
- val isLargeClockVisible =
+ val isLargeClockVisible: StateFlow<Boolean> =
clockSize
- .map { it == LARGE }
+ .map { it == ClockSize.LARGE }
.stateIn(
scope = applicationScope,
started = SharingStarted.WhileSubscribed(),
- initialValue = false,
+ initialValue = true,
)
val currentClock = keyguardClockInteractor.currentClock
val hasCustomWeatherDataDisplay =
- combine(clockSize, currentClock) { size, clock ->
- clock?.let {
- (if (size == LARGE) clock.largeClock.config.hasCustomWeatherDataDisplay
- else clock.smallClock.config.hasCustomWeatherDataDisplay)
+ combine(
+ isLargeClockVisible,
+ currentClock,
+ ) { isLargeClock, clock ->
+ clock?.let { clock ->
+ val face = if (isLargeClock) clock.largeClock else clock.smallClock
+ face.config.hasCustomWeatherDataDisplay
}
?: false
}
@@ -115,33 +117,28 @@
isLargeClockVisible,
clockShouldBeCentered,
shadeInteractor.shadeMode,
- currentClock
+ currentClock,
) { isLargeClockVisible, clockShouldBeCentered, shadeMode, currentClock ->
val shouldUseSplitShade = shadeMode == ShadeMode.Split
if (currentClock?.config?.useCustomClockScene == true) {
- val weatherClockLayout =
- when {
- shouldUseSplitShade && clockShouldBeCentered ->
- ClockLayout.WEATHER_LARGE_CLOCK
- shouldUseSplitShade && isLargeClockVisible ->
- ClockLayout.SPLIT_SHADE_WEATHER_LARGE_CLOCK
- shouldUseSplitShade -> ClockLayout.SPLIT_SHADE_SMALL_CLOCK
- isLargeClockVisible -> ClockLayout.WEATHER_LARGE_CLOCK
- else -> ClockLayout.SMALL_CLOCK
- }
- weatherClockLayout
+ when {
+ shouldUseSplitShade && clockShouldBeCentered ->
+ ClockLayout.WEATHER_LARGE_CLOCK
+ shouldUseSplitShade && isLargeClockVisible ->
+ ClockLayout.SPLIT_SHADE_WEATHER_LARGE_CLOCK
+ shouldUseSplitShade -> ClockLayout.SPLIT_SHADE_SMALL_CLOCK
+ isLargeClockVisible -> ClockLayout.WEATHER_LARGE_CLOCK
+ else -> ClockLayout.SMALL_CLOCK
+ }
} else {
- val clockLayout =
- when {
- shouldUseSplitShade && clockShouldBeCentered -> ClockLayout.LARGE_CLOCK
- shouldUseSplitShade && isLargeClockVisible ->
- ClockLayout.SPLIT_SHADE_LARGE_CLOCK
- shouldUseSplitShade -> ClockLayout.SPLIT_SHADE_SMALL_CLOCK
- isLargeClockVisible -> ClockLayout.LARGE_CLOCK
- else -> ClockLayout.SMALL_CLOCK
- }
-
- clockLayout
+ when {
+ shouldUseSplitShade && clockShouldBeCentered -> ClockLayout.LARGE_CLOCK
+ shouldUseSplitShade && isLargeClockVisible ->
+ ClockLayout.SPLIT_SHADE_LARGE_CLOCK
+ shouldUseSplitShade -> ClockLayout.SPLIT_SHADE_SMALL_CLOCK
+ isLargeClockVisible -> ClockLayout.LARGE_CLOCK
+ else -> ClockLayout.SMALL_CLOCK
+ }
}
}
.stateIn(
@@ -162,35 +159,35 @@
)
/** Calculates the top margin for the small clock. */
- fun getSmallClockTopMargin(context: Context): Int {
- var topMargin: Int
- val statusBarHeight = Utils.getStatusBarHeaderHeightKeyguard(context)
-
- if (shadeInteractor.shadeMode.value == ShadeMode.Split) {
- topMargin =
- context.resources.getDimensionPixelSize(R.dimen.keyguard_split_shade_top_margin)
- if (ComposeLockscreen.isEnabled) {
- topMargin -= statusBarHeight
- }
+ fun getSmallClockTopMargin(): Int {
+ val statusBarHeight = systemBarUtils.getStatusBarHeaderHeightKeyguard()
+ return if (shadeInteractor.shadeMode.value == ShadeMode.Split) {
+ resources.getDimensionPixelSize(R.dimen.keyguard_split_shade_top_margin) -
+ if (ComposeLockscreen.isEnabled) statusBarHeight else 0
} else {
- topMargin = context.resources.getDimensionPixelSize(R.dimen.keyguard_clock_top_margin)
- if (!ComposeLockscreen.isEnabled) {
- topMargin += statusBarHeight
- }
+ resources.getDimensionPixelSize(R.dimen.keyguard_clock_top_margin) +
+ if (!ComposeLockscreen.isEnabled) statusBarHeight else 0
}
- return topMargin
}
- companion object {
- fun getLargeClockTopMargin(context: Context): Int {
- return SystemBarUtils.getStatusBarHeight(context) +
- context.resources.getDimensionPixelSize(
- customizationR.dimen.small_clock_padding_top
- ) +
- context.resources.getDimensionPixelSize(R.dimen.keyguard_smartspace_top_offset)
+ val smallClockTopMargin =
+ combine(
+ configurationInteractor.onAnyConfigurationChange,
+ shadeInteractor.shadeMode,
+ ) { _, _ ->
+ getSmallClockTopMargin()
}
+
+ /** Calculates the top margin for the large clock. */
+ fun getLargeClockTopMargin(): Int {
+ return systemBarUtils.getStatusBarHeight() +
+ resources.getDimensionPixelSize(customR.dimen.small_clock_padding_top) +
+ resources.getDimensionPixelSize(R.dimen.keyguard_smartspace_top_offset)
}
+ val largeClockTopMargin: Flow<Int> =
+ configurationInteractor.onAnyConfigurationChange.map { getLargeClockTopMargin() }
+
enum class ClockLayout {
LARGE_CLOCK,
SMALL_CLOCK,
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardPreviewClockViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardPreviewClockViewModel.kt
index 7300152..3a825f2 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardPreviewClockViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardPreviewClockViewModel.kt
@@ -17,7 +17,7 @@
package com.android.systemui.keyguard.ui.viewmodel
import com.android.systemui.keyguard.domain.interactor.KeyguardClockInteractor
-import com.android.systemui.keyguard.shared.model.SettingsClockSize
+import com.android.systemui.keyguard.shared.model.ClockSizeSetting
import com.android.systemui.plugins.clocks.ClockController
import javax.inject.Inject
import kotlinx.coroutines.flow.Flow
@@ -33,12 +33,12 @@
var shouldHighlightSelectedAffordance: Boolean = false
val isLargeClockVisible: Flow<Boolean> =
- interactor.selectedClockSize.map { it == SettingsClockSize.DYNAMIC }
+ interactor.selectedClockSize.map { it == ClockSizeSetting.DYNAMIC }
val isSmallClockVisible: Flow<Boolean> =
- interactor.selectedClockSize.map { it == SettingsClockSize.SMALL }
+ interactor.selectedClockSize.map { it == ClockSizeSetting.SMALL }
val previewClock: Flow<ClockController> = interactor.previewClock
- val selectedClockSize: StateFlow<SettingsClockSize?> = interactor.selectedClockSize
+ val selectedClockSize: StateFlow<ClockSizeSetting?> = interactor.selectedClockSize
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardPreviewSmartspaceViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardPreviewSmartspaceViewModel.kt
index 528b14c..0a84886 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardPreviewSmartspaceViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardPreviewSmartspaceViewModel.kt
@@ -18,7 +18,7 @@
import android.content.Context
import com.android.systemui.keyguard.domain.interactor.KeyguardClockInteractor
-import com.android.systemui.keyguard.shared.model.SettingsClockSize
+import com.android.systemui.keyguard.shared.model.ClockSizeSetting
import com.android.systemui.res.R
import javax.inject.Inject
import kotlinx.coroutines.flow.Flow
@@ -35,7 +35,7 @@
val clockViewModel: KeyguardClockViewModel,
) {
- val selectedClockSize: StateFlow<SettingsClockSize> = interactor.selectedClockSize
+ val selectedClockSize: StateFlow<ClockSizeSetting> = interactor.selectedClockSize
val shouldHideSmartspace: Flow<Boolean> =
combine(
@@ -48,8 +48,8 @@
// TODO (b/284122375) This is temporary. We should use clockController
// .largeClock.config.hasCustomWeatherDataDisplay instead, but
// ClockRegistry.createCurrentClock is not reliable.
- SettingsClockSize.DYNAMIC -> currentClockId == "DIGITAL_CLOCK_WEATHER"
- SettingsClockSize.SMALL -> false
+ ClockSizeSetting.DYNAMIC -> currentClockId == "DIGITAL_CLOCK_WEATHER"
+ ClockSizeSetting.SMALL -> false
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardSmartspaceViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardSmartspaceViewModel.kt
index 9e7dbd4..dc053aa 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardSmartspaceViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardSmartspaceViewModel.kt
@@ -84,7 +84,7 @@
}
/* trigger clock and smartspace constraints change when smartspace appears */
- var bcSmartspaceVisibility: StateFlow<Int> = smartspaceInteractor.bcSmartspaceVisibility
+ val bcSmartspaceVisibility: StateFlow<Int> = smartspaceInteractor.bcSmartspaceVisibility
companion object {
fun getSmartspaceStartMargin(context: Context): Int {
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenContentViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenContentViewModel.kt
index ecad148..c98f3b0 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenContentViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/LockscreenContentViewModel.kt
@@ -17,13 +17,14 @@
package com.android.systemui.keyguard.ui.viewmodel
import android.content.res.Resources
-import com.android.keyguard.KeyguardClockSwitch
+import com.android.internal.annotations.VisibleForTesting
import com.android.keyguard.KeyguardClockSwitch.SMALL
import com.android.systemui.biometrics.AuthController
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.keyguard.domain.interactor.KeyguardBlueprintInteractor
import com.android.systemui.keyguard.domain.interactor.KeyguardClockInteractor
+import com.android.systemui.keyguard.shared.model.ClockSize
import com.android.systemui.res.R
import com.android.systemui.shade.domain.interactor.ShadeInteractor
import com.android.systemui.shade.shared.model.ShadeMode
@@ -49,12 +50,10 @@
@Application private val applicationScope: CoroutineScope,
private val unfoldTransitionInteractor: UnfoldTransitionInteractor,
) {
- private val clockSize = clockInteractor.clockSize
+ @VisibleForTesting val clockSize = clockInteractor.clockSize
val isUdfpsVisible: Boolean
get() = authController.isUdfpsSupported
- val isLargeClockVisible: Boolean
- get() = clockSize.value == KeyguardClockSwitch.LARGE
val shouldUseSplitNotificationShade: StateFlow<Boolean> =
shadeInteractor.shadeMode
@@ -66,10 +65,11 @@
)
val areNotificationsVisible: StateFlow<Boolean> =
- combine(clockSize, shouldUseSplitNotificationShade) {
+ combine(
clockSize,
- shouldUseSplitNotificationShade ->
- clockSize == SMALL || shouldUseSplitNotificationShade
+ shouldUseSplitNotificationShade,
+ ) { clockSize, shouldUseSplitNotificationShade ->
+ clockSize == ClockSize.SMALL || shouldUseSplitNotificationShade
}
.stateIn(
scope = applicationScope,
@@ -95,7 +95,7 @@
)
fun getSmartSpacePaddingTop(resources: Resources): Int {
- return if (isLargeClockVisible) {
+ return if (clockSize.value == ClockSize.LARGE) {
resources.getDimensionPixelSize(R.dimen.keyguard_smartspace_top_offset) +
resources.getDimensionPixelSize(R.dimen.keyguard_clock_top_margin)
} else {
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/SideFpsProgressBarViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/SideFpsProgressBarViewModel.kt
index 00e5d35..c5909ed 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/SideFpsProgressBarViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/SideFpsProgressBarViewModel.kt
@@ -96,6 +96,7 @@
biometricStatusInteractor.fingerprintAcquiredStatus,
deviceEntryFingerprintAuthInteractor.authenticationStatus
)
+ .distinctUntilChanged()
.filter {
if (it is AcquiredFingerprintAuthenticationStatus) {
it.authenticationReason == AuthenticationReason.DeviceEntryAuthentication ||
diff --git a/packages/SystemUI/src/com/android/systemui/lifecycle/RepeatWhenAttached.kt b/packages/SystemUI/src/com/android/systemui/lifecycle/RepeatWhenAttached.kt
index 5dafd94..c997617 100644
--- a/packages/SystemUI/src/com/android/systemui/lifecycle/RepeatWhenAttached.kt
+++ b/packages/SystemUI/src/com/android/systemui/lifecycle/RepeatWhenAttached.kt
@@ -17,6 +17,7 @@
package com.android.systemui.lifecycle
+import android.os.Trace
import android.view.View
import android.view.ViewTreeObserver
import androidx.annotation.MainThread
@@ -73,7 +74,7 @@
Dispatchers.Main + createCoroutineTracingContext() + coroutineContext
val traceName =
if (Compile.IS_DEBUG && coroutineTracing()) {
- traceSectionName()
+ inferTraceSectionName()
} else {
DEFAULT_TRACE_NAME
}
@@ -197,16 +198,21 @@
frame.className != CURRENT_CLASS_NAME && frame.className != JAVA_ADAPTER_CLASS_NAME
/** Get a name for the trace section include the name of the call site. */
-private fun traceSectionName(): String {
- val interestingFrame =
- StackWalker.getInstance().walk { stream ->
- stream.filter(::isFrameInteresting).limit(5).findFirst()
+private fun inferTraceSectionName(): String {
+ try {
+ Trace.traceBegin(Trace.TRACE_TAG_APP, "RepeatWhenAttachedKt#inferTraceSectionName")
+ val interestingFrame =
+ StackWalker.getInstance().walk { stream ->
+ stream.filter(::isFrameInteresting).limit(5).findFirst()
+ }
+ if (interestingFrame.isPresent) {
+ val f = interestingFrame.get()
+ return "${f.className}#${f.methodName}:${f.lineNumber} [$DEFAULT_TRACE_NAME]"
+ } else {
+ return DEFAULT_TRACE_NAME
}
- if (interestingFrame.isPresent) {
- val frame = interestingFrame.get()
- return "${frame.className}#${frame.methodName}:${frame.lineNumber} [$DEFAULT_TRACE_NAME]"
- } else {
- return DEFAULT_TRACE_NAME
+ } finally {
+ Trace.traceEnd(Trace.TRACE_TAG_APP)
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/data/repository/MediaFilterRepository.kt b/packages/SystemUI/src/com/android/systemui/media/controls/data/repository/MediaFilterRepository.kt
index 7e57cf4..8ee3adc 100644
--- a/packages/SystemUI/src/com/android/systemui/media/controls/data/repository/MediaFilterRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/data/repository/MediaFilterRepository.kt
@@ -52,16 +52,6 @@
MutableStateFlow(LinkedHashMap())
val allUserEntries: StateFlow<Map<String, MediaData>> = _allUserEntries.asStateFlow()
- private val _mediaDataLoadedStates: MutableStateFlow<List<MediaDataLoadingModel>> =
- MutableStateFlow(mutableListOf())
- val mediaDataLoadedStates: StateFlow<List<MediaDataLoadingModel>> =
- _mediaDataLoadedStates.asStateFlow()
-
- private val _recommendationsLoadingState: MutableStateFlow<SmartspaceMediaLoadingModel> =
- MutableStateFlow(SmartspaceMediaLoadingModel.Unknown)
- val recommendationsLoadingState: StateFlow<SmartspaceMediaLoadingModel> =
- _recommendationsLoadingState.asStateFlow()
-
private val comparator =
compareByDescending<MediaSortKeyModel> {
it.isPlaying == true && it.playbackLocation == MediaData.PLAYBACK_LOCAL
@@ -148,46 +138,15 @@
}
fun addMediaDataLoadingState(mediaDataLoadingModel: MediaDataLoadingModel) {
- // Filter out previous loading state that has same [InstanceId].
- val loadedStates =
- _mediaDataLoadedStates.value.filter { loadedModel ->
- loadedModel !is MediaDataLoadingModel.Loaded ||
- !loadedModel.equalInstanceIds(mediaDataLoadingModel)
- }
-
- _mediaDataLoadedStates.value =
- loadedStates +
- if (mediaDataLoadingModel is MediaDataLoadingModel.Loaded) {
- listOf(mediaDataLoadingModel)
- } else {
- emptyList()
- }
-
- addMediaLoadingToSortedMap(mediaDataLoadingModel)
- }
-
- fun setRecommendationsLoadingState(smartspaceMediaLoadingModel: SmartspaceMediaLoadingModel) {
- _recommendationsLoadingState.value = smartspaceMediaLoadingModel
-
- addRecsLoadingToSortedMap(smartspaceMediaLoadingModel)
- }
-
- private fun addMediaLoadingToSortedMap(mediaDataLoadingModel: MediaDataLoadingModel) {
- val instanceId =
- when (mediaDataLoadingModel) {
- is MediaDataLoadingModel.Loaded -> mediaDataLoadingModel.instanceId
- is MediaDataLoadingModel.Removed -> mediaDataLoadingModel.instanceId
- MediaDataLoadingModel.Unknown -> null
- }
val sortedMap = TreeMap<MediaSortKeyModel, MediaCommonModel>(comparator)
sortedMap.putAll(
_sortedMedia.value.filter { (_, commonModel) ->
commonModel !is MediaCommonModel.MediaControl ||
- commonModel.instanceId != instanceId
+ commonModel.mediaLoadedModel.instanceId != mediaDataLoadingModel.instanceId
}
)
- _selectedUserEntries.value[instanceId]?.let {
+ _selectedUserEntries.value[mediaDataLoadingModel.instanceId]?.let {
val sortKey =
MediaSortKeyModel(
isPrioritizedRec = false,
@@ -202,51 +161,41 @@
)
if (mediaDataLoadingModel is MediaDataLoadingModel.Loaded) {
- sortedMap[sortKey] = MediaCommonModel.MediaControl(it.instanceId)
+ sortedMap[sortKey] =
+ MediaCommonModel.MediaControl(mediaDataLoadingModel, canBeRemoved(it))
}
}
_sortedMedia.value = sortedMap
}
- private fun addRecsLoadingToSortedMap(
- smartspaceMediaLoadingModel: SmartspaceMediaLoadingModel
- ) {
- val isPrioritized: Boolean
- val key: String?
- when (smartspaceMediaLoadingModel) {
- is SmartspaceMediaLoadingModel.Loaded -> {
- isPrioritized = smartspaceMediaLoadingModel.isPrioritized
- key = smartspaceMediaLoadingModel.key
+ fun setRecommendationsLoadingState(smartspaceMediaLoadingModel: SmartspaceMediaLoadingModel) {
+ val isPrioritized =
+ when (smartspaceMediaLoadingModel) {
+ is SmartspaceMediaLoadingModel.Loaded -> smartspaceMediaLoadingModel.isPrioritized
+ else -> false
}
- is SmartspaceMediaLoadingModel.Removed -> {
- isPrioritized = false
- key = smartspaceMediaLoadingModel.key
- }
- SmartspaceMediaLoadingModel.Unknown -> {
- isPrioritized = false
- key = null
- }
- }
val sortedMap = TreeMap<MediaSortKeyModel, MediaCommonModel>(comparator)
sortedMap.putAll(
_sortedMedia.value.filter { (_, commonModel) ->
- commonModel !is MediaCommonModel.MediaRecommendations || commonModel.key != key
+ commonModel !is MediaCommonModel.MediaRecommendations
}
)
- key?.let {
- val sortKey =
- MediaSortKeyModel(
- isPrioritizedRec = isPrioritized,
- isPlaying = false,
- active = _smartspaceMediaData.value.isActive,
- )
- if (smartspaceMediaLoadingModel is SmartspaceMediaLoadingModel.Loaded) {
- sortedMap[sortKey] = MediaCommonModel.MediaRecommendations(key)
- }
+ val sortKey =
+ MediaSortKeyModel(
+ isPrioritizedRec = isPrioritized,
+ isPlaying = false,
+ active = _smartspaceMediaData.value.isActive,
+ )
+ if (smartspaceMediaLoadingModel is SmartspaceMediaLoadingModel.Loaded) {
+ sortedMap[sortKey] = MediaCommonModel.MediaRecommendations(smartspaceMediaLoadingModel)
}
_sortedMedia.value = sortedMap
}
+
+ private fun canBeRemoved(data: MediaData): Boolean {
+ return data.isPlaying?.let { !it } ?: data.isClearable && !data.active
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/interactor/MediaCarouselInteractor.kt b/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/interactor/MediaCarouselInteractor.kt
index b04e938..dc2c651 100644
--- a/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/interactor/MediaCarouselInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/interactor/MediaCarouselInteractor.kt
@@ -21,6 +21,7 @@
import android.media.session.MediaSession
import android.media.session.PlaybackState
import android.service.notification.StatusBarNotification
+import com.android.internal.logging.InstanceId
import com.android.systemui.CoreStartable
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
@@ -35,20 +36,15 @@
import com.android.systemui.media.controls.domain.pipeline.MediaTimeoutListener
import com.android.systemui.media.controls.domain.resume.MediaResumeListener
import com.android.systemui.media.controls.shared.model.MediaCommonModel
-import com.android.systemui.media.controls.shared.model.MediaDataLoadingModel
-import com.android.systemui.media.controls.shared.model.SmartspaceMediaLoadingModel
import com.android.systemui.media.controls.util.MediaControlsRefactorFlag
import com.android.systemui.media.controls.util.MediaFlags
import java.io.PrintWriter
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.ExperimentalCoroutinesApi
-import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.combine
-import kotlinx.coroutines.flow.distinctUntilChanged
-import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.mapLatest
import kotlinx.coroutines.flow.stateIn
@@ -82,8 +78,11 @@
(smartspaceMediaData.isActive &&
(smartspaceMediaData.isValid() || reactivatedKey != null))
}
- .distinctUntilChanged()
- .stateIn(applicationScope, SharingStarted.WhileSubscribed(), false)
+ .stateIn(
+ scope = applicationScope,
+ started = SharingStarted.WhileSubscribed(),
+ initialValue = false,
+ )
/** Are there any media entries we should display, including the recommendations? */
val hasAnyMediaOrRecommendation: StateFlow<Boolean> =
@@ -98,34 +97,41 @@
smartspaceMediaData.isActive && smartspaceMediaData.isValid()
})
}
- .distinctUntilChanged()
- .stateIn(applicationScope, SharingStarted.WhileSubscribed(), false)
+ .stateIn(
+ scope = applicationScope,
+ started = SharingStarted.WhileSubscribed(),
+ initialValue = false,
+ )
/** Are there any media notifications active, excluding the recommendations? */
val hasActiveMedia: StateFlow<Boolean> =
mediaFilterRepository.selectedUserEntries
.mapLatest { entries -> entries.any { it.value.active } }
- .distinctUntilChanged()
- .stateIn(applicationScope, SharingStarted.WhileSubscribed(), false)
+ .stateIn(
+ scope = applicationScope,
+ started = SharingStarted.WhileSubscribed(),
+ initialValue = false,
+ )
/** Are there any media notifications, excluding the recommendations? */
val hasAnyMedia: StateFlow<Boolean> =
mediaFilterRepository.selectedUserEntries
.mapLatest { entries -> entries.isNotEmpty() }
- .distinctUntilChanged()
- .stateIn(applicationScope, SharingStarted.WhileSubscribed(), false)
-
- /** The most recent list of loaded media controls. */
- val mediaDataLoadedStates: Flow<List<MediaDataLoadingModel>> =
- mediaFilterRepository.mediaDataLoadedStates
-
- /** The most recent change to loaded media recommendations. */
- val recommendationsLoadingState: Flow<SmartspaceMediaLoadingModel> =
- mediaFilterRepository.recommendationsLoadingState
+ .stateIn(
+ scope = applicationScope,
+ started = SharingStarted.WhileSubscribed(),
+ initialValue = false,
+ )
/** The most recent sorted set for user media instances */
- val sortedMedia: Flow<List<MediaCommonModel>> =
- mediaFilterRepository.sortedMedia.map { it.values.toList() }
+ val sortedMedia: StateFlow<List<MediaCommonModel>> =
+ mediaFilterRepository.sortedMedia
+ .mapLatest { it.values.toList() }
+ .stateIn(
+ scope = applicationScope,
+ started = SharingStarted.WhileSubscribed(),
+ initialValue = emptyList(),
+ )
override fun start() {
if (!mediaFlags.isMediaControlsRefactorEnabled()) {
@@ -210,6 +216,10 @@
return mediaDataProcessor.dismissMediaData(key, delay)
}
+ fun removeMediaControl(instanceId: InstanceId, delay: Long) {
+ mediaDataProcessor.dismissMediaData(instanceId, delay)
+ }
+
override fun dismissSmartspaceRecommendation(key: String, delay: Long) {
return mediaDataProcessor.dismissSmartspaceRecommendation(key, delay)
}
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/interactor/MediaControlInteractor.kt b/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/interactor/MediaControlInteractor.kt
index 74cd2fe..c0bb628 100644
--- a/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/interactor/MediaControlInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/interactor/MediaControlInteractor.kt
@@ -43,14 +43,18 @@
import com.android.systemui.statusbar.NotificationLockscreenUserManager
import com.android.systemui.statusbar.policy.KeyguardStateController
import com.android.systemui.util.kotlin.pairwiseBy
+import dagger.assisted.Assisted
+import dagger.assisted.AssistedInject
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.map
/** Encapsulates business logic for single media control. */
-class MediaControlInteractor(
+class MediaControlInteractor
+@AssistedInject
+constructor(
@Application applicationContext: Context,
- private val instanceId: InstanceId,
+ @Assisted private val instanceId: InstanceId,
repository: MediaFilterRepository,
private val mediaDataProcessor: MediaDataProcessor,
private val keyguardStateController: KeyguardStateController,
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/interactor/factory/MediaControlInteractorFactory.kt b/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/interactor/factory/MediaControlInteractorFactory.kt
new file mode 100644
index 0000000..d568600
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/interactor/factory/MediaControlInteractorFactory.kt
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.media.controls.domain.pipeline.interactor.factory
+
+import com.android.internal.logging.InstanceId
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.media.controls.domain.pipeline.interactor.MediaControlInteractor
+import dagger.assisted.AssistedFactory
+
+/** Factory to create [MediaControlInteractor] for each media control. */
+@SysUISingleton
+@AssistedFactory
+interface MediaControlInteractorFactory {
+
+ fun create(instanceId: InstanceId): MediaControlInteractor
+}
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/shared/model/MediaCommonModel.kt b/packages/SystemUI/src/com/android/systemui/media/controls/shared/model/MediaCommonModel.kt
index 83e2765..562fe7a 100644
--- a/packages/SystemUI/src/com/android/systemui/media/controls/shared/model/MediaCommonModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/shared/model/MediaCommonModel.kt
@@ -16,11 +16,13 @@
package com.android.systemui.media.controls.shared.model
-import com.android.internal.logging.InstanceId
-
/** Models any type of media. */
sealed class MediaCommonModel {
- data class MediaControl(val instanceId: InstanceId) : MediaCommonModel()
+ data class MediaControl(
+ val mediaLoadedModel: MediaDataLoadingModel.Loaded,
+ val canBeRemoved: Boolean = false
+ ) : MediaCommonModel()
- data class MediaRecommendations(val key: String) : MediaCommonModel()
+ data class MediaRecommendations(val recsLoadingModel: SmartspaceMediaLoadingModel) :
+ MediaCommonModel()
}
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/shared/model/MediaDataLoadingModel.kt b/packages/SystemUI/src/com/android/systemui/media/controls/shared/model/MediaDataLoadingModel.kt
index bd42a4d..170f1f7 100644
--- a/packages/SystemUI/src/com/android/systemui/media/controls/shared/model/MediaDataLoadingModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/shared/model/MediaDataLoadingModel.kt
@@ -20,27 +20,17 @@
/** Models media data loading state. */
sealed class MediaDataLoadingModel {
- /** The initial loading state when no media data has yet loaded. */
- data object Unknown : MediaDataLoadingModel()
+
+ abstract val instanceId: InstanceId
/** Media data has been loaded. */
data class Loaded(
- val instanceId: InstanceId,
+ override val instanceId: InstanceId,
val immediatelyUpdateUi: Boolean = true,
- ) : MediaDataLoadingModel() {
-
- /** Returns true if [other] has the same instance id, false otherwise. */
- fun equalInstanceIds(other: MediaDataLoadingModel): Boolean {
- return when (other) {
- is Loaded -> other.instanceId == instanceId
- is Removed -> other.instanceId == instanceId
- Unknown -> false
- }
- }
- }
+ ) : MediaDataLoadingModel()
/** Media data has been removed. */
data class Removed(
- val instanceId: InstanceId,
+ override val instanceId: InstanceId,
) : MediaDataLoadingModel()
}
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/shared/model/SmartspaceMediaLoadingModel.kt b/packages/SystemUI/src/com/android/systemui/media/controls/shared/model/SmartspaceMediaLoadingModel.kt
index 6c1e536..90ddadf 100644
--- a/packages/SystemUI/src/com/android/systemui/media/controls/shared/model/SmartspaceMediaLoadingModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/shared/model/SmartspaceMediaLoadingModel.kt
@@ -18,18 +18,18 @@
/** Models smartspace media loading state. */
sealed class SmartspaceMediaLoadingModel {
- /** The initial loading state when no smartspace media has yet loaded. */
- data object Unknown : SmartspaceMediaLoadingModel()
+
+ abstract val key: String
/** Smartspace media has been loaded. */
data class Loaded(
- val key: String,
+ override val key: String,
val isPrioritized: Boolean = false,
) : SmartspaceMediaLoadingModel()
/** Smartspace media has been removed. */
data class Removed(
- val key: String,
+ override val key: String,
val immediatelyUpdateUi: Boolean = true,
) : SmartspaceMediaLoadingModel()
}
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/binder/MediaRecommendationsViewBinder.kt b/packages/SystemUI/src/com/android/systemui/media/controls/ui/binder/MediaRecommendationsViewBinder.kt
index 9c6d59e..fe13da6 100644
--- a/packages/SystemUI/src/com/android/systemui/media/controls/ui/binder/MediaRecommendationsViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/binder/MediaRecommendationsViewBinder.kt
@@ -239,7 +239,7 @@
set.setAlpha(resId, if (visible) 1.0f else 0.0f)
}
- private fun updateRecommendationsVisibility(
+ fun updateRecommendationsVisibility(
mediaViewController: MediaViewController,
cardView: TransitionLayout,
) {
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaCarouselController.kt b/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaCarouselController.kt
index d15d45a..d2dd289 100644
--- a/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaCarouselController.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaCarouselController.kt
@@ -656,8 +656,14 @@
if (width == widthInSceneContainerPx && height == heightInSceneContainerPx) {
return
}
+ if (width <= 0 || height <= 0) {
+ // reject as invalid
+ return
+ }
widthInSceneContainerPx = width
heightInSceneContainerPx = height
+ mediaCarouselScrollHandler.playerWidthPlusPadding =
+ width + context.resources.getDimensionPixelSize(R.dimen.qs_media_padding)
updatePlayers(recreateMedia = true)
}
@@ -752,7 +758,7 @@
isSsReactivated,
debugLogger
)
- updatePlayerToState(newPlayer, noAnimation = true)
+ updatePlayerToState(newPlayer.mediaViewController, noAnimation = true)
// Media data added from a recommendation card should starts playing.
if (
(shouldScrollToKey && data.isPlaying == true) ||
@@ -850,7 +856,7 @@
systemClock,
debugLogger,
)
- updatePlayerToState(newRecs, noAnimation = true)
+ updatePlayerToState(newRecs.mediaViewController, noAnimation = true)
reorderAllPlayers(curVisibleMediaKey)
updatePageIndicator()
mediaFrame.requiresRemeasuring = true
@@ -880,7 +886,7 @@
val removed =
MediaPlayerData.removeMediaPlayer(key, dismissMediaData || dismissRecommendation)
return removed?.apply {
- mediaCarouselScrollHandler.onPrePlayerRemoved(removed)
+ mediaCarouselScrollHandler.onPrePlayerRemoved(removed.mediaViewHolder?.player)
mediaContent.removeView(removed.mediaViewHolder?.player)
mediaContent.removeView(removed.recommendationViewHolder?.recommendations)
removed.onDestroy()
@@ -974,7 +980,7 @@
currentEndLocation = endLocation
currentTransitionProgress = progress
for (mediaPlayer in MediaPlayerData.players()) {
- updatePlayerToState(mediaPlayer, immediately)
+ updatePlayerToState(mediaPlayer.mediaViewController, immediately)
}
maybeResetSettingsCog()
updatePageIndicatorAlpha()
@@ -1074,8 +1080,8 @@
}
}
- private fun updatePlayerToState(mediaPlayer: MediaControlPanel, noAnimation: Boolean) {
- mediaPlayer.mediaViewController.setCurrentState(
+ private fun updatePlayerToState(viewController: MediaViewController, noAnimation: Boolean) {
+ viewController.setCurrentState(
startLocation = currentStartLocation,
endLocation = currentEndLocation,
transitionProgress = currentTransitionProgress,
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaControlPanel.java b/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaControlPanel.java
index bd3893b..e6c785e 100644
--- a/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaControlPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaControlPanel.java
@@ -57,6 +57,7 @@
import android.media.session.PlaybackState;
import android.os.Process;
import android.os.Trace;
+import android.os.UserHandle;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
@@ -738,11 +739,11 @@
mPackageName, mMediaViewHolder.getSeamlessButton());
} else {
mLogger.logOpenOutputSwitcher(mUid, mPackageName, mInstanceId);
- // TODO: b/321969740 - Populate the userHandle parameter. The user
- // handle is necessary to disambiguate the same package running on
- // different users.
mMediaOutputDialogManager.createAndShow(
- mPackageName, true, mMediaViewHolder.getSeamlessButton(), null);
+ mPackageName,
+ /* aboveStatusBar */ true,
+ mMediaViewHolder.getSeamlessButton(),
+ UserHandle.getUserHandleForUid(mUid));
}
} else {
mLogger.logOpenOutputSwitcher(mUid, mPackageName, mInstanceId);
@@ -770,11 +771,11 @@
Log.w(TAG, "Device pending intent is not an activity.");
}
} else {
- // TODO: b/321969740 - Populate the userHandle parameter. The user
- // handle is necessary to disambiguate the same package running on
- // different users.
mMediaOutputDialogManager.createAndShow(
- mPackageName, true, mMediaViewHolder.getSeamlessButton(), null);
+ mPackageName,
+ /* aboveStatusBar */ true,
+ mMediaViewHolder.getSeamlessButton(),
+ UserHandle.getUserHandleForUid(mUid));
}
}
});
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaViewController.kt b/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaViewController.kt
index 7fced5f8..2b59858 100644
--- a/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaViewController.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/controller/MediaViewController.kt
@@ -37,6 +37,7 @@
import com.android.systemui.media.controls.ui.animation.ColorSchemeTransition
import com.android.systemui.media.controls.ui.animation.MetadataAnimationHandler
import com.android.systemui.media.controls.ui.binder.MediaControlViewBinder
+import com.android.systemui.media.controls.ui.binder.MediaRecommendationsViewBinder
import com.android.systemui.media.controls.ui.binder.SeekBarObserver
import com.android.systemui.media.controls.ui.controller.MediaCarouselController.Companion.calculateAlpha
import com.android.systemui.media.controls.ui.view.GutsViewHolder
@@ -185,7 +186,10 @@
private var nextNotVisibleValue = ConstraintSet.GONE
private var isNextButtonAvailable = false
- private lateinit var mediaViewHolder: MediaViewHolder
+ /** View holders for controller */
+ lateinit var recommendationViewHolder: RecommendationViewHolder
+ lateinit var mediaViewHolder: MediaViewHolder
+
private lateinit var seekBarObserver: SeekBarObserver
private lateinit var turbulenceNoiseController: TurbulenceNoiseController
private lateinit var loadingEffect: LoadingEffect
@@ -788,6 +792,15 @@
}
}
+ fun attachRecommendations(recommendationViewHolder: RecommendationViewHolder) {
+ if (!mediaFlags.isMediaControlsRefactorEnabled()) return
+ this.recommendationViewHolder = recommendationViewHolder
+
+ attach(recommendationViewHolder.recommendations, TYPE.RECOMMENDATION)
+ recsConfigurationChangeListener =
+ MediaRecommendationsViewBinder::updateRecommendationsVisibility
+ }
+
fun bindSeekBar(onSeek: () -> Unit, onBindSeekBar: (SeekBarViewModel) -> Unit) {
if (!mediaFlags.isMediaControlsRefactorEnabled()) return
seekBarViewModel.logSeek = onSeek
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/util/MediaViewModelCallback.kt b/packages/SystemUI/src/com/android/systemui/media/controls/ui/util/MediaViewModelCallback.kt
new file mode 100644
index 0000000..952b134
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/util/MediaViewModelCallback.kt
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.media.controls.ui.util
+
+import androidx.recyclerview.widget.DiffUtil
+import com.android.systemui.media.controls.ui.viewmodel.MediaCommonViewModel
+
+/** A [DiffUtil.Callback] to calculate difference between old and new media view-model list. */
+class MediaViewModelCallback(
+ private val old: List<MediaCommonViewModel>,
+ private val new: List<MediaCommonViewModel>,
+) : DiffUtil.Callback() {
+
+ override fun getOldListSize(): Int {
+ return old.size
+ }
+
+ override fun getNewListSize(): Int {
+ return new.size
+ }
+
+ override fun areItemsTheSame(oldIndex: Int, newIndex: Int): Boolean {
+ val oldItem = old[oldIndex]
+ val newItem = new[newIndex]
+ return if (
+ oldItem is MediaCommonViewModel.MediaControl &&
+ newItem is MediaCommonViewModel.MediaControl
+ ) {
+ oldItem.instanceId == newItem.instanceId
+ } else {
+ oldItem is MediaCommonViewModel.MediaRecommendations &&
+ newItem is MediaCommonViewModel.MediaRecommendations
+ }
+ }
+
+ override fun areContentsTheSame(oldIndex: Int, newIndex: Int): Boolean {
+ val oldItem = old[oldIndex]
+ val newItem = new[newIndex]
+ return if (
+ oldItem is MediaCommonViewModel.MediaControl &&
+ newItem is MediaCommonViewModel.MediaControl
+ ) {
+ oldItem.immediatelyUpdateUi == newItem.immediatelyUpdateUi
+ } else if (
+ oldItem is MediaCommonViewModel.MediaRecommendations &&
+ newItem is MediaCommonViewModel.MediaRecommendations
+ ) {
+ oldItem.key == newItem.key && oldItem.loadingEnabled == newItem.loadingEnabled
+ } else {
+ false
+ }
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/util/MediaViewModelListUpdateCallback.kt b/packages/SystemUI/src/com/android/systemui/media/controls/ui/util/MediaViewModelListUpdateCallback.kt
new file mode 100644
index 0000000..bd81e44
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/util/MediaViewModelListUpdateCallback.kt
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.media.controls.ui.util
+
+import androidx.recyclerview.widget.ListUpdateCallback
+import com.android.systemui.media.controls.ui.viewmodel.MediaCommonViewModel
+
+/** A [ListUpdateCallback] to apply media events needed to reach the new state. */
+class MediaViewModelListUpdateCallback(
+ private val old: List<MediaCommonViewModel>,
+ private val new: List<MediaCommonViewModel>,
+ private val onAdded: (MediaCommonViewModel, Int) -> Unit,
+ private val onUpdated: (MediaCommonViewModel) -> Unit,
+ private val onRemoved: (MediaCommonViewModel) -> Unit,
+ private val onMoved: (MediaCommonViewModel, Int, Int) -> Unit,
+) : ListUpdateCallback {
+
+ override fun onInserted(position: Int, count: Int) {
+ for (i in position until position + count) {
+ onAdded(new[i], i)
+ }
+ }
+
+ override fun onRemoved(position: Int, count: Int) {
+ for (i in position until position + count) {
+ onRemoved(old[i])
+ }
+ }
+
+ override fun onMoved(fromPosition: Int, toPosition: Int) {
+ onMoved(old[fromPosition], fromPosition, toPosition)
+ }
+
+ override fun onChanged(position: Int, count: Int, payload: Any?) {
+ for (i in position until position + count) {
+ onUpdated(new[i])
+ }
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/view/MediaCarouselScrollHandler.kt b/packages/SystemUI/src/com/android/systemui/media/controls/ui/view/MediaCarouselScrollHandler.kt
index b531ecf..d63c2e0 100644
--- a/packages/SystemUI/src/com/android/systemui/media/controls/ui/view/MediaCarouselScrollHandler.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/view/MediaCarouselScrollHandler.kt
@@ -31,11 +31,11 @@
import com.android.settingslib.Utils
import com.android.systemui.Gefingerpoken
import com.android.systemui.classifier.Classifier.NOTIFICATION_DISMISS
-import com.android.systemui.media.controls.ui.controller.MediaControlPanel
import com.android.systemui.media.controls.util.MediaUiEventLogger
import com.android.systemui.plugins.FalsingManager
import com.android.systemui.qs.PageIndicator
import com.android.systemui.res.R
+import com.android.systemui.util.animation.TransitionLayout
import com.android.systemui.util.concurrency.DelayableExecutor
import com.android.wm.shell.shared.animation.PhysicsAnimator
@@ -535,8 +535,8 @@
* Notify that a player will be removed right away. This gives us the opporunity to look where
* it was and update our scroll position.
*/
- fun onPrePlayerRemoved(removed: MediaControlPanel) {
- val removedIndex = mediaContent.indexOfChild(removed.mediaViewHolder?.player)
+ fun onPrePlayerRemoved(player: TransitionLayout?) {
+ val removedIndex = mediaContent.indexOfChild(player)
// If the removed index is less than the visibleMediaIndex, then we need to decrement it.
// RTL has no effect on this, because indices are always relative (start-to-end).
// Update the index 'manually' since we won't always get a call to onMediaScrollingChanged
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/viewmodel/MediaCarouselViewModel.kt b/packages/SystemUI/src/com/android/systemui/media/controls/ui/viewmodel/MediaCarouselViewModel.kt
new file mode 100644
index 0000000..c92965e
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/viewmodel/MediaCarouselViewModel.kt
@@ -0,0 +1,207 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.media.controls.ui.viewmodel
+
+import android.content.Context
+import com.android.internal.logging.InstanceId
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.dagger.qualifiers.Application
+import com.android.systemui.dagger.qualifiers.Background
+import com.android.systemui.media.controls.domain.pipeline.interactor.MediaCarouselInteractor
+import com.android.systemui.media.controls.domain.pipeline.interactor.factory.MediaControlInteractorFactory
+import com.android.systemui.media.controls.shared.model.MediaCommonModel
+import com.android.systemui.media.controls.util.MediaFlags
+import com.android.systemui.media.controls.util.MediaUiEventLogger
+import com.android.systemui.statusbar.notification.collection.provider.OnReorderingAllowedListener
+import com.android.systemui.statusbar.notification.collection.provider.VisualStabilityProvider
+import com.android.systemui.util.Utils
+import com.android.systemui.utils.coroutines.flow.conflatedCallbackFlow
+import javax.inject.Inject
+import kotlinx.coroutines.CoroutineDispatcher
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.channels.awaitClose
+import kotlinx.coroutines.flow.SharingStarted
+import kotlinx.coroutines.flow.StateFlow
+import kotlinx.coroutines.flow.flatMapLatest
+import kotlinx.coroutines.flow.map
+import kotlinx.coroutines.flow.stateIn
+
+/** Models UI state and handles user inputs for media carousel */
+@SysUISingleton
+class MediaCarouselViewModel
+@Inject
+constructor(
+ @Application private val applicationScope: CoroutineScope,
+ @Application private val applicationContext: Context,
+ @Background private val backgroundDispatcher: CoroutineDispatcher,
+ private val visualStabilityProvider: VisualStabilityProvider,
+ private val interactor: MediaCarouselInteractor,
+ private val controlInteractorFactory: MediaControlInteractorFactory,
+ private val recommendationsViewModel: MediaRecommendationsViewModel,
+ private val logger: MediaUiEventLogger,
+ private val mediaFlags: MediaFlags,
+) {
+
+ @OptIn(ExperimentalCoroutinesApi::class)
+ val mediaItems: StateFlow<List<MediaCommonViewModel>> =
+ conflatedCallbackFlow {
+ val listener = OnReorderingAllowedListener { trySend(Unit) }
+ visualStabilityProvider.addPersistentReorderingAllowedListener(listener)
+ trySend(Unit)
+ awaitClose { visualStabilityProvider.removeReorderingAllowedListener(listener) }
+ }
+ .flatMapLatest {
+ interactor.sortedMedia.map { sortedItems ->
+ buildList {
+ val reorderAllowed = isReorderingAllowed()
+ sortedItems.forEach { commonModel ->
+ if (!reorderAllowed || !modelsPendingRemoval.contains(commonModel)) {
+ when (commonModel) {
+ is MediaCommonModel.MediaControl ->
+ add(toViewModel(commonModel))
+ is MediaCommonModel.MediaRecommendations ->
+ add(toViewModel(commonModel))
+ }
+ }
+ }
+ if (reorderAllowed) {
+ modelsPendingRemoval.clear()
+ }
+ }
+ }
+ }
+ .stateIn(
+ scope = applicationScope,
+ started = SharingStarted.WhileSubscribed(),
+ initialValue = emptyList(),
+ )
+
+ private val mediaControlByInstanceId =
+ mutableMapOf<InstanceId, MediaCommonViewModel.MediaControl>()
+
+ private var mediaRecs: MediaCommonViewModel.MediaRecommendations? = null
+
+ private var modelsPendingRemoval: MutableSet<MediaCommonModel> = mutableSetOf()
+
+ fun onSwipeToDismiss() {
+ logger.logSwipeDismiss()
+ interactor.onSwipeToDismiss()
+ }
+
+ private fun toViewModel(
+ commonModel: MediaCommonModel.MediaControl
+ ): MediaCommonViewModel.MediaControl {
+ val instanceId = commonModel.mediaLoadedModel.instanceId
+ return mediaControlByInstanceId[instanceId]?.copy(
+ immediatelyUpdateUi = commonModel.mediaLoadedModel.immediatelyUpdateUi
+ )
+ ?: MediaCommonViewModel.MediaControl(
+ instanceId = instanceId,
+ immediatelyUpdateUi = commonModel.mediaLoadedModel.immediatelyUpdateUi,
+ controlViewModel = createMediaControlViewModel(instanceId),
+ onAdded = { onMediaControlAddedOrUpdated(it, commonModel) },
+ onRemoved = {
+ interactor.removeMediaControl(instanceId, delay = 0L)
+ mediaControlByInstanceId.remove(instanceId)
+ },
+ onUpdated = { onMediaControlAddedOrUpdated(it, commonModel) },
+ )
+ .also { mediaControlByInstanceId[instanceId] = it }
+ }
+
+ private fun createMediaControlViewModel(instanceId: InstanceId): MediaControlViewModel {
+ return MediaControlViewModel(
+ applicationScope = applicationScope,
+ applicationContext = applicationContext,
+ backgroundDispatcher = backgroundDispatcher,
+ interactor = controlInteractorFactory.create(instanceId),
+ logger = logger,
+ )
+ }
+
+ private fun toViewModel(
+ commonModel: MediaCommonModel.MediaRecommendations
+ ): MediaCommonViewModel.MediaRecommendations {
+ return mediaRecs?.copy(
+ key = commonModel.recsLoadingModel.key,
+ loadingEnabled =
+ interactor.isRecommendationActive() || mediaFlags.isPersistentSsCardEnabled()
+ )
+ ?: MediaCommonViewModel.MediaRecommendations(
+ key = commonModel.recsLoadingModel.key,
+ loadingEnabled =
+ interactor.isRecommendationActive() ||
+ mediaFlags.isPersistentSsCardEnabled(),
+ recsViewModel = recommendationsViewModel,
+ onAdded = { commonViewModel ->
+ onMediaRecommendationAddedOrUpdated(commonViewModel)
+ },
+ onRemoved = { immediatelyRemove ->
+ onMediaRecommendationRemoved(commonModel, immediatelyRemove)
+ },
+ onUpdated = { commonViewModel ->
+ onMediaRecommendationAddedOrUpdated(commonViewModel)
+ },
+ )
+ .also { mediaRecs = it }
+ }
+
+ private fun onMediaControlAddedOrUpdated(
+ commonViewModel: MediaCommonViewModel,
+ commonModel: MediaCommonModel.MediaControl
+ ) {
+ // TODO (b/330897926) log smartspace card reported (SMARTSPACE_CARD_RECEIVED)
+ if (commonModel.canBeRemoved && !Utils.useMediaResumption(applicationContext)) {
+ // This media control is due for removal as it is now paused + timed out, and resumption
+ // setting is off.
+ if (isReorderingAllowed()) {
+ commonViewModel.onRemoved(true)
+ } else {
+ modelsPendingRemoval.add(commonModel)
+ }
+ } else {
+ modelsPendingRemoval.remove(commonModel)
+ }
+ }
+
+ private fun onMediaRecommendationAddedOrUpdated(commonViewModel: MediaCommonViewModel) {
+ if (!interactor.isRecommendationActive()) {
+ if (!mediaFlags.isPersistentSsCardEnabled()) {
+ commonViewModel.onRemoved(true)
+ }
+ } else {
+ // TODO (b/330897926) log smartspace card reported (SMARTSPACE_CARD_RECEIVED)
+ }
+ }
+
+ private fun onMediaRecommendationRemoved(
+ commonModel: MediaCommonModel.MediaRecommendations,
+ immediatelyRemove: Boolean
+ ) {
+ if (immediatelyRemove || isReorderingAllowed()) {
+ interactor.dismissSmartspaceRecommendation(commonModel.recsLoadingModel.key, 0L)
+ // TODO if not immediate remove update host visibility
+ } else {
+ modelsPendingRemoval.add(commonModel)
+ }
+ }
+
+ private fun isReorderingAllowed(): Boolean {
+ return visualStabilityProvider.isReorderingAllowed
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/viewmodel/MediaCommonViewModel.kt b/packages/SystemUI/src/com/android/systemui/media/controls/ui/viewmodel/MediaCommonViewModel.kt
new file mode 100644
index 0000000..aeaa82e
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/viewmodel/MediaCommonViewModel.kt
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.media.controls.ui.viewmodel
+
+import com.android.internal.logging.InstanceId
+
+/** Models media view model UI state. */
+sealed class MediaCommonViewModel {
+
+ abstract val onAdded: (MediaCommonViewModel) -> Unit
+ abstract val onRemoved: (Boolean) -> Unit
+ abstract val onUpdated: (MediaCommonViewModel) -> Unit
+
+ data class MediaControl(
+ val instanceId: InstanceId,
+ val immediatelyUpdateUi: Boolean,
+ val controlViewModel: MediaControlViewModel,
+ override val onAdded: (MediaCommonViewModel) -> Unit,
+ override val onRemoved: (Boolean) -> Unit,
+ override val onUpdated: (MediaCommonViewModel) -> Unit,
+ ) : MediaCommonViewModel()
+
+ data class MediaRecommendations(
+ val key: String,
+ val loadingEnabled: Boolean,
+ val recsViewModel: MediaRecommendationsViewModel,
+ override val onAdded: (MediaCommonViewModel) -> Unit,
+ override val onRemoved: (Boolean) -> Unit,
+ override val onUpdated: (MediaCommonViewModel) -> Unit,
+ ) : MediaCommonViewModel()
+}
diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/viewmodel/MediaControlViewModel.kt b/packages/SystemUI/src/com/android/systemui/media/controls/ui/viewmodel/MediaControlViewModel.kt
index d74506d..52e49d6 100644
--- a/packages/SystemUI/src/com/android/systemui/media/controls/ui/viewmodel/MediaControlViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/viewmodel/MediaControlViewModel.kt
@@ -41,19 +41,21 @@
import com.android.systemui.monet.Style
import com.android.systemui.res.R
import com.android.systemui.util.kotlin.sample
-import java.util.concurrent.Executor
import kotlinx.coroutines.CoroutineDispatcher
+import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.flowOn
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
/** Models UI state and handles user input for a media control. */
class MediaControlViewModel(
@Application private val applicationContext: Context,
+ @Application private val applicationScope: CoroutineScope,
@Background private val backgroundDispatcher: CoroutineDispatcher,
- @Background private val backgroundExecutor: Executor,
private val interactor: MediaControlInteractor,
private val logger: MediaUiEventLogger,
) {
@@ -159,10 +161,12 @@
if (model.isResume && model.resumeProgress != null) {
seekBarViewModel.updateStaticProgress(model.resumeProgress)
} else {
- backgroundExecutor.execute {
- seekBarViewModel.updateController(
- model.token?.let { MediaController(applicationContext, it) }
- )
+ applicationScope.launch {
+ withContext(backgroundDispatcher) {
+ seekBarViewModel.updateController(
+ model.token?.let { MediaController(applicationContext, it) }
+ )
+ }
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java b/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java
index 042fb63f..4ee2db7 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSContainerImpl.java
@@ -75,10 +75,6 @@
@Override
protected void onFinishInflate() {
super.onFinishInflate();
- // set layer to make alpha animation of brightness slider nicer - otherwise elements
- // of slider are animated separately and it doesn't look good. See b/329244723
- setLayerType(LAYER_TYPE_HARDWARE, null);
-
mQSPanelContainer = findViewById(R.id.expanded_qs_scroll_view);
mQSPanel = findViewById(R.id.quick_settings_panel);
mHeader = findViewById(R.id.header);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/panels/dagger/PanelsModule.kt b/packages/SystemUI/src/com/android/systemui/qs/panels/dagger/PanelsModule.kt
index 1307296..ee4eeb8 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/panels/dagger/PanelsModule.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/panels/dagger/PanelsModule.kt
@@ -18,10 +18,20 @@
import com.android.systemui.qs.panels.data.repository.IconTilesRepository
import com.android.systemui.qs.panels.data.repository.IconTilesRepositoryImpl
+import com.android.systemui.qs.panels.shared.model.GridLayoutTypeKey
+import com.android.systemui.qs.panels.shared.model.InfiniteGridLayoutType
+import com.android.systemui.qs.panels.ui.compose.GridLayout
+import com.android.systemui.qs.panels.ui.compose.InfiniteGridLayout
import dagger.Binds
import dagger.Module
+import dagger.multibindings.IntoMap
@Module
interface PanelsModule {
@Binds fun bindIconTilesRepository(impl: IconTilesRepositoryImpl): IconTilesRepository
+
+ @Binds
+ @IntoMap
+ @GridLayoutTypeKey(InfiniteGridLayoutType::class)
+ fun bindGridLayout(impl: InfiniteGridLayout): GridLayout
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/panels/data/repository/GridLayoutTypeRepository.kt b/packages/SystemUI/src/com/android/systemui/qs/panels/data/repository/GridLayoutTypeRepository.kt
new file mode 100644
index 0000000..02dd33e
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/qs/panels/data/repository/GridLayoutTypeRepository.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.qs.panels.data.repository
+
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.qs.panels.shared.model.GridLayoutType
+import com.android.systemui.qs.panels.shared.model.InfiniteGridLayoutType
+import javax.inject.Inject
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.flowOf
+
+@SysUISingleton
+class GridLayoutTypeRepository @Inject constructor() {
+ val layout: Flow<GridLayoutType> = flowOf(InfiniteGridLayoutType)
+}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/panels/domain/interactor/GridLayoutTypeInteractor.kt b/packages/SystemUI/src/com/android/systemui/qs/panels/domain/interactor/GridLayoutTypeInteractor.kt
new file mode 100644
index 0000000..b6be578
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/qs/panels/domain/interactor/GridLayoutTypeInteractor.kt
@@ -0,0 +1,28 @@
+/*
+ * 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.qs.panels.domain.interactor
+
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.qs.panels.data.repository.GridLayoutTypeRepository
+import com.android.systemui.qs.panels.shared.model.GridLayoutType
+import javax.inject.Inject
+import kotlinx.coroutines.flow.Flow
+
+@SysUISingleton
+class GridLayoutTypeInteractor @Inject constructor(repo: GridLayoutTypeRepository) {
+ val layout: Flow<GridLayoutType> = repo.layout
+}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/panels/domain/interactor/IconTilesInteractor.kt b/packages/SystemUI/src/com/android/systemui/qs/panels/domain/interactor/IconTilesInteractor.kt
index 367c670..1aec193 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/panels/domain/interactor/IconTilesInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/panels/domain/interactor/IconTilesInteractor.kt
@@ -24,6 +24,6 @@
/** Interactor for retrieving the list of [TileSpec] to be displayed as icons. */
@SysUISingleton
-class IconTilesInteractor @Inject constructor(private val repo: IconTilesRepository) {
+class IconTilesInteractor @Inject constructor(repo: IconTilesRepository) {
val iconTilesSpecs: Flow<Set<TileSpec>> = repo.iconTilesSpecs
}
diff --git a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt b/packages/SystemUI/src/com/android/systemui/qs/panels/shared/model/GridLayoutType.kt
similarity index 65%
copy from packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt
copy to packages/SystemUI/src/com/android/systemui/qs/panels/shared/model/GridLayoutType.kt
index c4476fc..23110dc 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/panels/shared/model/GridLayoutType.kt
@@ -14,11 +14,14 @@
* limitations under the License.
*/
-package com.android.systemui.volume.panel.component.mediaoutput.shared.model
+package com.android.systemui.qs.panels.shared.model
-import android.media.session.PlaybackState
+/**
+ * Grid type for a QS grid layout.
+ *
+ * Used to inject grid layouts with Dagger and the [GridLayoutTypeKey] annotation.
+ */
+interface GridLayoutType
-data class SessionWithPlayback(
- val session: MediaDeviceSession,
- val playback: PlaybackState,
-)
+/** Grid type representing a scrollable vertical grid. */
+data object InfiniteGridLayoutType : GridLayoutType
diff --git a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt b/packages/SystemUI/src/com/android/systemui/qs/panels/shared/model/GridLayoutTypeKey.kt
similarity index 63%
copy from packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt
copy to packages/SystemUI/src/com/android/systemui/qs/panels/shared/model/GridLayoutTypeKey.kt
index c4476fc..0dbaaba 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/panels/shared/model/GridLayoutTypeKey.kt
@@ -14,11 +14,15 @@
* limitations under the License.
*/
-package com.android.systemui.volume.panel.component.mediaoutput.shared.model
+package com.android.systemui.qs.panels.shared.model
-import android.media.session.PlaybackState
+import dagger.MapKey
+import kotlin.reflect.KClass
-data class SessionWithPlayback(
- val session: MediaDeviceSession,
- val playback: PlaybackState,
-)
+/**
+ * Dagger map key to associate a [GridLayoutType] with its
+ * [com.android.systemui.qs.panels.ui.compose.GridLayout].
+ */
+@Retention(AnnotationRetention.RUNTIME)
+@MapKey
+annotation class GridLayoutTypeKey(val value: KClass<out GridLayoutType>)
diff --git a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/GridLayout.kt
similarity index 62%
copy from packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt
copy to packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/GridLayout.kt
index c4476fc..920cbe7 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/GridLayout.kt
@@ -14,11 +14,17 @@
* limitations under the License.
*/
-package com.android.systemui.volume.panel.component.mediaoutput.shared.model
+package com.android.systemui.qs.panels.ui.compose
-import android.media.session.PlaybackState
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import com.android.systemui.qs.panels.ui.viewmodel.TileViewModel
-data class SessionWithPlayback(
- val session: MediaDeviceSession,
- val playback: PlaybackState,
-)
+interface GridLayout {
+ @Composable
+ fun TileGrid(
+ tiles: List<TileViewModel>,
+ modifier: Modifier,
+ tile: @Composable (TileViewModel) -> Unit,
+ )
+}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/InfiniteGridLayout.kt b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/InfiniteGridLayout.kt
new file mode 100644
index 0000000..4d0089e7
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/InfiniteGridLayout.kt
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.qs.panels.ui.compose
+
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.lazy.grid.GridCells
+import androidx.compose.foundation.lazy.grid.GridItemSpan
+import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.DisposableEffect
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.res.dimensionResource
+import androidx.compose.ui.res.integerResource
+import com.android.systemui.qs.panels.ui.viewmodel.TileViewModel
+import com.android.systemui.res.R
+import javax.inject.Inject
+
+class InfiniteGridLayout @Inject constructor() : GridLayout {
+
+ @Composable
+ override fun TileGrid(
+ tiles: List<TileViewModel>,
+ modifier: Modifier,
+ tile: @Composable (TileViewModel) -> Unit
+ ) {
+ DisposableEffect(tiles) {
+ val token = Any()
+ tiles.forEach { it.startListening(token) }
+ onDispose { tiles.forEach { it.stopListening(token) } }
+ }
+
+ LazyVerticalGrid(
+ columns =
+ GridCells.Fixed(
+ integerResource(R.integer.quick_settings_infinite_grid_num_columns)
+ ),
+ verticalArrangement =
+ Arrangement.spacedBy(dimensionResource(R.dimen.qs_tile_margin_vertical)),
+ horizontalArrangement =
+ Arrangement.spacedBy(dimensionResource(R.dimen.qs_tile_margin_horizontal)),
+ modifier = modifier
+ ) {
+ tiles.forEach { item(span = { it.span() }) { tile(it) } }
+ }
+ }
+
+ private fun TileViewModel.span(): GridItemSpan =
+ if (iconOnly) {
+ GridItemSpan(1)
+ } else {
+ GridItemSpan(2)
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/Tile.kt b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/Tile.kt
new file mode 100644
index 0000000..35f2970
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/Tile.kt
@@ -0,0 +1,155 @@
+/*
+ * 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.qs.panels.ui.compose
+
+import android.graphics.drawable.Animatable
+import android.text.TextUtils
+import androidx.appcompat.content.res.AppCompatResources
+import androidx.compose.animation.graphics.ExperimentalAnimationGraphicsApi
+import androidx.compose.animation.graphics.res.animatedVectorResource
+import androidx.compose.animation.graphics.res.rememberAnimatedVectorPainter
+import androidx.compose.animation.graphics.vector.AnimatedImageVector
+import androidx.compose.foundation.Image
+import androidx.compose.foundation.background
+import androidx.compose.foundation.basicMarquee
+import androidx.compose.foundation.clickable
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.fillMaxHeight
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.LaunchedEffect
+import androidx.compose.runtime.collectAsState
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.clip
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.ColorFilter
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.res.dimensionResource
+import com.android.compose.theme.colorAttr
+import com.android.systemui.common.shared.model.Icon as IconModel
+import com.android.systemui.common.ui.compose.Icon
+import com.android.systemui.qs.panels.ui.viewmodel.TileUiState
+import com.android.systemui.qs.panels.ui.viewmodel.TileViewModel
+import com.android.systemui.qs.tileimpl.QSTileImpl
+import com.android.systemui.res.R
+import kotlinx.coroutines.delay
+
+@Composable
+fun Tile(
+ tileViewModel: TileViewModel,
+ modifier: Modifier = Modifier,
+) {
+ val state: TileUiState by tileViewModel.state.collectAsState(tileViewModel.currentState)
+ val context = LocalContext.current
+ val horizontalAlignment =
+ if (state.iconOnly) {
+ Alignment.CenterHorizontally
+ } else {
+ Alignment.Start
+ }
+
+ Row(
+ modifier =
+ modifier
+ .fillMaxWidth()
+ .clip(RoundedCornerShape(dimensionResource(R.dimen.qs_corner_radius)))
+ .clickable { tileViewModel.onClick(null) }
+ .background(colorAttr(state.colors.background))
+ .padding(horizontal = dimensionResource(id = R.dimen.qs_label_container_margin)),
+ verticalAlignment = Alignment.CenterVertically,
+ horizontalArrangement =
+ Arrangement.spacedBy(
+ space = dimensionResource(id = R.dimen.qs_label_container_margin),
+ alignment = horizontalAlignment
+ )
+ ) {
+ val icon =
+ remember(state.icon) {
+ state.icon.get().let {
+ if (it is QSTileImpl.ResourceIcon) {
+ IconModel.Resource(it.resId, null)
+ } else {
+ IconModel.Loaded(it.getDrawable(context), null)
+ }
+ }
+ }
+ TileIcon(icon, colorAttr(state.colors.icon))
+
+ if (!state.iconOnly) {
+ Column(verticalArrangement = Arrangement.Center, modifier = Modifier.fillMaxHeight()) {
+ Text(
+ state.label.toString(),
+ color = colorAttr(state.colors.label),
+ modifier = Modifier.basicMarquee(),
+ )
+ if (!TextUtils.isEmpty(state.secondaryLabel)) {
+ Text(
+ state.secondaryLabel.toString(),
+ color = colorAttr(state.colors.secondaryLabel),
+ modifier = Modifier.basicMarquee(),
+ )
+ }
+ }
+ }
+ }
+}
+
+@OptIn(ExperimentalAnimationGraphicsApi::class)
+@Composable
+private fun TileIcon(icon: IconModel, color: Color) {
+ val modifier = Modifier.size(dimensionResource(id = R.dimen.qs_icon_size))
+ val context = LocalContext.current
+ val loadedDrawable =
+ remember(icon, context) {
+ when (icon) {
+ is IconModel.Loaded -> icon.drawable
+ is IconModel.Resource -> AppCompatResources.getDrawable(context, icon.res)
+ }
+ }
+ if (loadedDrawable !is Animatable) {
+ Icon(
+ icon = icon,
+ tint = color,
+ modifier = modifier,
+ )
+ } else if (icon is IconModel.Resource) {
+ val image = AnimatedImageVector.animatedVectorResource(id = icon.res)
+ var atEnd by remember(icon.res) { mutableStateOf(false) }
+ LaunchedEffect(key1 = icon.res) {
+ delay(350)
+ atEnd = true
+ }
+ val painter = rememberAnimatedVectorPainter(animatedImageVector = image, atEnd = atEnd)
+ Image(
+ painter = painter,
+ contentDescription = null,
+ colorFilter = ColorFilter.tint(color = color),
+ modifier = modifier
+ )
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/TileGrid.kt b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/TileGrid.kt
new file mode 100644
index 0000000..a528eed
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/compose/TileGrid.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.qs.panels.ui.compose
+
+import androidx.compose.foundation.layout.height
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.collectAsState
+import androidx.compose.runtime.getValue
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.res.dimensionResource
+import com.android.systemui.qs.panels.ui.viewmodel.TileGridViewModel
+import com.android.systemui.res.R
+
+@Composable
+fun TileGrid(viewModel: TileGridViewModel, modifier: Modifier = Modifier) {
+ val gridLayout by viewModel.gridLayout.collectAsState(InfiniteGridLayout())
+ val tiles by viewModel.tileViewModels.collectAsState(emptyList())
+
+ gridLayout.TileGrid(tiles, modifier) {
+ Tile(it, modifier = Modifier.height(dimensionResource(id = R.dimen.qs_tile_height)))
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/panels/ui/viewmodel/TileColorAttributes.kt b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/viewmodel/TileColorAttributes.kt
new file mode 100644
index 0000000..1290bf3
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/viewmodel/TileColorAttributes.kt
@@ -0,0 +1,61 @@
+/*
+ * 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.qs.panels.ui.viewmodel
+
+import android.service.quicksettings.Tile
+import androidx.annotation.AttrRes
+import com.android.systemui.plugins.qs.QSTile
+import com.android.systemui.res.R
+
+data class TileColorAttributes(
+ @AttrRes val background: Int = 0,
+ @AttrRes val label: Int = 0,
+ @AttrRes val secondaryLabel: Int = 0,
+ @AttrRes val icon: Int = 0,
+)
+
+val ActiveTileColorAttributes =
+ TileColorAttributes(
+ background = R.attr.shadeActive,
+ label = R.attr.onShadeActive,
+ secondaryLabel = R.attr.onShadeActiveVariant,
+ icon = R.attr.onShadeActive,
+ )
+
+val InactiveTileColorAttributes =
+ TileColorAttributes(
+ background = R.attr.shadeInactive,
+ label = R.attr.onShadeInactive,
+ secondaryLabel = R.attr.onShadeInactiveVariant,
+ icon = R.attr.onShadeInactiveVariant,
+ )
+
+val UnavailableTileColorAttributes =
+ TileColorAttributes(
+ background = R.attr.shadeDisabled,
+ label = R.attr.outline,
+ secondaryLabel = R.attr.outline,
+ icon = R.attr.outline,
+ )
+
+fun QSTile.State.colors(): TileColorAttributes =
+ when (state) {
+ Tile.STATE_UNAVAILABLE -> UnavailableTileColorAttributes
+ Tile.STATE_ACTIVE -> ActiveTileColorAttributes
+ Tile.STATE_INACTIVE -> InactiveTileColorAttributes
+ else -> TileColorAttributes()
+ }
diff --git a/packages/SystemUI/src/com/android/systemui/qs/panels/ui/viewmodel/TileGridViewModel.kt b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/viewmodel/TileGridViewModel.kt
new file mode 100644
index 0000000..fc13460
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/viewmodel/TileGridViewModel.kt
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.qs.panels.ui.viewmodel
+
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.qs.panels.domain.interactor.GridLayoutTypeInteractor
+import com.android.systemui.qs.panels.domain.interactor.IconTilesInteractor
+import com.android.systemui.qs.panels.shared.model.GridLayoutType
+import com.android.systemui.qs.panels.ui.compose.GridLayout
+import com.android.systemui.qs.panels.ui.compose.InfiniteGridLayout
+import com.android.systemui.qs.pipeline.domain.interactor.CurrentTilesInteractor
+import javax.inject.Inject
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.combine
+import kotlinx.coroutines.flow.map
+
+@SysUISingleton
+class TileGridViewModel
+@Inject
+constructor(
+ gridLayoutTypeInteractor: GridLayoutTypeInteractor,
+ gridLayoutMap: Map<Class<out GridLayoutType>, @JvmSuppressWildcards GridLayout>,
+ tilesInteractor: CurrentTilesInteractor,
+ iconTilesInteractor: IconTilesInteractor,
+) {
+ val gridLayout: Flow<GridLayout> =
+ gridLayoutTypeInteractor.layout.map {
+ gridLayoutMap[it::class.java] ?: InfiniteGridLayout()
+ }
+ val tileViewModels: Flow<List<TileViewModel>> =
+ combine(tilesInteractor.currentTiles, iconTilesInteractor.iconTilesSpecs) {
+ tiles,
+ iconTilesSpecs ->
+ tiles.map { TileViewModel(it.tile, iconTilesSpecs.contains(it.spec)) }
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/panels/ui/viewmodel/TileUiState.kt b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/viewmodel/TileUiState.kt
new file mode 100644
index 0000000..f4b7255
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/viewmodel/TileUiState.kt
@@ -0,0 +1,38 @@
+/*
+ * 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.qs.panels.ui.viewmodel
+
+import com.android.systemui.plugins.qs.QSTile
+import java.util.function.Supplier
+
+data class TileUiState(
+ val label: CharSequence,
+ val secondaryLabel: CharSequence,
+ val colors: TileColorAttributes,
+ val icon: Supplier<QSTile.Icon>,
+ val iconOnly: Boolean,
+)
+
+fun QSTile.State.toUiState(iconOnly: Boolean): TileUiState {
+ return TileUiState(
+ label ?: "",
+ secondaryLabel ?: "",
+ colors(),
+ icon?.let { Supplier { icon } } ?: iconSupplier,
+ iconOnly,
+ )
+}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/panels/ui/viewmodel/TileViewModel.kt b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/viewmodel/TileViewModel.kt
new file mode 100644
index 0000000..08e9119
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/qs/panels/ui/viewmodel/TileViewModel.kt
@@ -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.systemui.qs.panels.ui.viewmodel
+
+import android.view.View
+import android.view.View.OnLongClickListener
+import com.android.systemui.plugins.qs.QSTile
+import com.android.systemui.utils.coroutines.flow.conflatedCallbackFlow
+import kotlinx.coroutines.channels.awaitClose
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.distinctUntilChanged
+import kotlinx.coroutines.flow.map
+import kotlinx.coroutines.flow.onStart
+
+class TileViewModel(private val tile: QSTile, val iconOnly: Boolean = false) :
+ OnLongClickListener, View.OnClickListener {
+ val state: Flow<TileUiState> =
+ conflatedCallbackFlow {
+ val callback = QSTile.Callback { trySend(it.copy()) }
+
+ tile.addCallback(callback)
+
+ awaitClose { tile.removeCallback(callback) }
+ }
+ .onStart { emit(tile.state) }
+ .map { it.toUiState(iconOnly) }
+ .distinctUntilChanged()
+
+ val currentState: TileUiState
+ get() = tile.state.toUiState(iconOnly)
+
+ override fun onClick(view: View?) {
+ tile.click(view)
+ }
+
+ override fun onLongClick(view: View?): Boolean {
+ tile.longClick(view)
+ return true
+ }
+
+ fun startListening(token: Any) = tile.setListening(token, true)
+
+ fun stopListening(token: Any) = tile.setListening(token, false)
+}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetAdapter.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetAdapter.java
index b866dda..19b45d5 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetAdapter.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetAdapter.java
@@ -25,6 +25,7 @@
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
@@ -37,8 +38,12 @@
import com.android.settingslib.Utils;
import com.android.settingslib.wifi.WifiUtils;
import com.android.systemui.res.R;
+import com.android.wifi.flags.Flags;
import com.android.wifitrackerlib.WifiEntry;
+import kotlinx.coroutines.CoroutineScope;
+import kotlinx.coroutines.Job;
+
import java.util.List;
import java.util.concurrent.atomic.AtomicReference;
@@ -50,6 +55,7 @@
private static final String TAG = "InternetAdapter";
private final InternetDialogController mInternetDialogController;
+ private final CoroutineScope mCoroutineScope;
@Nullable
private List<WifiEntry> mWifiEntries;
@VisibleForTesting
@@ -60,8 +66,9 @@
protected View mHolderView;
protected Context mContext;
- public InternetAdapter(InternetDialogController controller) {
+ public InternetAdapter(InternetDialogController controller, CoroutineScope coroutineScope) {
mInternetDialogController = controller;
+ mCoroutineScope = coroutineScope;
}
@Override
@@ -70,7 +77,7 @@
mContext = viewGroup.getContext();
mHolderView = LayoutInflater.from(mContext).inflate(R.layout.internet_list_item,
viewGroup, false);
- return new InternetViewHolder(mHolderView, mInternetDialogController);
+ return new InternetViewHolder(mHolderView, mInternetDialogController, mCoroutineScope);
}
@Override
@@ -131,11 +138,16 @@
final ImageView mWifiEndIcon;
final Context mContext;
final InternetDialogController mInternetDialogController;
+ final CoroutineScope mCoroutineScope;
+ @Nullable
+ private Job mJob;
- InternetViewHolder(View view, InternetDialogController internetDialogController) {
+ InternetViewHolder(View view, InternetDialogController internetDialogController,
+ CoroutineScope coroutineScope) {
super(view);
mContext = view.getContext();
mInternetDialogController = internetDialogController;
+ mCoroutineScope = coroutineScope;
mContainerLayout = view.requireViewById(R.id.internet_container);
mWifiListLayout = view.requireViewById(R.id.wifi_list);
mWifiNetworkLayout = view.requireViewById(R.id.wifi_network_layout);
@@ -176,6 +188,24 @@
}
void onWifiClick(@NonNull WifiEntry wifiEntry, @NonNull View view) {
+ if (Flags.androidVWifiApi() && wifiEntry.getSecurityTypes().contains(
+ WifiEntry.SECURITY_WEP)) {
+ if (mJob == null) {
+ mJob = WifiUtils.checkWepAllowed(mContext, mCoroutineScope, wifiEntry.getSsid(),
+ WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG, intent -> {
+ mInternetDialogController.startActivity(intent, view);
+ return null;
+ }, () -> {
+ wifiConnect(wifiEntry, view);
+ return null;
+ });
+ }
+ return;
+ }
+ wifiConnect(wifiEntry, view);
+ }
+
+ void wifiConnect(@NonNull WifiEntry wifiEntry, @NonNull View view) {
if (wifiEntry.shouldEditBeforeConnect()) {
final Intent intent = WifiUtils.getWifiDialogIntent(wifiEntry.getKey(),
true /* connectForCaller */);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogController.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogController.java
index a531ee6..d5b05ef 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogController.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogController.java
@@ -747,7 +747,7 @@
return summary;
}
- private void startActivity(Intent intent, View view) {
+ void startActivity(Intent intent, View view) {
ActivityTransitionAnimator.Controller controller =
mDialogTransitionAnimator.createActivityTransitionController(view);
@@ -1348,15 +1348,12 @@
mDefaultDataSubId = defaultDataSubId;
}
- boolean mayLaunchShareWifiSettings(WifiEntry wifiEntry) {
+ boolean mayLaunchShareWifiSettings(WifiEntry wifiEntry, View view) {
Intent intent = getConfiguratorQrCodeGeneratorIntentOrNull(wifiEntry);
if (intent == null) {
return false;
}
- if (mCallback != null) {
- mCallback.dismissDialog();
- }
- mActivityStarter.startActivity(intent, false /* dismissShade */);
+ startActivity(intent, view);
return true;
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogDelegate.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogDelegate.java
index 52cf4ec..1a881b6 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogDelegate.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogDelegate.java
@@ -68,13 +68,15 @@
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.wifitrackerlib.WifiEntry;
-import java.util.List;
-import java.util.concurrent.Executor;
-
import dagger.assisted.Assisted;
import dagger.assisted.AssistedFactory;
import dagger.assisted.AssistedInject;
+import kotlinx.coroutines.CoroutineScope;
+
+import java.util.List;
+import java.util.concurrent.Executor;
+
/**
* Dialog for showing mobile network, connected Wi-Fi network and Wi-Fi networks.
*/
@@ -165,7 +167,8 @@
InternetDialogDelegate create(
@Assisted(ABOVE_STATUS_BAR) boolean aboveStatusBar,
@Assisted(CAN_CONFIG_MOBILE_DATA) boolean canConfigMobileData,
- @Assisted(CAN_CONFIG_WIFI) boolean canConfigWifi);
+ @Assisted(CAN_CONFIG_WIFI) boolean canConfigWifi,
+ @Assisted CoroutineScope coroutineScope);
}
@AssistedInject
@@ -176,6 +179,7 @@
@Assisted(ABOVE_STATUS_BAR) boolean canConfigMobileData,
@Assisted(CAN_CONFIG_MOBILE_DATA) boolean canConfigWifi,
@Assisted(CAN_CONFIG_WIFI) boolean aboveStatusBar,
+ @Assisted CoroutineScope coroutineScope,
UiEventLogger uiEventLogger,
DialogTransitionAnimator dialogTransitionAnimator,
@Main Handler handler,
@@ -202,7 +206,7 @@
mUiEventLogger = uiEventLogger;
mDialogTransitionAnimator = dialogTransitionAnimator;
- mAdapter = new InternetAdapter(mInternetDialogController);
+ mAdapter = new InternetAdapter(mInternetDialogController, coroutineScope);
}
@Override
@@ -391,7 +395,7 @@
});
mDoneButton.setOnClickListener(v -> dialog.dismiss());
mShareWifiButton.setOnClickListener(v -> {
- if (mInternetDialogController.mayLaunchShareWifiSettings(mConnectedWifiEntry)) {
+ if (mInternetDialogController.mayLaunchShareWifiSettings(mConnectedWifiEntry, v)) {
mUiEventLogger.log(InternetDialogEvent.SHARE_WIFI_QS_BUTTON_CLICKED);
}
});
@@ -415,7 +419,7 @@
}
private void setMobileDataLayout(SystemUIDialog dialog, boolean activeNetworkIsCellular,
- boolean isCarrierNetworkActive) {
+ boolean isCarrierNetworkActive) {
boolean isNetworkConnected = activeNetworkIsCellular || isCarrierNetworkActive;
// 1. Mobile network should be gone if airplane mode ON or the list of active
// subscriptionId is null.
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogManager.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogManager.kt
index 2a177c7..5aef950 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogManager.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/dialog/InternetDialogManager.kt
@@ -21,26 +21,35 @@
import com.android.systemui.animation.DialogCuj
import com.android.systemui.animation.DialogTransitionAnimator
import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.statusbar.phone.SystemUIDialog
import javax.inject.Inject
+import kotlinx.coroutines.CoroutineDispatcher
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.cancel
private const val TAG = "InternetDialogFactory"
private val DEBUG = Log.isLoggable(TAG, Log.DEBUG)
-/**
- * Factory to create [InternetDialogDelegate] objects.
- */
+/** Factory to create [InternetDialogDelegate] objects. */
@SysUISingleton
-class InternetDialogManager @Inject constructor(
+class InternetDialogManager
+@Inject
+constructor(
private val dialogTransitionAnimator: DialogTransitionAnimator,
- private val dialogFactory: InternetDialogDelegate.Factory
+ private val dialogFactory: InternetDialogDelegate.Factory,
+ @Background private val bgDispatcher: CoroutineDispatcher,
) {
+ private lateinit var coroutineScope: CoroutineScope
companion object {
private const val INTERACTION_JANK_TAG = "internet"
var dialog: SystemUIDialog? = null
}
- /** Creates a [InternetDialogDelegate]. The dialog will be animated from [view] if it is not null. */
+ /**
+ * Creates a [InternetDialogDelegate]. The dialog will be animated from [view] if it is not
+ * null.
+ */
fun create(
aboveStatusBar: Boolean,
canConfigMobileData: Boolean,
@@ -53,16 +62,21 @@
}
return
} else {
- dialog = dialogFactory.create(
- aboveStatusBar, canConfigMobileData, canConfigWifi).createDialog()
+ coroutineScope = CoroutineScope(bgDispatcher)
+ dialog =
+ dialogFactory
+ .create(aboveStatusBar, canConfigMobileData, canConfigWifi, coroutineScope)
+ .createDialog()
if (view != null) {
dialogTransitionAnimator.showFromView(
- dialog!!, view,
+ dialog!!,
+ view,
animateBackgroundBoundsChange = true,
- cuj = DialogCuj(
- InteractionJankMonitor.CUJ_SHADE_DIALOG_OPEN,
- INTERACTION_JANK_TAG
- )
+ cuj =
+ DialogCuj(
+ InteractionJankMonitor.CUJ_SHADE_DIALOG_OPEN,
+ INTERACTION_JANK_TAG
+ )
)
} else {
dialog!!.show()
@@ -74,6 +88,9 @@
if (DEBUG) {
Log.d(TAG, "destroyDialog")
}
+ if (dialog != null) {
+ coroutineScope.cancel()
+ }
dialog = null
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsContainerViewModel.kt b/packages/SystemUI/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsContainerViewModel.kt
index a3c2cbb..d6325c0 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsContainerViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsContainerViewModel.kt
@@ -18,6 +18,7 @@
import com.android.systemui.brightness.ui.viewmodel.BrightnessSliderViewModel
import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.qs.panels.ui.viewmodel.TileGridViewModel
import javax.inject.Inject
@SysUISingleton
@@ -25,4 +26,5 @@
@Inject
constructor(
val brightnessSliderViewModel: BrightnessSliderViewModel,
+ val tileGridViewModel: TileGridViewModel,
)
diff --git a/packages/SystemUI/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModel.kt b/packages/SystemUI/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModel.kt
index ab0b0b7..c1986fa 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/qs/ui/viewmodel/QuickSettingsSceneViewModel.kt
@@ -18,10 +18,15 @@
import androidx.lifecycle.LifecycleOwner
import com.android.compose.animation.scene.Back
+import com.android.compose.animation.scene.Edge
+import com.android.compose.animation.scene.SceneKey
import com.android.compose.animation.scene.Swipe
import com.android.compose.animation.scene.SwipeDirection
+import com.android.compose.animation.scene.UserAction
import com.android.compose.animation.scene.UserActionResult
import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.dagger.qualifiers.Application
+import com.android.systemui.deviceentry.domain.interactor.DeviceEntryInteractor
import com.android.systemui.qs.FooterActionsController
import com.android.systemui.qs.footer.ui.viewmodel.FooterActionsViewModel
import com.android.systemui.qs.ui.adapter.QSSceneAdapter
@@ -32,38 +37,87 @@
import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationsPlaceholderViewModel
import java.util.concurrent.atomic.AtomicBoolean
import javax.inject.Inject
-import kotlinx.coroutines.flow.flatMapLatest
-import kotlinx.coroutines.flow.flowOf
-import kotlinx.coroutines.flow.map
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.flow.SharingStarted
+import kotlinx.coroutines.flow.StateFlow
+import kotlinx.coroutines.flow.combine
+import kotlinx.coroutines.flow.stateIn
/** Models UI state and handles user input for the quick settings scene. */
@SysUISingleton
class QuickSettingsSceneViewModel
@Inject
constructor(
+ @Application private val applicationScope: CoroutineScope,
+ deviceEntryInteractor: DeviceEntryInteractor,
val brightnessMirrorViewModel: BrightnessMirrorViewModel,
val shadeHeaderViewModel: ShadeHeaderViewModel,
val qsSceneAdapter: QSSceneAdapter,
val notifications: NotificationsPlaceholderViewModel,
private val footerActionsViewModelFactory: FooterActionsViewModel.Factory,
private val footerActionsController: FooterActionsController,
- private val sceneInteractor: SceneInteractor,
+ sceneInteractor: SceneInteractor,
) {
- val destinationScenes =
- qsSceneAdapter.isCustomizing.flatMapLatest { customizing ->
- if (customizing) {
- flowOf(emptyMap())
+ @OptIn(ExperimentalCoroutinesApi::class)
+ val destinationScenes: StateFlow<Map<UserAction, UserActionResult>> =
+ combine(
+ deviceEntryInteractor.isUnlocked,
+ deviceEntryInteractor.canSwipeToEnter,
+ qsSceneAdapter.isCustomizing,
+ sceneInteractor.previousScene(ignored = Scenes.QuickSettings),
+ ) { isUnlocked, canSwipeToDismiss, isCustomizing, previousScene ->
+ destinationScenes(
+ isUnlocked,
+ canSwipeToDismiss,
+ isCustomizing,
+ previousScene,
+ )
+ }
+ .stateIn(
+ scope = applicationScope,
+ started = SharingStarted.WhileSubscribed(),
+ initialValue =
+ destinationScenes(
+ isUnlocked = deviceEntryInteractor.isUnlocked.value,
+ canSwipeToDismiss = deviceEntryInteractor.canSwipeToEnter.value,
+ isCustomizing = qsSceneAdapter.isCustomizing.value,
+ previousScene = sceneInteractor
+ .previousScene(ignored = Scenes.QuickSettings).value,
+ ),
+ )
+
+ private fun destinationScenes(
+ isUnlocked: Boolean,
+ canSwipeToDismiss: Boolean?,
+ isCustomizing: Boolean,
+ previousScene: SceneKey?
+ ): Map<UserAction, UserActionResult> {
+ val upBottomEdge =
+ when {
+ canSwipeToDismiss == true -> Scenes.Lockscreen
+ isUnlocked -> Scenes.Gone
+ else -> Scenes.Lockscreen
+ }
+
+ return buildMap {
+ if (isCustomizing) {
+ // TODO(b/332749288) Empty map so there are no back handlers and back can close
+ // customizer
+
// TODO(b/330200163) Add an Up from Bottom to be able to collapse the shade
// while customizing
} else {
- sceneInteractor.previousScene.map { previousScene ->
- mapOf(
- Back to UserActionResult(previousScene ?: Scenes.Shade),
- Swipe(SwipeDirection.Up) to UserActionResult(previousScene ?: Scenes.Shade),
- )
- }
+ this[Back] = UserActionResult(previousScene ?: Scenes.Shade)
+ this[Swipe(SwipeDirection.Up)] = UserActionResult(previousScene ?: Scenes.Shade)
+ this[
+ Swipe(
+ fromSource = Edge.Bottom,
+ direction = SwipeDirection.Up,
+ )] = UserActionResult(upBottomEdge)
}
}
+ }
private val footerActionsControllerInitialized = AtomicBoolean(false)
diff --git a/packages/SystemUI/src/com/android/systemui/scene/domain/interactor/SceneInteractor.kt b/packages/SystemUI/src/com/android/systemui/scene/domain/interactor/SceneInteractor.kt
index 0239455..8ced222 100644
--- a/packages/SystemUI/src/com/android/systemui/scene/domain/interactor/SceneInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/scene/domain/interactor/SceneInteractor.kt
@@ -140,12 +140,31 @@
)
/**
- * The previous scene.
+ * The previous scene (or `null` if the previous scene is the [ignored] scene).
*
* This is effectively the previous value of [currentScene] which means that all caveats, for
* example regarding when in a transition the current scene changes, apply.
+ *
+ * @param ignored If the previous scene is the same as [ignored], `null` is emitted. This is
+ * designed to reduce the chances of a scene using [previousScene] naively to then set up a
+ * user action that ends up leading to itself, which is an illegal operation that would cause
+ * a crash.
*/
- val previousScene: StateFlow<SceneKey?> = repository.previousScene
+ fun previousScene(
+ ignored: SceneKey? = null,
+ ): StateFlow<SceneKey?> {
+ fun SceneKey?.nullifyIfIgnored(): SceneKey? {
+ return this?.takeIf { this != ignored }
+ }
+
+ return repository.previousScene
+ .map { it.nullifyIfIgnored() }
+ .stateIn(
+ scope = applicationScope,
+ started = SharingStarted.WhileSubscribed(),
+ initialValue = repository.previousScene.value.nullifyIfIgnored(),
+ )
+ }
/**
* Returns the keys of all scenes in the container.
diff --git a/packages/SystemUI/src/com/android/systemui/scene/domain/startable/SceneContainerStartable.kt b/packages/SystemUI/src/com/android/systemui/scene/domain/startable/SceneContainerStartable.kt
index 4774eb3..ae2bb8b 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
@@ -117,9 +117,9 @@
hydrateSystemUiState()
collectFalsingSignals()
respondToFalsingDetections()
- hydrateWindowFocus()
hydrateInteractionState()
handleBouncerOverscroll()
+ hydrateWindowController()
} else {
sceneLogger.logFrameworkEnabled(
isEnabled = false,
@@ -253,7 +253,8 @@
// Track the previous scene (sans Bouncer), so that we know where to go when the device
// is unlocked whilst on the bouncer.
val previousScene =
- sceneInteractor.previousScene
+ sceneInteractor
+ .previousScene()
.filterNot { it == Scenes.Bouncer }
.stateIn(this, SharingStarted.Eagerly, initialValue = null)
deviceUnlockedInteractor.deviceUnlockStatus
@@ -402,6 +403,40 @@
}
}
+ private fun hydrateWindowController() {
+ applicationScope.launch {
+ sceneInteractor.transitionState
+ .mapNotNull { transitionState ->
+ (transitionState as? ObservableTransitionState.Idle)?.scene
+ }
+ .distinctUntilChanged()
+ .collect { sceneKey ->
+ windowController.setNotificationShadeFocusable(sceneKey != Scenes.Gone)
+ }
+ }
+
+ applicationScope.launch {
+ deviceEntryInteractor.isDeviceEntered.collect { isDeviceEntered ->
+ windowController.setKeyguardShowing(!isDeviceEntered)
+ }
+ }
+
+ applicationScope.launch {
+ sceneInteractor.currentScene
+ .map { it == Scenes.Bouncer }
+ .distinctUntilChanged()
+ .collect { isBouncerShowing ->
+ windowController.setBouncerShowing(isBouncerShowing)
+ }
+ }
+
+ applicationScope.launch {
+ occlusionInteractor.invisibleDueToOcclusion.collect { invisibleDueToOcclusion ->
+ windowController.setKeyguardOccluded(invisibleDueToOcclusion)
+ }
+ }
+ }
+
/** Collects and reports signals into the falsing system. */
private fun collectFalsingSignals() {
applicationScope.launch {
@@ -463,20 +498,6 @@
}
}
- /** Keeps the focus state of the window view up-to-date. */
- private fun hydrateWindowFocus() {
- applicationScope.launch {
- sceneInteractor.transitionState
- .mapNotNull { transitionState ->
- (transitionState as? ObservableTransitionState.Idle)?.scene
- }
- .distinctUntilChanged()
- .collect { sceneKey ->
- windowController.setNotificationShadeFocusable(sceneKey != Scenes.Gone)
- }
- }
- }
-
/** Keeps the interaction state of [CentralSurfaces] up-to-date. */
private fun hydrateInteractionState() {
applicationScope.launch {
diff --git a/packages/SystemUI/src/com/android/systemui/scene/ui/viewmodel/SceneContainerViewModel.kt b/packages/SystemUI/src/com/android/systemui/scene/ui/viewmodel/SceneContainerViewModel.kt
index 231b284..ef7829f 100644
--- a/packages/SystemUI/src/com/android/systemui/scene/ui/viewmodel/SceneContainerViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/scene/ui/viewmodel/SceneContainerViewModel.kt
@@ -19,15 +19,22 @@
import android.view.MotionEvent
import com.android.compose.animation.scene.ObservableTransitionState
import com.android.compose.animation.scene.SceneKey
+import com.android.compose.animation.scene.UserAction
+import com.android.compose.animation.scene.UserActionResult
import com.android.systemui.classifier.Classifier
import com.android.systemui.classifier.domain.interactor.FalsingInteractor
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.power.domain.interactor.PowerInteractor
import com.android.systemui.scene.domain.interactor.SceneInteractor
+import com.android.systemui.scene.shared.model.Scene
import com.android.systemui.scene.shared.model.Scenes
+import com.android.systemui.utils.coroutines.flow.flatMapLatestConflated
import javax.inject.Inject
+import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
+import kotlinx.coroutines.flow.stateIn
/** Models UI state for the scene container. */
@SysUISingleton
@@ -37,6 +44,7 @@
private val sceneInteractor: SceneInteractor,
private val falsingInteractor: FalsingInteractor,
private val powerInteractor: PowerInteractor,
+ scenes: Set<@JvmSuppressWildcards Scene>,
) {
/**
* Keys of all scenes in the container.
@@ -52,6 +60,23 @@
/** Whether the container is visible. */
val isVisible: StateFlow<Boolean> = sceneInteractor.isVisible
+ private val destinationScenesBySceneKey =
+ scenes.associate { scene -> scene.key to scene.destinationScenes }
+
+ fun currentDestinationScenes(
+ scope: CoroutineScope,
+ ): StateFlow<Map<UserAction, UserActionResult>> {
+ return currentScene
+ .flatMapLatestConflated { currentSceneKey ->
+ checkNotNull(destinationScenesBySceneKey[currentSceneKey])
+ }
+ .stateIn(
+ scope = scope,
+ started = SharingStarted.WhileSubscribed(),
+ initialValue = emptyMap(),
+ )
+ }
+
/**
* Binds the given flow so the system remembers it.
*
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java
index 6871084..13f508a 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java
@@ -519,7 +519,7 @@
removeWindow();
releaseMediaPlayer();
releaseContext();
- mBgExecutor.shutdownNow();
+ mBgExecutor.shutdown();
}
/**
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotShelfViewProxy.kt b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotShelfViewProxy.kt
index 254c133..12a3daa 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotShelfViewProxy.kt
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotShelfViewProxy.kt
@@ -31,6 +31,7 @@
import android.view.WindowManager
import android.window.OnBackInvokedCallback
import android.window.OnBackInvokedDispatcher
+import androidx.core.animation.doOnEnd
import com.android.internal.logging.UiEventLogger
import com.android.systemui.log.DebugLogger.debugLog
import com.android.systemui.res.R
@@ -77,7 +78,13 @@
private val animationController = ScreenshotAnimationController(view)
init {
- ScreenshotShelfViewBinder.bind(view, viewModel, LayoutInflater.from(context))
+ ScreenshotShelfViewBinder.bind(
+ view,
+ viewModel,
+ LayoutInflater.from(context),
+ onDismissalRequested = { event, velocity -> requestDismissal(event, velocity) },
+ onDismissalCancelled = { animationController.getSwipeReturnAnimation().start() }
+ )
addPredictiveBackListener { requestDismissal(SCREENSHOT_DISMISSED_OTHER) }
setOnKeyListener { requestDismissal(SCREENSHOT_DISMISSED_OTHER) }
debugLog(DEBUG_WINDOW) { "adding OnComputeInternalInsetsListener" }
@@ -103,7 +110,10 @@
override fun updateOrientation(insets: WindowInsets) {}
override fun createScreenshotDropInAnimation(screenRect: Rect, showFlash: Boolean): Animator {
- return animationController.getEntranceAnimation()
+ val entrance = animationController.getEntranceAnimation(screenRect, showFlash)
+ // reset the timeout when animation finishes
+ entrance.doOnEnd { callbacks?.onUserInteraction() }
+ return entrance
}
override fun addQuickShareChip(quickShareAction: Notification.Action) {}
@@ -111,6 +121,10 @@
override fun setChipIntents(imageData: SavedImageData) {}
override fun requestDismissal(event: ScreenshotEvent?) {
+ requestDismissal(event, null)
+ }
+
+ private fun requestDismissal(event: ScreenshotEvent?, velocity: Float?) {
debugLog(DEBUG_DISMISS) { "screenshot dismissal requested: $event" }
// If we're already animating out, don't restart the animation
@@ -119,7 +133,7 @@
return
}
event?.let { logger.log(it, 0, packageName) }
- val animator = animationController.getExitAnimation()
+ val animator = animationController.getSwipeDismissAnimation(velocity)
animator.addListener(
object : AnimatorListenerAdapter() {
override fun onAnimationStart(animator: Animator) {
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ui/ScreenshotAnimationController.kt b/packages/SystemUI/src/com/android/systemui/screenshot/ui/ScreenshotAnimationController.kt
index 2c17873..3f4f74b 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/ui/ScreenshotAnimationController.kt
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/ui/ScreenshotAnimationController.kt
@@ -17,43 +17,103 @@
package com.android.systemui.screenshot.ui
import android.animation.Animator
-import android.animation.AnimatorListenerAdapter
+import android.animation.AnimatorSet
+import android.animation.ObjectAnimator
import android.animation.ValueAnimator
+import android.graphics.PointF
+import android.graphics.Rect
+import android.util.MathUtils
import android.view.View
+import android.view.animation.AnimationUtils
+import androidx.core.animation.doOnEnd
+import androidx.core.animation.doOnStart
+import com.android.systemui.res.R
+import kotlin.math.abs
+import kotlin.math.max
+import kotlin.math.sign
-class ScreenshotAnimationController(private val view: View) {
+class ScreenshotAnimationController(private val view: ScreenshotShelfView) {
private var animator: Animator? = null
-
- fun getEntranceAnimation(): Animator {
- val animator = ValueAnimator.ofFloat(0f, 1f)
- animator.addUpdateListener { view.alpha = it.animatedFraction }
- animator.addListener(
- object : AnimatorListenerAdapter() {
- override fun onAnimationStart(animator: Animator) {
- view.alpha = 0f
- }
- override fun onAnimationEnd(animator: Animator) {
- view.alpha = 1f
- }
- }
+ private val screenshotPreview = view.requireViewById<View>(R.id.screenshot_preview)
+ private val flashView = view.requireViewById<View>(R.id.screenshot_flash)
+ private val actionContainer = view.requireViewById<View>(R.id.actions_container_background)
+ private val fastOutSlowIn =
+ AnimationUtils.loadInterpolator(view.context, android.R.interpolator.fast_out_slow_in)
+ private val staticUI =
+ listOf<View>(
+ view.requireViewById(R.id.screenshot_preview_border),
+ view.requireViewById(R.id.actions_container_background),
+ view.requireViewById(R.id.screenshot_badge),
+ view.requireViewById(R.id.screenshot_dismiss_button)
)
+
+ fun getEntranceAnimation(bounds: Rect, showFlash: Boolean): Animator {
+ val entranceAnimation = AnimatorSet()
+
+ val previewAnimator = getPreviewAnimator(bounds)
+
+ if (showFlash) {
+ val flashInAnimator =
+ ObjectAnimator.ofFloat(flashView, "alpha", 0f, 1f).apply {
+ duration = FLASH_IN_DURATION_MS
+ interpolator = fastOutSlowIn
+ }
+ val flashOutAnimator =
+ ObjectAnimator.ofFloat(flashView, "alpha", 1f, 0f).apply {
+ duration = FLASH_OUT_DURATION_MS
+ interpolator = fastOutSlowIn
+ }
+ flashInAnimator.doOnStart { flashView.visibility = View.VISIBLE }
+ flashOutAnimator.doOnEnd { flashView.visibility = View.GONE }
+ entranceAnimation.play(flashOutAnimator).after(flashInAnimator)
+ entranceAnimation.play(previewAnimator).with(flashOutAnimator)
+ entranceAnimation.doOnStart { screenshotPreview.visibility = View.INVISIBLE }
+ }
+
+ val fadeInAnimator = ValueAnimator.ofFloat(0f, 1f)
+ fadeInAnimator.addUpdateListener {
+ for (child in staticUI) {
+ child.alpha = it.animatedValue as Float
+ }
+ }
+ entranceAnimation.play(fadeInAnimator).after(previewAnimator)
+ entranceAnimation.doOnStart {
+ for (child in staticUI) {
+ child.alpha = 0f
+ }
+ }
+
+ this.animator = entranceAnimation
+ return entranceAnimation
+ }
+
+ fun getSwipeReturnAnimation(): Animator {
+ animator?.cancel()
+ val animator = ValueAnimator.ofFloat(view.translationX, 0f)
+ animator.addUpdateListener { view.translationX = it.animatedValue as Float }
this.animator = animator
return animator
}
- fun getExitAnimation(): Animator {
- val animator = ValueAnimator.ofFloat(1f, 0f)
- animator.addUpdateListener { view.alpha = it.animatedValue as Float }
- animator.addListener(
- object : AnimatorListenerAdapter() {
- override fun onAnimationStart(animator: Animator) {
- view.alpha = 1f
- }
- override fun onAnimationEnd(animator: Animator) {
- view.alpha = 0f
- }
+ fun getSwipeDismissAnimation(requestedVelocity: Float?): Animator {
+ val velocity = getAdjustedVelocity(requestedVelocity)
+ val screenWidth = view.resources.displayMetrics.widthPixels
+ // translation at which point the visible UI is fully off the screen (in the direction
+ // according to velocity)
+ val endX =
+ if (velocity < 0) {
+ -1f * actionContainer.right
+ } else {
+ (screenWidth - actionContainer.left).toFloat()
}
- )
+ val distance = endX - view.translationX
+ val animator = ValueAnimator.ofFloat(view.translationX, endX)
+ animator.addUpdateListener {
+ view.translationX = it.animatedValue as Float
+ view.alpha = 1f - it.animatedFraction
+ }
+ animator.duration = ((abs(distance / velocity))).toLong()
+
this.animator = animator
return animator
}
@@ -61,4 +121,60 @@
fun cancel() {
animator?.cancel()
}
+
+ private fun getPreviewAnimator(bounds: Rect): Animator {
+ val targetPosition = Rect()
+ screenshotPreview.getHitRect(targetPosition)
+ val startXScale = bounds.width() / targetPosition.width().toFloat()
+ val startYScale = bounds.height() / targetPosition.height().toFloat()
+ val startPos = PointF(bounds.exactCenterX(), bounds.exactCenterY())
+ val endPos = PointF(targetPosition.exactCenterX(), targetPosition.exactCenterY())
+
+ val previewYAnimator =
+ ValueAnimator.ofFloat(startPos.y, endPos.y).apply {
+ duration = PREVIEW_Y_ANIMATION_DURATION_MS
+ interpolator = fastOutSlowIn
+ }
+ previewYAnimator.addUpdateListener {
+ val progress = it.animatedValue as Float
+ screenshotPreview.y = progress - screenshotPreview.height / 2f
+ }
+ // scale animation starts/finishes at the same time as x placement
+ val previewXAndScaleAnimator =
+ ValueAnimator.ofFloat(0f, 1f).apply {
+ duration = PREVIEW_X_ANIMATION_DURATION_MS
+ interpolator = fastOutSlowIn
+ }
+ previewXAndScaleAnimator.addUpdateListener {
+ val t = it.animatedFraction
+ screenshotPreview.scaleX = MathUtils.lerp(startXScale, 1f, t)
+ screenshotPreview.scaleY = MathUtils.lerp(startYScale, 1f, t)
+ screenshotPreview.x =
+ MathUtils.lerp(startPos.x, endPos.x, t) - screenshotPreview.width / 2f
+ }
+
+ val previewAnimator = AnimatorSet()
+ previewAnimator.play(previewXAndScaleAnimator).with(previewYAnimator)
+
+ previewAnimator.doOnStart { screenshotPreview.visibility = View.VISIBLE }
+ return previewAnimator
+ }
+
+ private fun getAdjustedVelocity(requestedVelocity: Float?): Float {
+ return if (requestedVelocity == null) {
+ val isLTR = view.resources.configuration.layoutDirection == View.LAYOUT_DIRECTION_LTR
+ // dismiss to the left in LTR locales, to the right in RTL
+ if (isLTR) -MINIMUM_VELOCITY else MINIMUM_VELOCITY
+ } else {
+ sign(requestedVelocity) * max(MINIMUM_VELOCITY, abs(requestedVelocity))
+ }
+ }
+
+ companion object {
+ private const val MINIMUM_VELOCITY = 1.5f // pixels per second
+ private const val FLASH_IN_DURATION_MS: Long = 133
+ private const val FLASH_OUT_DURATION_MS: Long = 217
+ private const val PREVIEW_X_ANIMATION_DURATION_MS: Long = 234
+ private const val PREVIEW_Y_ANIMATION_DURATION_MS: Long = 500
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ui/ScreenshotShelfView.kt b/packages/SystemUI/src/com/android/systemui/screenshot/ui/ScreenshotShelfView.kt
index b7a03ef..f9af4b9 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/ui/ScreenshotShelfView.kt
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/ui/ScreenshotShelfView.kt
@@ -21,6 +21,7 @@
import android.graphics.Rect
import android.graphics.Region
import android.util.AttributeSet
+import android.view.MotionEvent
import android.view.View
import android.widget.ImageView
import androidx.constraintlayout.widget.ConstraintLayout
@@ -30,6 +31,7 @@
class ScreenshotShelfView(context: Context, attrs: AttributeSet? = null) :
ConstraintLayout(context, attrs) {
lateinit var screenshotPreview: ImageView
+ var onTouchInterceptListener: ((MotionEvent) -> Boolean)? = null
private val displayMetrics = context.resources.displayMetrics
private val tmpRect = Rect()
@@ -38,6 +40,8 @@
override fun onFinishInflate() {
super.onFinishInflate()
+ // Get focus so that the key events go to the layout.
+ isFocusableInTouchMode = true
screenshotPreview = requireViewById(R.id.screenshot_preview)
actionsContainerBackground = requireViewById(R.id.actions_container_background)
dismissButton = requireViewById(R.id.screenshot_dismiss_button)
@@ -83,4 +87,11 @@
companion object {
private const val TOUCH_PADDING_DP = 12f
}
+
+ override fun onInterceptTouchEvent(ev: MotionEvent): Boolean {
+ if (onTouchInterceptListener?.invoke(ev) == true) {
+ return true
+ }
+ return super.onInterceptTouchEvent(ev)
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ui/SwipeGestureListener.kt b/packages/SystemUI/src/com/android/systemui/screenshot/ui/SwipeGestureListener.kt
new file mode 100644
index 0000000..61d4489
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/ui/SwipeGestureListener.kt
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.screenshot.ui
+
+import android.view.MotionEvent
+import android.view.VelocityTracker
+import android.view.View
+import com.android.systemui.screenshot.FloatingWindowUtil
+import kotlin.math.abs
+
+class SwipeGestureListener(
+ private val view: View,
+ private val onDismiss: (Float?) -> Unit,
+ private val onCancel: () -> Unit
+) {
+ private val velocityTracker = VelocityTracker.obtain()
+ private val displayMetrics = view.resources.displayMetrics
+
+ private var startX = 0f
+
+ fun onMotionEvent(ev: MotionEvent): Boolean {
+ ev.offsetLocation(view.translationX, 0f)
+ when (ev.actionMasked) {
+ MotionEvent.ACTION_DOWN -> {
+ velocityTracker.addMovement(ev)
+ startX = ev.rawX
+ }
+ MotionEvent.ACTION_UP -> {
+ velocityTracker.computeCurrentVelocity(1)
+ val xVelocity = velocityTracker.xVelocity
+ if (
+ abs(xVelocity) > FloatingWindowUtil.dpToPx(displayMetrics, FLING_THRESHOLD_DP)
+ ) {
+ onDismiss.invoke(xVelocity)
+ return true
+ } else if (
+ abs(view.translationX) >
+ FloatingWindowUtil.dpToPx(displayMetrics, DISMISS_THRESHOLD_DP)
+ ) {
+ onDismiss.invoke(xVelocity)
+ return true
+ } else {
+ velocityTracker.clear()
+ onCancel.invoke()
+ }
+ }
+ MotionEvent.ACTION_MOVE -> {
+ velocityTracker.addMovement(ev)
+ view.translationX = ev.rawX - startX
+ }
+ }
+ return false
+ }
+
+ companion object {
+ private const val DISMISS_THRESHOLD_DP = 80f
+ private const val FLING_THRESHOLD_DP = .8f // dp per ms
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ui/binder/ScreenshotShelfViewBinder.kt b/packages/SystemUI/src/com/android/systemui/screenshot/ui/binder/ScreenshotShelfViewBinder.kt
index 5f835b3..3376b8c 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/ui/binder/ScreenshotShelfViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/ui/binder/ScreenshotShelfViewBinder.kt
@@ -18,7 +18,6 @@
import android.view.LayoutInflater
import android.view.View
-import android.view.ViewGroup
import android.widget.ImageView
import android.widget.LinearLayout
import androidx.lifecycle.Lifecycle
@@ -26,24 +25,44 @@
import androidx.lifecycle.repeatOnLifecycle
import com.android.systemui.lifecycle.repeatWhenAttached
import com.android.systemui.res.R
+import com.android.systemui.screenshot.ScreenshotEvent
+import com.android.systemui.screenshot.ui.ScreenshotShelfView
+import com.android.systemui.screenshot.ui.SwipeGestureListener
import com.android.systemui.screenshot.ui.viewmodel.ScreenshotViewModel
import com.android.systemui.util.children
+import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
object ScreenshotShelfViewBinder {
fun bind(
- view: ViewGroup,
+ view: ScreenshotShelfView,
viewModel: ScreenshotViewModel,
layoutInflater: LayoutInflater,
+ onDismissalRequested: (event: ScreenshotEvent, velocity: Float?) -> Unit,
+ onDismissalCancelled: () -> Unit,
) {
+ val swipeGestureListener =
+ SwipeGestureListener(
+ view,
+ onDismiss = {
+ onDismissalRequested(ScreenshotEvent.SCREENSHOT_SWIPE_DISMISSED, it)
+ },
+ onCancel = onDismissalCancelled
+ )
+ view.onTouchInterceptListener = { swipeGestureListener.onMotionEvent(it) }
+
val previewView: ImageView = view.requireViewById(R.id.screenshot_preview)
val previewBorder = view.requireViewById<View>(R.id.screenshot_preview_border)
previewView.clipToOutline = true
val actionsContainer: LinearLayout = view.requireViewById(R.id.screenshot_actions)
- view.requireViewById<View>(R.id.screenshot_dismiss_button).visibility =
- if (viewModel.showDismissButton) View.VISIBLE else View.GONE
+ val dismissButton = view.requireViewById<View>(R.id.screenshot_dismiss_button)
+ dismissButton.visibility = if (viewModel.showDismissButton) View.VISIBLE else View.GONE
+ dismissButton.setOnClickListener {
+ onDismissalRequested(ScreenshotEvent.SCREENSHOT_EXPLICIT_DISMISSAL, null)
+ }
- view.repeatWhenAttached {
+ // use immediate dispatcher to ensure screenshot bitmap is set before animation
+ view.repeatWhenAttached(Dispatchers.Main.immediate) {
lifecycleScope.launch {
repeatOnLifecycle(Lifecycle.State.STARTED) {
launch {
@@ -79,9 +98,9 @@
// ID is unique.
val newIds = visibleActions.map { it.id }
- for (view in actionsContainer.children.toList()) {
- if (view.tag !in newIds) {
- actionsContainer.removeView(view)
+ for (child in actionsContainer.children.toList()) {
+ if (child.tag !in newIds) {
+ actionsContainer.removeView(child)
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessController.java b/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessController.java
index 8397d9f..37f2a21 100644
--- a/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessController.java
+++ b/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessController.java
@@ -47,7 +47,9 @@
import com.android.internal.display.BrightnessSynchronizer;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedLockUtilsInternal;
+import com.android.systemui.Flags;
import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.settings.DisplayTracker;
@@ -370,10 +372,18 @@
mBackgroundHandler.post(new Runnable() {
@Override
public void run() {
- mControl.setEnforcedAdmin(
+ int userId = mUserTracker.getUserId();
+ RestrictedLockUtils.EnforcedAdmin enforcedAdmin =
RestrictedLockUtilsInternal.checkIfRestrictionEnforced(mContext,
UserManager.DISALLOW_CONFIG_BRIGHTNESS,
- mUserTracker.getUserId()));
+ userId);
+ if (Flags.enforceBrightnessBaseUserRestriction() && enforcedAdmin == null
+ && RestrictedLockUtilsInternal.hasBaseUserRestriction(mContext,
+ UserManager.DISALLOW_CONFIG_BRIGHTNESS,
+ userId)) {
+ enforcedAdmin = new RestrictedLockUtils.EnforcedAdmin();
+ }
+ mControl.setEnforcedAdmin(enforcedAdmin);
}
});
}
diff --git a/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessSliderController.java b/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessSliderController.java
index b425fb9..083cee7 100644
--- a/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessSliderController.java
+++ b/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessSliderController.java
@@ -33,7 +33,7 @@
import com.android.systemui.Gefingerpoken;
import com.android.systemui.classifier.Classifier;
import com.android.systemui.haptics.slider.HapticSliderViewBinder;
-import com.android.systemui.haptics.slider.SeekableSliderHapticPlugin;
+import com.android.systemui.haptics.slider.SeekbarHapticPlugin;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.res.R;
@@ -65,7 +65,7 @@
private final FalsingManager mFalsingManager;
private final UiEventLogger mUiEventLogger;
- private final SeekableSliderHapticPlugin mBrightnessSliderHapticPlugin;
+ private final SeekbarHapticPlugin mBrightnessSliderHapticPlugin;
private final ActivityStarter mActivityStarter;
private final Gefingerpoken mOnInterceptListener = new Gefingerpoken() {
@@ -89,7 +89,7 @@
BrightnessSliderView brightnessSliderView,
FalsingManager falsingManager,
UiEventLogger uiEventLogger,
- SeekableSliderHapticPlugin brightnessSliderHapticPlugin,
+ SeekbarHapticPlugin brightnessSliderHapticPlugin,
ActivityStarter activityStarter) {
super(brightnessSliderView);
mFalsingManager = falsingManager;
@@ -314,7 +314,7 @@
int layout = getLayout();
BrightnessSliderView root = (BrightnessSliderView) LayoutInflater.from(context)
.inflate(layout, viewRoot, false);
- SeekableSliderHapticPlugin plugin = new SeekableSliderHapticPlugin(
+ SeekbarHapticPlugin plugin = new SeekbarHapticPlugin(
mVibratorHelper,
mSystemClock);
if (hapticBrightnessSlider()) {
diff --git a/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessSliderView.java b/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessSliderView.java
index e051dab..92006a4 100644
--- a/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessSliderView.java
+++ b/packages/SystemUI/src/com/android/systemui/settings/brightness/BrightnessSliderView.java
@@ -63,6 +63,7 @@
@Override
protected void onFinishInflate() {
super.onFinishInflate();
+ setLayerType(LAYER_TYPE_HARDWARE, null);
mSlider = requireViewById(R.id.slider);
mSlider.setAccessibilityLabel(getContentDescription().toString());
diff --git a/packages/SystemUI/src/com/android/systemui/shade/GlanceableHubContainerController.kt b/packages/SystemUI/src/com/android/systemui/shade/GlanceableHubContainerController.kt
index 8f6b9d0..a5a5474 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/GlanceableHubContainerController.kt
+++ b/packages/SystemUI/src/com/android/systemui/shade/GlanceableHubContainerController.kt
@@ -28,10 +28,14 @@
import androidx.activity.setViewTreeOnBackPressedDispatcherOwner
import androidx.compose.ui.platform.ComposeView
import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.LifecycleOwner
+import androidx.lifecycle.LifecycleRegistry
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import com.android.compose.theme.PlatformTheme
import com.android.internal.annotations.VisibleForTesting
+import com.android.systemui.ambient.touch.TouchMonitor
+import com.android.systemui.ambient.touch.dagger.AmbientTouchComponent
import com.android.systemui.communal.dagger.Communal
import com.android.systemui.communal.domain.interactor.CommunalInteractor
import com.android.systemui.communal.ui.compose.CommunalContainer
@@ -45,6 +49,9 @@
import com.android.systemui.scene.shared.model.SceneDataSourceDelegator
import com.android.systemui.shade.domain.interactor.ShadeInteractor
import com.android.systemui.statusbar.phone.SystemUIDialogFactory
+import com.android.systemui.util.kotlin.BooleanFlowOperators.and
+import com.android.systemui.util.kotlin.BooleanFlowOperators.not
+import com.android.systemui.util.kotlin.BooleanFlowOperators.or
import com.android.systemui.util.kotlin.collectFlow
import javax.inject.Inject
import kotlinx.coroutines.flow.Flow
@@ -66,12 +73,27 @@
private val shadeInteractor: ShadeInteractor,
private val powerManager: PowerManager,
private val communalColors: CommunalColors,
- @Communal private val dataSourceDelegator: SceneDataSourceDelegator,
-) {
+ private val ambientTouchComponentFactory: AmbientTouchComponent.Factory,
+ @Communal private val dataSourceDelegator: SceneDataSourceDelegator
+) : LifecycleOwner {
/** The container view for the hub. This will not be initialized until [initView] is called. */
private var communalContainerView: View? = null
/**
+ * This lifecycle is used to control when the [touchMonitor] listens to touches. The lifecycle
+ * should only be [Lifecycle.State.RESUMED] when the hub is showing and not covered by anything,
+ * such as the notification shade or bouncer.
+ */
+ private var lifecycleRegistry: LifecycleRegistry = LifecycleRegistry(this)
+
+ /**
+ * This [TouchMonitor] listens for top and bottom swipe gestures globally when the hub is open.
+ * When a top or bottom swipe is detected, they will be intercepted and used to open the
+ * notification shade/bouncer.
+ */
+ private var touchMonitor: TouchMonitor? = null
+
+ /**
* The width of the area in which a right edge swipe can open the hub, in pixels. Read from
* resources when [initView] is called.
*/
@@ -79,20 +101,6 @@
private var rightEdgeSwipeRegionWidth: Int = 0
/**
- * The height of the area in which a top edge swipe while the hub is open will not intercept
- * touches, in pixels. This allows the top edge swipe to instead open the notification shade.
- * Read from resources when [initView] is called.
- */
- private var topEdgeSwipeRegionWidth: Int = 0
-
- /**
- * The height of the area in which a bottom edge swipe while the hub is open will not intercept
- * touches, in pixels. This allows the bottom edge swipe to instead open the bouncer. Read from
- * resources when [initView] is called.
- */
- private var bottomEdgeSwipeRegionWidth: Int = 0
-
- /**
* True if we are currently tracking a gesture for opening the hub that started in the edge
* swipe region.
*/
@@ -101,9 +109,6 @@
/** 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.
*
@@ -120,9 +125,15 @@
private var anyBouncerShowing = false
/**
- * True if the shade is fully expanded, meaning the hub should not receive any touch input.
+ * True if the shade is fully expanded and the user is not interacting with it anymore, meaning
+ * the hub should not receive any touch input.
*
- * Tracks [ShadeInteractor.isAnyFullyExpanded].
+ * We need to not pause the touch handling lifecycle as soon as the shade opens because if the
+ * user swipes down, then back up without lifting their finger, the lifecycle will be paused
+ * then resumed, and resuming force-stops all active touch sessions. This means the shade will
+ * not receive the end of the gesture and will be stuck open.
+ *
+ * Based on [ShadeInteractor.isAnyFullyExpanded] and [ShadeInteractor.isUserInteracting].
*/
private var shadeShowing = false
@@ -131,13 +142,12 @@
* 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
+ fun communalAvailable(): Flow<Boolean> =
+ or(communalInteractor.isCommunalAvailable, communalInteractor.editModeOpen)
/**
* Creates the container view containing the glanceable hub UI.
@@ -190,28 +200,45 @@
throw RuntimeException("Communal view has already been initialized")
}
+ if (touchMonitor == null) {
+ touchMonitor =
+ ambientTouchComponentFactory.create(this, HashSet()).getTouchMonitor().apply {
+ init()
+ }
+ }
+ lifecycleRegistry.currentState = Lifecycle.State.CREATED
+
communalContainerView = containerView
rightEdgeSwipeRegionWidth =
containerView.resources.getDimensionPixelSize(
R.dimen.communal_right_edge_swipe_region_width
)
- topEdgeSwipeRegionWidth =
- containerView.resources.getDimensionPixelSize(
- R.dimen.communal_top_edge_swipe_region_height
- )
- bottomEdgeSwipeRegionWidth =
- containerView.resources.getDimensionPixelSize(
- R.dimen.communal_bottom_edge_swipe_region_height
- )
collectFlow(
containerView,
keyguardTransitionInteractor.isFinishedInStateWhere(KeyguardState::isBouncerState),
- { anyBouncerShowing = it }
+ {
+ anyBouncerShowing = it
+ updateLifecycleState()
+ }
)
- collectFlow(containerView, communalInteractor.isCommunalShowing, { hubShowing = it })
- collectFlow(containerView, shadeInteractor.isAnyFullyExpanded, { shadeShowing = it })
+ collectFlow(
+ containerView,
+ communalInteractor.isCommunalShowing,
+ {
+ hubShowing = it
+ updateLifecycleState()
+ }
+ )
+ collectFlow(
+ containerView,
+ and(shadeInteractor.isAnyFullyExpanded, not(shadeInteractor.isUserInteracting)),
+ {
+ shadeShowing = it
+ updateLifecycleState()
+ }
+ )
collectFlow(containerView, keyguardInteractor.isDreaming, { isDreaming = it })
communalContainerView = containerView
@@ -219,10 +246,24 @@
return containerView
}
+ /**
+ * Updates the lifecycle stored by the [lifecycleRegistry] to control when the [touchMonitor]
+ * should listen for and intercept top and bottom swipes.
+ */
+ private fun updateLifecycleState() {
+ val shouldInterceptGestures = hubShowing && !(shadeShowing || anyBouncerShowing)
+ if (shouldInterceptGestures) {
+ lifecycleRegistry.currentState = Lifecycle.State.RESUMED
+ } else {
+ lifecycleRegistry.currentState = Lifecycle.State.STARTED
+ }
+ }
+
/** Removes the container view from its parent. */
fun disposeView() {
communalContainerView?.let {
(it.parent as ViewGroup).removeView(it)
+ lifecycleRegistry.currentState = Lifecycle.State.CREATED
communalContainerView = null
}
}
@@ -260,15 +301,7 @@
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) {
- isTrackingHubGesture = true
- } else {
- isTrackingHubTouch = true
- }
+ isTrackingHubTouch = true
}
if (isTrackingHubTouch) {
@@ -281,19 +314,6 @@
// 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
@@ -345,4 +365,7 @@
0
)
}
+
+ override val lifecycle: Lifecycle
+ get() = lifecycleRegistry
}
diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowControllerImpl.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowControllerImpl.java
index adcb14a..8b7e11c 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowControllerImpl.java
@@ -448,6 +448,9 @@
|| mScreenOffAnimationController.shouldIgnoreKeyguardTouches()) {
mLpChanged.flags &= ~LayoutParams.FLAG_NOT_FOCUSABLE;
mLpChanged.flags &= ~LayoutParams.FLAG_ALT_FOCUSABLE_IM;
+ } else if (state.glanceableHubShowing) {
+ mLpChanged.flags &= ~LayoutParams.FLAG_NOT_FOCUSABLE;
+ mLpChanged.flags &= ~LayoutParams.FLAG_ALT_FOCUSABLE_IM;
} else if (state.isKeyguardShowingAndNotOccluded() || panelFocusable) {
mLpChanged.flags &= ~LayoutParams.FLAG_NOT_FOCUSABLE;
// Make sure to remove FLAG_ALT_FOCUSABLE_IM when keyguard needs input.
@@ -611,6 +614,7 @@
state.panelVisible,
state.shadeOrQsExpanded,
state.notificationShadeFocusable,
+ state.glanceableHubShowing,
state.bouncerShowing,
state.keyguardFadingAway,
state.keyguardGoingAway,
@@ -740,6 +744,12 @@
}
@Override
+ public void setGlanceableHubShowing(boolean showing) {
+ mCurrentState.glanceableHubShowing = showing;
+ apply(mCurrentState);
+ }
+
+ @Override
public void setBackdropShowing(boolean showing) {
mCurrentState.mediaBackdropShowing = showing;
apply(mCurrentState);
diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowState.kt b/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowState.kt
index e0a98b3..6a4b52a 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowState.kt
+++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowState.kt
@@ -35,6 +35,7 @@
@JvmField var shadeOrQsExpanded: Boolean = false,
@JvmField var notificationShadeFocusable: Boolean = false,
@JvmField var bouncerShowing: Boolean = false,
+ @JvmField var glanceableHubShowing: Boolean = false,
@JvmField var keyguardFadingAway: Boolean = false,
@JvmField var keyguardGoingAway: Boolean = false,
@JvmField var qsExpanded: Boolean = false,
@@ -79,6 +80,7 @@
shadeOrQsExpanded.toString(),
notificationShadeFocusable.toString(),
bouncerShowing.toString(),
+ glanceableHubShowing.toString(),
keyguardFadingAway.toString(),
keyguardGoingAway.toString(),
qsExpanded.toString(),
@@ -119,6 +121,7 @@
panelVisible: Boolean,
panelExpanded: Boolean,
notificationShadeFocusable: Boolean,
+ glanceableHubShowing: Boolean,
bouncerShowing: Boolean,
keyguardFadingAway: Boolean,
keyguardGoingAway: Boolean,
@@ -149,6 +152,7 @@
this.panelVisible = panelVisible
this.shadeOrQsExpanded = panelExpanded
this.notificationShadeFocusable = notificationShadeFocusable
+ this.glanceableHubShowing = glanceableHubShowing
this.bouncerShowing = bouncerShowing
this.keyguardFadingAway = keyguardFadingAway
this.keyguardGoingAway = keyguardGoingAway
@@ -197,6 +201,7 @@
"panelVisible",
"panelExpanded",
"notificationShadeFocusable",
+ "glanceableHubShowing",
"bouncerShowing",
"keyguardFadingAway",
"keyguardGoingAway",
diff --git a/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowViewController.java b/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowViewController.java
index 907cf5e..44f86da 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/shade/NotificationShadeWindowViewController.java
@@ -25,7 +25,6 @@
import android.app.StatusBarManager;
import android.util.Log;
import android.view.GestureDetector;
-import android.view.InputDevice;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
@@ -74,14 +73,14 @@
import com.android.systemui.unfold.UnfoldTransitionProgressProvider;
import com.android.systemui.util.time.SystemClock;
+import kotlinx.coroutines.ExperimentalCoroutinesApi;
+
import java.io.PrintWriter;
import java.util.Optional;
import java.util.function.Consumer;
import javax.inject.Inject;
-import kotlinx.coroutines.ExperimentalCoroutinesApi;
-
/**
* Controller for {@link NotificationShadeWindowView}.
*/
@@ -137,6 +136,11 @@
private final PanelExpansionInteractor mPanelExpansionInteractor;
private final ShadeExpansionStateManager mShadeExpansionStateManager;
+ /**
+ * If {@code true}, an external touch sent in {@link #handleExternalTouch(MotionEvent)} has been
+ * intercepted and all future touch events for the gesture should be processed by this view.
+ */
+ private boolean mExternalTouchIntercepted = false;
private boolean mIsTrackingBarGesture = false;
private boolean mIsOcclusionTransitionRunning = false;
private DisableSubpixelTextTransitionListener mDisableSubpixelTextTransitionListener;
@@ -253,11 +257,28 @@
}
/**
- * Handle a touch event while dreaming by forwarding the event to the content view.
+ * Handle a touch event while dreaming or on the hub by forwarding the event to the content
+ * view.
+ * <p>
+ * Since important logic for handling touches lives in the dispatch/intercept phases, we
+ * simulate going through all of these stages before sending onTouchEvent if intercepted.
+ *
* @param event The event to forward.
*/
- public void handleDreamTouch(MotionEvent event) {
- mView.dispatchTouchEvent(event);
+ public void handleExternalTouch(MotionEvent event) {
+ if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
+ mExternalTouchIntercepted = false;
+ }
+
+ if (!mView.dispatchTouchEvent(event)) {
+ return;
+ }
+ if (!mExternalTouchIntercepted) {
+ mExternalTouchIntercepted = mView.onInterceptTouchEvent(event);
+ }
+ if (mExternalTouchIntercepted) {
+ mView.onTouchEvent(event);
+ }
}
/** Inflates the {@link R.layout#status_bar_expanded} layout and sets it up. */
diff --git a/packages/SystemUI/src/com/android/systemui/startable/Dependencies.kt b/packages/SystemUI/src/com/android/systemui/startable/Dependencies.kt
index 8eed097..396c5f2 100644
--- a/packages/SystemUI/src/com/android/systemui/startable/Dependencies.kt
+++ b/packages/SystemUI/src/com/android/systemui/startable/Dependencies.kt
@@ -16,7 +16,8 @@
package com.android.systemui.startable
import com.android.systemui.CoreStartable
-import kotlin.reflect.KClass
+import java.lang.annotation.Documented
+import javax.inject.Qualifier
/**
* Allows a [CoreStartable] to declare that it must be started after its dependencies.
@@ -24,7 +25,4 @@
* This creates a partial, topological ordering. See [com.android.systemui.SystemUIApplication] for
* how this ordering is enforced at runtime.
*/
-@MustBeDocumented
-@Target(AnnotationTarget.CLASS)
-@Retention(AnnotationRetention.RUNTIME)
-annotation class Dependencies(vararg val value: KClass<*> = [])
+@Qualifier @Documented @Retention(AnnotationRetention.RUNTIME) annotation class Dependencies()
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeWindowController.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeWindowController.java
index e669556..707d59aa 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeWindowController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeWindowController.java
@@ -86,6 +86,9 @@
/** Sets the state of whether the bouncer is showing or not. */
default void setBouncerShowing(boolean showing) {}
+ /** Sets the state of whether the glanceable hub is showing or not. */
+ default void setGlanceableHubShowing(boolean showing) {}
+
/** Sets the state of whether the backdrop is showing or not. */
default void setBackdropShowing(boolean showing) {}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/SysuiStatusBarStateController.java b/packages/SystemUI/src/com/android/systemui/statusbar/SysuiStatusBarStateController.java
index d2fe20d..8104755 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/SysuiStatusBarStateController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/SysuiStatusBarStateController.java
@@ -23,7 +23,6 @@
import com.android.systemui.CoreStartable;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
-import com.android.systemui.startable.Dependencies;
import com.android.systemui.statusbar.phone.CentralSurfaces;
import java.lang.annotation.Retention;
@@ -31,7 +30,6 @@
/**
* Sends updates to {@link StateListener}s about changes to the status bar state and dozing state
*/
-@Dependencies(CentralSurfaces.class)
public interface SysuiStatusBarStateController extends StatusBarStateController, CoreStartable {
// TODO: b/115739177 (remove this explicit ordering if we can)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationBackgroundView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationBackgroundView.java
index ed3a38d..d0db514 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationBackgroundView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationBackgroundView.java
@@ -53,6 +53,8 @@
private int mTintColor;
@Nullable private Integer mRippleColor;
private final float[] mCornerRadii = new float[8];
+ private final float[] mFocusOverlayCornerRadii = new float[8];
+ private float mFocusOverlayStroke = 0;
private boolean mBottomIsRounded;
private boolean mBottomAmountClips = true;
private int mActualHeight = -1;
@@ -74,6 +76,7 @@
R.color.notification_state_color_dark);
mNormalColor = Utils.getColorAttrDefaultColor(mContext,
com.android.internal.R.attr.materialColorSurfaceContainerHigh);
+ mFocusOverlayStroke = getResources().getDimension(R.dimen.notification_focus_stroke_width);
}
@Override
@@ -290,16 +293,30 @@
if (mDontModifyCorners) {
return;
}
- if (mBackground instanceof LayerDrawable) {
- int numberOfLayers = ((LayerDrawable) mBackground).getNumberOfLayers();
+ if (mBackground instanceof LayerDrawable layerDrawable) {
+ int numberOfLayers = layerDrawable.getNumberOfLayers();
for (int i = 0; i < numberOfLayers; i++) {
- GradientDrawable gradientDrawable =
- (GradientDrawable) ((LayerDrawable) mBackground).getDrawable(i);
+ GradientDrawable gradientDrawable = (GradientDrawable) layerDrawable.getDrawable(i);
gradientDrawable.setCornerRadii(mCornerRadii);
}
+ updateFocusOverlayRadii(layerDrawable);
}
}
+ private void updateFocusOverlayRadii(LayerDrawable background) {
+ GradientDrawable overlay =
+ (GradientDrawable) background.findDrawableByLayerId(
+ R.id.notification_focus_overlay);
+ for (int i = 0; i < mCornerRadii.length; i++) {
+ // in theory subtracting mFocusOverlayStroke/2 should be enough but notification
+ // background is still peeking a bit from below - probably due to antialiasing or
+ // overlay uneven scaling. So let's subtract full mFocusOverlayStroke to make sure the
+ // radius is a bit smaller and covers background corners fully
+ mFocusOverlayCornerRadii[i] = Math.max(0, mCornerRadii[i] - mFocusOverlayStroke);
+ }
+ overlay.setCornerRadii(mFocusOverlayCornerRadii);
+ }
+
/** Set the current expand animation size. */
public void setExpandAnimationSize(int width, int height) {
mExpandAnimationHeight = height;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java
index 0bb871b..dedf366 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/AmbientState.java
@@ -291,7 +291,7 @@
mOverExpansion = overExpansion;
}
- float getOverExpansion() {
+ public float getOverExpansion() {
return mOverExpansion;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java
index 8a1a4f1..de0f247 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java
@@ -23,6 +23,7 @@
import static com.android.internal.jank.InteractionJankMonitor.CUJ_NOTIFICATION_SHADE_SCROLL_FLING;
import static com.android.internal.jank.InteractionJankMonitor.CUJ_SHADE_CLEAR_ALL;
import static com.android.systemui.Flags.newAodTransition;
+import static com.android.systemui.Flags.notificationOverExpansionClippingFix;
import static com.android.systemui.flags.Flags.UNCLEARED_TRANSIENT_HUN_FIX;
import static com.android.systemui.statusbar.notification.stack.NotificationPriorityBucketKt.BUCKET_SILENT;
import static com.android.systemui.statusbar.notification.stack.StackStateAnimator.ANIMATION_DURATION_SWIPE;
@@ -482,7 +483,6 @@
private Interpolator mHideXInterpolator = Interpolators.FAST_OUT_SLOW_IN;
private final NotificationSectionsManager mSectionsManager;
- private boolean mAnimateBottomOnLayout;
private float mLastSentAppear;
private float mLastSentExpandedHeight;
private boolean mWillExpand;
@@ -517,6 +517,7 @@
private int mRoundedRectClippingTop;
private int mRoundedRectClippingBottom;
private int mRoundedRectClippingRight;
+ private int mRoundedRectClippingYTranslation;
private final float[] mBgCornerRadii = new float[8];
/**
@@ -672,6 +673,9 @@
*/
void setOverExpansion(float margin) {
mAmbientState.setOverExpansion(margin);
+ if (notificationOverExpansionClippingFix() && !SceneContainerFlag.isEnabled()) {
+ setRoundingClippingYTranslation((int) margin);
+ }
updateStackPosition();
requestChildrenUpdate();
}
@@ -2941,23 +2945,11 @@
}
private void updateFirstAndLastBackgroundViews() {
- NotificationSection firstSection = getFirstVisibleSection();
- NotificationSection lastSection = getLastVisibleSection();
- ExpandableView previousFirstChild =
- firstSection == null ? null : firstSection.getFirstVisibleChild();
- ExpandableView previousLastChild =
- lastSection == null ? null : lastSection.getLastVisibleChild();
-
- ExpandableView firstChild = getFirstChildWithBackground();
ExpandableView lastChild = getLastChildWithBackground();
boolean sectionViewsChanged = mSectionsManager.updateFirstAndLastViewsForAllSections(
mSections, getChildrenWithBackground());
- if (mAnimationsEnabled && mIsExpanded) {
- } else {
- }
mAmbientState.setLastVisibleBackgroundChild(lastChild);
- mAnimateBottomOnLayout = false;
invalidate();
}
@@ -4398,7 +4390,8 @@
/**
* See {@link AmbientState#setDozing}.
*/
- public void setDozing(boolean dozing, boolean animate) {
+ @Override
+ public void setDozing(boolean dozing) {
if (mAmbientState.isDozing() == dozing) {
return;
}
@@ -5128,6 +5121,7 @@
pw.append(" t=").print(mRoundedRectClippingTop);
pw.append(" r=").print(mRoundedRectClippingRight);
pw.append(" b=").print(mRoundedRectClippingBottom);
+ pw.append(" +y=").print(mRoundedRectClippingYTranslation);
pw.append("} topRadius=").print(mBgCornerRadii[0]);
pw.append(" bottomRadius=").println(mBgCornerRadii[4]);
}
@@ -5465,10 +5459,6 @@
}
}
- void setAnimateBottomOnLayout(boolean animateBottomOnLayout) {
- mAnimateBottomOnLayout = animateBottomOnLayout;
- }
-
public void setOnPulseHeightChangedListener(Runnable listener) {
mAmbientState.setOnPulseHeightChangedListener(listener);
}
@@ -5680,8 +5670,28 @@
mBgCornerRadii[5] = bottomRadius;
mBgCornerRadii[6] = bottomRadius;
mBgCornerRadii[7] = bottomRadius;
+ updateRoundedClipPath();
+ }
+
+ // see b/288553572
+ private void setRoundingClippingYTranslation(int yTranslation) {
+ SceneContainerFlag.assertInLegacyMode();
+ if (mRoundedRectClippingYTranslation == yTranslation) {
+ return;
+ }
+ mRoundedRectClippingYTranslation = yTranslation;
+ updateRoundedClipPath();
+ }
+
+ private void updateRoundedClipPath() {
+ SceneContainerFlag.assertInLegacyMode();
mRoundedClipPath.reset();
- mRoundedClipPath.addRoundRect(left, top, right, bottom, mBgCornerRadii, Path.Direction.CW);
+ mRoundedClipPath.addRoundRect(
+ mRoundedRectClippingLeft,
+ mRoundedRectClippingTop + mRoundedRectClippingYTranslation,
+ mRoundedRectClippingRight,
+ mRoundedRectClippingBottom + mRoundedRectClippingYTranslation,
+ mBgCornerRadii, Path.Direction.CW);
if (mShouldUseRoundedRectClipping) {
invalidate();
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java
index 5e719b1..9ed5ac9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutController.java
@@ -98,6 +98,7 @@
import com.android.systemui.statusbar.notification.DynamicPrivacyController;
import com.android.systemui.statusbar.notification.LaunchAnimationParameters;
import com.android.systemui.statusbar.notification.NotificationActivityStarter;
+import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator;
import com.android.systemui.statusbar.notification.collection.NotifCollection;
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
@@ -166,6 +167,7 @@
private final NotificationGutsManager mNotificationGutsManager;
private final NotificationsController mNotificationsController;
private final NotificationVisibilityProvider mVisibilityProvider;
+ private final NotificationWakeUpCoordinator mWakeUpCoordinator;
private final HeadsUpManager mHeadsUpManager;
private final NotificationRoundnessManager mNotificationRoundnessManager;
private final TunerService mTunerService;
@@ -306,10 +308,6 @@
};
private final DynamicPrivacyController.Listener mDynamicPrivacyControllerListener = () -> {
- if (mView.isExpanded()) {
- // The bottom might change because we're using the final actual height of the view
- mView.setAnimateBottomOnLayout(true);
- }
if (!FooterViewRefactor.isEnabled()) {
// Let's update the footer once the notifications have been updated (in the next frame)
mView.post(this::updateFooter);
@@ -705,6 +703,7 @@
NotificationGutsManager notificationGutsManager,
NotificationsController notificationsController,
NotificationVisibilityProvider visibilityProvider,
+ NotificationWakeUpCoordinator wakeUpCoordinator,
HeadsUpManager headsUpManager,
NotificationRoundnessManager notificationRoundnessManager,
TunerService tunerService,
@@ -756,6 +755,7 @@
mNotificationGutsManager = notificationGutsManager;
mNotificationsController = notificationsController;
mVisibilityProvider = visibilityProvider;
+ mWakeUpCoordinator = wakeUpCoordinator;
mHeadsUpManager = headsUpManager;
mNotificationRoundnessManager = notificationRoundnessManager;
mTunerService = tunerService;
@@ -794,6 +794,9 @@
mActivityStarter = activityStarter;
mSensitiveNotificationProtectionController = sensitiveNotificationProtectionController;
mView.passSplitShadeStateController(splitShadeStateController);
+ if (SceneContainerFlag.isEnabled()) {
+ mWakeUpCoordinator.setStackScroller(this);
+ }
mDumpManager.registerDumpable(this);
updateResources();
setUpView();
@@ -1483,7 +1486,8 @@
}
public void setDozing(boolean dozing, boolean animate) {
- mView.setDozing(dozing, animate);
+ SceneContainerFlag.assertInLegacyMode();
+ mView.setDozing(dozing);
}
public void setPulsing(boolean pulsing, boolean animatePulse) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/view/NotificationScrollView.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/view/NotificationScrollView.kt
index ac00d3b..f356578 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/view/NotificationScrollView.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/view/NotificationScrollView.kt
@@ -58,4 +58,7 @@
/** sets the current expand fraction */
fun setExpandFraction(expandFraction: Float)
+
+ /** Sets whether the view is displayed in doze mode. */
+ fun setDozing(dozing: Boolean)
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewbinder/NotificationScrollViewBinder.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewbinder/NotificationScrollViewBinder.kt
index 047b560..2f9c2f0 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewbinder/NotificationScrollViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewbinder/NotificationScrollViewBinder.kt
@@ -84,6 +84,7 @@
launch { viewModel.headsUpTop.collect { view.setHeadsUpTop(it) } }
launch { viewModel.expandFraction.collect { view.setExpandFraction(it) } }
launch { viewModel.isScrollable.collect { view.setScrollingEnabled(it) } }
+ launch { viewModel.isDozing.collect { isDozing -> view.setDozing(isDozing) } }
launchAndDispose {
view.setSyntheticScrollConsumer(viewModel.syntheticScrollConsumer)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationScrollViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationScrollViewModel.kt
index 516ec31..7aeff71 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationScrollViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationScrollViewModel.kt
@@ -20,19 +20,24 @@
import com.android.compose.animation.scene.ObservableTransitionState
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dump.DumpManager
+import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
import com.android.systemui.scene.domain.interactor.SceneInteractor
+import com.android.systemui.scene.shared.flag.SceneContainerFlag
import com.android.systemui.scene.shared.model.Scenes
-import com.android.systemui.scene.shared.model.Scenes.Shade
import com.android.systemui.shade.domain.interactor.ShadeInteractor
import com.android.systemui.statusbar.notification.stack.domain.interactor.NotificationStackAppearanceInteractor
import com.android.systemui.statusbar.notification.stack.shared.model.ShadeScrimClipping
import com.android.systemui.statusbar.notification.stack.shared.model.ShadeScrimShape
+import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationTransitionThresholds.EXPANSION_FOR_DELAYED_STACK_FADE_IN
+import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationTransitionThresholds.EXPANSION_FOR_MAX_SCRIM_ALPHA
import com.android.systemui.util.kotlin.FlowDumperImpl
-import javax.inject.Inject
+import dagger.Lazy
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.distinctUntilChanged
+import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.map
+import javax.inject.Inject
/** ViewModel which represents the state of the NSSL/Controller in the world of flexiglass */
@SysUISingleton
@@ -43,6 +48,9 @@
stackAppearanceInteractor: NotificationStackAppearanceInteractor,
shadeInteractor: ShadeInteractor,
sceneInteractor: SceneInteractor,
+ // TODO(b/336364825) Remove Lazy when SceneContainerFlag is released -
+ // while the flag is off, creating this object too early results in a crash
+ keyguardInteractor: Lazy<KeyguardInteractor>,
) : FlowDumperImpl(dumpManager) {
/**
* The expansion fraction of the notification stack. It should go from 0 to 1 when transitioning
@@ -52,8 +60,9 @@
val expandFraction: Flow<Float> =
combine(
shadeInteractor.shadeExpansion,
+ shadeInteractor.qsExpansion,
sceneInteractor.transitionState,
- ) { shadeExpansion, transitionState ->
+ ) { shadeExpansion, qsExpansion, transitionState ->
when (transitionState) {
is ObservableTransitionState.Idle -> {
if (transitionState.scene == Scenes.Lockscreen) {
@@ -70,6 +79,16 @@
transitionState.toScene == Scenes.Shade)
) {
1f
+ } else if (
+ (transitionState.fromScene == Scenes.Gone ||
+ transitionState.fromScene == Scenes.Lockscreen) &&
+ transitionState.toScene == Scenes.QuickSettings
+ ) {
+ // during QS expansion, increase fraction at same rate as scrim alpha,
+ // but start when scrim alpha is at EXPANSION_FOR_DELAYED_STACK_FADE_IN.
+ (qsExpansion / EXPANSION_FOR_MAX_SCRIM_ALPHA -
+ EXPANSION_FOR_DELAYED_STACK_FADE_IN)
+ .coerceIn(0f, 1f)
} else {
shadeExpansion
}
@@ -125,5 +144,14 @@
/** Whether the notification stack is scrollable or not. */
val isScrollable: Flow<Boolean> =
- sceneInteractor.currentScene.map { it == Shade }.dumpWhileCollecting("isScrollable")
+ sceneInteractor.currentScene.map { it == Scenes.Shade }.dumpWhileCollecting("isScrollable")
+
+ /** Whether the notification stack is displayed in doze mode. */
+ val isDozing: Flow<Boolean> by lazy {
+ if (SceneContainerFlag.isUnexpectedlyInLegacyMode()) {
+ flowOf(false)
+ } else {
+ keyguardInteractor.get().isDozing.dumpWhileCollecting("isDozing")
+ }
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationsPlaceholderViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationsPlaceholderViewModel.kt
index ca19da5..bf3b2c9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationsPlaceholderViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationsPlaceholderViewModel.kt
@@ -93,10 +93,10 @@
val headsUpHeight: StateFlow<Float> = interactor.headsUpHeight.dumpValue("headsUpHeight")
/**
- * The amount [0-1] that the shade has been opened. At 0, the shade is closed; at 1, the shade
- * is open.
+ * The amount [0-1] that the shade or quick settings has been opened. At 0, the shade is closed;
+ * at 1, either the shade or quick settings is open.
*/
- val expandFraction: Flow<Float> = shadeInteractor.shadeExpansion.dumpValue("expandFraction")
+ val expandFraction: Flow<Float> = shadeInteractor.anyExpansion.dumpValue("expandFraction")
/**
* The amount in px that the notification stack should scroll due to internal expansion. This
@@ -111,3 +111,11 @@
interactor.setScrolledToTop(scrolledToTop)
}
}
+
+// Expansion fraction thresholds (between 0-1f) at which the corresponding value should be
+// at its maximum, given they are at their minimum value at expansion = 0f.
+object NotificationTransitionThresholds {
+ const val EXPANSION_FOR_MAX_CORNER_RADIUS = 0.1f
+ const val EXPANSION_FOR_MAX_SCRIM_ALPHA = 0.3f
+ const val EXPANSION_FOR_DELAYED_STACK_FADE_IN = 0.5f
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfaces.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfaces.java
index 2651d2e..7d97428 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfaces.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfaces.java
@@ -37,6 +37,7 @@
import com.android.internal.annotations.VisibleForTesting;
import com.android.keyguard.AuthKeyguardMessageArea;
+import com.android.systemui.CoreStartable;
import com.android.systemui.Dumpable;
import com.android.systemui.animation.ActivityTransitionAnimator;
import com.android.systemui.animation.RemoteAnimationRunnerCompat;
@@ -50,7 +51,7 @@
import java.io.PrintWriter;
/** */
-public interface CentralSurfaces extends Dumpable, LifecycleOwner {
+public interface CentralSurfaces extends Dumpable, LifecycleOwner, CoreStartable {
boolean MULTIUSER_DEBUG = false;
// Should match the values in PhoneWindowManager
String SYSTEM_DIALOG_REASON_KEY = "reason";
@@ -182,6 +183,9 @@
return contextForUser.getPackageManager();
}
+ /** Default impl for CoreStartable. */
+ default void start() {}
+
boolean updateIsKeyguard();
boolean updateIsKeyguard(boolean forceStateChange);
@@ -279,11 +283,12 @@
void awakenDreams();
/**
- * Handle a touch event while dreaming when the touch was initiated within a prescribed
- * swipeable area. This method is provided for cases where swiping in certain areas of a dream
- * should be handled by CentralSurfaces instead (e.g. swiping communal hub open).
+ * Handle a touch event while dreaming or on the glanceable hub when the touch was initiated
+ * within a prescribed swipeable area. This method is provided for cases where swiping in
+ * certain areas should be handled by CentralSurfaces instead (e.g. swiping hub open, opening
+ * the notification shade over dream or hub).
*/
- void handleDreamTouch(MotionEvent event);
+ void handleExternalShadeWindowTouch(MotionEvent event);
boolean isBouncerShowing();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesEmptyImpl.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesEmptyImpl.kt
index 8af7ee8..d5e66ff 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesEmptyImpl.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesEmptyImpl.kt
@@ -79,7 +79,7 @@
override fun updateScrimController() {}
override fun shouldIgnoreTouch() = false
override fun isDeviceInteractive() = false
- override fun handleDreamTouch(event: MotionEvent?) {}
+ override fun handleExternalShadeWindowTouch(event: MotionEvent?) {}
override fun awakenDreams() {}
override fun isBouncerShowing() = false
override fun isBouncerShowingScrimmed() = false
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java
index e9aa7aa..b2b2cea 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java
@@ -2928,8 +2928,8 @@
};
@Override
- public void handleDreamTouch(MotionEvent event) {
- getNotificationShadeWindowViewController().handleDreamTouch(event);
+ public void handleExternalShadeWindowTouch(MotionEvent event) {
+ getNotificationShadeWindowViewController().handleExternalTouch(event);
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeServiceHost.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeServiceHost.java
index 7abcf13..033659b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeServiceHost.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeServiceHost.java
@@ -37,9 +37,9 @@
import com.android.systemui.doze.DozeHost;
import com.android.systemui.doze.DozeLog;
import com.android.systemui.doze.DozeReceiver;
-import com.android.systemui.flags.FeatureFlagsClassic;
import com.android.systemui.keyguard.WakefulnessLifecycle;
import com.android.systemui.keyguard.domain.interactor.DozeInteractor;
+import com.android.systemui.scene.shared.flag.SceneContainerFlag;
import com.android.systemui.shade.NotificationShadeWindowViewController;
import com.android.systemui.shade.domain.interactor.ShadeLockscreenInteractor;
import com.android.systemui.statusbar.NotificationShadeWindowController;
@@ -84,7 +84,6 @@
private final SysuiStatusBarStateController mStatusBarStateController;
private final DeviceProvisionedController mDeviceProvisionedController;
private final HeadsUpManager mHeadsUpManager;
- private final FeatureFlagsClassic mFeatureFlags;
private final BatteryController mBatteryController;
private final ScrimController mScrimController;
private final Lazy<BiometricUnlockController> mBiometricUnlockControllerLazy;
@@ -110,7 +109,6 @@
WakefulnessLifecycle wakefulnessLifecycle,
SysuiStatusBarStateController statusBarStateController,
DeviceProvisionedController deviceProvisionedController,
- FeatureFlagsClassic featureFlags,
HeadsUpManager headsUpManager, BatteryController batteryController,
ScrimController scrimController,
Lazy<BiometricUnlockController> biometricUnlockControllerLazy,
@@ -135,7 +133,6 @@
mBiometricUnlockControllerLazy = biometricUnlockControllerLazy;
mAssistManagerLazy = assistManagerLazy;
mDozeScrimController = dozeScrimController;
- mFeatureFlags = featureFlags;
mKeyguardUpdateMonitor = keyguardUpdateMonitor;
mPulseExpansionHandler = pulseExpansionHandler;
mNotificationShadeWindowController = notificationShadeWindowController;
@@ -236,8 +233,14 @@
void updateDozing() {
Assert.isMainThread();
- boolean dozing =
- mDozingRequested && mStatusBarStateController.getState() == StatusBarState.KEYGUARD;
+ boolean dozing;
+ if (SceneContainerFlag.isEnabled()) {
+ dozing = mDozingRequested && mDozeInteractor.canDozeFromCurrentScene();
+ } else {
+ dozing = mDozingRequested
+ && mStatusBarStateController.getState() == StatusBarState.KEYGUARD;
+ }
+
// When in wake-and-unlock we may not have received a change to StatusBarState
// but we still should not be dozing, manually set to false.
if (mBiometricUnlockControllerLazy.get().getMode()
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt
index 6e24412..b80ff38 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/dagger/StatusBarPipelineModule.kt
@@ -42,6 +42,8 @@
import com.android.systemui.statusbar.pipeline.mobile.util.SubscriptionManagerProxyImpl
import com.android.systemui.statusbar.pipeline.satellite.data.DeviceBasedSatelliteRepository
import com.android.systemui.statusbar.pipeline.satellite.data.prod.DeviceBasedSatelliteRepositoryImpl
+import com.android.systemui.statusbar.pipeline.satellite.ui.viewmodel.DeviceBasedSatelliteViewModel
+import com.android.systemui.statusbar.pipeline.satellite.ui.viewmodel.DeviceBasedSatelliteViewModelImpl
import com.android.systemui.statusbar.pipeline.shared.data.repository.ConnectivityRepository
import com.android.systemui.statusbar.pipeline.shared.data.repository.ConnectivityRepositoryImpl
import com.android.systemui.statusbar.pipeline.shared.ui.binder.CollapsedStatusBarViewBinder
@@ -85,6 +87,11 @@
impl: DeviceBasedSatelliteRepositoryImpl
): DeviceBasedSatelliteRepository
+ @Binds
+ abstract fun deviceBasedSatelliteViewModel(
+ impl: DeviceBasedSatelliteViewModelImpl
+ ): DeviceBasedSatelliteViewModel
+
@Binds abstract fun wifiRepository(impl: WifiRepositorySwitcher): WifiRepository
@Binds abstract fun wifiInteractor(impl: WifiInteractorImpl): WifiInteractor
@@ -194,7 +201,7 @@
@SysUISingleton
@MobileInputLog
fun provideMobileInputLogBuffer(factory: LogBufferFactory): LogBuffer {
- return factory.create("MobileInputLog", 100)
+ return factory.create("MobileInputLog", 300)
}
@Provides
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/satellite/ui/viewmodel/DeviceBasedSatelliteViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/satellite/ui/viewmodel/DeviceBasedSatelliteViewModel.kt
index a0291b8..f2255f3 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/satellite/ui/viewmodel/DeviceBasedSatelliteViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/satellite/ui/viewmodel/DeviceBasedSatelliteViewModel.kt
@@ -16,13 +16,16 @@
package com.android.systemui.statusbar.pipeline.satellite.ui.viewmodel
+import android.content.Context
import com.android.systemui.common.shared.model.Icon
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.log.LogBuffer
import com.android.systemui.log.core.LogLevel
+import com.android.systemui.res.R
import com.android.systemui.statusbar.pipeline.airplane.data.repository.AirplaneModeRepository
import com.android.systemui.statusbar.pipeline.dagger.OemSatelliteInputLog
import com.android.systemui.statusbar.pipeline.satellite.domain.interactor.DeviceBasedSatelliteInteractor
+import com.android.systemui.statusbar.pipeline.satellite.shared.model.SatelliteConnectionState
import com.android.systemui.statusbar.pipeline.satellite.ui.model.SatelliteIconModel
import javax.inject.Inject
import kotlin.time.Duration.Companion.seconds
@@ -42,15 +45,30 @@
* View-Model for the device-based satellite icon. This icon will only show in the status bar if
* satellite is available AND all other service states are considered OOS.
*/
+interface DeviceBasedSatelliteViewModel {
+ /**
+ * The satellite icon that should be displayed, or null if no satellite icon should be
+ * displayed.
+ */
+ val icon: StateFlow<Icon?>
+
+ /**
+ * The satellite-related text that should be used as the carrier text string when satellite is
+ * active, or null if the carrier text string shouldn't include any satellite information.
+ */
+ val carrierText: StateFlow<String?>
+}
+
@OptIn(ExperimentalCoroutinesApi::class)
-class DeviceBasedSatelliteViewModel
+class DeviceBasedSatelliteViewModelImpl
@Inject
constructor(
+ context: Context,
interactor: DeviceBasedSatelliteInteractor,
@Application scope: CoroutineScope,
airplaneModeRepository: AirplaneModeRepository,
@OemSatelliteInputLog logBuffer: LogBuffer,
-) {
+) : DeviceBasedSatelliteViewModel {
private val shouldShowIcon: Flow<Boolean> =
interactor.areAllConnectionsOutOfService.flatMapLatest { allOos ->
if (!allOos) {
@@ -87,7 +105,7 @@
}
.stateIn(scope, SharingStarted.WhileSubscribed(), false)
- val icon: StateFlow<Icon?> =
+ override val icon: StateFlow<Icon?> =
combine(
shouldActuallyShowIcon,
interactor.connectionState,
@@ -101,6 +119,26 @@
}
.stateIn(scope, SharingStarted.WhileSubscribed(), null)
+ override val carrierText: StateFlow<String?> =
+ combine(
+ shouldActuallyShowIcon,
+ interactor.connectionState,
+ ) { shouldShow, connectionState ->
+ if (shouldShow) {
+ when (connectionState) {
+ SatelliteConnectionState.Connected ->
+ context.getString(R.string.satellite_connected_carrier_text)
+ SatelliteConnectionState.On ->
+ context.getString(R.string.satellite_not_connected_carrier_text)
+ SatelliteConnectionState.Off,
+ SatelliteConnectionState.Unknown -> null
+ }
+ } else {
+ null
+ }
+ }
+ .stateIn(scope, SharingStarted.WhileSubscribed(), null)
+
companion object {
private const val TAG = "DeviceBasedSatelliteViewModel"
private val DELAY_DURATION = 10.seconds
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/AvalancheController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/policy/AvalancheController.kt
index f573530..36c23d3 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/AvalancheController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/AvalancheController.kt
@@ -153,27 +153,45 @@
// Use default duration, like we did before AvalancheController existed
return autoDismissMs
}
-
val showingList: MutableList<HeadsUpEntry> = mutableListOf()
- headsUpEntryShowing?.let { showingList.add(it) }
-
+ if (headsUpEntryShowing != null) {
+ showingList.add(headsUpEntryShowing!!)
+ }
nextList.sort()
val entryList = showingList + nextList
- val thisEntryIndex = entryList.indexOf(entry)
+ if (entryList.isEmpty()) {
+ log { "No avalanche HUNs, use default ms: $autoDismissMs" }
+ return autoDismissMs
+ }
+ // entryList.indexOf(entry) returns -1 even when the entry is in entryList
+ var thisEntryIndex = -1
+ for ((i, e) in entryList.withIndex()) {
+ if (e == entry) {
+ thisEntryIndex = i
+ }
+ }
+ if (thisEntryIndex == -1) {
+ log { "Untracked entry, use default ms: $autoDismissMs" }
+ return autoDismissMs
+ }
val nextEntryIndex = thisEntryIndex + 1
// If last entry, use default duration
if (nextEntryIndex >= entryList.size) {
+ log { "Last entry, use default ms: $autoDismissMs" }
return autoDismissMs
}
val nextEntry = entryList[nextEntryIndex]
if (nextEntry.compareNonTimeFields(entry) == -1) {
// Next entry is higher priority
+ log { "Next entry is higher priority: 500ms" }
return 500
} else if (nextEntry.compareNonTimeFields(entry) == 0) {
// Next entry is same priority
+ log { "Next entry is same priority: 1000ms" }
return 1000
} else {
+ log { "Next entry is lower priority, use default ms: $autoDismissMs" }
return autoDismissMs
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerImpl.java
index 46ca6e9..dab27bb 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerImpl.java
@@ -37,7 +37,6 @@
import android.os.PowerManager;
import android.os.PowerSaveState;
import android.util.IndentingPrintWriter;
-import android.util.Log;
import android.view.View;
import androidx.annotation.NonNull;
@@ -77,8 +76,6 @@
private static final String ACTION_LEVEL_TEST = "com.android.systemui.BATTERY_LEVEL_TEST";
- private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
-
private final EnhancedEstimates mEstimates;
protected final BroadcastDispatcher mBroadcastDispatcher;
protected final ArrayList<BatteryController.BatteryStateChangeCallback>
@@ -449,7 +446,6 @@
PowerSaveState state = mPowerManager.getPowerSaveState(PowerManager.ServiceType.AOD);
mAodPowerSave = state.batterySaverEnabled;
- if (DEBUG) Log.d(TAG, "Power save is " + (mPowerSave ? "on" : "off"));
firePowerSaveChanged();
}
@@ -475,6 +471,7 @@
}
private void firePowerSaveChanged() {
+ mLogger.logPowerSaveChangedCallback(mPowerSave);
dispatchSafeChange((callback) -> callback.onPowerSaveChanged(mPowerSave));
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerLogger.kt b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerLogger.kt
index 4a2a2db..85871e4 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerLogger.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerLogger.kt
@@ -105,6 +105,15 @@
)
}
+ fun logPowerSaveChangedCallback(isPowerSave: Boolean) {
+ logBuffer.log(
+ TAG,
+ LogLevel.DEBUG,
+ { bool1 = isPowerSave },
+ { "Sending onPowerSaveChanged callback with powerSave=$bool1" }
+ )
+ }
+
private fun Int.report(): String =
if (this == DEFAULT) {
"(missing)"
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SensitiveNotificationProtectionControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SensitiveNotificationProtectionControllerImpl.java
index 0d53277..40bb67f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SensitiveNotificationProtectionControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SensitiveNotificationProtectionControllerImpl.java
@@ -34,6 +34,7 @@
import android.os.Trace;
import android.os.UserHandle;
import android.service.notification.StatusBarNotification;
+import android.telephony.TelephonyManager;
import android.util.ArraySet;
import android.util.Log;
@@ -62,7 +63,10 @@
private static final String LOG_TAG = "SNPC";
private final SensitiveNotificationProtectionControllerLogger mLogger;
private final PackageManager mPackageManager;
- private final ArraySet<String> mExemptPackages = new ArraySet<>();
+ // Packages exempt from projection session protections (if they start a projection session)
+ private final ArraySet<String> mSessionProtectionExemptPackages = new ArraySet<>();
+ // Packages exempt from individual notification protections (if they post a notification)
+ private final ArraySet<String> mNotificationProtectionExemptPackages = new ArraySet<>();
private final ListenerSet<Runnable> mListeners = new ListenerSet<>();
private volatile MediaProjectionInfo mProjection;
private SensitiveNotificatioMediaProjectionSession mActiveMediaProjectionSession;
@@ -161,6 +165,7 @@
MediaProjectionManager mediaProjectionManager,
IActivityManager activityManager,
PackageManager packageManager,
+ TelephonyManager telephonyManager,
@Main Handler mainHandler,
@Background Executor bgExecutor,
SensitiveNotificationProtectionControllerLogger logger) {
@@ -191,26 +196,18 @@
bgExecutor.execute(() -> developerOptionsObserver.onChange(true));
bgExecutor.execute(() -> {
- ArraySet<String> exemptPackages = new ArraySet<>();
- // Exempt SystemUI
- exemptPackages.add(context.getPackageName());
+ ArraySet<String> sessionProtectionExemptPackages =
+ getSessionProtectionExemptPackages(context, activityManager);
- // Exempt approved bug report handlers
- try {
- exemptPackages.addAll(activityManager.getBugreportWhitelistedPackages());
- } catch (RemoteException e) {
- Log.e(
- LOG_TAG,
- "Error adding bug report handlers to exemption, continuing without",
- e);
- // silent failure, skip adding packages to exemption
- }
+ ArraySet<String> notificationProtectionExemptPackages =
+ getNotificationProtectionExemptPackages(telephonyManager);
// if currently projecting, notify listeners of exemption changes
mainHandler.post(() -> {
Trace.beginSection("SNPC.exemptPackagesUpdated");
try {
- updateExemptPackagesAndNotifyListeners(exemptPackages);
+ updateExemptPackagesAndNotifyListeners(sessionProtectionExemptPackages,
+ notificationProtectionExemptPackages);
} finally {
Trace.endSection();
}
@@ -220,15 +217,66 @@
mediaProjectionManager.addCallback(mMediaProjectionCallback, mainHandler);
}
+ @NonNull
+ private static ArraySet<String> getSessionProtectionExemptPackages(Context context,
+ IActivityManager activityManager) {
+ ArraySet<String> sessionProtectionExemptPackages = new ArraySet<>();
+ // Exempt SystemUI
+ sessionProtectionExemptPackages.add(context.getPackageName());
+
+ // Exempt approved bug report handlers
+ try {
+ sessionProtectionExemptPackages.addAll(
+ activityManager.getBugreportWhitelistedPackages());
+ } catch (RemoteException e) {
+ Log.w(
+ LOG_TAG,
+ "Error adding bug report handlers to exemption, continuing without",
+ e);
+ // silent failure, skip adding packages to exemption
+ }
+ return sessionProtectionExemptPackages;
+ }
+
+ @NonNull
+ private static ArraySet<String> getNotificationProtectionExemptPackages(
+ TelephonyManager telephonyManager) {
+ ArraySet<String> notificationProtectionExemptPackages = new ArraySet<>();
+
+ // Get Emergency Assistance Package, all notifications from this package should not be
+ // hidden/redacted.
+ if (screenshareNotificationHidingBugFix()) {
+ try {
+ String emergencyAssistancePackageName =
+ telephonyManager.getEmergencyAssistancePackageName();
+ if (emergencyAssistancePackageName != null) {
+ notificationProtectionExemptPackages.add(emergencyAssistancePackageName);
+ }
+ } catch (IllegalStateException e) {
+ Log.w(
+ LOG_TAG,
+ "Error adding emergency assistance package to exemption",
+ e);
+ // silent failure, skip adding packages to exemption
+ }
+ }
+ return notificationProtectionExemptPackages;
+ }
+
/**
* Notify listeners of possible ProjectionState change regardless of current
* isSensitiveStateActive value. Method used to ensure updates occur after mExemptPackages gets
* updated, which directly changes the outcome of isSensitiveStateActive
*/
@MainThread
- private void updateExemptPackagesAndNotifyListeners(ArraySet<String> exemptPackages) {
+ private void updateExemptPackagesAndNotifyListeners(
+ ArraySet<String> sessionProtectionExemptPackages,
+ ArraySet<String> notificationProtectionExemptPackages) {
Assert.isMainThread();
- mExemptPackages.addAll(exemptPackages);
+ mSessionProtectionExemptPackages.addAll(sessionProtectionExemptPackages);
+ if (screenshareNotificationHidingBugFix()) {
+ mNotificationProtectionExemptPackages.addAll(notificationProtectionExemptPackages);
+ }
if (mProjection != null) {
updateProjectionStateAndNotifyListeners(mProjection);
@@ -258,7 +306,8 @@
if (mDisableScreenShareProtections) {
Log.w(LOG_TAG, "Screen share protections disabled");
return null;
- } else if (info != null && mExemptPackages.contains(info.getPackageName())) {
+ } else if (info != null
+ && mSessionProtectionExemptPackages.contains(info.getPackageName())) {
Log.w(LOG_TAG, "Screen share protections exempt for package " + info.getPackageName());
return null;
} else if (info != null && canRecordSensitiveContent(info.getPackageName())) {
@@ -322,6 +371,11 @@
return false; // do not hide/redact notifications from system uid
}
+ if (screenshareNotificationHidingBugFix()
+ && mNotificationProtectionExemptPackages.contains(sbn.getPackageName())) {
+ return false; // do not hide/redact notifications from emergency app
+ }
+
// Only protect/redact notifications if the developer has not explicitly set notification
// visibility as public and users has not adjusted default channel visibility to private
boolean notificationRequestsRedaction = entry.isNotificationVisibilityPrivate();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ui/SystemBarUtilsProxy.kt b/packages/SystemUI/src/com/android/systemui/statusbar/ui/SystemBarUtilsProxy.kt
index 2b3fb70..68bb6c3 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/ui/SystemBarUtilsProxy.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/ui/SystemBarUtilsProxy.kt
@@ -19,8 +19,10 @@
import android.content.Context
import com.android.internal.policy.SystemBarUtils
import com.android.systemui.dagger.qualifiers.Application
+import com.android.systemui.res.R
import dagger.Binds
import javax.inject.Inject
+import kotlin.math.max
/**
* Proxy interface to [SystemBarUtils], allowing injection of different logic for testing.
@@ -29,6 +31,7 @@
*/
interface SystemBarUtilsProxy {
fun getStatusBarHeight(): Int
+ fun getStatusBarHeaderHeightKeyguard(): Int
}
class SystemBarUtilsProxyImpl
@@ -37,6 +40,13 @@
@Application private val context: Context,
) : SystemBarUtilsProxy {
override fun getStatusBarHeight(): Int = SystemBarUtils.getStatusBarHeight(context)
+ override fun getStatusBarHeaderHeightKeyguard(): Int {
+ val cutout = context.display.cutout
+ val waterfallInsetTop = if (cutout == null) 0 else cutout.waterfallInsets.top
+ val statusBarHeaderHeightKeyguard =
+ context.resources.getDimensionPixelSize(R.dimen.status_bar_header_height_keyguard)
+ return max(getStatusBarHeight(), statusBarHeaderHeightKeyguard + waterfallInsetTop)
+ }
@dagger.Module
interface Module {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ui/SystemBarUtilsState.kt b/packages/SystemUI/src/com/android/systemui/statusbar/ui/SystemBarUtilsState.kt
index 10137a0..2314f01 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/ui/SystemBarUtilsState.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/ui/SystemBarUtilsState.kt
@@ -52,4 +52,14 @@
.distinctUntilChanged()
.flowOn(bgContext)
.conflate()
+
+ val statusBarHeaderHeightKeyguard: Flow<Int> =
+ configurationController.onConfigChanged
+ .onStart<Any> { emit(Unit) }
+ .flowOn(mainContext)
+ .conflate()
+ .map { proxy.getStatusBarHeaderHeightKeyguard() }
+ .distinctUntilChanged()
+ .flowOn(bgContext)
+ .conflate()
}
diff --git a/packages/SystemUI/src/com/android/systemui/util/Utils.java b/packages/SystemUI/src/com/android/systemui/util/Utils.java
index 7861ded..3953188 100644
--- a/packages/SystemUI/src/com/android/systemui/util/Utils.java
+++ b/packages/SystemUI/src/com/android/systemui/util/Utils.java
@@ -128,7 +128,10 @@
/**
* Gets the {@link R.dimen#status_bar_header_height_keyguard}.
+ *
+ * @deprecated Prefer SystemBarUtilsState or SystemBarUtilsProxy
*/
+ @Deprecated
public static int getStatusBarHeaderHeightKeyguard(Context context) {
final int statusBarHeight = SystemBarUtils.getStatusBarHeight(context);
final DisplayCutout cutout = context.getDisplay().getCutout();
diff --git a/packages/SystemUI/src/com/android/systemui/util/kotlin/BooleanFlowOperators.kt b/packages/SystemUI/src/com/android/systemui/util/kotlin/BooleanFlowOperators.kt
index 693a835..b300885 100644
--- a/packages/SystemUI/src/com/android/systemui/util/kotlin/BooleanFlowOperators.kt
+++ b/packages/SystemUI/src/com/android/systemui/util/kotlin/BooleanFlowOperators.kt
@@ -18,6 +18,7 @@
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.combine
+import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.map
object BooleanFlowOperators {
@@ -31,7 +32,7 @@
* ```
*/
fun and(vararg flows: Flow<Boolean>): Flow<Boolean> =
- combine(flows.asIterable()) { values -> values.all { it } }
+ combine(flows.asIterable()) { values -> values.all { it } }.distinctUntilChanged()
/**
* Logical NOT operator for a boolean flow.
@@ -48,5 +49,5 @@
* determine the result.
*/
fun or(vararg flows: Flow<Boolean>): Flow<Boolean> =
- combine(flows.asIterable()) { values -> values.any { it } }
+ combine(flows.asIterable()) { values -> values.any { it } }.distinctUntilChanged()
}
diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java
index 2245541..cd82e1d 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java
@@ -118,7 +118,7 @@
import com.android.systemui.Prefs;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.haptics.slider.HapticSliderViewBinder;
-import com.android.systemui.haptics.slider.SeekableSliderHapticPlugin;
+import com.android.systemui.haptics.slider.SeekbarHapticPlugin;
import com.android.systemui.haptics.slider.SliderHapticFeedbackConfig;
import com.android.systemui.media.dialog.MediaOutputDialogManager;
import com.android.systemui.plugins.VolumeDialog;
@@ -2640,7 +2640,7 @@
private ObjectAnimator anim; // slider progress animation for non-touch-related updates
private int animTargetProgress;
private int lastAudibleLevel = 1;
- private SeekableSliderHapticPlugin mHapticPlugin;
+ private SeekbarHapticPlugin mHapticPlugin;
private int mProgressHapticsType = PROGRESS_HAPTICS_DISABLED;
void setIcon(int iconRes, Resources.Theme theme) {
@@ -2658,7 +2658,7 @@
com.android.systemui.util.time.SystemClock systemClock) {
if (mHapticPlugin != null) return;
- mHapticPlugin = new SeekableSliderHapticPlugin(
+ mHapticPlugin = new SeekbarHapticPlugin(
vibratorHelper,
systemClock,
sSliderHapticFeedbackConfig);
diff --git a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/domain/interactor/MediaOutputActionsInteractor.kt b/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/domain/interactor/MediaOutputActionsInteractor.kt
index eebb6fb..22c0530 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/domain/interactor/MediaOutputActionsInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/domain/interactor/MediaOutputActionsInteractor.kt
@@ -21,7 +21,7 @@
import com.android.systemui.animation.DialogTransitionAnimator
import com.android.systemui.animation.Expandable
import com.android.systemui.media.dialog.MediaOutputDialogManager
-import com.android.systemui.volume.panel.component.mediaoutput.shared.model.SessionWithPlayback
+import com.android.systemui.volume.panel.component.mediaoutput.shared.model.SessionWithPlaybackState
import com.android.systemui.volume.panel.dagger.scope.VolumePanelScope
import javax.inject.Inject
@@ -33,10 +33,10 @@
private val mediaOutputDialogManager: MediaOutputDialogManager,
) {
- fun onBarClick(sessionWithPlayback: SessionWithPlayback?, expandable: Expandable) {
- if (sessionWithPlayback?.playback?.isActive == true) {
+ fun onBarClick(sessionWithPlaybackState: SessionWithPlaybackState?, expandable: Expandable) {
+ if (sessionWithPlaybackState?.isPlaybackActive == true) {
mediaOutputDialogManager.createAndShowWithController(
- sessionWithPlayback.session.packageName,
+ sessionWithPlaybackState.session.packageName,
false,
expandable.dialogController()
)
diff --git a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/domain/interactor/MediaOutputInteractor.kt b/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/domain/interactor/MediaOutputInteractor.kt
index 41ad035..83b8029 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/domain/interactor/MediaOutputInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/domain/interactor/MediaOutputInteractor.kt
@@ -94,7 +94,7 @@
/** Currently connected [MediaDevice]. */
val currentConnectedDevice: Flow<MediaDevice?> =
- localMediaRepository.flatMapLatest { it.currentConnectedDevice }
+ localMediaRepository.flatMapLatest { it.currentConnectedDevice }.distinctUntilChanged()
private suspend fun getApplicationLabel(packageName: String): CharSequence? {
return try {
diff --git a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt b/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlaybackState.kt
similarity index 86%
rename from packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt
rename to packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlaybackState.kt
index c4476fc..bac969d 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt
+++ b/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlaybackState.kt
@@ -16,9 +16,7 @@
package com.android.systemui.volume.panel.component.mediaoutput.shared.model
-import android.media.session.PlaybackState
-
-data class SessionWithPlayback(
+data class SessionWithPlaybackState(
val session: MediaDeviceSession,
- val playback: PlaybackState,
+ val isPlaybackActive: Boolean,
)
diff --git a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/ui/viewmodel/MediaOutputViewModel.kt b/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/ui/viewmodel/MediaOutputViewModel.kt
index f19fa20..d60d981 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/ui/viewmodel/MediaOutputViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/ui/viewmodel/MediaOutputViewModel.kt
@@ -25,7 +25,7 @@
import com.android.systemui.volume.panel.component.mediaoutput.domain.interactor.MediaDeviceSessionInteractor
import com.android.systemui.volume.panel.component.mediaoutput.domain.interactor.MediaOutputActionsInteractor
import com.android.systemui.volume.panel.component.mediaoutput.domain.interactor.MediaOutputInteractor
-import com.android.systemui.volume.panel.component.mediaoutput.shared.model.SessionWithPlayback
+import com.android.systemui.volume.panel.component.mediaoutput.shared.model.SessionWithPlaybackState
import com.android.systemui.volume.panel.dagger.scope.VolumePanelScope
import com.android.systemui.volume.panel.shared.model.Result
import com.android.systemui.volume.panel.ui.VolumePanelUiEvent
@@ -35,10 +35,9 @@
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.combine
-import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.flow.flatMapLatest
import kotlinx.coroutines.flow.flowOf
-import kotlinx.coroutines.flow.map
+import kotlinx.coroutines.flow.mapNotNull
import kotlinx.coroutines.flow.stateIn
/** Models the UI of the Media Output Volume Panel component. */
@@ -55,20 +54,19 @@
private val uiEventLogger: UiEventLogger,
) {
- private val sessionWithPlayback: StateFlow<Result<SessionWithPlayback?>> =
+ private val sessionWithPlaybackState: StateFlow<Result<SessionWithPlaybackState?>> =
interactor.defaultActiveMediaSession
.flatMapLatest { session ->
if (session == null) {
- flowOf(Result.Data<SessionWithPlayback?>(null))
+ flowOf(Result.Data<SessionWithPlaybackState?>(null))
} else {
- mediaDeviceSessionInteractor
- .playbackState(session)
- .map { playback ->
- playback?.let {
- Result.Data<SessionWithPlayback?>(SessionWithPlayback(session, it))
- }
+ mediaDeviceSessionInteractor.playbackState(session).mapNotNull { playback ->
+ playback?.let {
+ Result.Data<SessionWithPlaybackState?>(
+ SessionWithPlaybackState(session, playback.isActive())
+ )
}
- .filterNotNull()
+ }
}
}
.stateIn(
@@ -78,14 +76,14 @@
)
val connectedDeviceViewModel: StateFlow<ConnectedDeviceViewModel?> =
- combine(sessionWithPlayback, interactor.currentConnectedDevice) {
+ combine(sessionWithPlaybackState, interactor.currentConnectedDevice) {
mediaDeviceSession,
currentConnectedDevice ->
if (mediaDeviceSession !is Result.Data) {
return@combine null
}
ConnectedDeviceViewModel(
- if (mediaDeviceSession.data?.playback?.isActive == true) {
+ if (mediaDeviceSession.data?.isPlaybackActive == true) {
context.getString(
R.string.media_output_label_title,
mediaDeviceSession.data.session.appLabel
@@ -103,19 +101,16 @@
)
val deviceIconViewModel: StateFlow<DeviceIconViewModel?> =
- combine(sessionWithPlayback, interactor.currentConnectedDevice) {
+ combine(sessionWithPlaybackState, interactor.currentConnectedDevice) {
mediaDeviceSession,
currentConnectedDevice ->
if (mediaDeviceSession !is Result.Data) {
return@combine null
}
- if (mediaDeviceSession.data?.playback?.isActive == true) {
- val icon =
- currentConnectedDevice?.icon?.let { Icon.Loaded(it, null) }
- ?: Icon.Resource(
- com.android.internal.R.drawable.ic_bt_headphones_a2dp,
- null
- )
+ val icon: Icon =
+ currentConnectedDevice?.icon?.let { Icon.Loaded(it, null) }
+ ?: Icon.Resource(R.drawable.ic_media_home_devices, null)
+ if (mediaDeviceSession.data?.isPlaybackActive == true) {
DeviceIconViewModel.IsPlaying(
icon = icon,
iconColor =
@@ -125,7 +120,7 @@
)
} else {
DeviceIconViewModel.IsNotPlaying(
- icon = Icon.Resource(R.drawable.ic_media_home_devices, null),
+ icon = icon,
iconColor =
Color.Attribute(
com.android.internal.R.attr.materialColorOnSurfaceVariant
@@ -143,7 +138,7 @@
fun onBarClick(expandable: Expandable) {
uiEventLogger.log(VolumePanelUiEvent.VOLUME_PANEL_MEDIA_OUTPUT_CLICKED)
- val result = sessionWithPlayback.value
+ val result = sessionWithPlaybackState.value
actionsInteractor.onBarClick((result as? Result.Data)?.data, expandable)
}
}
diff --git a/packages/SystemUI/tests/src/com/android/AAAPlusPlusVerifySysuiRequiredTestPropertiesTest.java b/packages/SystemUI/tests/src/com/android/AAAPlusPlusVerifySysuiRequiredTestPropertiesTest.java
index ec6c421..a95735e 100644
--- a/packages/SystemUI/tests/src/com/android/AAAPlusPlusVerifySysuiRequiredTestPropertiesTest.java
+++ b/packages/SystemUI/tests/src/com/android/AAAPlusPlusVerifySysuiRequiredTestPropertiesTest.java
@@ -68,9 +68,9 @@
SmallTest.class,
MediumTest.class,
LargeTest.class,
- android.test.suitebuilder.annotation.SmallTest.class,
- android.test.suitebuilder.annotation.MediumTest.class,
- android.test.suitebuilder.annotation.LargeTest.class,
+ androidx.test.filters.SmallTest.class,
+ androidx.test.filters.MediumTest.class,
+ androidx.test.filters.LargeTest.class,
};
@Test
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/CarrierTextManagerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/CarrierTextManagerTest.java
index 303ae97..11d31c6 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/CarrierTextManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/CarrierTextManagerTest.java
@@ -58,12 +58,15 @@
import com.android.keyguard.logging.CarrierTextManagerLogger;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.keyguard.WakefulnessLifecycle;
+import com.android.systemui.kosmos.KosmosJavaAdapter;
import com.android.systemui.log.LogBufferHelperKt;
import com.android.systemui.res.R;
+import com.android.systemui.statusbar.pipeline.satellite.ui.viewmodel.FakeDeviceBasedSatelliteViewModel;
import com.android.systemui.statusbar.pipeline.wifi.data.repository.FakeWifiRepository;
import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel;
import com.android.systemui.telephony.TelephonyListenerManager;
import com.android.systemui.util.concurrency.FakeExecutor;
+import com.android.systemui.util.kotlin.JavaAdapter;
import com.android.systemui.util.time.FakeSystemClock;
import org.junit.Before;
@@ -78,6 +81,8 @@
import java.util.HashMap;
import java.util.List;
+import kotlinx.coroutines.test.TestScope;
+
@SmallTest
@RunWith(AndroidTestingRunner.class)
public class CarrierTextManagerTest extends SysuiTestCase {
@@ -99,6 +104,8 @@
TEST_CARRIER, TEST_CARRIER, NAME_SOURCE_CARRIER_ID, 0xFFFFFF, "",
DATA_ROAMING_ENABLE, null, null, null, null, false, null, "");
private FakeWifiRepository mWifiRepository = new FakeWifiRepository();
+ private final FakeDeviceBasedSatelliteViewModel mSatelliteViewModel =
+ new FakeDeviceBasedSatelliteViewModel();
@Mock
private WakefulnessLifecycle mWakefulnessLifecycle;
@Mock
@@ -124,6 +131,10 @@
new CarrierTextManagerLogger(
LogBufferHelperKt.logcatLogBuffer("CarrierTextManagerLog"));
+ private final KosmosJavaAdapter mKosmos = new KosmosJavaAdapter(this);
+ private final TestScope mTestScope = mKosmos.getTestScope();
+ private final JavaAdapter mJavaAdapter = new JavaAdapter(mTestScope.getBackgroundScope());
+
private Void checkMainThread(InvocationOnMock inv) {
assertThat(mMainExecutor.isExecuting()).isTrue();
assertThat(mBgExecutor.isExecuting()).isFalse();
@@ -156,9 +167,18 @@
when(mTelephonyManager.getActiveModemCount()).thenReturn(3);
mCarrierTextManager = new CarrierTextManager.Builder(
- mContext, mContext.getResources(), mWifiRepository,
- mTelephonyManager, mTelephonyListenerManager, mWakefulnessLifecycle, mMainExecutor,
- mBgExecutor, mKeyguardUpdateMonitor, mLogger)
+ mContext,
+ mContext.getResources(),
+ mWifiRepository,
+ mSatelliteViewModel,
+ mJavaAdapter,
+ mTelephonyManager,
+ mTelephonyListenerManager,
+ mWakefulnessLifecycle,
+ mMainExecutor,
+ mBgExecutor,
+ mKeyguardUpdateMonitor,
+ mLogger)
.setShowAirplaneMode(true)
.setShowMissingSim(true)
.build();
@@ -211,6 +231,8 @@
getContextSpyForStickyBroadcast(stickyIntent),
mContext.getResources(),
mWifiRepository,
+ mSatelliteViewModel,
+ mJavaAdapter,
mTelephonyManager,
mTelephonyListenerManager,
mWakefulnessLifecycle,
@@ -451,6 +473,107 @@
}
@Test
+ public void carrierText_satelliteTextNull_notUsed() {
+ reset(mCarrierTextCallback);
+ List<SubscriptionInfo> list = new ArrayList<>();
+ list.add(TEST_SUBSCRIPTION);
+ when(mKeyguardUpdateMonitor.getSimState(anyInt())).thenReturn(
+ TelephonyManager.SIM_STATE_READY);
+ when(mKeyguardUpdateMonitor.getFilteredSubscriptionInfo()).thenReturn(list);
+ mKeyguardUpdateMonitor.mServiceStates = new HashMap<>();
+
+ // WHEN the satellite text is null
+ mSatelliteViewModel.getCarrierText().setValue(null);
+ mTestScope.getTestScheduler().runCurrent();
+
+ ArgumentCaptor<CarrierTextManager.CarrierTextCallbackInfo> captor =
+ ArgumentCaptor.forClass(
+ CarrierTextManager.CarrierTextCallbackInfo.class);
+ FakeExecutor.exhaustExecutors(mMainExecutor, mBgExecutor);
+
+ // THEN the default subscription carrier text is used
+ verify(mCarrierTextCallback).updateCarrierInfo(captor.capture());
+ assertThat(captor.getValue().carrierText).isEqualTo(TEST_CARRIER);
+ }
+
+ @Test
+ public void carrierText_satelliteTextUpdates_autoTriggersCallback() {
+ reset(mCarrierTextCallback);
+ List<SubscriptionInfo> list = new ArrayList<>();
+ list.add(TEST_SUBSCRIPTION);
+ when(mKeyguardUpdateMonitor.getSimState(anyInt())).thenReturn(
+ TelephonyManager.SIM_STATE_READY);
+ when(mKeyguardUpdateMonitor.getFilteredSubscriptionInfo()).thenReturn(list);
+ mKeyguardUpdateMonitor.mServiceStates = new HashMap<>();
+
+ // WHEN the satellite text is set
+ mSatelliteViewModel.getCarrierText().setValue("Test satellite text");
+ mTestScope.getTestScheduler().runCurrent();
+
+ // THEN we should automatically re-trigger #updateCarrierText and get callback info
+ ArgumentCaptor<CarrierTextManager.CarrierTextCallbackInfo> captor =
+ ArgumentCaptor.forClass(
+ CarrierTextManager.CarrierTextCallbackInfo.class);
+ FakeExecutor.exhaustExecutors(mMainExecutor, mBgExecutor);
+ verify(mCarrierTextCallback).updateCarrierInfo(captor.capture());
+ // AND use the satellite text as the carrier text
+ assertThat(captor.getValue().carrierText).isEqualTo("Test satellite text");
+
+ // WHEN the satellite text is reset to null
+ reset(mCarrierTextCallback);
+ mSatelliteViewModel.getCarrierText().setValue(null);
+ mTestScope.getTestScheduler().runCurrent();
+
+ // THEN we should automatically re-trigger #updateCarrierText and get callback info
+ // that doesn't include the satellite info
+ FakeExecutor.exhaustExecutors(mMainExecutor, mBgExecutor);
+ verify(mCarrierTextCallback).updateCarrierInfo(captor.capture());
+ assertThat(captor.getValue().carrierText).isEqualTo(TEST_CARRIER);
+ }
+
+ @Test
+ public void carrierText_updatedWhileNotListening_getsNewValueWhenListening() {
+ reset(mCarrierTextCallback);
+ List<SubscriptionInfo> list = new ArrayList<>();
+ list.add(TEST_SUBSCRIPTION);
+ when(mKeyguardUpdateMonitor.getSimState(anyInt())).thenReturn(
+ TelephonyManager.SIM_STATE_READY);
+ when(mKeyguardUpdateMonitor.getFilteredSubscriptionInfo()).thenReturn(list);
+ mKeyguardUpdateMonitor.mServiceStates = new HashMap<>();
+
+ mSatelliteViewModel.getCarrierText().setValue("Old satellite text");
+ mTestScope.getTestScheduler().runCurrent();
+
+ ArgumentCaptor<CarrierTextManager.CarrierTextCallbackInfo> captor =
+ ArgumentCaptor.forClass(
+ CarrierTextManager.CarrierTextCallbackInfo.class);
+ FakeExecutor.exhaustExecutors(mMainExecutor, mBgExecutor);
+ verify(mCarrierTextCallback).updateCarrierInfo(captor.capture());
+ assertThat(captor.getValue().carrierText).isEqualTo("Old satellite text");
+
+ // WHEN we stop listening
+ reset(mCarrierTextCallback);
+ mCarrierTextManager.setListening(null);
+
+ // AND the satellite text updates
+ mSatelliteViewModel.getCarrierText().setValue("New satellite text");
+
+ // THEN we don't get new callback info because we aren't listening
+ verify(mCarrierTextCallback, never()).updateCarrierInfo(any());
+
+ // WHEN we start listening again
+ reset(mCarrierTextCallback);
+ mCarrierTextManager.setListening(mCarrierTextCallback);
+
+ // THEN we should automatically re-trigger #updateCarrierText and get callback info
+ // that includes the new satellite text
+ mTestScope.getTestScheduler().runCurrent();
+ FakeExecutor.exhaustExecutors(mMainExecutor, mBgExecutor);
+ verify(mCarrierTextCallback).updateCarrierInfo(captor.capture());
+ assertThat(captor.getValue().carrierText).isEqualTo("New satellite text");
+ }
+
+ @Test
public void testCreateInfo_noSubscriptions() {
reset(mCarrierTextCallback);
when(mKeyguardUpdateMonitor.getFilteredSubscriptionInfo()).thenReturn(
@@ -471,6 +594,28 @@
}
@Test
+ public void testCarrierText_oneValidSubscription() {
+ reset(mCarrierTextCallback);
+ List<SubscriptionInfo> list = new ArrayList<>();
+ list.add(TEST_SUBSCRIPTION);
+ when(mKeyguardUpdateMonitor.getSimState(anyInt())).thenReturn(
+ TelephonyManager.SIM_STATE_READY);
+ when(mKeyguardUpdateMonitor.getFilteredSubscriptionInfo()).thenReturn(list);
+
+ mKeyguardUpdateMonitor.mServiceStates = new HashMap<>();
+
+ ArgumentCaptor<CarrierTextManager.CarrierTextCallbackInfo> captor =
+ ArgumentCaptor.forClass(
+ CarrierTextManager.CarrierTextCallbackInfo.class);
+
+ mCarrierTextManager.updateCarrierText();
+ FakeExecutor.exhaustExecutors(mMainExecutor, mBgExecutor);
+ verify(mCarrierTextCallback).updateCarrierInfo(captor.capture());
+
+ assertThat(captor.getValue().carrierText).isEqualTo(TEST_CARRIER);
+ }
+
+ @Test
public void testCarrierText_twoValidSubscriptions() {
reset(mCarrierTextCallback);
List<SubscriptionInfo> list = new ArrayList<>();
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java
index 68b6d9d..d354fa2 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java
@@ -2016,6 +2016,16 @@
}
@Test
+ public void unfoldFromPostureChange_sendActionToFaceAuthInteractor() {
+ // WHEN device posture changes to unfold
+ deviceInPostureStateOpened();
+ mTestableLooper.processAllMessages();
+
+ // THEN request face auth
+ verify(mFaceAuthInteractor).onDeviceUnfolded();
+ }
+
+ @Test
public void detectFingerprint_onTemporaryLockoutReset_authenticateFingerprint() {
ArgumentCaptor<FingerprintManager.LockoutResetCallback> fpLockoutResetCallbackCaptor =
ArgumentCaptor.forClass(FingerprintManager.LockoutResetCallback.class);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/SystemUIApplicationTest.kt b/packages/SystemUI/tests/src/com/android/systemui/SystemUIApplicationTest.kt
index e157fc5..4f7610a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/SystemUIApplicationTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/SystemUIApplicationTest.kt
@@ -27,7 +27,6 @@
import com.android.systemui.flags.systemPropertiesHelper
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.process.processWrapper
-import com.android.systemui.startable.Dependencies
import com.android.systemui.util.mockito.whenever
import com.google.common.truth.Truth.assertThat
import javax.inject.Provider
@@ -56,6 +55,19 @@
@Mock private lateinit var bootCompleteCache: BootCompleteCacheImpl
@Mock private lateinit var initController: InitController
+ class StartableA : TestableStartable()
+ class StartableB : TestableStartable()
+ class StartableC : TestableStartable()
+ class StartableD : TestableStartable()
+ class StartableE : TestableStartable()
+
+ val dependencyMap: Map<Class<*>, Set<Class<out CoreStartable>>> =
+ mapOf(
+ StartableC::class.java to setOf(StartableA::class.java),
+ StartableD::class.java to setOf(StartableA::class.java, StartableB::class.java),
+ StartableE::class.java to setOf(StartableD::class.java, StartableB::class.java),
+ )
+
private val startableA = StartableA()
private val startableB = StartableB()
private val startableC = StartableC()
@@ -76,6 +88,7 @@
whenever(sysuiComponent.provideBootCacheImpl()).thenReturn(bootCompleteCache)
whenever(sysuiComponent.createDumpManager()).thenReturn(kosmos.dumpManager)
whenever(sysuiComponent.initController).thenReturn(initController)
+ whenever(sysuiComponent.startableDependencies).thenReturn(dependencyMap)
kosmos.processWrapper.systemUser = true
app.setContextAvailableCallback(contextAvailableCallback)
@@ -168,13 +181,4 @@
startOrder++
}
}
-
- class StartableA : TestableStartable()
- class StartableB : TestableStartable()
-
- @Dependencies(StartableA::class) class StartableC : TestableStartable()
-
- @Dependencies(StartableA::class, StartableB::class) class StartableD : TestableStartable()
-
- @Dependencies(StartableD::class, StartableB::class) class StartableE : TestableStartable()
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt
index 8f3fed7..de3b741 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthContainerViewTest.kt
@@ -176,7 +176,8 @@
testScope.backgroundScope,
)
biometricStatusInteractor =
- BiometricStatusInteractorImpl(activityTaskManager, biometricStatusRepository)
+ BiometricStatusInteractorImpl(activityTaskManager, biometricStatusRepository,
+ fingerprintRepository)
// Set up default logo icon
whenever(packageManager.getApplicationIcon(OP_PACKAGE_NAME)).thenReturn(defaultLogoIcon)
context.setMockPackageManager(packageManager)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/data/repository/BiometricStatusRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/data/repository/BiometricStatusRepositoryTest.kt
index 8fbeb6f..d48b600 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/data/repository/BiometricStatusRepositoryTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/data/repository/BiometricStatusRepositoryTest.kt
@@ -26,18 +26,21 @@
import android.hardware.biometrics.BiometricRequestConstants.REASON_ENROLL_ENROLLING
import android.hardware.biometrics.BiometricRequestConstants.REASON_ENROLL_FIND_SENSOR
import android.hardware.biometrics.BiometricSourceType
+import android.hardware.biometrics.events.AuthenticationAcquiredInfo
+import android.hardware.biometrics.events.AuthenticationStartedInfo
+import android.hardware.biometrics.events.AuthenticationStoppedInfo
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.biometrics.shared.model.AuthenticationReason
import com.android.systemui.biometrics.shared.model.AuthenticationReason.SettingsOperations
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.keyguard.shared.model.AcquiredFingerprintAuthenticationStatus
+import com.android.systemui.kosmos.testScope
import com.android.systemui.shared.Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR
+import com.android.systemui.testKosmos
import com.android.systemui.util.mockito.withArgCaptor
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.ExperimentalCoroutinesApi
-import kotlinx.coroutines.test.StandardTestDispatcher
-import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
import org.junit.Before
@@ -57,19 +60,18 @@
@JvmField @Rule var mockitoRule: MockitoRule = MockitoJUnit.rule()
@Mock private lateinit var biometricManager: BiometricManager
+ private val kosmos = testKosmos()
private lateinit var underTest: BiometricStatusRepository
- private val testScope = TestScope(StandardTestDispatcher())
-
@Before
fun setUp() {
mSetFlagsRule.enableFlags(FLAG_SIDEFPS_CONTROLLER_REFACTOR)
- underTest = BiometricStatusRepositoryImpl(testScope.backgroundScope, biometricManager)
+ underTest = BiometricStatusRepositoryImpl(kosmos.testScope.backgroundScope, biometricManager)
}
@Test
fun updatesFingerprintAuthenticationReason_whenBiometricPromptAuthenticationStarted() =
- testScope.runTest {
+ kosmos.testScope.runTest {
val fingerprintAuthenticationReason by
collectLastValue(underTest.fingerprintAuthenticationReason)
runCurrent()
@@ -78,14 +80,17 @@
assertThat(fingerprintAuthenticationReason).isEqualTo(AuthenticationReason.NotRunning)
- listener.onAuthenticationStarted(REASON_AUTH_BP)
+ listener.onAuthenticationStarted(
+ AuthenticationStartedInfo.Builder(BiometricSourceType.FINGERPRINT, REASON_AUTH_BP)
+ .build()
+ )
assertThat(fingerprintAuthenticationReason)
.isEqualTo(AuthenticationReason.BiometricPromptAuthentication)
}
@Test
fun updatesFingerprintAuthenticationReason_whenDeviceEntryAuthenticationStarted() =
- testScope.runTest {
+ kosmos.testScope.runTest {
val fingerprintAuthenticationReason by
collectLastValue(underTest.fingerprintAuthenticationReason)
runCurrent()
@@ -94,14 +99,20 @@
assertThat(fingerprintAuthenticationReason).isEqualTo(AuthenticationReason.NotRunning)
- listener.onAuthenticationStarted(REASON_AUTH_KEYGUARD)
+ listener.onAuthenticationStarted(
+ AuthenticationStartedInfo.Builder(
+ BiometricSourceType.FINGERPRINT,
+ REASON_AUTH_KEYGUARD
+ )
+ .build()
+ )
assertThat(fingerprintAuthenticationReason)
.isEqualTo(AuthenticationReason.DeviceEntryAuthentication)
}
@Test
fun updatesFingerprintAuthenticationReason_whenOtherAuthenticationStarted() =
- testScope.runTest {
+ kosmos.testScope.runTest {
val fingerprintAuthenticationReason by
collectLastValue(underTest.fingerprintAuthenticationReason)
runCurrent()
@@ -110,14 +121,20 @@
assertThat(fingerprintAuthenticationReason).isEqualTo(AuthenticationReason.NotRunning)
- listener.onAuthenticationStarted(REASON_AUTH_OTHER)
+ listener.onAuthenticationStarted(
+ AuthenticationStartedInfo.Builder(
+ BiometricSourceType.FINGERPRINT,
+ REASON_AUTH_OTHER
+ )
+ .build()
+ )
assertThat(fingerprintAuthenticationReason)
.isEqualTo(AuthenticationReason.OtherAuthentication)
}
@Test
fun updatesFingerprintAuthenticationReason_whenSettingsAuthenticationStarted() =
- testScope.runTest {
+ kosmos.testScope.runTest {
val fingerprintAuthenticationReason by
collectLastValue(underTest.fingerprintAuthenticationReason)
runCurrent()
@@ -126,14 +143,20 @@
assertThat(fingerprintAuthenticationReason).isEqualTo(AuthenticationReason.NotRunning)
- listener.onAuthenticationStarted(REASON_AUTH_SETTINGS)
+ listener.onAuthenticationStarted(
+ AuthenticationStartedInfo.Builder(
+ BiometricSourceType.FINGERPRINT,
+ REASON_AUTH_SETTINGS
+ )
+ .build()
+ )
assertThat(fingerprintAuthenticationReason)
.isEqualTo(AuthenticationReason.SettingsAuthentication(SettingsOperations.OTHER))
}
@Test
fun updatesFingerprintAuthenticationReason_whenEnrollmentAuthenticationStarted() =
- testScope.runTest {
+ kosmos.testScope.runTest {
val fingerprintAuthenticationReason by
collectLastValue(underTest.fingerprintAuthenticationReason)
runCurrent()
@@ -142,7 +165,13 @@
assertThat(fingerprintAuthenticationReason).isEqualTo(AuthenticationReason.NotRunning)
- listener.onAuthenticationStarted(REASON_ENROLL_FIND_SENSOR)
+ listener.onAuthenticationStarted(
+ AuthenticationStartedInfo.Builder(
+ BiometricSourceType.FINGERPRINT,
+ REASON_ENROLL_FIND_SENSOR
+ )
+ .build()
+ )
assertThat(fingerprintAuthenticationReason)
.isEqualTo(
AuthenticationReason.SettingsAuthentication(
@@ -150,7 +179,13 @@
)
)
- listener.onAuthenticationStarted(REASON_ENROLL_ENROLLING)
+ listener.onAuthenticationStarted(
+ AuthenticationStartedInfo.Builder(
+ BiometricSourceType.FINGERPRINT,
+ REASON_ENROLL_ENROLLING
+ )
+ .build()
+ )
assertThat(fingerprintAuthenticationReason)
.isEqualTo(
AuthenticationReason.SettingsAuthentication(SettingsOperations.ENROLL_ENROLLING)
@@ -159,29 +194,38 @@
@Test
fun updatesFingerprintAuthenticationReason_whenAuthenticationStopped() =
- testScope.runTest {
+ kosmos.testScope.runTest {
val fingerprintAuthenticationReason by
collectLastValue(underTest.fingerprintAuthenticationReason)
runCurrent()
val listener = biometricManager.captureListener()
- listener.onAuthenticationStarted(REASON_AUTH_BP)
- listener.onAuthenticationStopped()
+ listener.onAuthenticationStarted(
+ AuthenticationStartedInfo.Builder(BiometricSourceType.FINGERPRINT, REASON_AUTH_BP)
+ .build()
+ )
+ listener.onAuthenticationStopped(
+ AuthenticationStoppedInfo.Builder(BiometricSourceType.FINGERPRINT, REASON_AUTH_BP)
+ .build()
+ )
assertThat(fingerprintAuthenticationReason).isEqualTo(AuthenticationReason.NotRunning)
}
@Test
fun updatesFingerprintAcquiredStatusWhenBiometricPromptAuthenticationAcquired() =
- testScope.runTest {
+ kosmos.testScope.runTest {
val fingerprintAcquiredStatus by collectLastValue(underTest.fingerprintAcquiredStatus)
runCurrent()
val listener = biometricManager.captureListener()
listener.onAuthenticationAcquired(
- BiometricSourceType.FINGERPRINT,
- REASON_AUTH_BP,
- BiometricFingerprintConstants.FINGERPRINT_ACQUIRED_START
+ AuthenticationAcquiredInfo.Builder(
+ BiometricSourceType.FINGERPRINT,
+ REASON_AUTH_BP,
+ BiometricFingerprintConstants.FINGERPRINT_ACQUIRED_START
+ )
+ .build()
)
assertThat(fingerprintAcquiredStatus)
@@ -192,6 +236,31 @@
)
)
}
+
+ @Test
+ fun updatesFingerprintAcquiredStatusWhenDeviceEntryAuthenticationAcquired() =
+ kosmos.testScope.runTest {
+ val fingerprintAcquiredStatus by collectLastValue(underTest.fingerprintAcquiredStatus)
+ runCurrent()
+
+ val listener = biometricManager.captureListener()
+ listener.onAuthenticationAcquired(
+ AuthenticationAcquiredInfo.Builder(
+ BiometricSourceType.FINGERPRINT,
+ REASON_AUTH_KEYGUARD,
+ BiometricFingerprintConstants.FINGERPRINT_ACQUIRED_START
+ )
+ .build()
+ )
+
+ assertThat(fingerprintAcquiredStatus)
+ .isEqualTo(
+ AcquiredFingerprintAuthenticationStatus(
+ AuthenticationReason.DeviceEntryAuthentication,
+ BiometricFingerprintConstants.FINGERPRINT_ACQUIRED_START
+ )
+ )
+ }
}
private fun BiometricManager.captureListener() =
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/domain/interactor/BiometricStatusInteractorImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/domain/interactor/BiometricStatusInteractorImplTest.kt
index 5c34fd9..be5c7bc 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/domain/interactor/BiometricStatusInteractorImplTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/domain/interactor/BiometricStatusInteractorImplTest.kt
@@ -17,62 +17,69 @@
package com.android.systemui.biometrics.domain.interactor
import android.app.ActivityManager
-import android.app.ActivityTaskManager
import android.content.ComponentName
import android.hardware.biometrics.BiometricFingerprintConstants
import androidx.test.filters.SmallTest
+import com.android.app.activityTaskManager
import com.android.systemui.SysuiTestCase
-import com.android.systemui.biometrics.data.repository.FakeBiometricStatusRepository
+import com.android.systemui.biometrics.data.repository.biometricStatusRepository
+import com.android.systemui.biometrics.data.repository.fingerprintPropertyRepository
import com.android.systemui.biometrics.shared.model.AuthenticationReason
import com.android.systemui.biometrics.shared.model.AuthenticationReason.SettingsOperations
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.keyguard.shared.model.AcquiredFingerprintAuthenticationStatus
+import com.android.systemui.kosmos.testScope
import com.android.systemui.shared.Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR
+import com.android.systemui.testKosmos
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.ExperimentalCoroutinesApi
-import kotlinx.coroutines.test.StandardTestDispatcher
-import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
import org.junit.Before
-import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import org.mockito.Mock
import org.mockito.Mockito
import org.mockito.Mockito.`when`
-import org.mockito.junit.MockitoJUnit
-import org.mockito.junit.MockitoRule
@OptIn(ExperimentalCoroutinesApi::class)
@SmallTest
@RunWith(JUnit4::class)
class BiometricStatusInteractorImplTest : SysuiTestCase() {
- @JvmField @Rule var mockitoRule: MockitoRule = MockitoJUnit.rule()
- @Mock private lateinit var activityTaskManager: ActivityTaskManager
-
- private lateinit var biometricStatusRepository: FakeBiometricStatusRepository
+ private val kosmos = testKosmos()
private lateinit var underTest: BiometricStatusInteractorImpl
- private val testScope = TestScope(StandardTestDispatcher())
-
@Before
fun setup() {
mSetFlagsRule.enableFlags(FLAG_SIDEFPS_CONTROLLER_REFACTOR)
- biometricStatusRepository = FakeBiometricStatusRepository()
- underTest = BiometricStatusInteractorImpl(activityTaskManager, biometricStatusRepository)
+ underTest = kosmos.biometricStatusInteractor
}
@Test
- fun updatesSfpsAuthenticationReason_whenBiometricPromptAuthenticationStarted() =
- testScope.runTest {
+ fun doesNotUpdatesSfpsAuthenticationReason_whenUdfpsAuthenticationStarted() =
+ kosmos.testScope.runTest {
+ kosmos.fingerprintPropertyRepository.supportsUdfps()
val sfpsAuthenticationReason by collectLastValue(underTest.sfpsAuthenticationReason)
runCurrent()
assertThat(sfpsAuthenticationReason).isEqualTo(AuthenticationReason.NotRunning)
- biometricStatusRepository.setFingerprintAuthenticationReason(
+ kosmos.biometricStatusRepository.setFingerprintAuthenticationReason(
+ AuthenticationReason.BiometricPromptAuthentication
+ )
+ assertThat(sfpsAuthenticationReason).isEqualTo(AuthenticationReason.NotRunning)
+ }
+
+ @Test
+ fun updatesSfpsAuthenticationReason_whenSfpsBiometricPromptAuthenticationStarted() =
+ kosmos.testScope.runTest {
+ kosmos.fingerprintPropertyRepository.supportsSideFps()
+ val sfpsAuthenticationReason by collectLastValue(underTest.sfpsAuthenticationReason)
+ runCurrent()
+
+ assertThat(sfpsAuthenticationReason).isEqualTo(AuthenticationReason.NotRunning)
+
+ kosmos.biometricStatusRepository.setFingerprintAuthenticationReason(
AuthenticationReason.BiometricPromptAuthentication
)
assertThat(sfpsAuthenticationReason)
@@ -80,58 +87,62 @@
}
@Test
- fun doesNotUpdateSfpsAuthenticationReason_whenDeviceEntryAuthenticationStarted() =
- testScope.runTest {
+ fun doesNotUpdateSfpsAuthenticationReason_whenSfpsDeviceEntryAuthenticationStarted() =
+ kosmos.testScope.runTest {
+ kosmos.fingerprintPropertyRepository.supportsSideFps()
val sfpsAuthenticationReason by collectLastValue(underTest.sfpsAuthenticationReason)
runCurrent()
assertThat(sfpsAuthenticationReason).isEqualTo(AuthenticationReason.NotRunning)
- biometricStatusRepository.setFingerprintAuthenticationReason(
+ kosmos.biometricStatusRepository.setFingerprintAuthenticationReason(
AuthenticationReason.DeviceEntryAuthentication
)
assertThat(sfpsAuthenticationReason).isEqualTo(AuthenticationReason.NotRunning)
}
@Test
- fun updatesSfpsAuthenticationReason_whenOtherAuthenticationStarted() =
- testScope.runTest {
+ fun updatesSfpsAuthenticationReason_whenOtherSfpsAuthenticationStarted() =
+ kosmos.testScope.runTest {
+ kosmos.fingerprintPropertyRepository.supportsSideFps()
val sfpsAuthenticationReason by collectLastValue(underTest.sfpsAuthenticationReason)
runCurrent()
assertThat(sfpsAuthenticationReason).isEqualTo(AuthenticationReason.NotRunning)
- biometricStatusRepository.setFingerprintAuthenticationReason(
+ kosmos.biometricStatusRepository.setFingerprintAuthenticationReason(
AuthenticationReason.OtherAuthentication
)
assertThat(sfpsAuthenticationReason).isEqualTo(AuthenticationReason.OtherAuthentication)
}
@Test
- fun doesNotUpdateSfpsAuthenticationReason_whenOtherSettingsAuthenticationStarted() =
- testScope.runTest {
+ fun doesNotUpdateSfpsAuthenticationReason_whenOtherSfpsSettingsAuthenticationStarted() =
+ kosmos.testScope.runTest {
+ kosmos.fingerprintPropertyRepository.supportsSideFps()
val sfpsAuthenticationReason by collectLastValue(underTest.sfpsAuthenticationReason)
runCurrent()
assertThat(sfpsAuthenticationReason).isEqualTo(AuthenticationReason.NotRunning)
- `when`(activityTaskManager.getTasks(Mockito.anyInt()))
+ `when`(kosmos.activityTaskManager.getTasks(Mockito.anyInt()))
.thenReturn(listOf(fpSettingsTask()))
- biometricStatusRepository.setFingerprintAuthenticationReason(
+ kosmos.biometricStatusRepository.setFingerprintAuthenticationReason(
AuthenticationReason.SettingsAuthentication(SettingsOperations.OTHER)
)
assertThat(sfpsAuthenticationReason).isEqualTo(AuthenticationReason.NotRunning)
}
@Test
- fun updatesSfpsAuthenticationReason_whenEnrollmentAuthenticationStarted() =
- testScope.runTest {
+ fun updatesSfpsAuthenticationReason_whenSfpsEnrollmentStarted() =
+ kosmos.testScope.runTest {
+ kosmos.fingerprintPropertyRepository.supportsSideFps()
val sfpsAuthenticationReason by collectLastValue(underTest.sfpsAuthenticationReason)
runCurrent()
assertThat(sfpsAuthenticationReason).isEqualTo(AuthenticationReason.NotRunning)
- biometricStatusRepository.setFingerprintAuthenticationReason(
+ kosmos.biometricStatusRepository.setFingerprintAuthenticationReason(
AuthenticationReason.SettingsAuthentication(SettingsOperations.ENROLL_FIND_SENSOR)
)
assertThat(sfpsAuthenticationReason)
@@ -141,7 +152,7 @@
)
)
- biometricStatusRepository.setFingerprintAuthenticationReason(
+ kosmos.biometricStatusRepository.setFingerprintAuthenticationReason(
AuthenticationReason.SettingsAuthentication(SettingsOperations.ENROLL_ENROLLING)
)
assertThat(sfpsAuthenticationReason)
@@ -151,15 +162,16 @@
}
@Test
- fun updatesFingerprintAuthenticationReason_whenAuthenticationStopped() =
- testScope.runTest {
+ fun updatesFingerprintAuthenticationReason_whenSfpsAuthenticationStopped() =
+ kosmos.testScope.runTest {
+ kosmos.fingerprintPropertyRepository.supportsSideFps()
val sfpsAuthenticationReason by collectLastValue(underTest.sfpsAuthenticationReason)
runCurrent()
- biometricStatusRepository.setFingerprintAuthenticationReason(
+ kosmos.biometricStatusRepository.setFingerprintAuthenticationReason(
AuthenticationReason.BiometricPromptAuthentication
)
- biometricStatusRepository.setFingerprintAuthenticationReason(
+ kosmos.biometricStatusRepository.setFingerprintAuthenticationReason(
AuthenticationReason.NotRunning
)
assertThat(sfpsAuthenticationReason).isEqualTo(AuthenticationReason.NotRunning)
@@ -167,11 +179,11 @@
@Test
fun updatesFingerprintAcquiredStatusWhenBiometricPromptAuthenticationAcquired() =
- testScope.runTest {
+ kosmos.testScope.runTest {
val fingerprintAcquiredStatus by collectLastValue(underTest.fingerprintAcquiredStatus)
runCurrent()
- biometricStatusRepository.setFingerprintAcquiredStatus(
+ kosmos.biometricStatusRepository.setFingerprintAcquiredStatus(
AcquiredFingerprintAuthenticationStatus(
AuthenticationReason.BiometricPromptAuthentication,
BiometricFingerprintConstants.FINGERPRINT_ACQUIRED_START
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/binder/SideFpsOverlayViewBinderTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/binder/SideFpsOverlayViewBinderTest.kt
index d3cc232..a603be4 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/binder/SideFpsOverlayViewBinderTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/binder/SideFpsOverlayViewBinderTest.kt
@@ -203,7 +203,8 @@
)
biometricStatusInteractor =
- BiometricStatusInteractorImpl(activityTaskManager, biometricStatusRepository)
+ BiometricStatusInteractorImpl(activityTaskManager, biometricStatusRepository,
+ fingerprintPropertyRepository)
displayStateInteractor =
DisplayStateInteractorImpl(
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModelTest.kt
index a6c7f72..a732418 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModelTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/ui/viewmodel/PromptViewModelTest.kt
@@ -169,7 +169,8 @@
)
biometricStatusRepository = FakeBiometricStatusRepository()
biometricStatusInteractor =
- BiometricStatusInteractorImpl(activityTaskManager, biometricStatusRepository)
+ BiometricStatusInteractorImpl(activityTaskManager, biometricStatusRepository,
+ fingerprintRepository)
selector =
PromptSelectorInteractorImpl(fingerprintRepository, promptRepository, lockPatternUtils)
selector.resetPrompt()
diff --git a/packages/SystemUI/tests/src/com/android/systemui/communal/data/backup/CommunalBackupHelperTest.kt b/packages/SystemUI/tests/src/com/android/systemui/communal/data/backup/CommunalBackupHelperTest.kt
new file mode 100644
index 0000000..7094848
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/communal/data/backup/CommunalBackupHelperTest.kt
@@ -0,0 +1,155 @@
+/*
+ * 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.communal.data.backup
+
+import android.app.backup.BackupDataInput
+import android.app.backup.BackupDataInputStream
+import android.app.backup.BackupDataOutput
+import android.os.UserHandle
+import android.platform.test.annotations.DisableFlags
+import android.platform.test.annotations.EnableFlags
+import androidx.room.Room
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
+import com.android.systemui.Flags
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.communal.data.backup.CommunalBackupUtilsTest.Companion.represents
+import com.android.systemui.communal.data.backup.CommunalBackupUtilsTest.FakeWidgetMetadata
+import com.android.systemui.communal.data.db.CommunalDatabase
+import com.android.systemui.communal.data.db.CommunalWidgetDao
+import com.android.systemui.communal.proto.toCommunalHubState
+import com.android.systemui.lifecycle.InstantTaskExecutorRule
+import com.google.common.truth.Truth.assertThat
+import java.io.File
+import java.io.FileInputStream
+import java.io.FileOutputStream
+import org.junit.After
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@SmallTest
+@RunWith(AndroidJUnit4::class)
+class CommunalBackupHelperTest : SysuiTestCase() {
+ @JvmField @Rule val instantTaskExecutor = InstantTaskExecutorRule()
+
+ private lateinit var database: CommunalDatabase
+ private lateinit var dao: CommunalWidgetDao
+ private lateinit var backupUtils: CommunalBackupUtils
+
+ // Temporary file used for storing backed-up data.
+ private lateinit var backupDataFile: File
+
+ private lateinit var underTest: CommunalBackupHelper
+
+ @Before
+ fun setup() {
+ database =
+ Room.inMemoryDatabaseBuilder(context, CommunalDatabase::class.java)
+ .allowMainThreadQueries()
+ .build()
+ CommunalDatabase.setInstance(database)
+
+ dao = database.communalWidgetDao()
+ backupUtils = CommunalBackupUtils(context)
+
+ backupDataFile = File(context.cacheDir, "backup_data_file")
+
+ underTest = CommunalBackupHelper(UserHandle.SYSTEM, backupUtils)
+ }
+
+ @After
+ fun teardown() {
+ backupDataFile.delete()
+ database.close()
+ }
+
+ @Test
+ @EnableFlags(Flags.FLAG_COMMUNAL_HUB)
+ fun backupAndRestoreCommunalHub() {
+ val expectedWidgets = setUpDatabase()
+
+ underTest.performBackup(oldState = null, data = getBackupDataOutput(), newState = null)
+ underTest.restoreEntity(getBackupDataInputStream())
+
+ // Verify restored state matches backed-up state
+ val restoredState = backupUtils.readBytesFromDisk().toCommunalHubState()
+ val restoredWidgets = restoredState.widgets.toList()
+ assertThat(restoredWidgets)
+ .comparingElementsUsing(represents)
+ .containsExactlyElementsIn(expectedWidgets)
+ }
+
+ @Test
+ @DisableFlags(Flags.FLAG_COMMUNAL_HUB)
+ fun backup_skippedWhenCommunalDisabled() {
+ setUpDatabase()
+
+ underTest.performBackup(oldState = null, data = getBackupDataOutput(), newState = null)
+
+ // Verify nothing written to the backup
+ assertThat(backupDataFile.length()).isEqualTo(0)
+ }
+
+ @Test
+ @EnableFlags(Flags.FLAG_COMMUNAL_HUB)
+ fun backup_skippedForNonSystemUser() {
+ setUpDatabase()
+
+ val helper = CommunalBackupHelper(UserHandle.CURRENT, backupUtils)
+ helper.performBackup(oldState = null, data = getBackupDataOutput(), newState = null)
+
+ // Verify nothing written to the backup
+ assertThat(backupDataFile.length()).isEqualTo(0)
+ }
+
+ private fun setUpDatabase(): List<FakeWidgetMetadata> {
+ return listOf(
+ FakeWidgetMetadata(11, "com.android.fakePackage1/fakeWidget1", 3),
+ FakeWidgetMetadata(12, "com.android.fakePackage2/fakeWidget2", 2),
+ FakeWidgetMetadata(13, "com.android.fakePackage3/fakeWidget3", 1),
+ )
+ .onEach { dao.addWidget(it.widgetId, it.componentName, it.rank) }
+ }
+
+ private fun getBackupDataInputStream(): BackupDataInputStream {
+ val input = BackupDataInput(FileInputStream(backupDataFile).fd).apply { readNextHeader() }
+
+ // Construct BackupDataInputStream using reflection because its constructor is package
+ // private
+ val inputStream = BackupDataInputStream::class.constructors.first().call(input)
+
+ // Set key
+ with(inputStream.javaClass.getDeclaredField("key")) {
+ isAccessible = true
+ set(inputStream, input.key)
+ }
+
+ // Set dataSize
+ with(inputStream.javaClass.getDeclaredField("dataSize")) {
+ isAccessible = true
+ set(inputStream, input.dataSize)
+ }
+
+ return inputStream
+ }
+
+ private fun getBackupDataOutput(): BackupDataOutput {
+ return BackupDataOutput(FileOutputStream(backupDataFile).fd)
+ }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/communal/data/backup/CommunalBackupUtilsTest.kt b/packages/SystemUI/tests/src/com/android/systemui/communal/data/backup/CommunalBackupUtilsTest.kt
new file mode 100644
index 0000000..c3849f9
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/communal/data/backup/CommunalBackupUtilsTest.kt
@@ -0,0 +1,153 @@
+/*
+ * 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.communal.data.backup
+
+import androidx.room.Room
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.communal.data.db.CommunalDatabase
+import com.android.systemui.communal.data.db.CommunalWidgetDao
+import com.android.systemui.communal.nano.CommunalHubState
+import com.android.systemui.lifecycle.InstantTaskExecutorRule
+import com.google.common.truth.Correspondence
+import com.google.common.truth.Truth.assertThat
+import java.io.FileNotFoundException
+import java.nio.charset.Charset
+import org.junit.After
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@SmallTest
+@RunWith(AndroidJUnit4::class)
+class CommunalBackupUtilsTest : SysuiTestCase() {
+ @JvmField @Rule val instantTaskExecutor = InstantTaskExecutorRule()
+
+ private lateinit var database: CommunalDatabase
+ private lateinit var dao: CommunalWidgetDao
+ private lateinit var underTest: CommunalBackupUtils
+
+ @Before
+ fun setup() {
+ database =
+ Room.inMemoryDatabaseBuilder(context, CommunalDatabase::class.java)
+ .allowMainThreadQueries()
+ .build()
+ CommunalDatabase.setInstance(database)
+
+ dao = database.communalWidgetDao()
+ underTest = CommunalBackupUtils(context)
+ }
+
+ @After
+ fun teardown() {
+ database.close()
+ underTest.clear()
+ }
+
+ @Test
+ fun getCommunalHubState_returnsExpectedWidgets() {
+ // Set up database
+ val expectedWidgets =
+ listOf(
+ FakeWidgetMetadata(11, "com.android.fakePackage1/fakeWidget1", 3),
+ FakeWidgetMetadata(12, "com.android.fakePackage2/fakeWidget2", 2),
+ FakeWidgetMetadata(13, "com.android.fakePackage3/fakeWidget3", 1),
+ )
+ expectedWidgets.forEach { dao.addWidget(it.widgetId, it.componentName, it.rank) }
+
+ // Get communal hub state
+ val state = underTest.getCommunalHubState()
+ val actualWidgets = state.widgets.toList()
+
+ // Verify the state contains widgets as expected
+ assertThat(actualWidgets)
+ .comparingElementsUsing(represents)
+ .containsExactlyElementsIn(expectedWidgets)
+ }
+
+ @Test
+ fun write_existingContentIsOverwritten() {
+ // Write old data
+ val dataToWrite = "I am old data. Erase me."
+ underTest.writeBytesToDisk(dataToWrite.toByteArray(Charset.defaultCharset()))
+
+ // Verify old data written
+ var dataRead = underTest.readBytesFromDisk().toString(Charset.defaultCharset())
+ assertThat(dataRead).isEqualTo(dataToWrite)
+
+ // Write new data
+ val newDataToWrite = "I am new data."
+ underTest.writeBytesToDisk(newDataToWrite.toByteArray(Charset.defaultCharset()))
+
+ // Verify new data overwrites old
+ dataRead = underTest.readBytesFromDisk().toString(Charset.defaultCharset())
+ assertThat(dataRead).isEqualTo(newDataToWrite)
+ }
+
+ @Test(expected = FileNotFoundException::class)
+ fun read_fileNotFoundException() {
+ underTest.readBytesFromDisk()
+ }
+
+ @Test(expected = FileNotFoundException::class)
+ fun clear_returnsTrueWhenFileDeleted() {
+ // Write bytes to disk
+ underTest.writeBytesToDisk(byteArrayOf(1, 2, 3))
+
+ assertThat(underTest.clear()).isTrue()
+
+ // Verify a read after that throws a FileNotFoundException
+ underTest.readBytesFromDisk()
+ }
+
+ @Test
+ fun clear_returnsFalseWhenFileDoesNotExist() {
+ assertThat(underTest.clear()).isFalse()
+ }
+
+ @Test
+ fun fileExists() {
+ assertThat(underTest.fileExists()).isFalse()
+
+ underTest.writeBytesToDisk(byteArrayOf(1, 2, 3))
+ assertThat(underTest.fileExists()).isTrue()
+
+ underTest.clear()
+ assertThat(underTest.fileExists()).isFalse()
+ }
+
+ data class FakeWidgetMetadata(val widgetId: Int, val componentName: String, val rank: Int)
+
+ companion object {
+ /**
+ * A comparator for whether a [CommunalHubState.CommunalWidgetItem] represents a
+ * [FakeWidgetMetadata]
+ */
+ val represents: Correspondence<CommunalHubState.CommunalWidgetItem, FakeWidgetMetadata> =
+ Correspondence.from(
+ { actual, expected ->
+ actual?.widgetId == expected?.widgetId &&
+ actual?.componentName == expected?.componentName &&
+ actual?.rank == expected?.rank
+ },
+ "represents",
+ )
+ }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/communal/data/db/CommunalWidgetDaoTest.kt b/packages/SystemUI/tests/src/com/android/systemui/communal/data/db/CommunalWidgetDaoTest.kt
index 20dd913..f77c7a6 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/communal/data/db/CommunalWidgetDaoTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/communal/data/db/CommunalWidgetDaoTest.kt
@@ -21,6 +21,7 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
+import com.android.systemui.communal.nano.CommunalHubState
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.lifecycle.InstantTaskExecutorRule
import com.google.common.truth.Truth.assertThat
@@ -224,6 +225,42 @@
.inOrder()
}
+ @Test
+ fun restoreCommunalHubState() =
+ testScope.runTest {
+ // Set up db
+ listOf(widgetInfo1, widgetInfo2, widgetInfo3).forEach { addWidget(it) }
+
+ // Restore db to fake state
+ communalWidgetDao.restoreCommunalHubState(fakeState)
+
+ // Verify db matches new state
+ val expected = mutableMapOf<CommunalItemRank, CommunalWidgetItem>()
+ fakeState.widgets.forEachIndexed { index, fakeWidget ->
+ // Auto-generated uid continues after the initial 3 widgets and starts at 4
+ val uid = index + 4L
+ val rank = CommunalItemRank(uid = uid, rank = fakeWidget.rank)
+ val widget =
+ CommunalWidgetItem(
+ uid = uid,
+ widgetId = fakeWidget.widgetId,
+ componentName = fakeWidget.componentName,
+ itemId = rank.uid,
+ )
+ expected[rank] = widget
+ }
+ val widgets by collectLastValue(communalWidgetDao.getWidgets())
+ assertThat(widgets).containsExactlyEntriesIn(expected)
+ }
+
+ private fun addWidget(metadata: FakeWidgetMetadata, priority: Int? = null) {
+ communalWidgetDao.addWidget(
+ widgetId = metadata.widgetId,
+ provider = metadata.provider,
+ priority = priority ?: metadata.priority,
+ )
+ }
+
data class FakeWidgetMetadata(
val widgetId: Int,
val provider: ComponentName,
@@ -273,5 +310,22 @@
componentName = widgetInfo3.provider.flattenToString(),
itemId = communalItemRankEntry3.uid,
)
+ val fakeState =
+ CommunalHubState().apply {
+ widgets =
+ listOf(
+ CommunalHubState.CommunalWidgetItem().apply {
+ widgetId = 1
+ componentName = "pk_name/fake_widget_1"
+ rank = 1
+ },
+ CommunalHubState.CommunalWidgetItem().apply {
+ widgetId = 2
+ componentName = "pk_name/fake_widget_2"
+ rank = 2
+ },
+ )
+ .toTypedArray()
+ }
}
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/haptics/slider/SeekableSliderEventProducerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/haptics/slider/SeekableSliderEventProducerTest.kt
deleted file mode 100644
index c22d35c..0000000
--- a/packages/SystemUI/tests/src/com/android/systemui/haptics/slider/SeekableSliderEventProducerTest.kt
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.haptics.slider
-
-import android.widget.SeekBar
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import androidx.test.filters.SmallTest
-import com.android.systemui.SysuiTestCase
-import com.android.systemui.coroutines.collectLastValue
-import junit.framework.Assert.assertEquals
-import kotlinx.coroutines.test.runTest
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@SmallTest
-@RunWith(AndroidJUnit4::class)
-class SeekableSliderEventProducerTest : SysuiTestCase() {
-
- private val seekBar = SeekBar(mContext)
- private val eventProducer = SeekableSliderEventProducer()
- private val eventFlow = eventProducer.produceEvents()
-
- @Test
- fun onStartTrackingTouch_noProgress_trackingTouchEventProduced() = runTest {
- val latest by collectLastValue(eventFlow)
-
- eventProducer.onStartTrackingTouch(seekBar)
-
- assertEquals(SliderEvent(SliderEventType.STARTED_TRACKING_TOUCH, 0F), latest)
- }
-
- @Test
- fun onStopTrackingTouch_noProgress_StoppedTrackingTouchEventProduced() = runTest {
- val latest by collectLastValue(eventFlow)
-
- eventProducer.onStopTrackingTouch(seekBar)
-
- assertEquals(SliderEvent(SliderEventType.STOPPED_TRACKING_TOUCH, 0F), latest)
- }
-
- @Test
- fun onProgressChangeByUser_changeByUserEventProduced_withNormalizedProgress() = runTest {
- val progress = 50
- val latest by collectLastValue(eventFlow)
-
- eventProducer.onProgressChanged(seekBar, progress, true)
-
- assertEquals(SliderEvent(SliderEventType.PROGRESS_CHANGE_BY_USER, 0.5F), latest)
- }
-
- @Test
- fun onProgressChangeByUser_zeroWidthSlider_changeByUserEventProduced_withMaxProgress() =
- runTest {
- // No-width slider where the min and max values are the same
- seekBar.min = 100
- seekBar.max = 100
- val progress = 50
- val latest by collectLastValue(eventFlow)
-
- eventProducer.onProgressChanged(seekBar, progress, true)
-
- assertEquals(SliderEvent(SliderEventType.PROGRESS_CHANGE_BY_USER, 1.0F), latest)
- }
-
- @Test
- fun onProgressChangeByProgram_changeByProgramEventProduced_withNormalizedProgress() = runTest {
- val progress = 50
- val latest by collectLastValue(eventFlow)
-
- eventProducer.onProgressChanged(seekBar, progress, false)
-
- assertEquals(SliderEvent(SliderEventType.PROGRESS_CHANGE_BY_PROGRAM, 0.5F), latest)
- }
-
- @Test
- fun onProgressChangeByProgram_zeroWidthSlider_changeByProgramEventProduced_withMaxProgress() =
- runTest {
- // No-width slider where the min and max values are the same
- seekBar.min = 100
- seekBar.max = 100
- val progress = 50
- val latest by collectLastValue(eventFlow)
-
- eventProducer.onProgressChanged(seekBar, progress, false)
-
- assertEquals(SliderEvent(SliderEventType.PROGRESS_CHANGE_BY_PROGRAM, 1.0F), latest)
- }
-
- @Test
- fun onStartTrackingTouch_afterProgress_trackingTouchEventProduced_withNormalizedProgress() =
- runTest {
- val progress = 50
- val latest by collectLastValue(eventFlow)
-
- eventProducer.onProgressChanged(seekBar, progress, true)
- eventProducer.onStartTrackingTouch(seekBar)
-
- assertEquals(SliderEvent(SliderEventType.STARTED_TRACKING_TOUCH, 0.5F), latest)
- }
-
- @Test
- fun onStopTrackingTouch_afterProgress_stopTrackingTouchEventProduced_withNormalizedProgress() =
- runTest {
- val progress = 50
- val latest by collectLastValue(eventFlow)
-
- eventProducer.onProgressChanged(seekBar, progress, true)
- eventProducer.onStopTrackingTouch(seekBar)
-
- assertEquals(SliderEvent(SliderEventType.STOPPED_TRACKING_TOUCH, 0.5F), latest)
- }
-
- @Test
- fun onArrowUp_afterStartTrackingTouch_ArrowUpProduced() = runTest {
- val latest by collectLastValue(eventFlow)
-
- eventProducer.onStartTrackingTouch(seekBar)
- eventProducer.onArrowUp()
-
- assertEquals(SliderEvent(SliderEventType.ARROW_UP, 0f), latest)
- }
-
- @Test
- fun onArrowUp_afterChangeByProgram_ArrowUpProduced_withProgress() = runTest {
- val progress = 50
- val latest by collectLastValue(eventFlow)
-
- eventProducer.onProgressChanged(seekBar, progress, false)
- eventProducer.onArrowUp()
-
- assertEquals(SliderEvent(SliderEventType.ARROW_UP, 0.5f), latest)
- }
-}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/haptics/slider/SeekableSliderTrackerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/haptics/slider/SliderStateTrackerTest.kt
similarity index 79%
rename from packages/SystemUI/tests/src/com/android/systemui/haptics/slider/SeekableSliderTrackerTest.kt
rename to packages/SystemUI/tests/src/com/android/systemui/haptics/slider/SliderStateTrackerTest.kt
index 796d6d9..a09d345 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/haptics/slider/SeekableSliderTrackerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/haptics/slider/SliderStateTrackerTest.kt
@@ -38,11 +38,11 @@
@SmallTest
@OptIn(ExperimentalCoroutinesApi::class)
@RunWith(AndroidJUnit4::class)
-class SeekableSliderTrackerTest : SysuiTestCase() {
+class SliderStateTrackerTest : SysuiTestCase() {
@Mock private lateinit var sliderStateListener: SliderStateListener
private val sliderEventProducer = FakeSliderEventProducer()
- private lateinit var mSeekableSliderTracker: SeekableSliderTracker
+ private lateinit var mSliderStateTracker: SliderStateTracker
@Before
fun setup() {
@@ -55,7 +55,7 @@
initTracker(CoroutineScope(UnconfinedTestDispatcher(testScheduler)))
// THEN the tracker job is active
- assertThat(mSeekableSliderTracker.isTracking).isTrue()
+ assertThat(mSliderStateTracker.isTracking).isTrue()
}
@Test
@@ -65,14 +65,14 @@
initTracker(CoroutineScope(UnconfinedTestDispatcher(testScheduler)))
// GIVEN a state in the state machine
- mSeekableSliderTracker.setState(it)
+ mSliderStateTracker.setState(it)
// WHEN the tracker stops tracking the state and listening to events
- mSeekableSliderTracker.stopTracking()
+ mSliderStateTracker.stopTracking()
// THEN The state is idle and the tracker is not active
- assertThat(mSeekableSliderTracker.currentState).isEqualTo(SliderState.IDLE)
- assertThat(mSeekableSliderTracker.isTracking).isFalse()
+ assertThat(mSliderStateTracker.currentState).isEqualTo(SliderState.IDLE)
+ assertThat(mSliderStateTracker.isTracking).isFalse()
}
}
@@ -83,7 +83,7 @@
initTracker(CoroutineScope(UnconfinedTestDispatcher(testScheduler)))
// THEN The state is idle and the listener is not called to play haptics
- assertThat(mSeekableSliderTracker.currentState).isEqualTo(SliderState.IDLE)
+ assertThat(mSliderStateTracker.currentState).isEqualTo(SliderState.IDLE)
verifyZeroInteractions(sliderStateListener)
}
@@ -96,9 +96,9 @@
sliderEventProducer.sendEvent(SliderEvent(SliderEventType.STARTED_TRACKING_TOUCH, progress))
// THEN the tracker moves to the wait state and the timer job begins
- assertThat(mSeekableSliderTracker.currentState).isEqualTo(SliderState.WAIT)
+ assertThat(mSliderStateTracker.currentState).isEqualTo(SliderState.WAIT)
verifyZeroInteractions(sliderStateListener)
- assertThat(mSeekableSliderTracker.isWaiting).isTrue()
+ assertThat(mSliderStateTracker.isWaiting).isTrue()
}
// Tests on the WAIT state
@@ -117,9 +117,9 @@
advanceTimeBy(config.waitTimeMillis + 10L)
// THEN the tracker moves to the DRAG_HANDLE_ACQUIRED_BY_TOUCH state
- assertThat(mSeekableSliderTracker.currentState)
+ assertThat(mSliderStateTracker.currentState)
.isEqualTo(SliderState.DRAG_HANDLE_ACQUIRED_BY_TOUCH)
- assertThat(mSeekableSliderTracker.isWaiting).isFalse()
+ assertThat(mSliderStateTracker.isWaiting).isFalse()
verify(sliderStateListener).onHandleAcquiredByTouch()
verifyNoMoreInteractions(sliderStateListener)
}
@@ -142,9 +142,9 @@
// THEN the tracker moves to the DRAG_HANDLE_ACQUIRED_BY_TOUCH state without the timer job
// being complete
- assertThat(mSeekableSliderTracker.currentState)
+ assertThat(mSliderStateTracker.currentState)
.isEqualTo(SliderState.DRAG_HANDLE_ACQUIRED_BY_TOUCH)
- assertThat(mSeekableSliderTracker.isWaiting).isFalse()
+ assertThat(mSliderStateTracker.isWaiting).isFalse()
verify(sliderStateListener).onHandleAcquiredByTouch()
verifyNoMoreInteractions(sliderStateListener)
}
@@ -166,9 +166,9 @@
)
// THEN the tracker moves to the jump-track location selected state
- assertThat(mSeekableSliderTracker.currentState)
+ assertThat(mSliderStateTracker.currentState)
.isEqualTo(SliderState.JUMP_TRACK_LOCATION_SELECTED)
- assertThat(mSeekableSliderTracker.isWaiting).isFalse()
+ assertThat(mSliderStateTracker.isWaiting).isFalse()
verify(sliderStateListener).onProgressJump(anyFloat())
verifyNoMoreInteractions(sliderStateListener)
}
@@ -190,8 +190,8 @@
)
// THEN the tracker moves to the jump-track location selected state
- assertThat(mSeekableSliderTracker.currentState).isEqualTo(SliderState.JUMP_BOOKEND_SELECTED)
- assertThat(mSeekableSliderTracker.isWaiting).isFalse()
+ assertThat(mSliderStateTracker.currentState).isEqualTo(SliderState.JUMP_BOOKEND_SELECTED)
+ assertThat(mSliderStateTracker.isWaiting).isFalse()
verifyNoMoreInteractions(sliderStateListener)
}
@@ -212,8 +212,8 @@
)
// THEN the tracker moves to the JUMP_TRACK_LOCATION_SELECTED state
- assertThat(mSeekableSliderTracker.currentState).isEqualTo(SliderState.JUMP_BOOKEND_SELECTED)
- assertThat(mSeekableSliderTracker.isWaiting).isFalse()
+ assertThat(mSliderStateTracker.currentState).isEqualTo(SliderState.JUMP_BOOKEND_SELECTED)
+ assertThat(mSliderStateTracker.isWaiting).isFalse()
verifyNoMoreInteractions(sliderStateListener)
}
@@ -225,15 +225,15 @@
// GIVEN a start of tracking touch event that moves the tracker to WAIT at the middle of the
// slider
sliderEventProducer.sendEvent(SliderEvent(SliderEventType.STARTED_TRACKING_TOUCH, 0.5f))
- assertThat(mSeekableSliderTracker.isWaiting).isTrue()
+ assertThat(mSliderStateTracker.isWaiting).isTrue()
// GIVEN that the tracker stops tracking the state and listening to events
- mSeekableSliderTracker.stopTracking()
+ mSliderStateTracker.stopTracking()
// THEN the tracker moves to the IDLE state without the timer job being complete
- assertThat(mSeekableSliderTracker.currentState).isEqualTo(SliderState.IDLE)
- assertThat(mSeekableSliderTracker.isWaiting).isFalse()
- assertThat(mSeekableSliderTracker.isTracking).isFalse()
+ assertThat(mSliderStateTracker.currentState).isEqualTo(SliderState.IDLE)
+ assertThat(mSliderStateTracker.isWaiting).isFalse()
+ assertThat(mSliderStateTracker.isTracking).isFalse()
verifyNoMoreInteractions(sliderStateListener)
}
@@ -244,13 +244,13 @@
initTracker(CoroutineScope(UnconfinedTestDispatcher(testScheduler)))
// GIVEN a JUMP_TRACK_LOCATION_SELECTED state
- mSeekableSliderTracker.setState(SliderState.JUMP_TRACK_LOCATION_SELECTED)
+ mSliderStateTracker.setState(SliderState.JUMP_TRACK_LOCATION_SELECTED)
// GIVEN a progress event due to dragging the handle
sliderEventProducer.sendEvent(SliderEvent(SliderEventType.PROGRESS_CHANGE_BY_USER, 0.5f))
// THEN the tracker moves to the DRAG_HANDLE_DRAGGING state
- assertThat(mSeekableSliderTracker.currentState).isEqualTo(SliderState.DRAG_HANDLE_DRAGGING)
+ assertThat(mSliderStateTracker.currentState).isEqualTo(SliderState.DRAG_HANDLE_DRAGGING)
verify(sliderStateListener).onProgress(anyFloat())
verifyNoMoreInteractions(sliderStateListener)
}
@@ -260,14 +260,14 @@
initTracker(CoroutineScope(UnconfinedTestDispatcher(testScheduler)))
// GIVEN a JUMP_TRACK_LOCATION_SELECTED state
- mSeekableSliderTracker.setState(SliderState.JUMP_TRACK_LOCATION_SELECTED)
+ mSliderStateTracker.setState(SliderState.JUMP_TRACK_LOCATION_SELECTED)
// GIVEN that the slider stopped tracking touch
sliderEventProducer.sendEvent(SliderEvent(SliderEventType.STOPPED_TRACKING_TOUCH, 0.5f))
// THEN the tracker executes on onHandleReleasedFromTouch before moving to the IDLE state
verify(sliderStateListener).onHandleReleasedFromTouch()
- assertThat(mSeekableSliderTracker.currentState).isEqualTo(SliderState.IDLE)
+ assertThat(mSliderStateTracker.currentState).isEqualTo(SliderState.IDLE)
verifyNoMoreInteractions(sliderStateListener)
}
@@ -276,13 +276,13 @@
initTracker(CoroutineScope(UnconfinedTestDispatcher(testScheduler)))
// GIVEN a JUMP_BOOKEND_SELECTED state
- mSeekableSliderTracker.setState(SliderState.JUMP_BOOKEND_SELECTED)
+ mSliderStateTracker.setState(SliderState.JUMP_BOOKEND_SELECTED)
// GIVEN that the slider stopped tracking touch
sliderEventProducer.sendEvent(SliderEvent(SliderEventType.PROGRESS_CHANGE_BY_USER, 0.5f))
// THEN the tracker moves to the DRAG_HANDLE_DRAGGING state
- assertThat(mSeekableSliderTracker.currentState).isEqualTo(SliderState.DRAG_HANDLE_DRAGGING)
+ assertThat(mSliderStateTracker.currentState).isEqualTo(SliderState.DRAG_HANDLE_DRAGGING)
verify(sliderStateListener).onProgress(anyFloat())
verifyNoMoreInteractions(sliderStateListener)
}
@@ -292,14 +292,14 @@
initTracker(CoroutineScope(UnconfinedTestDispatcher(testScheduler)))
// GIVEN a JUMP_BOOKEND_SELECTED state
- mSeekableSliderTracker.setState(SliderState.JUMP_BOOKEND_SELECTED)
+ mSliderStateTracker.setState(SliderState.JUMP_BOOKEND_SELECTED)
// GIVEN that the slider stopped tracking touch
sliderEventProducer.sendEvent(SliderEvent(SliderEventType.STOPPED_TRACKING_TOUCH, 0.5f))
// THEN the tracker executes on onHandleReleasedFromTouch before moving to the IDLE state
verify(sliderStateListener).onHandleReleasedFromTouch()
- assertThat(mSeekableSliderTracker.currentState).isEqualTo(SliderState.IDLE)
+ assertThat(mSliderStateTracker.currentState).isEqualTo(SliderState.IDLE)
verifyNoMoreInteractions(sliderStateListener)
}
@@ -310,7 +310,7 @@
initTracker(CoroutineScope(UnconfinedTestDispatcher(testScheduler)))
// GIVEN a DRAG_HANDLE_ACQUIRED_BY_TOUCH state
- mSeekableSliderTracker.setState(SliderState.DRAG_HANDLE_ACQUIRED_BY_TOUCH)
+ mSliderStateTracker.setState(SliderState.DRAG_HANDLE_ACQUIRED_BY_TOUCH)
// GIVEN a progress change by the user
val progress = 0.5f
@@ -320,7 +320,7 @@
// THEN the tracker moves to the DRAG_HANDLE_DRAGGING state
verify(sliderStateListener).onProgress(progress)
- assertThat(mSeekableSliderTracker.currentState).isEqualTo(SliderState.DRAG_HANDLE_DRAGGING)
+ assertThat(mSliderStateTracker.currentState).isEqualTo(SliderState.DRAG_HANDLE_DRAGGING)
verifyNoMoreInteractions(sliderStateListener)
}
@@ -329,14 +329,14 @@
initTracker(CoroutineScope(UnconfinedTestDispatcher(testScheduler)))
// GIVEN a DRAG_HANDLE_ACQUIRED_BY_TOUCH state
- mSeekableSliderTracker.setState(SliderState.DRAG_HANDLE_ACQUIRED_BY_TOUCH)
+ mSliderStateTracker.setState(SliderState.DRAG_HANDLE_ACQUIRED_BY_TOUCH)
// GIVEN that the handle stops tracking touch
sliderEventProducer.sendEvent(SliderEvent(SliderEventType.STOPPED_TRACKING_TOUCH, 0.5f))
// THEN the tracker executes on onHandleReleasedFromTouch before moving to the IDLE state
verify(sliderStateListener).onHandleReleasedFromTouch()
- assertThat(mSeekableSliderTracker.currentState).isEqualTo(SliderState.IDLE)
+ assertThat(mSliderStateTracker.currentState).isEqualTo(SliderState.IDLE)
verifyNoMoreInteractions(sliderStateListener)
}
@@ -348,7 +348,7 @@
initTracker(CoroutineScope(UnconfinedTestDispatcher(testScheduler)))
// GIVEN a DRAG_HANDLE_DRAGGING state
- mSeekableSliderTracker.setState(SliderState.DRAG_HANDLE_DRAGGING)
+ mSliderStateTracker.setState(SliderState.DRAG_HANDLE_DRAGGING)
// GIVEN a progress change by the user outside of bookend bounds
val progress = 0.5f
@@ -357,8 +357,7 @@
)
// THEN the tracker does not change state and executes the onProgress call
- assertThat(mSeekableSliderTracker.currentState)
- .isEqualTo(SliderState.DRAG_HANDLE_DRAGGING)
+ assertThat(mSliderStateTracker.currentState).isEqualTo(SliderState.DRAG_HANDLE_DRAGGING)
verify(sliderStateListener).onProgress(progress)
verifyNoMoreInteractions(sliderStateListener)
}
@@ -370,7 +369,7 @@
initTracker(CoroutineScope(UnconfinedTestDispatcher(testScheduler)), config)
// GIVEN a DRAG_HANDLE_DRAGGING state
- mSeekableSliderTracker.setState(SliderState.DRAG_HANDLE_DRAGGING)
+ mSliderStateTracker.setState(SliderState.DRAG_HANDLE_DRAGGING)
// GIVEN a progress change by the user reaching the lower bookend
val progress = config.lowerBookendThreshold - 0.01f
@@ -380,7 +379,7 @@
// THEN the tracker moves to the DRAG_HANDLE_REACHED_BOOKEND state and executes the
// corresponding callback
- assertThat(mSeekableSliderTracker.currentState)
+ assertThat(mSliderStateTracker.currentState)
.isEqualTo(SliderState.DRAG_HANDLE_REACHED_BOOKEND)
verify(sliderStateListener).onLowerBookend()
verifyNoMoreInteractions(sliderStateListener)
@@ -393,7 +392,7 @@
initTracker(CoroutineScope(UnconfinedTestDispatcher(testScheduler)), config)
// GIVEN a DRAG_HANDLE_DRAGGING state
- mSeekableSliderTracker.setState(SliderState.DRAG_HANDLE_DRAGGING)
+ mSliderStateTracker.setState(SliderState.DRAG_HANDLE_DRAGGING)
// GIVEN a progress change by the user reaching the upper bookend
val progress = config.upperBookendThreshold + 0.01f
@@ -403,7 +402,7 @@
// THEN the tracker moves to the DRAG_HANDLE_REACHED_BOOKEND state and executes the
// corresponding callback
- assertThat(mSeekableSliderTracker.currentState)
+ assertThat(mSliderStateTracker.currentState)
.isEqualTo(SliderState.DRAG_HANDLE_REACHED_BOOKEND)
verify(sliderStateListener).onUpperBookend()
verifyNoMoreInteractions(sliderStateListener)
@@ -414,14 +413,14 @@
initTracker(CoroutineScope(UnconfinedTestDispatcher(testScheduler)))
// GIVEN a DRAG_HANDLE_DRAGGING state
- mSeekableSliderTracker.setState(SliderState.DRAG_HANDLE_DRAGGING)
+ mSliderStateTracker.setState(SliderState.DRAG_HANDLE_DRAGGING)
// GIVEN that the slider stops tracking touch
sliderEventProducer.sendEvent(SliderEvent(SliderEventType.STOPPED_TRACKING_TOUCH, 0.5f))
// THEN the tracker executes on onHandleReleasedFromTouch before moving to the IDLE state
verify(sliderStateListener).onHandleReleasedFromTouch()
- assertThat(mSeekableSliderTracker.currentState).isEqualTo(SliderState.IDLE)
+ assertThat(mSliderStateTracker.currentState).isEqualTo(SliderState.IDLE)
verifyNoMoreInteractions(sliderStateListener)
}
@@ -434,7 +433,7 @@
initTracker(CoroutineScope(UnconfinedTestDispatcher(testScheduler)), config)
// GIVEN a DRAG_HANDLE_REACHED_BOOKEND state
- mSeekableSliderTracker.setState(SliderState.DRAG_HANDLE_REACHED_BOOKEND)
+ mSliderStateTracker.setState(SliderState.DRAG_HANDLE_REACHED_BOOKEND)
// GIVEN a progress event that falls outside of the lower bookend range
val progress = config.lowerBookendThreshold + 0.01f
@@ -444,8 +443,7 @@
// THEN the tracker moves to the DRAG_HANDLE_DRAGGING state and executes accordingly
verify(sliderStateListener).onProgress(progress)
- assertThat(mSeekableSliderTracker.currentState)
- .isEqualTo(SliderState.DRAG_HANDLE_DRAGGING)
+ assertThat(mSliderStateTracker.currentState).isEqualTo(SliderState.DRAG_HANDLE_DRAGGING)
verifyNoMoreInteractions(sliderStateListener)
}
@@ -455,7 +453,7 @@
initTracker(CoroutineScope(UnconfinedTestDispatcher(testScheduler)), config)
// GIVEN a DRAG_HANDLE_REACHED_BOOKEND state
- mSeekableSliderTracker.setState(SliderState.DRAG_HANDLE_REACHED_BOOKEND)
+ mSliderStateTracker.setState(SliderState.DRAG_HANDLE_REACHED_BOOKEND)
// GIVEN a progress event that falls inside of the lower bookend range
val progress = config.lowerBookendThreshold - 0.01f
@@ -465,7 +463,7 @@
// THEN the tracker stays in the current state and executes accordingly
verify(sliderStateListener).onLowerBookend()
- assertThat(mSeekableSliderTracker.currentState)
+ assertThat(mSliderStateTracker.currentState)
.isEqualTo(SliderState.DRAG_HANDLE_REACHED_BOOKEND)
verifyNoMoreInteractions(sliderStateListener)
}
@@ -477,7 +475,7 @@
initTracker(CoroutineScope(UnconfinedTestDispatcher(testScheduler)), config)
// GIVEN a DRAG_HANDLE_REACHED_BOOKEND state
- mSeekableSliderTracker.setState(SliderState.DRAG_HANDLE_REACHED_BOOKEND)
+ mSliderStateTracker.setState(SliderState.DRAG_HANDLE_REACHED_BOOKEND)
// GIVEN a progress event that falls outside of the upper bookend range
val progress = config.upperBookendThreshold - 0.01f
@@ -487,8 +485,7 @@
// THEN the tracker moves to the DRAG_HANDLE_DRAGGING state and executes accordingly
verify(sliderStateListener).onProgress(progress)
- assertThat(mSeekableSliderTracker.currentState)
- .isEqualTo(SliderState.DRAG_HANDLE_DRAGGING)
+ assertThat(mSliderStateTracker.currentState).isEqualTo(SliderState.DRAG_HANDLE_DRAGGING)
verifyNoMoreInteractions(sliderStateListener)
}
@@ -498,7 +495,7 @@
initTracker(CoroutineScope(UnconfinedTestDispatcher(testScheduler)), config)
// GIVEN a DRAG_HANDLE_REACHED_BOOKEND state
- mSeekableSliderTracker.setState(SliderState.DRAG_HANDLE_REACHED_BOOKEND)
+ mSliderStateTracker.setState(SliderState.DRAG_HANDLE_REACHED_BOOKEND)
// GIVEN a progress event that falls inside of the upper bookend range
val progress = config.upperBookendThreshold + 0.01f
@@ -508,7 +505,7 @@
// THEN the tracker stays in the current state and executes accordingly
verify(sliderStateListener).onUpperBookend()
- assertThat(mSeekableSliderTracker.currentState)
+ assertThat(mSliderStateTracker.currentState)
.isEqualTo(SliderState.DRAG_HANDLE_REACHED_BOOKEND)
verifyNoMoreInteractions(sliderStateListener)
}
@@ -518,37 +515,36 @@
initTracker(CoroutineScope(UnconfinedTestDispatcher(testScheduler)))
// GIVEN a DRAG_HANDLE_REACHED_BOOKEND state
- mSeekableSliderTracker.setState(SliderState.DRAG_HANDLE_REACHED_BOOKEND)
+ mSliderStateTracker.setState(SliderState.DRAG_HANDLE_REACHED_BOOKEND)
// GIVEN that the handle stops tracking touch
sliderEventProducer.sendEvent(SliderEvent(SliderEventType.STOPPED_TRACKING_TOUCH, 0.5f))
// THEN the tracker executes on onHandleReleasedFromTouch before moving to the IDLE state
verify(sliderStateListener).onHandleReleasedFromTouch()
- assertThat(mSeekableSliderTracker.currentState).isEqualTo(SliderState.IDLE)
+ assertThat(mSliderStateTracker.currentState).isEqualTo(SliderState.IDLE)
verifyNoMoreInteractions(sliderStateListener)
}
@Test
- fun onProgressChangeByProgram_atTheMiddle_onIdle_movesToArrowHandleMovedOnce() = runTest {
+ fun onStartedTrackingProgram_atTheMiddle_onIdle_movesToArrowHandleMovedOnce() = runTest {
// GIVEN an initialized tracker in the IDLE state
initTracker(CoroutineScope(UnconfinedTestDispatcher(testScheduler)))
// GIVEN a progress due to an external source that lands at the middle of the slider
val progress = 0.5f
sliderEventProducer.sendEvent(
- SliderEvent(SliderEventType.PROGRESS_CHANGE_BY_PROGRAM, progress)
+ SliderEvent(SliderEventType.STARTED_TRACKING_PROGRAM, progress)
)
// THEN the state moves to ARROW_HANDLE_MOVED_ONCE and the listener is called to play
// haptics
- assertThat(mSeekableSliderTracker.currentState)
- .isEqualTo(SliderState.ARROW_HANDLE_MOVED_ONCE)
+ assertThat(mSliderStateTracker.currentState).isEqualTo(SliderState.ARROW_HANDLE_MOVED_ONCE)
verify(sliderStateListener).onSelectAndArrow(progress)
}
@Test
- fun onProgressChangeByProgram_atUpperBookend_onIdle_movesToIdle() = runTest {
+ fun onStartedTrackingProgram_atUpperBookend_onIdle_movesToIdle() = runTest {
// GIVEN an initialized tracker in the IDLE state
val config = SeekableSliderTrackerConfig()
initTracker(CoroutineScope(UnconfinedTestDispatcher(testScheduler)), config)
@@ -556,16 +552,16 @@
// GIVEN a progress due to an external source that lands at the upper bookend
val progress = config.upperBookendThreshold + 0.01f
sliderEventProducer.sendEvent(
- SliderEvent(SliderEventType.PROGRESS_CHANGE_BY_PROGRAM, progress)
+ SliderEvent(SliderEventType.STARTED_TRACKING_PROGRAM, progress)
)
// THEN the tracker executes upper bookend haptics before moving back to IDLE
verify(sliderStateListener).onUpperBookend()
- assertThat(mSeekableSliderTracker.currentState).isEqualTo(SliderState.IDLE)
+ assertThat(mSliderStateTracker.currentState).isEqualTo(SliderState.IDLE)
}
@Test
- fun onProgressChangeByProgram_atLowerBookend_onIdle_movesToIdle() = runTest {
+ fun onStartedTrackingProgram_atLowerBookend_onIdle_movesToIdle() = runTest {
// GIVEN an initialized tracker in the IDLE state
val config = SeekableSliderTrackerConfig()
initTracker(CoroutineScope(UnconfinedTestDispatcher(testScheduler)), config)
@@ -573,26 +569,28 @@
// WHEN a progress is recorded due to an external source that lands at the lower bookend
val progress = config.lowerBookendThreshold - 0.01f
sliderEventProducer.sendEvent(
- SliderEvent(SliderEventType.PROGRESS_CHANGE_BY_PROGRAM, progress)
+ SliderEvent(SliderEventType.STARTED_TRACKING_PROGRAM, progress)
)
// THEN the tracker executes lower bookend haptics before moving to IDLE
verify(sliderStateListener).onLowerBookend()
- assertThat(mSeekableSliderTracker.currentState).isEqualTo(SliderState.IDLE)
+ assertThat(mSliderStateTracker.currentState).isEqualTo(SliderState.IDLE)
}
@Test
fun onArrowUp_onArrowMovedOnce_movesToIdle() = runTest {
// GIVEN an initialized tracker in the ARROW_HANDLE_MOVED_ONCE state
initTracker(CoroutineScope(UnconfinedTestDispatcher(testScheduler)))
- mSeekableSliderTracker.setState(SliderState.ARROW_HANDLE_MOVED_ONCE)
+ mSliderStateTracker.setState(SliderState.ARROW_HANDLE_MOVED_ONCE)
// WHEN the external stimulus is released
val progress = 0.5f
- sliderEventProducer.sendEvent(SliderEvent(SliderEventType.ARROW_UP, progress))
+ sliderEventProducer.sendEvent(
+ SliderEvent(SliderEventType.STOPPED_TRACKING_PROGRAM, progress)
+ )
// THEN the tracker moves back to IDLE and there are no haptics
- assertThat(mSeekableSliderTracker.currentState).isEqualTo(SliderState.IDLE)
+ assertThat(mSliderStateTracker.currentState).isEqualTo(SliderState.IDLE)
verifyZeroInteractions(sliderStateListener)
}
@@ -600,7 +598,7 @@
fun onStartTrackingTouch_onArrowMovedOnce_movesToWait() = runTest {
// GIVEN an initialized tracker in the ARROW_HANDLE_MOVED_ONCE state
initTracker(CoroutineScope(UnconfinedTestDispatcher(testScheduler)))
- mSeekableSliderTracker.setState(SliderState.ARROW_HANDLE_MOVED_ONCE)
+ mSliderStateTracker.setState(SliderState.ARROW_HANDLE_MOVED_ONCE)
// WHEN the slider starts tracking touch
val progress = 0.5f
@@ -608,8 +606,8 @@
// THEN the tracker moves back to WAIT and starts the waiting job. Also, there are no
// haptics
- assertThat(mSeekableSliderTracker.currentState).isEqualTo(SliderState.WAIT)
- assertThat(mSeekableSliderTracker.isWaiting).isTrue()
+ assertThat(mSliderStateTracker.currentState).isEqualTo(SliderState.WAIT)
+ assertThat(mSliderStateTracker.isWaiting).isTrue()
verifyZeroInteractions(sliderStateListener)
}
@@ -617,7 +615,7 @@
fun onProgressChangeByProgram_onArrowMovedOnce_movesToArrowMovesContinuously() = runTest {
// GIVEN an initialized tracker in the ARROW_HANDLE_MOVED_ONCE state
initTracker(CoroutineScope(UnconfinedTestDispatcher(testScheduler)))
- mSeekableSliderTracker.setState(SliderState.ARROW_HANDLE_MOVED_ONCE)
+ mSliderStateTracker.setState(SliderState.ARROW_HANDLE_MOVED_ONCE)
// WHEN the slider gets an external progress change
val progress = 0.5f
@@ -627,7 +625,7 @@
// THEN the tracker moves to ARROW_HANDLE_MOVES_CONTINUOUSLY and calls the appropriate
// haptics
- assertThat(mSeekableSliderTracker.currentState)
+ assertThat(mSliderStateTracker.currentState)
.isEqualTo(SliderState.ARROW_HANDLE_MOVES_CONTINUOUSLY)
verify(sliderStateListener).onProgress(progress)
}
@@ -636,14 +634,16 @@
fun onArrowUp_onArrowMovesContinuously_movesToIdle() = runTest {
// GIVEN an initialized tracker in the ARROW_HANDLE_MOVES_CONTINUOUSLY state
initTracker(CoroutineScope(UnconfinedTestDispatcher(testScheduler)))
- mSeekableSliderTracker.setState(SliderState.ARROW_HANDLE_MOVES_CONTINUOUSLY)
+ mSliderStateTracker.setState(SliderState.ARROW_HANDLE_MOVES_CONTINUOUSLY)
// WHEN the external stimulus is released
val progress = 0.5f
- sliderEventProducer.sendEvent(SliderEvent(SliderEventType.ARROW_UP, progress))
+ sliderEventProducer.sendEvent(
+ SliderEvent(SliderEventType.STOPPED_TRACKING_PROGRAM, progress)
+ )
// THEN the tracker moves to IDLE and no haptics are played
- assertThat(mSeekableSliderTracker.currentState).isEqualTo(SliderState.IDLE)
+ assertThat(mSliderStateTracker.currentState).isEqualTo(SliderState.IDLE)
verifyZeroInteractions(sliderStateListener)
}
@@ -651,15 +651,15 @@
fun onStartTrackingTouch_onArrowMovesContinuously_movesToWait() = runTest {
// GIVEN an initialized tracker in the ARROW_HANDLE_MOVES_CONTINUOUSLY state
initTracker(CoroutineScope(UnconfinedTestDispatcher(testScheduler)))
- mSeekableSliderTracker.setState(SliderState.ARROW_HANDLE_MOVES_CONTINUOUSLY)
+ mSliderStateTracker.setState(SliderState.ARROW_HANDLE_MOVES_CONTINUOUSLY)
// WHEN the slider starts tracking touch
val progress = 0.5f
sliderEventProducer.sendEvent(SliderEvent(SliderEventType.STARTED_TRACKING_TOUCH, progress))
// THEN the tracker moves to WAIT and the wait job starts.
- assertThat(mSeekableSliderTracker.currentState).isEqualTo(SliderState.WAIT)
- assertThat(mSeekableSliderTracker.isWaiting).isTrue()
+ assertThat(mSliderStateTracker.currentState).isEqualTo(SliderState.WAIT)
+ assertThat(mSliderStateTracker.isWaiting).isTrue()
verifyZeroInteractions(sliderStateListener)
}
@@ -667,7 +667,7 @@
fun onProgressChangeByProgram_onArrowMovesContinuously_preservesState() = runTest {
// GIVEN an initialized tracker in the ARROW_HANDLE_MOVES_CONTINUOUSLY state
initTracker(CoroutineScope(UnconfinedTestDispatcher(testScheduler)))
- mSeekableSliderTracker.setState(SliderState.ARROW_HANDLE_MOVES_CONTINUOUSLY)
+ mSliderStateTracker.setState(SliderState.ARROW_HANDLE_MOVES_CONTINUOUSLY)
// WHEN the slider changes progress programmatically at the middle
val progress = 0.5f
@@ -676,7 +676,7 @@
)
// THEN the tracker stays in the same state and haptics are delivered appropriately
- assertThat(mSeekableSliderTracker.currentState)
+ assertThat(mSliderStateTracker.currentState)
.isEqualTo(SliderState.ARROW_HANDLE_MOVES_CONTINUOUSLY)
verify(sliderStateListener).onProgress(progress)
}
@@ -686,7 +686,7 @@
// GIVEN an initialized tracker in the ARROW_HANDLE_MOVES_CONTINUOUSLY state
val config = SeekableSliderTrackerConfig()
initTracker(CoroutineScope(UnconfinedTestDispatcher(testScheduler)), config)
- mSeekableSliderTracker.setState(SliderState.ARROW_HANDLE_MOVES_CONTINUOUSLY)
+ mSliderStateTracker.setState(SliderState.ARROW_HANDLE_MOVES_CONTINUOUSLY)
// WHEN the slider reaches the lower bookend programmatically
val progress = config.lowerBookendThreshold - 0.01f
@@ -696,7 +696,7 @@
// THEN the tracker executes lower bookend haptics before moving to IDLE
verify(sliderStateListener).onLowerBookend()
- assertThat(mSeekableSliderTracker.currentState).isEqualTo(SliderState.IDLE)
+ assertThat(mSliderStateTracker.currentState).isEqualTo(SliderState.IDLE)
}
@Test
@@ -704,7 +704,7 @@
// GIVEN an initialized tracker in the ARROW_HANDLE_MOVES_CONTINUOUSLY state
val config = SeekableSliderTrackerConfig()
initTracker(CoroutineScope(UnconfinedTestDispatcher(testScheduler)), config)
- mSeekableSliderTracker.setState(SliderState.ARROW_HANDLE_MOVES_CONTINUOUSLY)
+ mSliderStateTracker.setState(SliderState.ARROW_HANDLE_MOVES_CONTINUOUSLY)
// WHEN the slider reaches the lower bookend programmatically
val progress = config.upperBookendThreshold + 0.01f
@@ -714,7 +714,7 @@
// THEN the tracker executes upper bookend haptics before moving to IDLE
verify(sliderStateListener).onUpperBookend()
- assertThat(mSeekableSliderTracker.currentState).isEqualTo(SliderState.IDLE)
+ assertThat(mSliderStateTracker.currentState).isEqualTo(SliderState.IDLE)
}
@OptIn(ExperimentalCoroutinesApi::class)
@@ -722,8 +722,8 @@
scope: CoroutineScope,
config: SeekableSliderTrackerConfig = SeekableSliderTrackerConfig(),
) {
- mSeekableSliderTracker =
- SeekableSliderTracker(sliderStateListener, sliderEventProducer, scope, config)
- mSeekableSliderTracker.startTracking()
+ mSliderStateTracker =
+ SliderStateTracker(sliderStateListener, sliderEventProducer, scope, config)
+ mSliderStateTracker.startTracking()
}
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/CustomizationProviderTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/CustomizationProviderTest.kt
index 1a6da76..36bfa09 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/CustomizationProviderTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/CustomizationProviderTest.kt
@@ -51,6 +51,7 @@
import com.android.systemui.keyguard.ui.preview.KeyguardRemotePreviewManager
import com.android.systemui.plugins.ActivityStarter
import com.android.systemui.res.R
+import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.settings.UserFileManager
import com.android.systemui.settings.UserTracker
import com.android.systemui.shade.domain.interactor.shadeInteractor
@@ -203,6 +204,7 @@
biometricSettingsRepository = biometricSettingsRepository,
backgroundDispatcher = testDispatcher,
appContext = mContext,
+ sceneInteractor = { kosmos.sceneInteractor },
)
underTest.previewManager =
KeyguardRemotePreviewManager(
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardClockRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardClockRepositoryTest.kt
index d52e911..9aac8e2 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardClockRepositoryTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/data/repository/KeyguardClockRepositoryTest.kt
@@ -23,7 +23,7 @@
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.flags.FakeFeatureFlagsClassic
import com.android.systemui.flags.Flags
-import com.android.systemui.keyguard.shared.model.SettingsClockSize
+import com.android.systemui.keyguard.shared.model.ClockSizeSetting
import com.android.systemui.res.R
import com.android.systemui.shared.clocks.ClockRegistry
import com.android.systemui.util.settings.FakeSettings
@@ -78,7 +78,7 @@
scope.runTest {
fakeSettings.putInt(Settings.Secure.LOCKSCREEN_USE_DOUBLE_LINE_CLOCK, 0)
val value = collectLastValue(underTest.selectedClockSize)
- Truth.assertThat(value()).isEqualTo(SettingsClockSize.SMALL)
+ Truth.assertThat(value()).isEqualTo(ClockSizeSetting.SMALL)
}
@Test
@@ -86,7 +86,7 @@
scope.runTest {
fakeSettings.putInt(Settings.Secure.LOCKSCREEN_USE_DOUBLE_LINE_CLOCK, 1)
val value = collectLastValue(underTest.selectedClockSize)
- Truth.assertThat(value()).isEqualTo(SettingsClockSize.DYNAMIC)
+ Truth.assertThat(value()).isEqualTo(ClockSizeSetting.DYNAMIC)
}
@Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/FromAlternateBouncerTransitionInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/FromAlternateBouncerTransitionInteractorTest.kt
new file mode 100644
index 0000000..52bdf0e
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/FromAlternateBouncerTransitionInteractorTest.kt
@@ -0,0 +1,144 @@
+/*
+ * 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.
+ */
+
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.keyguard.domain.interactor
+
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.bouncer.data.repository.fakeKeyguardBouncerRepository
+import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository
+import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
+import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository
+import com.android.systemui.keyguard.shared.model.KeyguardState
+import com.android.systemui.keyguard.util.KeyguardTransitionRepositorySpySubject.Companion.assertThat
+import com.android.systemui.kosmos.testScope
+import com.android.systemui.power.data.repository.fakePowerRepository
+import com.android.systemui.power.shared.model.WakeSleepReason
+import com.android.systemui.power.shared.model.WakefulnessState
+import com.android.systemui.testKosmos
+import kotlin.test.Test
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.test.runCurrent
+import kotlinx.coroutines.test.runTest
+import org.junit.Before
+import org.junit.runner.RunWith
+import org.mockito.Mockito
+import org.mockito.Mockito.reset
+
+@ExperimentalCoroutinesApi
+@SmallTest
+@RunWith(AndroidJUnit4::class)
+class FromAlternateBouncerTransitionInteractorTest : SysuiTestCase() {
+ private val kosmos =
+ testKosmos().apply {
+ this.fakeKeyguardTransitionRepository = Mockito.spy(FakeKeyguardTransitionRepository())
+ }
+ private val testScope = kosmos.testScope
+ private lateinit var underTest: FromAlternateBouncerTransitionInteractor
+ private lateinit var transitionRepository: FakeKeyguardTransitionRepository
+
+ @Before
+ fun setup() {
+ transitionRepository = kosmos.fakeKeyguardTransitionRepository
+ underTest = kosmos.fromAlternateBouncerTransitionInteractor
+ underTest.start()
+ }
+
+ @Test
+ fun transitionToGone_keyguardOccluded_biometricAuthenticated() =
+ testScope.runTest {
+ transitionRepository.sendTransitionSteps(
+ from = KeyguardState.OCCLUDED,
+ to = KeyguardState.ALTERNATE_BOUNCER,
+ testScope
+ )
+ reset(transitionRepository)
+
+ kosmos.fakeKeyguardRepository.setKeyguardOccluded(true)
+ kosmos.fakeKeyguardBouncerRepository.setKeyguardAuthenticatedBiometrics(true)
+ runCurrent()
+ kosmos.fakeKeyguardBouncerRepository.setKeyguardAuthenticatedBiometrics(null)
+ runCurrent()
+
+ assertThat(transitionRepository)
+ .startedTransition(from = KeyguardState.ALTERNATE_BOUNCER, to = KeyguardState.GONE)
+ }
+
+ @Test
+ fun noTransition_keyguardNotOccluded_biometricAuthenticated() =
+ testScope.runTest {
+ transitionRepository.sendTransitionSteps(
+ from = KeyguardState.OCCLUDED,
+ to = KeyguardState.ALTERNATE_BOUNCER,
+ testScope
+ )
+ reset(transitionRepository)
+
+ kosmos.fakeKeyguardRepository.setKeyguardOccluded(false)
+ kosmos.fakeKeyguardBouncerRepository.setKeyguardAuthenticatedBiometrics(true)
+ runCurrent()
+ kosmos.fakeKeyguardBouncerRepository.setKeyguardAuthenticatedBiometrics(null)
+ runCurrent()
+
+ assertThat(transitionRepository).noTransitionsStarted()
+ }
+
+ @Test
+ fun transitionToOccluded() =
+ testScope.runTest {
+ kosmos.fakePowerRepository.updateWakefulness(
+ WakefulnessState.AWAKE,
+ WakeSleepReason.POWER_BUTTON,
+ WakeSleepReason.POWER_BUTTON,
+ false,
+ )
+ kosmos.fakeKeyguardRepository.setKeyguardOccluded(true)
+ kosmos.fakeKeyguardBouncerRepository.setAlternateVisible(true)
+ transitionRepository.sendTransitionSteps(
+ from = KeyguardState.OCCLUDED,
+ to = KeyguardState.ALTERNATE_BOUNCER,
+ testScope
+ )
+ reset(transitionRepository)
+
+ kosmos.fakeKeyguardBouncerRepository.setAlternateVisible(false)
+ runCurrent()
+ testScope.testScheduler.advanceTimeBy(200) // advance past delay
+
+ assertThat(transitionRepository)
+ .startedTransition(
+ from = KeyguardState.ALTERNATE_BOUNCER,
+ to = KeyguardState.OCCLUDED
+ )
+ }
+}
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 0a7e72c..6f17c55 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
@@ -36,6 +36,7 @@
import android.platform.test.annotations.EnableFlags
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
+import com.android.internal.widget.lockPatternUtils
import com.android.systemui.Flags
import com.android.systemui.SysuiTestCase
import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository
@@ -53,6 +54,7 @@
import com.android.systemui.power.domain.interactor.PowerInteractor.Companion.setAwakeForTest
import com.android.systemui.power.domain.interactor.powerInteractor
import com.android.systemui.testKosmos
+import com.android.systemui.util.mockito.whenever
import junit.framework.Assert.assertEquals
import kotlin.test.Test
import kotlinx.coroutines.ExperimentalCoroutinesApi
@@ -61,6 +63,7 @@
import kotlinx.coroutines.test.runTest
import org.junit.Before
import org.junit.runner.RunWith
+import org.mockito.ArgumentMatchers.anyInt
import org.mockito.Mockito.reset
import org.mockito.Mockito.spy
@@ -300,4 +303,32 @@
assertThat(transitionRepository)
.startedTransition(from = KeyguardState.AOD, to = KeyguardState.OCCLUDED)
}
+
+ @Test
+ fun testTransitionToGone_onWakeUpFromAod_dismissibleKeyguard_securityNone() =
+ testScope.runTest {
+ whenever(kosmos.lockPatternUtils.isLockScreenDisabled(anyInt())).thenReturn(true)
+ kosmos.fakeKeyguardRepository.setKeyguardDismissible(true)
+ powerInteractor.setAwakeForTest()
+ testScope.testScheduler.advanceTimeBy(100) // account for debouncing
+ runCurrent()
+
+ // We should head back to GONE since we started there.
+ assertThat(transitionRepository)
+ .startedTransition(from = KeyguardState.AOD, to = KeyguardState.GONE)
+ }
+
+ @Test
+ fun testTransitionToGone_onWakeUpFromAod_dismissibleKeyguard_securitySwipe() =
+ testScope.runTest {
+ whenever(kosmos.lockPatternUtils.isLockScreenDisabled(anyInt())).thenReturn(false)
+ kosmos.fakeKeyguardRepository.setKeyguardDismissible(true)
+ powerInteractor.setAwakeForTest()
+ testScope.testScheduler.advanceTimeBy(100) // account for debouncing
+ runCurrent()
+
+ // We should head back to GONE since we started there.
+ assertThat(transitionRepository)
+ .startedTransition(from = KeyguardState.AOD, to = KeyguardState.LOCKSCREEN)
+ }
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/FromDreamingTransitionInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/FromDreamingTransitionInteractorTest.kt
index f534ba5..8435a03 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/FromDreamingTransitionInteractorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/FromDreamingTransitionInteractorTest.kt
@@ -37,6 +37,7 @@
import androidx.test.filters.SmallTest
import com.android.systemui.Flags
import com.android.systemui.SysuiTestCase
+import com.android.systemui.bouncer.data.repository.fakeKeyguardBouncerRepository
import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository
@@ -160,4 +161,17 @@
to = KeyguardState.LOCKSCREEN,
)
}
+
+ @Test
+ fun testTransitionToAlternateBouncer() =
+ testScope.runTest {
+ kosmos.fakeKeyguardBouncerRepository.setAlternateVisible(true)
+ runCurrent()
+
+ assertThat(transitionRepository)
+ .startedTransition(
+ from = KeyguardState.DREAMING,
+ to = KeyguardState.ALTERNATE_BOUNCER,
+ )
+ }
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardBlueprintInteractorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardBlueprintInteractorTest.kt
index 4270236..ac5823e 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardBlueprintInteractorTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardBlueprintInteractorTest.kt
@@ -24,15 +24,20 @@
import com.android.systemui.Flags
import com.android.systemui.SysuiTestCase
import com.android.systemui.biometrics.data.repository.fakeFingerprintPropertyRepository
+import com.android.systemui.biometrics.shared.model.FingerprintSensorType
+import com.android.systemui.biometrics.shared.model.SensorStrength
import com.android.systemui.common.ui.data.repository.fakeConfigurationRepository
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.keyguard.data.repository.fakeKeyguardClockRepository
import com.android.systemui.keyguard.ui.view.layout.blueprints.DefaultKeyguardBlueprint
import com.android.systemui.keyguard.ui.view.layout.blueprints.SplitShadeKeyguardBlueprint
import com.android.systemui.kosmos.testScope
+import com.android.systemui.plugins.clocks.ClockConfig
import com.android.systemui.plugins.clocks.ClockController
-import com.android.systemui.res.R
+import com.android.systemui.shade.data.repository.shadeRepository
+import com.android.systemui.shade.shared.model.ShadeMode
import com.android.systemui.testKosmos
+import com.android.systemui.util.mockito.whenever
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.runCurrent
@@ -59,17 +64,24 @@
@Before
fun setup() {
MockitoAnnotations.initMocks(this)
+ whenever(clockController.config).thenReturn(ClockConfig("TEST", "Test", ""))
+ fingerprintPropertyRepository.setProperties(
+ sensorId = 1,
+ strength = SensorStrength.STRONG,
+ sensorType = FingerprintSensorType.POWER_BUTTON,
+ sensorLocations = mapOf()
+ )
}
@Test
fun testAppliesDefaultBlueprint() {
testScope.runTest {
- val blueprint by collectLastValue(underTest.blueprint)
- overrideResource(R.bool.config_use_split_notification_shade, false)
+ val blueprintId by collectLastValue(underTest.blueprintId)
+ kosmos.shadeRepository.setShadeMode(ShadeMode.Single)
configurationRepository.onConfigurationChange()
runCurrent()
- assertThat(blueprint?.id).isEqualTo(DefaultKeyguardBlueprint.Companion.DEFAULT)
+ assertThat(blueprintId).isEqualTo(DefaultKeyguardBlueprint.Companion.DEFAULT)
}
}
@@ -77,12 +89,12 @@
@DisableFlags(Flags.FLAG_COMPOSE_LOCKSCREEN)
fun testAppliesSplitShadeBlueprint() {
testScope.runTest {
- val blueprint by collectLastValue(underTest.blueprint)
- overrideResource(R.bool.config_use_split_notification_shade, true)
+ val blueprintId by collectLastValue(underTest.blueprintId)
+ kosmos.shadeRepository.setShadeMode(ShadeMode.Split)
configurationRepository.onConfigurationChange()
runCurrent()
- assertThat(blueprint?.id).isEqualTo(SplitShadeKeyguardBlueprint.Companion.ID)
+ assertThat(blueprintId).isEqualTo(SplitShadeKeyguardBlueprint.Companion.ID)
}
}
@@ -90,11 +102,12 @@
@DisableFlags(Flags.FLAG_COMPOSE_LOCKSCREEN)
fun fingerprintPropertyInitialized_updatesBlueprint() {
testScope.runTest {
- val blueprint by collectLastValue(underTest.blueprint)
- overrideResource(R.bool.config_use_split_notification_shade, true)
+ val blueprintId by collectLastValue(underTest.blueprintId)
+ kosmos.shadeRepository.setShadeMode(ShadeMode.Split)
fingerprintPropertyRepository.supportsUdfps() // initialize properties
runCurrent()
- assertThat(blueprint?.id).isEqualTo(SplitShadeKeyguardBlueprint.Companion.ID)
+
+ assertThat(blueprintId).isEqualTo(SplitShadeKeyguardBlueprint.Companion.ID)
}
}
@@ -102,13 +115,13 @@
@EnableFlags(Flags.FLAG_COMPOSE_LOCKSCREEN)
fun testDoesNotApplySplitShadeBlueprint() {
testScope.runTest {
- overrideResource(R.bool.config_use_split_notification_shade, true)
- val blueprint by collectLastValue(underTest.blueprint)
+ val blueprintId by collectLastValue(underTest.blueprintId)
+ kosmos.shadeRepository.setShadeMode(ShadeMode.Split)
clockRepository.setCurrentClock(clockController)
configurationRepository.onConfigurationChange()
runCurrent()
- assertThat(blueprint?.id).isEqualTo(DefaultKeyguardBlueprint.DEFAULT)
+ assertThat(blueprintId).isEqualTo(DefaultKeyguardBlueprint.DEFAULT)
}
}
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractorParameterizedTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractorParameterizedTest.kt
index 45b2a42..96b7596 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractorParameterizedTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractorParameterizedTest.kt
@@ -43,6 +43,7 @@
import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordancePosition
import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordancesMetricsLogger
import com.android.systemui.plugins.ActivityStarter
+import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.settings.FakeUserTracker
import com.android.systemui.settings.UserFileManager
import com.android.systemui.settings.UserTracker
@@ -329,6 +330,7 @@
biometricSettingsRepository = biometricSettingsRepository,
backgroundDispatcher = testDispatcher,
appContext = mContext,
+ sceneInteractor = { kosmos.sceneInteractor },
)
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt
index 085b70e..671b09b 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt
@@ -755,35 +755,6 @@
}
@Test
- fun goneToDreamingLockscreenHosted() =
- testScope.runTest {
- // GIVEN a device that is not dreaming or dozing
- keyguardRepository.setDreamingWithOverlay(false)
- keyguardRepository.setDozeTransitionModel(
- DozeTransitionModel(from = DozeStateModel.DOZE, to = DozeStateModel.FINISH)
- )
- runCurrent()
-
- // GIVEN a prior transition has run to GONE
- runTransitionAndSetWakefulness(KeyguardState.LOCKSCREEN, KeyguardState.GONE)
-
- // WHEN the device begins to dream with the lockscreen hosted dream
- keyguardRepository.setDreamingWithOverlay(true)
- keyguardRepository.setIsActiveDreamLockscreenHosted(true)
- advanceTimeBy(100L)
-
- assertThat(transitionRepository)
- .startedTransition(
- to = KeyguardState.DREAMING_LOCKSCREEN_HOSTED,
- from = KeyguardState.GONE,
- ownerName = "FromGoneTransitionInteractor",
- animatorAssertion = { it.isNotNull() }
- )
-
- coroutineContext.cancelChildren()
- }
-
- @Test
fun goneToGlanceableHub() =
testScope.runTest {
// GIVEN a prior transition has run to GONE
@@ -1244,9 +1215,15 @@
keyguardRepository.setKeyguardOccluded(true)
runCurrent()
- // GIVEN device is docked
+ // GIVEN device is docked/communal is available
dockManager.setIsDocked(true)
dockManager.setDockEvent(DockManager.STATE_DOCKED)
+ val idleTransitionState =
+ MutableStateFlow<ObservableTransitionState>(
+ ObservableTransitionState.Idle(CommunalScenes.Communal)
+ )
+ communalInteractor.setTransitionState(idleTransitionState)
+ runCurrent()
// WHEN occlusion ends
keyguardRepository.setKeyguardOccluded(false)
@@ -1372,6 +1349,8 @@
// WHEN the keyguard is occluded and device wakes up and is no longer dreaming
keyguardRepository.setDreaming(false)
+ testScheduler.advanceTimeBy(150) // The dreaming signal is debounced.
+ runCurrent()
keyguardRepository.setKeyguardOccluded(true)
powerInteractor.setAwakeForTest()
runCurrent()
@@ -1379,7 +1358,7 @@
// THEN a transition to OCCLUDED should occur
assertThat(transitionRepository)
.startedTransition(
- ownerName = "FromDreamingTransitionInteractor",
+ ownerName = "FromDreamingTransitionInteractor(Occluded but no longer dreaming)",
from = KeyguardState.DREAMING,
to = KeyguardState.OCCLUDED,
animatorAssertion = { it.isNotNull() },
@@ -1516,7 +1495,7 @@
// THEN a transition to OCCLUDED should occur
assertThat(transitionRepository)
.startedTransition(
- ownerName = "FromAodTransitionInteractor",
+ ownerName = "FromAodTransitionInteractor(isOccluded = true)",
from = KeyguardState.AOD,
to = KeyguardState.OCCLUDED,
animatorAssertion = { it.isNotNull() },
@@ -1555,7 +1534,8 @@
runTransitionAndSetWakefulness(KeyguardState.AOD, KeyguardState.LOCKSCREEN)
runCurrent()
- // WHEN the device begins to sleep (first power button press)...
+ // WHEN the device begins to sleep (first power button press), which starts
+ // LS -> DOZING...
powerInteractor.setAsleepForTest()
runCurrent()
reset(transitionRepository)
@@ -1568,11 +1548,11 @@
}
runCurrent()
- // THEN a transition from LOCKSCREEN => OCCLUDED should occur
+ // THEN a transition from DOZING => OCCLUDED should occur
assertThat(transitionRepository)
.startedTransition(
- ownerName = "FromLockscreenTransitionInteractor",
- from = KeyguardState.LOCKSCREEN,
+ ownerName = "FromDozingTransitionInteractor",
+ from = KeyguardState.DOZING,
to = KeyguardState.OCCLUDED,
animatorAssertion = { it.isNotNull() },
)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/binder/KeyguardClockViewBinderTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/binder/KeyguardClockViewBinderTest.kt
index 5e3a142..2f650c4 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/binder/KeyguardClockViewBinderTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/binder/KeyguardClockViewBinderTest.kt
@@ -24,6 +24,7 @@
import com.android.keyguard.KeyguardClockSwitch.LARGE
import com.android.keyguard.KeyguardClockSwitch.SMALL
import com.android.systemui.SysuiTestCase
+import com.android.systemui.keyguard.shared.model.ClockSize
import com.android.systemui.keyguard.ui.viewmodel.KeyguardClockViewModel
import com.android.systemui.plugins.clocks.ClockConfig
import com.android.systemui.plugins.clocks.ClockController
@@ -53,7 +54,7 @@
@Mock private lateinit var smallClockFaceLayout: ClockFaceLayout
@Mock private lateinit var largeClockFaceLayout: ClockFaceLayout
@Mock private lateinit var clockViewModel: KeyguardClockViewModel
- private val clockSize = MutableStateFlow(LARGE)
+ private val clockSize = MutableStateFlow(ClockSize.LARGE)
private val currentClock: MutableStateFlow<ClockController?> = MutableStateFlow(null)
@Before
@@ -82,8 +83,7 @@
@Test
fun addClockViewsToBurnInLayer_LargeWeatherClock() {
setupWeatherClock()
- clockSize.value = LARGE
- KeyguardClockViewBinder.updateBurnInLayer(rootView, clockViewModel)
+ KeyguardClockViewBinder.updateBurnInLayer(rootView, clockViewModel, ClockSize.LARGE)
verify(burnInLayer).removeView(smallClockView)
verify(burnInLayer).addView(largeClockView)
}
@@ -91,8 +91,7 @@
@Test
fun addClockViewsToBurnInLayer_LargeNonWeatherClock() {
setupNonWeatherClock()
- clockSize.value = LARGE
- KeyguardClockViewBinder.updateBurnInLayer(rootView, clockViewModel)
+ KeyguardClockViewBinder.updateBurnInLayer(rootView, clockViewModel, ClockSize.LARGE)
verify(burnInLayer).removeView(smallClockView)
verify(burnInLayer, never()).addView(largeClockView)
}
@@ -100,8 +99,7 @@
@Test
fun addClockViewsToBurnInLayer_SmallClock() {
setupNonWeatherClock()
- clockSize.value = SMALL
- KeyguardClockViewBinder.updateBurnInLayer(rootView, clockViewModel)
+ KeyguardClockViewBinder.updateBurnInLayer(rootView, clockViewModel, ClockSize.SMALL)
verify(burnInLayer).addView(smallClockView)
verify(burnInLayer).removeView(largeClockView)
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/view/layout/blueprints/DefaultKeyguardBlueprintTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/view/layout/blueprints/DefaultKeyguardBlueprintTest.kt
index 9aee5b6..616aac7 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/view/layout/blueprints/DefaultKeyguardBlueprintTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/view/layout/blueprints/DefaultKeyguardBlueprintTest.kt
@@ -105,7 +105,7 @@
@Test
fun replaceViews() {
val constraintLayout = ConstraintLayout(context, null)
- underTest.replaceViews(null, constraintLayout)
+ underTest.replaceViews(constraintLayout)
underTest.sections.forEach { verify(it)?.addViews(constraintLayout) }
}
@@ -116,7 +116,7 @@
whenever(prevBlueprint.sections)
.thenReturn(underTest.sections.minus(mDefaultDeviceEntrySection).plus(someSection))
val constraintLayout = ConstraintLayout(context, null)
- underTest.replaceViews(prevBlueprint, constraintLayout)
+ underTest.replaceViews(constraintLayout, prevBlueprint)
underTest.sections.minus(mDefaultDeviceEntrySection).forEach {
verify(it, never())?.addViews(constraintLayout)
}
@@ -128,7 +128,7 @@
@Test
fun deviceEntryIconIsOnTop() {
val constraintLayout = ConstraintLayout(context, null)
- underTest.replaceViews(null, constraintLayout)
+ underTest.replaceViews(constraintLayout)
underTest.sections.forEach { verify(it)?.addViews(constraintLayout) }
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/view/layout/sections/ClockSectionTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/view/layout/sections/ClockSectionTest.kt
index c47f0bc..ba2efe6 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/view/layout/sections/ClockSectionTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/view/layout/sections/ClockSectionTest.kt
@@ -23,245 +23,298 @@
import android.view.View.VISIBLE
import androidx.constraintlayout.widget.ConstraintSet
import androidx.test.filters.SmallTest
-import com.android.internal.policy.SystemBarUtils
import com.android.systemui.SysuiTestCase
-import com.android.systemui.keyguard.domain.interactor.KeyguardBlueprintInteractor
-import com.android.systemui.keyguard.domain.interactor.KeyguardClockInteractor
-import com.android.systemui.keyguard.ui.viewmodel.KeyguardClockViewModel
-import com.android.systemui.keyguard.ui.viewmodel.KeyguardSmartspaceViewModel
+import com.android.systemui.coroutines.collectLastValue
+import com.android.systemui.customization.R as customR
+import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
+import com.android.systemui.keyguard.domain.interactor.keyguardBlueprintInteractor
+import com.android.systemui.keyguard.domain.interactor.keyguardClockInteractor
+import com.android.systemui.keyguard.domain.interactor.keyguardSmartspaceInteractor
+import com.android.systemui.keyguard.shared.model.ClockSize
+import com.android.systemui.keyguard.ui.viewmodel.keyguardClockViewModel
+import com.android.systemui.keyguard.ui.viewmodel.keyguardSmartspaceViewModel
+import com.android.systemui.kosmos.Kosmos
+import com.android.systemui.kosmos.testScope
import com.android.systemui.res.R
-import com.android.systemui.shade.domain.interactor.ShadeInteractor
+import com.android.systemui.shade.data.repository.shadeRepository
import com.android.systemui.shade.shared.model.ShadeMode
-import com.android.systemui.util.Utils
+import com.android.systemui.statusbar.notification.stack.domain.interactor.notificationsKeyguardInteractor
+import com.android.systemui.statusbar.policy.fakeConfigurationController
+import com.android.systemui.statusbar.ui.fakeSystemBarUtilsProxy
+import com.android.systemui.testKosmos
import com.android.systemui.util.mockito.eq
import com.android.systemui.util.mockito.mock
import com.android.systemui.util.mockito.whenever
import com.google.common.truth.Truth.assertThat
-import dagger.Lazy
-import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.test.advanceUntilIdle
+import kotlinx.coroutines.test.runTest
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
import org.mockito.ArgumentMatchers.anyInt
import org.mockito.ArgumentMatchers.anyString
-import org.mockito.Mock
import org.mockito.MockitoAnnotations
@RunWith(JUnit4::class)
@SmallTest
class ClockSectionTest : SysuiTestCase() {
- @Mock private lateinit var keyguardClockInteractor: KeyguardClockInteractor
- @Mock private lateinit var keyguardClockViewModel: KeyguardClockViewModel
- @Mock private lateinit var shadeInteractor: ShadeInteractor
- @Mock private lateinit var smartspaceViewModel: KeyguardSmartspaceViewModel
- @Mock private lateinit var blueprintInteractor: Lazy<KeyguardBlueprintInteractor>
- private val bcSmartspaceVisibility: MutableStateFlow<Int> = MutableStateFlow(VISIBLE)
- private val clockShouldBeCentered: MutableStateFlow<Boolean> = MutableStateFlow(true)
- private val isAodIconsVisible: MutableStateFlow<Boolean> = MutableStateFlow(true)
- private val shadeMode: MutableStateFlow<ShadeMode> = MutableStateFlow(ShadeMode.Single)
-
private lateinit var underTest: ClockSection
- private val SMALL_CLOCK_TOP_SPLIT_SHADE =
- context.resources.getDimensionPixelSize(R.dimen.keyguard_split_shade_top_margin)
+ private val LARGE_CLOCK_TOP_WITHOUT_SMARTSPACE: Int
+ get() =
+ kosmos.fakeSystemBarUtilsProxy.getStatusBarHeight() +
+ context.resources.getDimensionPixelSize(customR.dimen.small_clock_padding_top) +
+ context.resources.getDimensionPixelSize(R.dimen.keyguard_smartspace_top_offset)
- private val SMALL_CLOCK_TOP_NON_SPLIT_SHADE =
- context.resources.getDimensionPixelSize(R.dimen.keyguard_clock_top_margin) +
- Utils.getStatusBarHeaderHeightKeyguard(context)
+ private val LARGE_CLOCK_TOP
+ get() =
+ LARGE_CLOCK_TOP_WITHOUT_SMARTSPACE +
+ SMART_SPACE_DATE_WEATHER_HEIGHT +
+ ENHANCED_SMART_SPACE_HEIGHT
- private val LARGE_CLOCK_TOP_WITHOUT_SMARTSPACE =
- SystemBarUtils.getStatusBarHeight(context) +
- context.resources.getDimensionPixelSize(
- com.android.systemui.customization.R.dimen.small_clock_padding_top
- ) +
- context.resources.getDimensionPixelSize(R.dimen.keyguard_smartspace_top_offset)
+ private val CLOCK_FADE_TRANSLATION_Y
+ get() = context.resources.getDimensionPixelSize(customR.dimen.small_clock_height)
- private val LARGE_CLOCK_TOP =
- LARGE_CLOCK_TOP_WITHOUT_SMARTSPACE +
- SMART_SPACE_DATE_WEATHER_HEIGHT +
- ENHANCED_SMART_SPACE_HEIGHT
-
- private val CLOCK_FADE_TRANSLATION_Y =
- context.resources.getDimensionPixelSize(
- com.android.systemui.customization.R.dimen.small_clock_height
- )
-
- private var DIMENSION_BY_IDENTIFIER_NAME: List<Pair<String, Int>> = listOf()
+ private var DIMENSION_BY_IDENTIFIER: List<Pair<String, Int>> = listOf()
+ private lateinit var kosmos: Kosmos
@Before
fun setup() {
- DIMENSION_BY_IDENTIFIER_NAME =
+ DIMENSION_BY_IDENTIFIER =
listOf(
"date_weather_view_height" to SMART_SPACE_DATE_WEATHER_HEIGHT,
"enhanced_smartspace_height" to ENHANCED_SMART_SPACE_HEIGHT,
)
MockitoAnnotations.initMocks(this)
- val remoteResources = mock<Resources>()
- whenever(remoteResources.getIdentifier(anyString(), eq("dimen"), anyString())).then {
- invocation ->
- val name = invocation.arguments[0] as String
- val index = DIMENSION_BY_IDENTIFIER_NAME.indexOfFirst { (key, _) -> key == name }
- // increment index so that the not-found sentinel value lines up w/ what is
- // returned by getIdentifier when a resource is not found
- index + 1
- }
- whenever(remoteResources.getDimensionPixelSize(anyInt())).then { invocation ->
- val id = invocation.arguments[0] as Int
- DIMENSION_BY_IDENTIFIER_NAME[id - 1].second
- }
- val packageManager = mock<PackageManager>()
- whenever(packageManager.getResourcesForApplication(anyString())).thenReturn(remoteResources)
- mContext.setMockPackageManager(packageManager)
-
- whenever(keyguardClockViewModel.clockShouldBeCentered).thenReturn(clockShouldBeCentered)
- whenever(keyguardClockViewModel.isAodIconsVisible).thenReturn(isAodIconsVisible)
- whenever(shadeInteractor.shadeMode).thenReturn(shadeMode)
- whenever(keyguardClockViewModel.shadeInteractor).thenReturn(shadeInteractor)
- whenever(smartspaceViewModel.bcSmartspaceVisibility).thenReturn(bcSmartspaceVisibility)
-
- underTest =
- ClockSection(
- keyguardClockInteractor,
- keyguardClockViewModel,
- context,
- smartspaceViewModel,
- blueprintInteractor
- )
- }
-
- @Test
- fun testApplyDefaultConstraints_LargeClock_SplitShade() {
- setLargeClock(true)
- setSplitShade(true)
- val cs = ConstraintSet()
- underTest.applyDefaultConstraints(cs)
-
- val expectedLargeClockTopMargin = LARGE_CLOCK_TOP
- assertLargeClockTop(cs, expectedLargeClockTopMargin)
-
- val expectedSmallClockTopMargin = SMALL_CLOCK_TOP_SPLIT_SHADE
- assertSmallClockTop(cs)
- }
-
- @Test
- fun testApplyDefaultConstraints_LargeClock_NonSplitShade() {
- setLargeClock(true)
- setSplitShade(false)
- val cs = ConstraintSet()
- underTest.applyDefaultConstraints(cs)
-
- val expectedLargeClockTopMargin = LARGE_CLOCK_TOP
- assertLargeClockTop(cs, expectedLargeClockTopMargin)
-
- val expectedSmallClockTopMargin = SMALL_CLOCK_TOP_NON_SPLIT_SHADE
- assertSmallClockTop(cs)
- }
-
- @Test
- fun testApplyDefaultConstraints_LargeClock_MissingSmartspace_SplitShade() {
- DIMENSION_BY_IDENTIFIER_NAME = listOf() // Remove Smartspace from mock
- setLargeClock(true)
- setSplitShade(true)
- val cs = ConstraintSet()
- underTest.applyDefaultConstraints(cs)
-
- val expectedLargeClockTopMargin = LARGE_CLOCK_TOP_WITHOUT_SMARTSPACE
- assertLargeClockTop(cs, expectedLargeClockTopMargin)
-
- val expectedSmallClockTopMargin = SMALL_CLOCK_TOP_SPLIT_SHADE
- assertSmallClockTop(cs)
- }
-
- @Test
- fun testApplyDefaultConstraints_LargeClock_MissingSmartspace_NonSplitShade() {
- DIMENSION_BY_IDENTIFIER_NAME = listOf() // Remove Smartspace from mock
- setLargeClock(true)
- setSplitShade(false)
- val cs = ConstraintSet()
- underTest.applyDefaultConstraints(cs)
-
- val expectedLargeClockTopMargin = LARGE_CLOCK_TOP_WITHOUT_SMARTSPACE
- assertLargeClockTop(cs, expectedLargeClockTopMargin)
-
- val expectedSmallClockTopMargin = SMALL_CLOCK_TOP_NON_SPLIT_SHADE
- assertSmallClockTop(cs)
- }
-
- @Test
- fun testApplyDefaultConstraints_SmallClock_SplitShade() {
- setLargeClock(false)
- setSplitShade(true)
- val cs = ConstraintSet()
- underTest.applyDefaultConstraints(cs)
-
- val expectedLargeClockTopMargin = LARGE_CLOCK_TOP
- assertLargeClockTop(cs, expectedLargeClockTopMargin)
-
- val expectedSmallClockTopMargin = SMALL_CLOCK_TOP_SPLIT_SHADE
- assertSmallClockTop(cs)
- }
-
- @Test
- fun testApplyDefaultConstraints_SmallClock_NonSplitShade() {
- setLargeClock(false)
- setSplitShade(false)
- val cs = ConstraintSet()
- underTest.applyDefaultConstraints(cs)
- val expectedLargeClockTopMargin = LARGE_CLOCK_TOP
- assertLargeClockTop(cs, expectedLargeClockTopMargin)
-
- val expectedSmallClockTopMargin = SMALL_CLOCK_TOP_NON_SPLIT_SHADE
- assertSmallClockTop(cs)
- }
-
- @Test
- fun testSmartspaceVisible_weatherClockDateAndIconsBarrierBottomBelowBCSmartspace() {
- isAodIconsVisible.value = false
- bcSmartspaceVisibility.value = VISIBLE
- val cs = ConstraintSet()
- underTest.applyDefaultConstraints(cs)
- val referencedIds = cs.getReferencedIds(R.id.weather_clock_date_and_icons_barrier_bottom)
- referencedIds.contentEquals(intArrayOf(com.android.systemui.shared.R.id.bc_smartspace_view))
- }
-
- @Test
- fun testSmartspaceGone_weatherClockDateAndIconsBarrierBottomBelowSmartspaceDateWeather() {
- isAodIconsVisible.value = false
- bcSmartspaceVisibility.value = GONE
- val cs = ConstraintSet()
- underTest.applyDefaultConstraints(cs)
- val referencedIds = cs.getReferencedIds(R.id.weather_clock_date_and_icons_barrier_bottom)
- referencedIds.contentEquals(intArrayOf(R.id.lockscreen_clock_view))
- }
-
- @Test
- fun testHasAodIcons_weatherClockDateAndIconsBarrierBottomBelowSmartspaceDateWeather() {
- isAodIconsVisible.value = true
- val cs = ConstraintSet()
- underTest.applyDefaultConstraints(cs)
- val referencedIds = cs.getReferencedIds(R.id.weather_clock_date_and_icons_barrier_bottom)
- referencedIds.contentEquals(
- intArrayOf(
- com.android.systemui.shared.R.id.bc_smartspace_view,
- R.id.aod_notification_icon_container
- )
+ val remoteResources =
+ mock<Resources>().apply {
+ whenever(getIdentifier(anyString(), eq("dimen"), anyString())).then { invocation ->
+ val name = invocation.arguments[0] as String
+ val index = DIMENSION_BY_IDENTIFIER.indexOfFirst { (key, _) -> key == name }
+ // increment index so that the not-found sentinel value lines up w/ what is
+ // returned by getIdentifier when a resource is not found
+ index + 1
+ }
+ whenever(getDimensionPixelSize(anyInt())).then { invocation ->
+ val id = invocation.arguments[0] as Int
+ DIMENSION_BY_IDENTIFIER[id - 1].second
+ }
+ }
+ mContext.setMockPackageManager(
+ mock<PackageManager>().apply {
+ whenever(getResourcesForApplication(anyString())).thenReturn(remoteResources)
+ }
)
- }
- private fun setLargeClock(useLargeClock: Boolean) {
- whenever(keyguardClockViewModel.useLargeClock).thenReturn(useLargeClock)
- }
-
- private fun setSplitShade(isInSplitShade: Boolean) {
- if (isInSplitShade) {
- shadeMode.value = ShadeMode.Split
- } else {
- shadeMode.value = ShadeMode.Single
+ kosmos = testKosmos()
+ with(kosmos) {
+ underTest =
+ ClockSection(
+ keyguardClockInteractor,
+ keyguardClockViewModel,
+ context,
+ keyguardSmartspaceViewModel,
+ { keyguardBlueprintInteractor },
+ )
}
}
+ @Test
+ fun testApplyDefaultConstraints_LargeClock_SplitShade() =
+ kosmos.testScope.runTest {
+ with(kosmos) {
+ shadeRepository.setShadeMode(ShadeMode.Split)
+ keyguardClockInteractor.setClockSize(ClockSize.LARGE)
+ advanceUntilIdle()
+ }
+
+ val cs = ConstraintSet()
+ underTest.applyDefaultConstraints(cs)
+
+ assertLargeClockTop(cs, LARGE_CLOCK_TOP)
+ assertSmallClockTop(cs)
+ }
+
+ @Test
+ fun testApplyDefaultConstraints_LargeClock_NonSplitShade() =
+ kosmos.testScope.runTest {
+ with(kosmos) {
+ val collectedShadeMode by collectLastValue(shadeRepository.shadeMode)
+ val isLargeClockVisible by
+ collectLastValue(keyguardClockViewModel.isLargeClockVisible)
+
+ shadeRepository.setShadeMode(ShadeMode.Single)
+ keyguardClockInteractor.setClockSize(ClockSize.LARGE)
+ fakeKeyguardRepository.setClockShouldBeCentered(true)
+ notificationsKeyguardInteractor.setNotificationsFullyHidden(true)
+ keyguardSmartspaceInteractor.setBcSmartspaceVisibility(VISIBLE)
+ fakeConfigurationController.notifyConfigurationChanged()
+ advanceUntilIdle()
+
+ val cs = ConstraintSet()
+ underTest.applyDefaultConstraints(cs)
+
+ assertLargeClockTop(cs, LARGE_CLOCK_TOP)
+ assertSmallClockTop(cs)
+ }
+ }
+
+ @Test
+ fun testApplyDefaultConstraints_LargeClock_MissingSmartspace_SplitShade() =
+ kosmos.testScope.runTest {
+ with(kosmos) {
+ DIMENSION_BY_IDENTIFIER = listOf() // Remove Smartspace from mock
+ val collectedShadeMode by collectLastValue(shadeRepository.shadeMode)
+ val isLargeClockVisible by
+ collectLastValue(keyguardClockViewModel.isLargeClockVisible)
+
+ shadeRepository.setShadeMode(ShadeMode.Split)
+ keyguardClockInteractor.setClockSize(ClockSize.LARGE)
+ fakeKeyguardRepository.setClockShouldBeCentered(true)
+ notificationsKeyguardInteractor.setNotificationsFullyHidden(true)
+ keyguardSmartspaceInteractor.setBcSmartspaceVisibility(VISIBLE)
+ fakeConfigurationController.notifyConfigurationChanged()
+ advanceUntilIdle()
+
+ val cs = ConstraintSet()
+ underTest.applyDefaultConstraints(cs)
+
+ assertLargeClockTop(cs, LARGE_CLOCK_TOP_WITHOUT_SMARTSPACE)
+ assertSmallClockTop(cs)
+ }
+ }
+
+ @Test
+ fun testApplyDefaultConstraints_LargeClock_MissingSmartspace_NonSplitShade() =
+ kosmos.testScope.runTest {
+ with(kosmos) {
+ DIMENSION_BY_IDENTIFIER = listOf() // Remove Smartspace from mock
+ val collectedShadeMode by collectLastValue(shadeRepository.shadeMode)
+ val isLargeClockVisible by
+ collectLastValue(keyguardClockViewModel.isLargeClockVisible)
+
+ shadeRepository.setShadeMode(ShadeMode.Single)
+ keyguardClockInteractor.setClockSize(ClockSize.LARGE)
+ fakeKeyguardRepository.setClockShouldBeCentered(true)
+ notificationsKeyguardInteractor.setNotificationsFullyHidden(true)
+ keyguardSmartspaceInteractor.setBcSmartspaceVisibility(VISIBLE)
+ fakeConfigurationController.notifyConfigurationChanged()
+ advanceUntilIdle()
+
+ val cs = ConstraintSet()
+ underTest.applyDefaultConstraints(cs)
+
+ assertLargeClockTop(cs, LARGE_CLOCK_TOP_WITHOUT_SMARTSPACE)
+ assertSmallClockTop(cs)
+ }
+ }
+
+ @Test
+ fun testApplyDefaultConstraints_SmallClock_SplitShade() =
+ kosmos.testScope.runTest {
+ with(kosmos) {
+ val collectedShadeMode by collectLastValue(shadeRepository.shadeMode)
+ val isLargeClockVisible by
+ collectLastValue(keyguardClockViewModel.isLargeClockVisible)
+
+ shadeRepository.setShadeMode(ShadeMode.Split)
+ keyguardClockInteractor.setClockSize(ClockSize.SMALL)
+ fakeKeyguardRepository.setClockShouldBeCentered(true)
+ notificationsKeyguardInteractor.setNotificationsFullyHidden(true)
+ keyguardSmartspaceInteractor.setBcSmartspaceVisibility(VISIBLE)
+ fakeConfigurationController.notifyConfigurationChanged()
+ advanceUntilIdle()
+
+ val cs = ConstraintSet()
+ underTest.applyDefaultConstraints(cs)
+
+ assertLargeClockTop(cs, LARGE_CLOCK_TOP)
+ assertSmallClockTop(cs)
+ }
+ }
+
+ @Test
+ fun testApplyDefaultConstraints_SmallClock_NonSplitShade() =
+ kosmos.testScope.runTest {
+ with(kosmos) {
+ val collectedShadeMode by collectLastValue(shadeRepository.shadeMode)
+ val isLargeClockVisible by
+ collectLastValue(keyguardClockViewModel.isLargeClockVisible)
+
+ shadeRepository.setShadeMode(ShadeMode.Single)
+ keyguardClockInteractor.setClockSize(ClockSize.SMALL)
+ fakeKeyguardRepository.setClockShouldBeCentered(true)
+ notificationsKeyguardInteractor.setNotificationsFullyHidden(true)
+ keyguardSmartspaceInteractor.setBcSmartspaceVisibility(VISIBLE)
+ fakeConfigurationController.notifyConfigurationChanged()
+ advanceUntilIdle()
+
+ val cs = ConstraintSet()
+ underTest.applyDefaultConstraints(cs)
+ assertLargeClockTop(cs, LARGE_CLOCK_TOP)
+ assertSmallClockTop(cs)
+ }
+ }
+
+ @Test
+ fun testSmartspaceVisible_weatherClockDateAndIconsBarrierBottomBelowBCSmartspace() =
+ kosmos.testScope.runTest {
+ with(kosmos) {
+ notificationsKeyguardInteractor.setNotificationsFullyHidden(false)
+ keyguardSmartspaceInteractor.setBcSmartspaceVisibility(VISIBLE)
+ fakeConfigurationController.notifyConfigurationChanged()
+ advanceUntilIdle()
+ }
+
+ val cs = ConstraintSet()
+ underTest.applyDefaultConstraints(cs)
+ val referencedIds =
+ cs.getReferencedIds(R.id.weather_clock_date_and_icons_barrier_bottom)
+ referencedIds.contentEquals(
+ intArrayOf(com.android.systemui.shared.R.id.bc_smartspace_view)
+ )
+ }
+
+ @Test
+ fun testSmartspaceGone_weatherClockDateAndIconsBarrierBottomBelowSmartspaceDateWeather() =
+ kosmos.testScope.runTest {
+ with(kosmos) {
+ notificationsKeyguardInteractor.setNotificationsFullyHidden(false)
+ keyguardSmartspaceInteractor.setBcSmartspaceVisibility(GONE)
+ fakeConfigurationController.notifyConfigurationChanged()
+ advanceUntilIdle()
+ }
+
+ val cs = ConstraintSet()
+ underTest.applyDefaultConstraints(cs)
+ val referencedIds =
+ cs.getReferencedIds(R.id.weather_clock_date_and_icons_barrier_bottom)
+ referencedIds.contentEquals(intArrayOf(R.id.lockscreen_clock_view))
+ }
+
+ @Test
+ fun testHasAodIcons_weatherClockDateAndIconsBarrierBottomBelowSmartspaceDateWeather() =
+ kosmos.testScope.runTest {
+ with(kosmos) {
+ notificationsKeyguardInteractor.setNotificationsFullyHidden(true)
+ fakeConfigurationController.notifyConfigurationChanged()
+ advanceUntilIdle()
+ }
+
+ val cs = ConstraintSet()
+ underTest.applyDefaultConstraints(cs)
+ val referencedIds =
+ cs.getReferencedIds(R.id.weather_clock_date_and_icons_barrier_bottom)
+ referencedIds.contentEquals(
+ intArrayOf(
+ com.android.systemui.shared.R.id.bc_smartspace_view,
+ R.id.aod_notification_icon_container
+ )
+ )
+ }
+
private fun assertLargeClockTop(cs: ConstraintSet, expectedLargeClockTopMargin: Int) {
val largeClockConstraint = cs.getConstraint(R.id.lockscreen_clock_view_large)
assertThat(largeClockConstraint.layout.topToTop).isEqualTo(ConstraintSet.PARENT_ID)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBottomAreaViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBottomAreaViewModelTest.kt
index 7290863..6b317ea 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBottomAreaViewModelTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBottomAreaViewModelTest.kt
@@ -52,6 +52,7 @@
import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordancesMetricsLogger
import com.android.systemui.plugins.ActivityStarter
import com.android.systemui.res.R
+import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.settings.UserFileManager
import com.android.systemui.settings.UserTracker
import com.android.systemui.shade.domain.interactor.shadeInteractor
@@ -233,6 +234,7 @@
biometricSettingsRepository = biometricSettingsRepository,
backgroundDispatcher = testDispatcher,
appContext = mContext,
+ sceneInteractor = { kosmos.sceneInteractor },
),
bottomAreaInteractor = KeyguardBottomAreaInteractor(repository = repository),
burnInHelperWrapper = burnInHelperWrapper,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardClockViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardClockViewModelTest.kt
index 01754c4..1d98dc3 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardClockViewModelTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardClockViewModelTest.kt
@@ -19,7 +19,6 @@
import android.platform.test.annotations.DisableFlags
import android.platform.test.annotations.EnableFlags
import androidx.test.filters.SmallTest
-import com.android.keyguard.KeyguardClockSwitch
import com.android.systemui.Flags
import com.android.systemui.SysuiTestCase
import com.android.systemui.coroutines.collectLastValue
@@ -27,175 +26,195 @@
import com.android.systemui.keyguard.data.repository.fakeKeyguardClockRepository
import com.android.systemui.keyguard.data.repository.keyguardClockRepository
import com.android.systemui.keyguard.data.repository.keyguardRepository
-import com.android.systemui.keyguard.shared.model.SettingsClockSize
-import com.android.systemui.kosmos.Kosmos
+import com.android.systemui.keyguard.shared.model.ClockSize
+import com.android.systemui.keyguard.shared.model.ClockSizeSetting
+import com.android.systemui.keyguard.ui.viewmodel.KeyguardClockViewModel.ClockLayout
import com.android.systemui.kosmos.testScope
+import com.android.systemui.plugins.clocks.ClockConfig
import com.android.systemui.plugins.clocks.ClockController
import com.android.systemui.plugins.clocks.ClockFaceConfig
import com.android.systemui.plugins.clocks.ClockFaceController
import com.android.systemui.res.R
import com.android.systemui.shade.data.repository.shadeRepository
import com.android.systemui.shade.shared.model.ShadeMode
+import com.android.systemui.statusbar.ui.fakeSystemBarUtilsProxy
import com.android.systemui.testKosmos
-import com.android.systemui.util.Utils
import com.android.systemui.util.mockito.whenever
import com.google.common.truth.Truth.assertThat
import kotlin.test.Test
-import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runTest
import org.junit.Before
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
-import org.mockito.Mockito.mock
+import org.mockito.Mock
+import org.mockito.MockitoAnnotations
@SmallTest
@RunWith(JUnit4::class)
@DisableSceneContainer
class KeyguardClockViewModelTest : SysuiTestCase() {
- private lateinit var kosmos: Kosmos
- private lateinit var underTest: KeyguardClockViewModel
- private lateinit var testScope: TestScope
- private lateinit var clockController: ClockController
- private lateinit var config: ClockFaceConfig
+ val kosmos = testKosmos()
+ val testScope = kosmos.testScope
+ val underTest = kosmos.keyguardClockViewModel
+ val res = context.resources
+
+ @Mock lateinit var clockController: ClockController
+ @Mock lateinit var largeClock: ClockFaceController
+ @Mock lateinit var smallClock: ClockFaceController
+
+ var config = ClockConfig("TEST", "Test", "")
+ var faceConfig = ClockFaceConfig()
@Before
fun setup() {
- kosmos = testKosmos()
- testScope = kosmos.testScope
- underTest = kosmos.keyguardClockViewModel
-
- clockController = mock(ClockController::class.java)
- val largeClock = mock(ClockFaceController::class.java)
- config = mock(ClockFaceConfig::class.java)
+ MockitoAnnotations.initMocks(this)
whenever(clockController.largeClock).thenReturn(largeClock)
- whenever(largeClock.config).thenReturn(config)
+ whenever(clockController.smallClock).thenReturn(smallClock)
+ whenever(clockController.config).thenAnswer { config }
+ whenever(largeClock.config).thenAnswer { faceConfig }
+ whenever(smallClock.config).thenAnswer { faceConfig }
}
@Test
fun currentClockLayout_splitShadeOn_clockCentered_largeClock() =
testScope.runTest {
+ val currentClockLayout by collectLastValue(underTest.currentClockLayout)
+
with(kosmos) {
shadeRepository.setShadeMode(ShadeMode.Split)
keyguardRepository.setClockShouldBeCentered(true)
- keyguardClockRepository.setClockSize(KeyguardClockSwitch.LARGE)
+ keyguardClockRepository.setClockSize(ClockSize.LARGE)
}
- val currentClockLayout by collectLastValue(underTest.currentClockLayout)
- assertThat(currentClockLayout).isEqualTo(KeyguardClockViewModel.ClockLayout.LARGE_CLOCK)
+
+ assertThat(currentClockLayout).isEqualTo(ClockLayout.LARGE_CLOCK)
}
@Test
fun currentClockLayout_splitShadeOn_clockNotCentered_largeClock_splitShadeLargeClock() =
testScope.runTest {
+ val currentClockLayout by collectLastValue(underTest.currentClockLayout)
+
with(kosmos) {
shadeRepository.setShadeMode(ShadeMode.Split)
keyguardRepository.setClockShouldBeCentered(false)
- keyguardClockRepository.setClockSize(KeyguardClockSwitch.LARGE)
+ keyguardClockRepository.setClockSize(ClockSize.LARGE)
}
- val currentClockLayout by collectLastValue(underTest.currentClockLayout)
- assertThat(currentClockLayout)
- .isEqualTo(KeyguardClockViewModel.ClockLayout.SPLIT_SHADE_LARGE_CLOCK)
+
+ assertThat(currentClockLayout).isEqualTo(ClockLayout.SPLIT_SHADE_LARGE_CLOCK)
}
@Test
fun currentClockLayout_splitShadeOn_clockNotCentered_smallClock_splitShadeSmallClock() =
testScope.runTest {
+ val currentClockLayout by collectLastValue(underTest.currentClockLayout)
+
with(kosmos) {
shadeRepository.setShadeMode(ShadeMode.Split)
keyguardRepository.setClockShouldBeCentered(false)
- keyguardClockRepository.setClockSize(KeyguardClockSwitch.SMALL)
+ keyguardClockRepository.setClockSize(ClockSize.SMALL)
}
- val currentClockLayout by collectLastValue(underTest.currentClockLayout)
- assertThat(currentClockLayout)
- .isEqualTo(KeyguardClockViewModel.ClockLayout.SPLIT_SHADE_SMALL_CLOCK)
+
+ assertThat(currentClockLayout).isEqualTo(ClockLayout.SPLIT_SHADE_SMALL_CLOCK)
}
@Test
fun currentClockLayout_singleShade_smallClock_smallClock() =
testScope.runTest {
+ val currentClockLayout by collectLastValue(underTest.currentClockLayout)
+
with(kosmos) {
shadeRepository.setShadeMode(ShadeMode.Single)
- keyguardClockRepository.setClockSize(KeyguardClockSwitch.SMALL)
+ keyguardClockRepository.setClockSize(ClockSize.SMALL)
}
- val currentClockLayout by collectLastValue(underTest.currentClockLayout)
- assertThat(currentClockLayout).isEqualTo(KeyguardClockViewModel.ClockLayout.SMALL_CLOCK)
+
+ assertThat(currentClockLayout).isEqualTo(ClockLayout.SMALL_CLOCK)
}
@Test
fun currentClockLayout_singleShade_largeClock_largeClock() =
testScope.runTest {
+ val currentClockLayout by collectLastValue(underTest.currentClockLayout)
+
with(kosmos) {
shadeRepository.setShadeMode(ShadeMode.Single)
- keyguardClockRepository.setClockSize(KeyguardClockSwitch.LARGE)
+ keyguardClockRepository.setClockSize(ClockSize.LARGE)
}
- val currentClockLayout by collectLastValue(underTest.currentClockLayout)
- assertThat(currentClockLayout).isEqualTo(KeyguardClockViewModel.ClockLayout.LARGE_CLOCK)
+
+ assertThat(currentClockLayout).isEqualTo(ClockLayout.LARGE_CLOCK)
}
@Test
fun hasCustomPositionUpdatedAnimation_withConfigTrue_isTrue() =
testScope.runTest {
+ val hasCustomPositionUpdatedAnimation by
+ collectLastValue(underTest.hasCustomPositionUpdatedAnimation)
+
with(kosmos) {
- keyguardClockRepository.setClockSize(KeyguardClockSwitch.LARGE)
- whenever(config.hasCustomPositionUpdatedAnimation).thenReturn(true)
+ keyguardClockRepository.setClockSize(ClockSize.LARGE)
+ faceConfig = ClockFaceConfig(hasCustomPositionUpdatedAnimation = true)
fakeKeyguardClockRepository.setCurrentClock(clockController)
}
- val hasCustomPositionUpdatedAnimation by
- collectLastValue(underTest.hasCustomPositionUpdatedAnimation)
assertThat(hasCustomPositionUpdatedAnimation).isEqualTo(true)
}
@Test
fun hasCustomPositionUpdatedAnimation_withConfigFalse_isFalse() =
testScope.runTest {
- with(kosmos) {
- keyguardClockRepository.setClockSize(KeyguardClockSwitch.LARGE)
+ val hasCustomPositionUpdatedAnimation by
+ collectLastValue(underTest.hasCustomPositionUpdatedAnimation)
- whenever(config.hasCustomPositionUpdatedAnimation).thenReturn(false)
+ with(kosmos) {
+ keyguardClockRepository.setClockSize(ClockSize.LARGE)
+ faceConfig = ClockFaceConfig(hasCustomPositionUpdatedAnimation = false)
fakeKeyguardClockRepository.setCurrentClock(clockController)
}
- val hasCustomPositionUpdatedAnimation by
- collectLastValue(underTest.hasCustomPositionUpdatedAnimation)
assertThat(hasCustomPositionUpdatedAnimation).isEqualTo(false)
}
@Test
fun testClockSize_alwaysSmallClockSize() =
testScope.runTest {
- kosmos.fakeKeyguardClockRepository.setSelectedClockSize(SettingsClockSize.SMALL)
- kosmos.keyguardClockRepository.setClockSize(KeyguardClockSwitch.LARGE)
-
val value by collectLastValue(underTest.clockSize)
- assertThat(value).isEqualTo(KeyguardClockSwitch.SMALL)
+
+ with(kosmos) {
+ fakeKeyguardClockRepository.setSelectedClockSize(ClockSizeSetting.SMALL)
+ keyguardClockRepository.setClockSize(ClockSize.LARGE)
+ }
+
+ assertThat(value).isEqualTo(ClockSize.SMALL)
}
@Test
fun testClockSize_dynamicClockSize() =
testScope.runTest {
- kosmos.keyguardClockRepository.setClockSize(KeyguardClockSwitch.SMALL)
- kosmos.fakeKeyguardClockRepository.setSelectedClockSize(SettingsClockSize.DYNAMIC)
- val value by collectLastValue(underTest.clockSize)
- assertThat(value).isEqualTo(KeyguardClockSwitch.SMALL)
+ with(kosmos) {
+ val value by collectLastValue(underTest.clockSize)
+ fakeKeyguardClockRepository.setSelectedClockSize(ClockSizeSetting.DYNAMIC)
- kosmos.keyguardClockRepository.setClockSize(KeyguardClockSwitch.LARGE)
- assertThat(value).isEqualTo(KeyguardClockSwitch.LARGE)
+ keyguardClockRepository.setClockSize(ClockSize.SMALL)
+ assertThat(value).isEqualTo(ClockSize.SMALL)
+
+ keyguardClockRepository.setClockSize(ClockSize.LARGE)
+ assertThat(value).isEqualTo(ClockSize.LARGE)
+ }
}
@Test
fun isLargeClockVisible_whenLargeClockSize_isTrue() =
testScope.runTest {
- kosmos.keyguardClockRepository.setClockSize(KeyguardClockSwitch.LARGE)
val value by collectLastValue(underTest.isLargeClockVisible)
+ kosmos.keyguardClockRepository.setClockSize(ClockSize.LARGE)
assertThat(value).isEqualTo(true)
}
@Test
fun isLargeClockVisible_whenSmallClockSize_isFalse() =
testScope.runTest {
- kosmos.keyguardClockRepository.setClockSize(KeyguardClockSwitch.SMALL)
val value by collectLastValue(underTest.isLargeClockVisible)
+ kosmos.keyguardClockRepository.setClockSize(ClockSize.SMALL)
assertThat(value).isEqualTo(false)
}
@@ -203,44 +222,59 @@
@EnableFlags(Flags.FLAG_COMPOSE_LOCKSCREEN)
fun testSmallClockTop_splitShade_composeLockscreenOn() =
testScope.runTest {
- kosmos.shadeRepository.setShadeMode(ShadeMode.Split)
- assertThat(underTest.getSmallClockTopMargin(context))
- .isEqualTo(
- context.resources.getDimensionPixelSize(
- R.dimen.keyguard_split_shade_top_margin
- ) - Utils.getStatusBarHeaderHeightKeyguard(context)
- )
+ with(kosmos) {
+ shadeRepository.setShadeMode(ShadeMode.Split)
+ fakeSystemBarUtilsProxy.fakeKeyguardStatusBarHeight = KEYGUARD_STATUS_BAR_HEIGHT
+ }
+
+ val expected =
+ res.getDimensionPixelSize(R.dimen.keyguard_split_shade_top_margin) -
+ KEYGUARD_STATUS_BAR_HEIGHT
+ assertThat(underTest.getSmallClockTopMargin()).isEqualTo(expected)
}
@Test
@DisableFlags(Flags.FLAG_COMPOSE_LOCKSCREEN)
fun testSmallClockTop_splitShade_composeLockscreenOff() =
testScope.runTest {
- kosmos.shadeRepository.setShadeMode(ShadeMode.Split)
- assertThat(underTest.getSmallClockTopMargin(context))
- .isEqualTo(
- context.resources.getDimensionPixelSize(R.dimen.keyguard_split_shade_top_margin)
- )
+ with(kosmos) {
+ shadeRepository.setShadeMode(ShadeMode.Split)
+ fakeSystemBarUtilsProxy.fakeKeyguardStatusBarHeight = KEYGUARD_STATUS_BAR_HEIGHT
+ }
+
+ assertThat(underTest.getSmallClockTopMargin())
+ .isEqualTo(res.getDimensionPixelSize(R.dimen.keyguard_split_shade_top_margin))
}
@Test
@EnableFlags(Flags.FLAG_COMPOSE_LOCKSCREEN)
fun testSmallClockTop_nonSplitShade_composeLockscreenOn() =
testScope.runTest {
- assertThat(underTest.getSmallClockTopMargin(context))
- .isEqualTo(
- context.resources.getDimensionPixelSize(R.dimen.keyguard_clock_top_margin)
- )
+ with(kosmos) {
+ shadeRepository.setShadeMode(ShadeMode.Single)
+ fakeSystemBarUtilsProxy.fakeKeyguardStatusBarHeight = KEYGUARD_STATUS_BAR_HEIGHT
+ }
+
+ assertThat(underTest.getSmallClockTopMargin())
+ .isEqualTo(res.getDimensionPixelSize(R.dimen.keyguard_clock_top_margin))
}
@Test
@DisableFlags(Flags.FLAG_COMPOSE_LOCKSCREEN)
fun testSmallClockTop_nonSplitShade_composeLockscreenOff() =
testScope.runTest {
- assertThat(underTest.getSmallClockTopMargin(context))
- .isEqualTo(
- context.resources.getDimensionPixelSize(R.dimen.keyguard_clock_top_margin) +
- Utils.getStatusBarHeaderHeightKeyguard(context)
- )
+ with(kosmos) {
+ shadeRepository.setShadeMode(ShadeMode.Single)
+ fakeSystemBarUtilsProxy.fakeKeyguardStatusBarHeight = KEYGUARD_STATUS_BAR_HEIGHT
+ }
+
+ val expected =
+ res.getDimensionPixelSize(R.dimen.keyguard_clock_top_margin) +
+ KEYGUARD_STATUS_BAR_HEIGHT
+ assertThat(underTest.getSmallClockTopMargin()).isEqualTo(expected)
}
+
+ companion object {
+ private const val KEYGUARD_STATUS_BAR_HEIGHT = 20
+ }
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardQuickAffordancesCombinedViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardQuickAffordancesCombinedViewModelTest.kt
index b80dcd4..83382207 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardQuickAffordancesCombinedViewModelTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardQuickAffordancesCombinedViewModelTest.kt
@@ -49,13 +49,17 @@
import com.android.systemui.keyguard.shared.quickaffordance.ActivationState
import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordancePosition
import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordancesMetricsLogger
+import com.android.systemui.kosmos.testDispatcher
+import com.android.systemui.kosmos.testScope
import com.android.systemui.plugins.ActivityStarter
import com.android.systemui.res.R
+import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.settings.UserFileManager
import com.android.systemui.settings.UserTracker
import com.android.systemui.shade.domain.interactor.ShadeInteractor
import com.android.systemui.shared.keyguard.shared.model.KeyguardQuickAffordanceSlots
import com.android.systemui.statusbar.policy.KeyguardStateController
+import com.android.systemui.testKosmos
import com.android.systemui.util.FakeSharedPreferences
import com.android.systemui.util.mockito.mock
import com.android.systemui.util.mockito.whenever
@@ -67,8 +71,6 @@
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.emptyFlow
import kotlinx.coroutines.flow.map
-import kotlinx.coroutines.test.StandardTestDispatcher
-import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runTest
import org.junit.Before
import org.junit.Test
@@ -141,9 +143,11 @@
GlanceableHubToLockscreenTransitionViewModel
@Mock private lateinit var transitionInteractor: KeyguardTransitionInteractor
+ private val kosmos = testKosmos()
+
private lateinit var underTest: KeyguardQuickAffordancesCombinedViewModel
- private lateinit var testScope: TestScope
+ private val testScope = kosmos.testScope
private lateinit var repository: FakeKeyguardRepository
private lateinit var homeControlsQuickAffordanceConfig: FakeKeyguardQuickAffordanceConfig
private lateinit var quickAccessWalletAffordanceConfig: FakeKeyguardQuickAffordanceConfig
@@ -201,8 +205,6 @@
whenever(userTracker.userHandle).thenReturn(mock())
whenever(lockPatternUtils.getStrongAuthForUser(ArgumentMatchers.anyInt()))
.thenReturn(LockPatternUtils.StrongAuthTracker.STRONG_AUTH_NOT_REQUIRED)
- val testDispatcher = StandardTestDispatcher()
- testScope = TestScope(testDispatcher)
val localUserSelectionManager =
KeyguardQuickAffordanceLocalUserSelectionManager(
@@ -238,7 +240,7 @@
legacySettingSyncer =
KeyguardQuickAffordanceLegacySettingSyncer(
scope = testScope.backgroundScope,
- backgroundDispatcher = testDispatcher,
+ backgroundDispatcher = kosmos.testDispatcher,
secureSettings = FakeSettings(),
selectionsManager = localUserSelectionManager,
),
@@ -301,8 +303,9 @@
devicePolicyManager = devicePolicyManager,
dockManager = dockManager,
biometricSettingsRepository = biometricSettingsRepository,
- backgroundDispatcher = testDispatcher,
+ backgroundDispatcher = kosmos.testDispatcher,
appContext = mContext,
+ sceneInteractor = { kosmos.sceneInteractor },
),
keyguardInteractor = keyguardInteractor,
shadeInteractor = shadeInteractor,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/util/KeyguardTransitionRepositorySpySubject.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/util/KeyguardTransitionRepositorySpySubject.kt
index a08e491..af785c2 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/util/KeyguardTransitionRepositorySpySubject.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/util/KeyguardTransitionRepositorySpySubject.kt
@@ -21,6 +21,8 @@
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.TransitionInfo
import com.android.systemui.keyguard.shared.model.TransitionModeOnCanceled
+import com.android.systemui.util.mockito.any
+import com.android.systemui.util.mockito.withArgCaptor
import com.google.common.truth.FailureMetadata
import com.google.common.truth.Subject
import com.google.common.truth.Truth
@@ -28,6 +30,8 @@
import junit.framework.Assert.assertEquals
import kotlin.test.fail
import org.mockito.Mockito
+import org.mockito.Mockito.never
+import org.mockito.Mockito.verify
/** [Subject] used to make assertions about a [Mockito.spy] KeyguardTransitionRepository. */
class KeyguardTransitionRepositorySpySubject
@@ -75,34 +79,19 @@
animatorAssertion: (Subject) -> Unit,
modeOnCanceled: TransitionModeOnCanceled? = null,
) {
- // TODO(b/331799060): Remove this workaround once atest supports mocking suspend functions.
- Mockito.mockingDetails(repository).invocations.forEach { invocation ->
- if (invocation.method.equals(KeyguardTransitionRepository::startTransition.name)) {
- val transitionInfo = invocation.arguments.firstOrNull() as TransitionInfo
+ withArgCaptor<TransitionInfo> { verify(repository).startTransition(capture()) }
+ .also { transitionInfo ->
assertEquals(to, transitionInfo.to)
animatorAssertion.invoke(Truth.assertThat(transitionInfo.animator))
from?.let { assertEquals(it, transitionInfo.from) }
ownerName?.let { assertEquals(it, transitionInfo.ownerName) }
modeOnCanceled?.let { assertEquals(it, transitionInfo.modeOnCanceled) }
- invocation.markVerified()
}
- }
}
/** Verifies that [KeyguardTransitionRepository.startTransition] was never called. */
suspend fun noTransitionsStarted() {
- // TODO(b/331799060): Remove this workaround once atest supports mocking suspend functions.
- Mockito.mockingDetails(repository).invocations.forEach {
- if (
- it.method.equals(KeyguardTransitionRepository::startTransition.name) &&
- !it.isVerified
- ) {
- fail(
- "Expected no transitions started, however this transition was started: " +
- it.arguments.firstOrNull()
- )
- }
- }
+ verify(repository, never()).startTransition(any())
}
companion object {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/controls/domain/pipeline/MediaDataFilterImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/controls/domain/pipeline/MediaDataFilterImplTest.kt
index 8f73811..b3cfcf2 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/media/controls/domain/pipeline/MediaDataFilterImplTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/media/controls/domain/pipeline/MediaDataFilterImplTest.kt
@@ -28,6 +28,7 @@
import com.android.systemui.media.controls.MediaTestUtils
import com.android.systemui.media.controls.data.repository.MediaFilterRepository
import com.android.systemui.media.controls.shared.model.EXTRA_KEY_TRIGGER_RESUME
+import com.android.systemui.media.controls.shared.model.MediaCommonModel
import com.android.systemui.media.controls.shared.model.MediaData
import com.android.systemui.media.controls.shared.model.MediaDataLoadingModel
import com.android.systemui.media.controls.shared.model.SmartspaceMediaData
@@ -165,86 +166,88 @@
@Test
fun onDataLoadedForCurrentUser_updatesLoadedStates() =
testScope.runTest {
- val mediaDataLoadedStates by collectLastValue(repository.mediaDataLoadedStates)
- val mediaDataLoadingModel = listOf(MediaDataLoadingModel.Loaded(dataMain.instanceId))
+ val sortedMedia by collectLastValue(repository.sortedMedia)
+ val mediaCommonModel =
+ MediaCommonModel.MediaControl(MediaDataLoadingModel.Loaded(dataMain.instanceId))
mediaDataFilter.onMediaDataLoaded(KEY, null, dataMain)
verify(listener)
.onMediaDataLoaded(eq(KEY), eq(null), eq(dataMain), eq(true), eq(0), eq(false))
- assertThat(mediaDataLoadedStates).isEqualTo(mediaDataLoadingModel)
+ assertThat(sortedMedia?.values).containsExactly(mediaCommonModel)
}
@Test
fun onDataLoadedForGuest_doesNotUpdateLoadedStates() =
testScope.runTest {
- val mediaDataLoadedStates by collectLastValue(repository.mediaDataLoadedStates)
- val mediaLoadedStatesModel = listOf(MediaDataLoadingModel.Loaded(dataMain.instanceId))
+ val sortedMedia by collectLastValue(repository.sortedMedia)
+ val mediaCommonModel =
+ MediaCommonModel.MediaControl(MediaDataLoadingModel.Loaded(dataMain.instanceId))
mediaDataFilter.onMediaDataLoaded(KEY, null, dataGuest)
verify(listener, never())
.onMediaDataLoaded(any(), any(), any(), anyBoolean(), anyInt(), anyBoolean())
- assertThat(mediaDataLoadedStates).isNotEqualTo(mediaLoadedStatesModel)
+ assertThat(sortedMedia?.values).doesNotContain(mediaCommonModel)
}
@Test
fun onRemovedForCurrent_updatesLoadedStates() =
testScope.runTest {
- val mediaDataLoadedStates by collectLastValue(repository.mediaDataLoadedStates)
- val mediaLoadedStatesModel =
- mutableListOf(MediaDataLoadingModel.Loaded(dataMain.instanceId))
+ val sortedMedia by collectLastValue(repository.sortedMedia)
+ val mediaCommonModel =
+ MediaCommonModel.MediaControl(MediaDataLoadingModel.Loaded(dataMain.instanceId))
// GIVEN a media was removed for main user
mediaDataFilter.onMediaDataLoaded(KEY, null, dataMain)
- assertThat(mediaDataLoadedStates).isEqualTo(mediaLoadedStatesModel)
+ assertThat(sortedMedia?.values).containsExactly(mediaCommonModel)
- mediaLoadedStatesModel.remove(MediaDataLoadingModel.Loaded(dataMain.instanceId))
mediaDataFilter.onMediaDataRemoved(KEY)
verify(listener).onMediaDataRemoved(eq(KEY))
- assertThat(mediaDataLoadedStates).isEqualTo(mediaLoadedStatesModel)
+ assertThat(sortedMedia?.values).doesNotContain(mediaCommonModel)
}
@Test
fun onRemovedForGuest_doesNotUpdateLoadedStates() =
testScope.runTest {
- val mediaDataLoadedStates by collectLastValue(repository.mediaDataLoadedStates)
+ val sortedMedia by collectLastValue(repository.sortedMedia)
// GIVEN a media was removed for guest user
mediaDataFilter.onMediaDataLoaded(KEY, null, dataGuest)
mediaDataFilter.onMediaDataRemoved(KEY)
verify(listener, never()).onMediaDataRemoved(eq(KEY))
- assertThat(mediaDataLoadedStates).isEmpty()
+ assertThat(sortedMedia).isEmpty()
}
@Test
fun onUserSwitched_removesOldUserControls() =
testScope.runTest {
- val mediaDataLoadedStates by collectLastValue(repository.mediaDataLoadedStates)
- val mediaLoadedStatesModel = listOf(MediaDataLoadingModel.Loaded(dataMain.instanceId))
+ val sortedMedia by collectLastValue(repository.sortedMedia)
+ val mediaLoaded = MediaDataLoadingModel.Loaded(dataMain.instanceId)
// GIVEN that we have a media loaded for main user
mediaDataFilter.onMediaDataLoaded(KEY, null, dataMain)
- assertThat(mediaDataLoadedStates).isEqualTo(mediaLoadedStatesModel)
+ assertThat(sortedMedia?.values)
+ .containsExactly(MediaCommonModel.MediaControl(mediaLoaded))
// and we switch to guest user
setUser(USER_GUEST)
// THEN we should remove the main user's media
verify(listener).onMediaDataRemoved(eq(KEY))
- assertThat(mediaDataLoadedStates).isEmpty()
+ assertThat(sortedMedia).isEmpty()
}
@Test
fun onUserSwitched_addsNewUserControls() =
testScope.runTest {
- val mediaDataLoadedStates by collectLastValue(repository.mediaDataLoadedStates)
- val guestLoadedStatesModel = listOf(MediaDataLoadingModel.Loaded(dataGuest.instanceId))
- val mainLoadedStatesModel = listOf(MediaDataLoadingModel.Loaded(dataMain.instanceId))
+ val sortedMedia by collectLastValue(repository.sortedMedia)
+ val guestLoadedStatesModel = MediaDataLoadingModel.Loaded(dataGuest.instanceId)
+ val mainLoadedStatesModel = MediaDataLoadingModel.Loaded(dataMain.instanceId)
// GIVEN that we had some media for both users
mediaDataFilter.onMediaDataLoaded(KEY, null, dataMain)
@@ -267,14 +270,16 @@
anyInt(),
anyBoolean()
)
- assertThat(mediaDataLoadedStates).isEqualTo(guestLoadedStatesModel)
- assertThat(mediaDataLoadedStates).isNotEqualTo(mainLoadedStatesModel)
+ assertThat(sortedMedia?.values)
+ .containsExactly(MediaCommonModel.MediaControl(guestLoadedStatesModel))
+ assertThat(sortedMedia?.values)
+ .doesNotContain(MediaCommonModel.MediaControl(mainLoadedStatesModel))
}
@Test
fun onProfileChanged_profileUnavailable_updateStates() =
testScope.runTest {
- val mediaDataLoadedStates by collectLastValue(repository.mediaDataLoadedStates)
+ val sortedMedia by collectLastValue(repository.sortedMedia)
// GIVEN that we had some media for both profiles
mediaDataFilter.onMediaDataLoaded(KEY, null, dataMain)
@@ -283,10 +288,11 @@
// and we change profile status
setPrivateProfileUnavailable()
- val mediaLoadedStatesModel = listOf(MediaDataLoadingModel.Loaded(dataMain.instanceId))
+ val mediaLoadedStatesModel = MediaDataLoadingModel.Loaded(dataMain.instanceId)
// THEN we should remove the private profile media
verify(listener).onMediaDataRemoved(eq(KEY_ALT))
- assertThat(mediaDataLoadedStates).isEqualTo(mediaLoadedStatesModel)
+ assertThat(sortedMedia?.values)
+ .containsExactly(MediaCommonModel.MediaControl(mediaLoadedStatesModel))
}
@Test
@@ -515,14 +521,14 @@
val selectedUserEntries by collectLastValue(repository.selectedUserEntries)
val smartspaceMediaData by collectLastValue(repository.smartspaceMediaData)
val reactivatedKey by collectLastValue(repository.reactivatedId)
- val recommendationsLoadingState by
- collectLastValue(repository.recommendationsLoadingState)
+ val sortedMedia by collectLastValue(repository.sortedMedia)
val recommendationsLoadingModel =
SmartspaceMediaLoadingModel.Loaded(SMARTSPACE_KEY, isPrioritized = true)
mediaDataFilter.onSmartspaceMediaDataLoaded(SMARTSPACE_KEY, smartspaceData)
- assertThat(recommendationsLoadingState).isEqualTo(recommendationsLoadingModel)
+ assertThat(sortedMedia?.values)
+ .containsExactly(MediaCommonModel.MediaRecommendations(recommendationsLoadingModel))
assertThat(
hasActiveMediaOrRecommendation(
selectedUserEntries,
@@ -544,14 +550,13 @@
val selectedUserEntries by collectLastValue(repository.selectedUserEntries)
val smartspaceMediaData by collectLastValue(repository.smartspaceMediaData)
val reactivatedKey by collectLastValue(repository.reactivatedId)
- val recommendationsLoadingState by
- collectLastValue(repository.recommendationsLoadingState)
+ val sortedMedia by collectLastValue(repository.sortedMedia)
whenever(smartspaceData.isActive).thenReturn(false)
mediaDataFilter.onSmartspaceMediaDataLoaded(SMARTSPACE_KEY, smartspaceData)
- assertThat(recommendationsLoadingState).isEqualTo(SmartspaceMediaLoadingModel.Unknown)
+ assertThat(sortedMedia).isEmpty()
assertThat(
hasActiveMediaOrRecommendation(
selectedUserEntries,
@@ -574,16 +579,22 @@
val selectedUserEntries by collectLastValue(repository.selectedUserEntries)
val smartspaceMediaData by collectLastValue(repository.smartspaceMediaData)
val reactivatedKey by collectLastValue(repository.reactivatedId)
- val recommendationsLoadingState by
- collectLastValue(repository.recommendationsLoadingState)
- val recommendationsLoadingModel =
- SmartspaceMediaLoadingModel.Loaded(SMARTSPACE_KEY, isPrioritized = true)
+ val sortedMedia by collectLastValue(repository.sortedMedia)
+ val recsCommonModel =
+ MediaCommonModel.MediaRecommendations(
+ SmartspaceMediaLoadingModel.Loaded(SMARTSPACE_KEY, isPrioritized = true)
+ )
+ val controlCommonModel =
+ MediaCommonModel.MediaControl(
+ MediaDataLoadingModel.Loaded(dataMain.instanceId),
+ true
+ )
val dataOld = dataMain.copy(active = false, lastActive = clock.elapsedRealtime())
mediaDataFilter.onMediaDataLoaded(KEY, null, dataOld)
clock.advanceTime(MediaDataFilterImpl.SMARTSPACE_MAX_AGE + 100)
mediaDataFilter.onSmartspaceMediaDataLoaded(SMARTSPACE_KEY, smartspaceData)
- assertThat(recommendationsLoadingState).isEqualTo(recommendationsLoadingModel)
+ assertThat(sortedMedia?.values).containsExactly(recsCommonModel, controlCommonModel)
assertThat(
hasActiveMediaOrRecommendation(
selectedUserEntries,
@@ -605,8 +616,7 @@
val selectedUserEntries by collectLastValue(repository.selectedUserEntries)
val smartspaceMediaData by collectLastValue(repository.smartspaceMediaData)
val reactivatedKey by collectLastValue(repository.reactivatedId)
- val recommendationsLoadingState by
- collectLastValue(repository.recommendationsLoadingState)
+ val sortedMedia by collectLastValue(repository.sortedMedia)
whenever(smartspaceData.isActive).thenReturn(false)
val dataOld = dataMain.copy(active = false, lastActive = clock.elapsedRealtime())
@@ -614,7 +624,12 @@
clock.advanceTime(MediaDataFilterImpl.SMARTSPACE_MAX_AGE + 100)
mediaDataFilter.onSmartspaceMediaDataLoaded(SMARTSPACE_KEY, smartspaceData)
- assertThat(recommendationsLoadingState).isEqualTo(SmartspaceMediaLoadingModel.Unknown)
+ assertThat(sortedMedia?.values)
+ .doesNotContain(
+ MediaCommonModel.MediaRecommendations(
+ SmartspaceMediaLoadingModel.Loaded(SMARTSPACE_KEY)
+ )
+ )
assertThat(
hasActiveMediaOrRecommendation(
selectedUserEntries,
@@ -635,18 +650,20 @@
val selectedUserEntries by collectLastValue(repository.selectedUserEntries)
val smartspaceMediaData by collectLastValue(repository.smartspaceMediaData)
val reactivatedKey by collectLastValue(repository.reactivatedId)
- val recommendationsLoadingState by
- collectLastValue(repository.recommendationsLoadingState)
- val mediaDataLoadedStates by collectLastValue(repository.mediaDataLoadedStates)
+ val sortedMedia by collectLastValue(repository.sortedMedia)
whenever(smartspaceData.isActive).thenReturn(false)
// WHEN we have media that was recently played, but not currently active
val dataCurrent = dataMain.copy(active = false, lastActive = clock.elapsedRealtime())
- val mediaLoadedStatesModel = listOf(MediaDataLoadingModel.Loaded(dataMain.instanceId))
+ val controlCommonModel =
+ MediaCommonModel.MediaControl(
+ MediaDataLoadingModel.Loaded(dataMain.instanceId),
+ true
+ )
mediaDataFilter.onMediaDataLoaded(KEY, null, dataCurrent)
- assertThat(mediaDataLoadedStates).isEqualTo(mediaLoadedStatesModel)
+ assertThat(sortedMedia?.values).containsExactly(controlCommonModel)
verify(listener)
.onMediaDataLoaded(eq(KEY), eq(null), eq(dataCurrent), eq(true), eq(0), eq(false))
@@ -654,7 +671,7 @@
mediaDataFilter.onSmartspaceMediaDataLoaded(SMARTSPACE_KEY, smartspaceData)
// THEN we should treat the media as not active instead
- assertThat(recommendationsLoadingState).isEqualTo(SmartspaceMediaLoadingModel.Unknown)
+ assertThat(sortedMedia?.values).containsExactly(controlCommonModel)
assertThat(
hasActiveMediaOrRecommendation(
selectedUserEntries,
@@ -677,16 +694,18 @@
val selectedUserEntries by collectLastValue(repository.selectedUserEntries)
val smartspaceMediaData by collectLastValue(repository.smartspaceMediaData)
val reactivatedKey by collectLastValue(repository.reactivatedId)
- val recommendationsLoadingState by
- collectLastValue(repository.recommendationsLoadingState)
- val mediaDataLoadedStates by collectLastValue(repository.mediaDataLoadedStates)
+ val sortedMedia by collectLastValue(repository.sortedMedia)
whenever(smartspaceData.isValid()).thenReturn(false)
// WHEN we have media that was recently played, but not currently active
val dataCurrent = dataMain.copy(active = false, lastActive = clock.elapsedRealtime())
- val mediaLoadedStatesModel = listOf(MediaDataLoadingModel.Loaded(dataMain.instanceId))
+ val controlCommonModel =
+ MediaCommonModel.MediaControl(
+ MediaDataLoadingModel.Loaded(dataMain.instanceId),
+ true
+ )
mediaDataFilter.onMediaDataLoaded(KEY, null, dataCurrent)
- assertThat(mediaDataLoadedStates).isEqualTo(mediaLoadedStatesModel)
+ assertThat(sortedMedia?.values).containsExactly(controlCommonModel)
verify(listener)
.onMediaDataLoaded(eq(KEY), eq(null), eq(dataCurrent), eq(true), eq(0), eq(false))
@@ -696,7 +715,7 @@
// THEN we should treat the media as active instead
val dataCurrentAndActive = dataCurrent.copy(active = true)
- assertThat(mediaDataLoadedStates).isEqualTo(mediaLoadedStatesModel)
+ assertThat(sortedMedia?.values).containsExactly(controlCommonModel)
assertThat(
hasActiveMediaOrRecommendation(
selectedUserEntries,
@@ -715,7 +734,6 @@
eq(true)
)
// Smartspace update shouldn't be propagated for the empty rec list.
- assertThat(recommendationsLoadingState).isEqualTo(SmartspaceMediaLoadingModel.Unknown)
verify(listener, never()).onSmartspaceMediaDataLoaded(any(), any(), anyBoolean())
verify(logger, never()).logRecommendationAdded(any(), any())
verify(logger).logRecommendationActivated(eq(APP_UID), eq(PACKAGE), eq(INSTANCE_ID))
@@ -727,17 +745,22 @@
val selectedUserEntries by collectLastValue(repository.selectedUserEntries)
val smartspaceMediaData by collectLastValue(repository.smartspaceMediaData)
val reactivatedKey by collectLastValue(repository.reactivatedId)
- val recommendationsLoadingState by
- collectLastValue(repository.recommendationsLoadingState)
- val mediaDataLoadedStates by collectLastValue(repository.mediaDataLoadedStates)
+ val sortedMedia by collectLastValue(repository.sortedMedia)
// WHEN we have media that was recently played, but not currently active
val dataCurrent = dataMain.copy(active = false, lastActive = clock.elapsedRealtime())
- val mediaDataLoadingModel = listOf(MediaDataLoadingModel.Loaded(dataMain.instanceId))
- val recommendationsLoadingModel = SmartspaceMediaLoadingModel.Loaded(SMARTSPACE_KEY)
+ val controlCommonModel =
+ MediaCommonModel.MediaControl(
+ MediaDataLoadingModel.Loaded(dataMain.instanceId),
+ true
+ )
+ val recsCommonModel =
+ MediaCommonModel.MediaRecommendations(
+ SmartspaceMediaLoadingModel.Loaded(SMARTSPACE_KEY)
+ )
mediaDataFilter.onMediaDataLoaded(KEY, null, dataCurrent)
- assertThat(mediaDataLoadedStates).isEqualTo(mediaDataLoadingModel)
+ assertThat(sortedMedia?.values).containsExactly(controlCommonModel)
verify(listener)
.onMediaDataLoaded(eq(KEY), eq(null), eq(dataCurrent), eq(true), eq(0), eq(false))
@@ -756,7 +779,6 @@
eq(100),
eq(true)
)
- assertThat(mediaDataLoadedStates).isEqualTo(mediaDataLoadingModel)
assertThat(
hasActiveMediaOrRecommendation(
selectedUserEntries,
@@ -766,7 +788,7 @@
)
.isTrue()
// Smartspace update should also be propagated but not prioritized.
- assertThat(recommendationsLoadingState).isEqualTo(recommendationsLoadingModel)
+ assertThat(sortedMedia?.values).containsExactly(controlCommonModel, recsCommonModel)
verify(listener)
.onSmartspaceMediaDataLoaded(eq(SMARTSPACE_KEY), eq(smartspaceData), eq(false))
verify(logger).logRecommendationAdded(SMARTSPACE_PACKAGE, SMARTSPACE_INSTANCE_ID)
@@ -779,15 +801,13 @@
val selectedUserEntries by collectLastValue(repository.selectedUserEntries)
val smartspaceMediaData by collectLastValue(repository.smartspaceMediaData)
val reactivatedKey by collectLastValue(repository.reactivatedId)
- val recommendationsLoadingState by
- collectLastValue(repository.recommendationsLoadingState)
- val recommendationsLoadingModel = SmartspaceMediaLoadingModel.Removed(SMARTSPACE_KEY)
+ val sortedMedia by collectLastValue(repository.sortedMedia)
mediaDataFilter.onSmartspaceMediaDataLoaded(SMARTSPACE_KEY, smartspaceData)
mediaDataFilter.onSmartspaceMediaDataRemoved(SMARTSPACE_KEY)
verify(listener).onSmartspaceMediaDataRemoved(SMARTSPACE_KEY)
- assertThat(recommendationsLoadingState).isEqualTo(recommendationsLoadingModel)
+ assertThat(sortedMedia?.values).isEmpty()
assertThat(
hasActiveMediaOrRecommendation(
selectedUserEntries,
@@ -805,15 +825,16 @@
val selectedUserEntries by collectLastValue(repository.selectedUserEntries)
val smartspaceMediaData by collectLastValue(repository.smartspaceMediaData)
val reactivatedKey by collectLastValue(repository.reactivatedId)
- val mediaDataLoadedStates by collectLastValue(repository.mediaDataLoadedStates)
- val recommendationsLoadingState by
- collectLastValue(repository.recommendationsLoadingState)
- val recommendationsLoadingModel = SmartspaceMediaLoadingModel.Removed(SMARTSPACE_KEY)
- val mediaLoadedStatesModel = listOf(MediaDataLoadingModel.Loaded(dataMain.instanceId))
+ val sortedMedia by collectLastValue(repository.sortedMedia)
+ val controlCommonModel =
+ MediaCommonModel.MediaControl(
+ MediaDataLoadingModel.Loaded(dataMain.instanceId),
+ true
+ )
val dataCurrent = dataMain.copy(active = false, lastActive = clock.elapsedRealtime())
mediaDataFilter.onMediaDataLoaded(KEY, null, dataCurrent)
- assertThat(mediaDataLoadedStates).isEqualTo(mediaLoadedStatesModel)
+ assertThat(sortedMedia?.values).containsExactly(controlCommonModel)
verify(listener)
.onMediaDataLoaded(eq(KEY), eq(null), eq(dataCurrent), eq(true), eq(0), eq(false))
@@ -830,12 +851,11 @@
eq(100),
eq(true)
)
- assertThat(mediaDataLoadedStates).isEqualTo(mediaLoadedStatesModel)
mediaDataFilter.onSmartspaceMediaDataRemoved(SMARTSPACE_KEY)
verify(listener).onSmartspaceMediaDataRemoved(SMARTSPACE_KEY)
- assertThat(recommendationsLoadingState).isEqualTo(recommendationsLoadingModel)
+ assertThat(sortedMedia?.values).containsExactly(controlCommonModel)
assertThat(
hasActiveMediaOrRecommendation(
selectedUserEntries,
@@ -853,9 +873,11 @@
val selectedUserEntries by collectLastValue(repository.selectedUserEntries)
val smartspaceMediaData by collectLastValue(repository.smartspaceMediaData)
val reactivatedKey by collectLastValue(repository.reactivatedId)
- val recommendationsLoadingState by
- collectLastValue(repository.recommendationsLoadingState)
- val recommendationsLoadingModel = SmartspaceMediaLoadingModel.Loaded(SMARTSPACE_KEY)
+ val sortedMedia by collectLastValue(repository.sortedMedia)
+ val recsCommonModel =
+ MediaCommonModel.MediaRecommendations(
+ SmartspaceMediaLoadingModel.Loaded(SMARTSPACE_KEY)
+ )
whenever(mediaFlags.isPersistentSsCardEnabled()).thenReturn(true)
whenever(smartspaceData.isActive).thenReturn(false)
@@ -863,7 +885,7 @@
verify(listener)
.onSmartspaceMediaDataLoaded(eq(SMARTSPACE_KEY), eq(smartspaceData), eq(false))
- assertThat(recommendationsLoadingState).isEqualTo(recommendationsLoadingModel)
+ assertThat(sortedMedia?.values).containsExactly(recsCommonModel)
assertThat(
hasActiveMediaOrRecommendation(
selectedUserEntries,
@@ -882,11 +904,16 @@
val selectedUserEntries by collectLastValue(repository.selectedUserEntries)
val smartspaceMediaData by collectLastValue(repository.smartspaceMediaData)
val reactivatedKey by collectLastValue(repository.reactivatedId)
- val mediaDataLoadedStates by collectLastValue(repository.mediaDataLoadedStates)
- val recommendationsLoadingState by
- collectLastValue(repository.recommendationsLoadingState)
- val recommendationsLoadingModel = SmartspaceMediaLoadingModel.Loaded(SMARTSPACE_KEY)
- val mediaLoadedStatesModel = listOf(MediaDataLoadingModel.Loaded(dataMain.instanceId))
+ val sortedMedia by collectLastValue(repository.sortedMedia)
+ val recsCommonModel =
+ MediaCommonModel.MediaRecommendations(
+ SmartspaceMediaLoadingModel.Loaded(SMARTSPACE_KEY)
+ )
+ val controlCommonModel =
+ MediaCommonModel.MediaControl(
+ MediaDataLoadingModel.Loaded(dataMain.instanceId),
+ true
+ )
whenever(mediaFlags.isPersistentSsCardEnabled()).thenReturn(true)
whenever(smartspaceData.isActive).thenReturn(false)
@@ -897,7 +924,7 @@
verify(listener)
.onMediaDataLoaded(eq(KEY), eq(null), eq(dataCurrent), eq(true), eq(0), eq(false))
- assertThat(mediaDataLoadedStates).isEqualTo(mediaLoadedStatesModel)
+ assertThat(sortedMedia?.values).containsExactly(controlCommonModel)
// And an inactive recommendation is loaded
mediaDataFilter.onSmartspaceMediaDataLoaded(SMARTSPACE_KEY, smartspaceData)
@@ -907,7 +934,7 @@
.onSmartspaceMediaDataLoaded(eq(SMARTSPACE_KEY), eq(smartspaceData), eq(false))
verify(listener, never())
.onMediaDataLoaded(any(), any(), any(), anyBoolean(), anyInt(), anyBoolean())
- assertThat(recommendationsLoadingState).isEqualTo(recommendationsLoadingModel)
+ assertThat(sortedMedia?.values).containsExactly(controlCommonModel, recsCommonModel)
assertThat(
hasActiveMediaOrRecommendation(
selectedUserEntries,
@@ -945,18 +972,23 @@
val selectedUserEntries by collectLastValue(repository.selectedUserEntries)
val smartspaceMediaData by collectLastValue(repository.smartspaceMediaData)
val reactivatedKey by collectLastValue(repository.reactivatedId)
- val mediaDataLoadedStates by collectLastValue(repository.mediaDataLoadedStates)
- val recommendationsLoadingState by
- collectLastValue(repository.recommendationsLoadingState)
- val recommendationsLoadingModel = SmartspaceMediaLoadingModel.Loaded(SMARTSPACE_KEY)
- val mediaLoadedStatesModel = listOf(MediaDataLoadingModel.Loaded(dataMain.instanceId))
+ val sortedMedia by collectLastValue(repository.sortedMedia)
+ val recsCommonModel =
+ MediaCommonModel.MediaRecommendations(
+ SmartspaceMediaLoadingModel.Loaded(SMARTSPACE_KEY)
+ )
+ val controlCommonModel =
+ MediaCommonModel.MediaControl(
+ MediaDataLoadingModel.Loaded(dataMain.instanceId),
+ true
+ )
// WHEN we have media that was recently played, but not currently active
val dataCurrent = dataMain.copy(active = false, lastActive = clock.elapsedRealtime())
mediaDataFilter.onMediaDataLoaded(KEY, null, dataCurrent)
verify(listener)
.onMediaDataLoaded(eq(KEY), eq(null), eq(dataCurrent), eq(true), eq(0), eq(false))
- assertThat(mediaDataLoadedStates).isEqualTo(mediaLoadedStatesModel)
+ assertThat(sortedMedia?.values).containsExactly(controlCommonModel)
// AND we get a smartspace signal with extra to trigger resume
runCurrent()
@@ -975,7 +1007,7 @@
eq(100),
eq(true)
)
- assertThat(mediaDataLoadedStates).isEqualTo(mediaLoadedStatesModel)
+ assertThat(sortedMedia?.values).containsExactly(controlCommonModel, recsCommonModel)
assertThat(
hasActiveMediaOrRecommendation(
selectedUserEntries,
@@ -985,7 +1017,6 @@
)
.isTrue()
// And update the smartspace data state, but not prioritized
- assertThat(recommendationsLoadingState).isEqualTo(recommendationsLoadingModel)
verify(listener)
.onSmartspaceMediaDataLoaded(eq(SMARTSPACE_KEY), eq(smartspaceData), eq(false))
}
@@ -993,11 +1024,16 @@
@Test
fun smartspaceLoaded_notShouldTriggerResume_doesNotTrigger() =
testScope.runTest {
- val mediaDataLoadedStates by collectLastValue(repository.mediaDataLoadedStates)
- val recommendationsLoadingState by
- collectLastValue(repository.recommendationsLoadingState)
- val recommendationsLoadingModel = SmartspaceMediaLoadingModel.Loaded(SMARTSPACE_KEY)
- val mediaLoadedStatesModel = listOf(MediaDataLoadingModel.Loaded(dataMain.instanceId))
+ val sortedMedia by collectLastValue(repository.sortedMedia)
+ val recsCommonModel =
+ MediaCommonModel.MediaRecommendations(
+ SmartspaceMediaLoadingModel.Loaded(SMARTSPACE_KEY)
+ )
+ val controlCommonModel =
+ MediaCommonModel.MediaControl(
+ MediaDataLoadingModel.Loaded(dataMain.instanceId),
+ true
+ )
// WHEN we have media that was recently played, but not currently active
val dataCurrent = dataMain.copy(active = false, lastActive = clock.elapsedRealtime())
@@ -1005,7 +1041,7 @@
verify(listener)
.onMediaDataLoaded(eq(KEY), eq(null), eq(dataCurrent), eq(true), eq(0), eq(false))
- assertThat(mediaDataLoadedStates).isEqualTo(mediaLoadedStatesModel)
+ assertThat(sortedMedia?.values).containsExactly(controlCommonModel)
// AND we get a smartspace signal with extra to not trigger resume
val extras = Bundle().apply { putBoolean(EXTRA_KEY_TRIGGER_RESUME, false) }
@@ -1018,7 +1054,7 @@
// But the smartspace update is still propagated
verify(listener)
.onSmartspaceMediaDataLoaded(eq(SMARTSPACE_KEY), eq(smartspaceData), eq(false))
- assertThat(recommendationsLoadingState).isEqualTo(recommendationsLoadingModel)
+ assertThat(sortedMedia?.values).containsExactly(controlCommonModel, recsCommonModel)
}
private fun hasActiveMediaOrRecommendation(
diff --git a/packages/SystemUI/tests/src/com/android/systemui/monet/ColorSchemeTest.kt b/packages/SystemUI/tests/src/com/android/systemui/monet/ColorSchemeTest.kt
index 261e8c0..9f0e67b 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/monet/ColorSchemeTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/monet/ColorSchemeTest.kt
@@ -15,7 +15,7 @@
*/
package com.android.systemui.monet
-import android.test.suitebuilder.annotation.SmallTest
+import androidx.test.filters.SmallTest
import android.testing.AndroidTestingRunner
import android.util.Log
import com.android.systemui.SysuiTestCase
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/panels/ui/viewmodel/TileGridViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/panels/ui/viewmodel/TileGridViewModelTest.kt
new file mode 100644
index 0000000..e8c5fd9
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/panels/ui/viewmodel/TileGridViewModelTest.kt
@@ -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.systemui.qs.panels.ui.viewmodel
+
+import android.testing.AndroidTestingRunner
+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.plugins.qs.QSTile
+import com.android.systemui.qs.FakeQSFactory
+import com.android.systemui.qs.pipeline.data.repository.tileSpecRepository
+import com.android.systemui.qs.pipeline.domain.interactor.FakeQSTile
+import com.android.systemui.qs.pipeline.shared.TileSpec
+import com.android.systemui.qs.qsTileFactory
+import com.android.systemui.testKosmos
+import kotlinx.coroutines.test.runTest
+import org.junit.Assert
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@SmallTest
+@RunWith(AndroidTestingRunner::class)
+class TileGridViewModelTest : SysuiTestCase() {
+
+ private val kosmos = testKosmos().apply { qsTileFactory = FakeQSFactory(::tileCreator) }
+ private val underTest = with(kosmos) { tileGridViewModel }
+
+ @Test
+ fun noIconTiles() =
+ with(kosmos) {
+ testScope.runTest {
+ val latest by collectLastValue(underTest.tileViewModels)
+
+ tileSpecRepository.setTiles(
+ 0,
+ listOf(
+ TileSpec.create("bluetooth"),
+ TileSpec.create("internet"),
+ TileSpec.create("alarm")
+ )
+ )
+
+ latest!!.forEach { Assert.assertFalse(it.iconOnly) }
+ }
+ }
+
+ @Test
+ fun withIconTiles() =
+ with(kosmos) {
+ testScope.runTest {
+ val latest by collectLastValue(underTest.tileViewModels)
+
+ tileSpecRepository.setTiles(
+ 0,
+ listOf(
+ TileSpec.create("airplane"),
+ TileSpec.create("flashlight"),
+ TileSpec.create("rotation")
+ )
+ )
+
+ latest!!.forEach { Assert.assertTrue(it.iconOnly) }
+ }
+ }
+
+ private fun tileCreator(spec: String): QSTile {
+ return FakeQSTile(0).apply { tileSpec = spec }
+ }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetAdapterTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetAdapterTest.java
index 8004c6d..ff712ad 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetAdapterTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetAdapterTest.java
@@ -20,10 +20,12 @@
import androidx.test.filters.SmallTest;
-import com.android.systemui.res.R;
import com.android.systemui.SysuiTestCase;
+import com.android.systemui.res.R;
import com.android.wifitrackerlib.WifiEntry;
+import kotlinx.coroutines.CoroutineScope;
+
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -50,6 +52,8 @@
public MockitoRule mRule = MockitoJUnit.rule();
@Spy
private Context mSpyContext = mContext;
+ @Mock
+ CoroutineScope mScope;
@Mock
private WifiEntry mInternetWifiEntry;
@@ -81,7 +85,7 @@
when(mWifiEntry.getTitle()).thenReturn(WIFI_TITLE);
when(mWifiEntry.getSummary(false)).thenReturn(WIFI_SUMMARY);
- mInternetAdapter = new InternetAdapter(mInternetDialogController);
+ mInternetAdapter = new InternetAdapter(mInternetDialogController, mScope);
mViewHolder = mInternetAdapter.onCreateViewHolder(new LinearLayout(mContext), 0);
mInternetAdapter.setWifiEntries(Arrays.asList(mWifiEntry), 1 /* wifiEntriesCount */);
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogDelegateTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogDelegateTest.java
index db9f5cf..6f88891 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogDelegateTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/dialog/InternetDialogDelegateTest.java
@@ -1,7 +1,9 @@
package com.android.systemui.qs.tiles.dialog;
import static com.android.systemui.qs.tiles.dialog.InternetDialogController.MAX_WIFI_ENTRY_COUNT;
+
import static com.google.common.truth.Truth.assertThat;
+
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
@@ -38,6 +40,8 @@
import com.android.systemui.util.time.FakeSystemClock;
import com.android.wifitrackerlib.WifiEntry;
+import kotlinx.coroutines.CoroutineScope;
+
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
@@ -64,6 +68,8 @@
@Mock
private Handler mHandler;
@Mock
+ CoroutineScope mScope;
+ @Mock
private TelephonyManager mTelephonyManager;
@Mock
private WifiEntry mInternetWifiEntry;
@@ -133,6 +139,7 @@
true,
true,
true,
+ mScope,
mock(UiEventLogger.class),
mDialogTransitionAnimator,
mHandler,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/settings/brightness/BrightnessSliderControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/settings/brightness/BrightnessSliderControllerTest.kt
index 6a22d86..fb91c78 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/settings/brightness/BrightnessSliderControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/settings/brightness/BrightnessSliderControllerTest.kt
@@ -24,7 +24,7 @@
import com.android.settingslib.RestrictedLockUtils
import com.android.systemui.SysuiTestCase
import com.android.systemui.classifier.FalsingManagerFake
-import com.android.systemui.haptics.slider.SeekableSliderHapticPlugin
+import com.android.systemui.haptics.slider.SeekbarHapticPlugin
import com.android.systemui.plugins.ActivityStarter
import com.android.systemui.statusbar.VibratorHelper
import com.android.systemui.statusbar.policy.BrightnessMirrorController
@@ -93,7 +93,7 @@
brightnessSliderView,
mFalsingManager,
uiEventLogger,
- SeekableSliderHapticPlugin(vibratorHelper, systemClock),
+ SeekbarHapticPlugin(vibratorHelper, systemClock),
activityStarter,
)
mController.init()
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/GlanceableHubContainerControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/GlanceableHubContainerControllerTest.kt
index ee03236..03f5ecf 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/shade/GlanceableHubContainerControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/GlanceableHubContainerControllerTest.kt
@@ -25,22 +25,24 @@
import android.view.View
import android.view.WindowManager
import android.widget.FrameLayout
+import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.LifecycleOwner
import androidx.test.filters.SmallTest
import com.android.compose.animation.scene.SceneKey
import com.android.systemui.Flags
import com.android.systemui.SysuiTestCase
+import com.android.systemui.ambient.touch.TouchHandler
+import com.android.systemui.ambient.touch.TouchMonitor
+import com.android.systemui.ambient.touch.dagger.AmbientTouchComponent
import com.android.systemui.communal.data.repository.FakeCommunalRepository
import com.android.systemui.communal.data.repository.fakeCommunalRepository
-import com.android.systemui.communal.domain.interactor.CommunalInteractor
import com.android.systemui.communal.domain.interactor.communalInteractor
import com.android.systemui.communal.domain.interactor.setCommunalAvailable
import com.android.systemui.communal.shared.model.CommunalScenes
import com.android.systemui.communal.ui.viewmodel.CommunalViewModel
import com.android.systemui.communal.util.CommunalColors
-import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
+import com.android.systemui.coroutines.collectLastValue
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
@@ -50,7 +52,6 @@
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
@@ -59,7 +60,6 @@
import kotlinx.coroutines.ExperimentalCoroutinesApi
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
@@ -86,16 +86,14 @@
@Mock private lateinit var communalViewModel: CommunalViewModel
@Mock private lateinit var powerManager: PowerManager
@Mock private lateinit var dialogFactory: SystemUIDialogFactory
+ @Mock private lateinit var touchMonitor: TouchMonitor
@Mock private lateinit var communalColors: CommunalColors
- private lateinit var keyguardTransitionInteractor: KeyguardTransitionInteractor
- private lateinit var shadeInteractor: ShadeInteractor
- private lateinit var keyguardInteractor: KeyguardInteractor
+ private lateinit var ambientTouchComponentFactory: AmbientTouchComponent.Factory
private lateinit var parentView: FrameLayout
private lateinit var containerView: View
private lateinit var testableLooper: TestableLooper
- private lateinit var communalInteractor: CommunalInteractor
private lateinit var communalRepository: FakeCommunalRepository
private lateinit var underTest: GlanceableHubContainerController
@@ -103,32 +101,37 @@
fun setUp() {
MockitoAnnotations.initMocks(this)
- communalInteractor = kosmos.communalInteractor
communalRepository = kosmos.fakeCommunalRepository
- keyguardTransitionInteractor = kosmos.keyguardTransitionInteractor
- keyguardInteractor = kosmos.keyguardInteractor
- shadeInteractor = kosmos.shadeInteractor
- underTest =
- GlanceableHubContainerController(
- communalInteractor,
- communalViewModel,
- dialogFactory,
- keyguardTransitionInteractor,
- keyguardInteractor,
- shadeInteractor,
- powerManager,
- communalColors,
- kosmos.sceneDataSourceDelegator,
- )
+ ambientTouchComponentFactory =
+ object : AmbientTouchComponent.Factory {
+ override fun create(
+ lifecycleOwner: LifecycleOwner,
+ touchHandlers: Set<TouchHandler>
+ ): AmbientTouchComponent =
+ object : AmbientTouchComponent {
+ override fun getTouchMonitor(): TouchMonitor = touchMonitor
+ }
+ }
+
+ with(kosmos) {
+ underTest =
+ GlanceableHubContainerController(
+ communalInteractor,
+ communalViewModel,
+ dialogFactory,
+ keyguardTransitionInteractor,
+ keyguardInteractor,
+ shadeInteractor,
+ powerManager,
+ communalColors,
+ ambientTouchComponentFactory,
+ kosmos.sceneDataSourceDelegator,
+ )
+ }
testableLooper = TestableLooper.get(this)
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(
- R.dimen.communal_bottom_edge_swipe_region_height,
- BOTTOM_SWIPE_REGION_WIDTH
- )
// Make communal available so that communalInteractor.desiredScene accurately reflects
// scene changes instead of just returning Blank.
@@ -160,6 +163,7 @@
shadeInteractor,
powerManager,
communalColors,
+ ambientTouchComponentFactory,
kosmos.sceneDataSourceDelegator,
)
@@ -214,62 +218,6 @@
}
@Test
- fun onTouchEvent_topSwipeWhenCommunalOpen_doesNotIntercept() =
- with(kosmos) {
- testScope.runTest {
- // Communal is open.
- goToScene(CommunalScenes.Communal)
-
- // 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() =
- with(kosmos) {
- testScope.runTest {
- // Communal is open.
- goToScene(CommunalScenes.Communal)
-
- // Touch event in the bottom swipe region is not intercepted.
- assertThat(underTest.onTouchEvent(DOWN_IN_BOTTOM_SWIPE_REGION_EVENT)).isFalse()
- }
- }
-
- @Test
- fun onTouchEvent_topSwipeWhenDreaming_doesNotIntercept() =
- with(kosmos) {
- testScope.runTest {
- // Communal is open.
- goToScene(CommunalScenes.Communal)
-
- // Device is dreaming.
- fakeKeyguardRepository.setDreaming(true)
- runCurrent()
-
- // Touch event in the top swipe region is not intercepted.
- assertThat(underTest.onTouchEvent(DOWN_IN_TOP_SWIPE_REGION_EVENT)).isFalse()
- }
- }
-
- @Test
- fun onTouchEvent_bottomSwipeWhenDreaming_doesNotIntercept() =
- with(kosmos) {
- testScope.runTest {
- // Communal is open.
- goToScene(CommunalScenes.Communal)
-
- // Device is dreaming.
- fakeKeyguardRepository.setDreaming(true)
- runCurrent()
-
- // 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() =
with(kosmos) {
testScope.runTest {
@@ -325,6 +273,154 @@
}
}
+ @Test
+ fun lifecycle_initializedAfterConstruction() =
+ with(kosmos) {
+ val underTest =
+ GlanceableHubContainerController(
+ communalInteractor,
+ communalViewModel,
+ dialogFactory,
+ keyguardTransitionInteractor,
+ keyguardInteractor,
+ shadeInteractor,
+ powerManager,
+ communalColors,
+ ambientTouchComponentFactory,
+ kosmos.sceneDataSourceDelegator,
+ )
+
+ assertThat(underTest.lifecycle.currentState).isEqualTo(Lifecycle.State.INITIALIZED)
+ }
+
+ @Test
+ fun lifecycle_createdAfterViewCreated() =
+ with(kosmos) {
+ val underTest =
+ GlanceableHubContainerController(
+ communalInteractor,
+ communalViewModel,
+ dialogFactory,
+ keyguardTransitionInteractor,
+ keyguardInteractor,
+ shadeInteractor,
+ powerManager,
+ communalColors,
+ ambientTouchComponentFactory,
+ kosmos.sceneDataSourceDelegator,
+ )
+
+ // Only initView without attaching a view as we don't want the flows to start collecting
+ // yet.
+ underTest.initView(View(context))
+
+ assertThat(underTest.lifecycle.currentState).isEqualTo(Lifecycle.State.CREATED)
+ }
+
+ @Test
+ fun lifecycle_startedAfterFlowsUpdate() {
+ // Flows start collecting due to test setup, causing the state to advance to STARTED.
+ assertThat(underTest.lifecycle.currentState).isEqualTo(Lifecycle.State.STARTED)
+ }
+
+ @Test
+ fun lifecycle_resumedAfterCommunalShows() {
+ // Communal is open.
+ goToScene(CommunalScenes.Communal)
+
+ assertThat(underTest.lifecycle.currentState).isEqualTo(Lifecycle.State.RESUMED)
+ }
+
+ @Test
+ fun lifecycle_startedAfterCommunalCloses() =
+ with(kosmos) {
+ testScope.runTest {
+ // Communal is open.
+ goToScene(CommunalScenes.Communal)
+
+ assertThat(underTest.lifecycle.currentState).isEqualTo(Lifecycle.State.RESUMED)
+
+ // Communal closes.
+ goToScene(CommunalScenes.Blank)
+
+ assertThat(underTest.lifecycle.currentState).isEqualTo(Lifecycle.State.STARTED)
+ }
+ }
+
+ @Test
+ fun lifecycle_startedAfterPrimaryBouncerShows() =
+ with(kosmos) {
+ testScope.runTest {
+ // Communal is open.
+ goToScene(CommunalScenes.Communal)
+
+ // Bouncer is visible.
+ fakeKeyguardTransitionRepository.sendTransitionSteps(
+ KeyguardState.GLANCEABLE_HUB,
+ KeyguardState.PRIMARY_BOUNCER,
+ testScope
+ )
+ testableLooper.processAllMessages()
+
+ assertThat(underTest.lifecycle.currentState).isEqualTo(Lifecycle.State.STARTED)
+ }
+ }
+
+ @Test
+ fun lifecycle_startedAfterAlternateBouncerShows() =
+ with(kosmos) {
+ testScope.runTest {
+ // Communal is open.
+ goToScene(CommunalScenes.Communal)
+
+ // Bouncer is visible.
+ fakeKeyguardTransitionRepository.sendTransitionSteps(
+ KeyguardState.GLANCEABLE_HUB,
+ KeyguardState.ALTERNATE_BOUNCER,
+ testScope
+ )
+ testableLooper.processAllMessages()
+
+ assertThat(underTest.lifecycle.currentState).isEqualTo(Lifecycle.State.STARTED)
+ }
+ }
+
+ @Test
+ fun lifecycle_createdAfterDisposeView() {
+ // Container view disposed.
+ underTest.disposeView()
+
+ assertThat(underTest.lifecycle.currentState).isEqualTo(Lifecycle.State.CREATED)
+ }
+
+ @Test
+ fun lifecycle_startedAfterShadeShows() =
+ with(kosmos) {
+ testScope.runTest {
+ // Communal is open.
+ goToScene(CommunalScenes.Communal)
+
+ // Shade shows up.
+ fakeShadeRepository.setQsExpansion(1.0f)
+ testableLooper.processAllMessages()
+
+ assertThat(underTest.lifecycle.currentState).isEqualTo(Lifecycle.State.STARTED)
+ }
+ }
+
+ @Test
+ fun editMode_communalAvailable() =
+ with(kosmos) {
+ testScope.runTest {
+ val available by collectLastValue(underTest.communalAvailable())
+ setCommunalAvailable(false)
+
+ assertThat(available).isFalse()
+ communalInteractor.setEditModeOpen(true)
+ assertThat(available).isTrue()
+ }
+ }
+
private fun initAndAttachContainerView() {
containerView = View(context)
@@ -357,8 +453,6 @@
private const val CONTAINER_WIDTH = 100
private const val CONTAINER_HEIGHT = 100
private const val RIGHT_SWIPE_REGION_WIDTH = 20
- private const val TOP_SWIPE_REGION_WIDTH = 20
- private const val BOTTOM_SWIPE_REGION_WIDTH = 20
/**
* A touch down event right in the middle of the screen, to avoid being in any of the swipe
@@ -375,17 +469,6 @@
)
private val DOWN_IN_RIGHT_SWIPE_REGION_EVENT =
MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_DOWN, CONTAINER_WIDTH.toFloat(), 0f, 0)
- private val DOWN_IN_TOP_SWIPE_REGION_EVENT =
- MotionEvent.obtain(
- 0L,
- 0L,
- MotionEvent.ACTION_DOWN,
- 0f,
- TOP_SWIPE_REGION_WIDTH.toFloat(),
- 0
- )
- private val DOWN_IN_BOTTOM_SWIPE_REGION_EVENT =
- MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_DOWN, 0f, CONTAINER_HEIGHT.toFloat(), 0)
private val MOVE_EVENT = MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_MOVE, 0f, 0f, 0)
private val UP_EVENT = MotionEvent.obtain(0L, 0L, MotionEvent.ACTION_UP, 0f, 0f, 0)
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowViewControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowViewControllerTest.kt
index da09579..d95cc2e 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowViewControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/shade/NotificationShadeWindowViewControllerTest.kt
@@ -500,6 +500,46 @@
}
@Test
+ fun handleExternalTouch_intercepted_sendsOnTouch() {
+ // Accept dispatch and also intercept.
+ whenever(view.dispatchTouchEvent(any())).thenReturn(true)
+ whenever(view.onInterceptTouchEvent(any())).thenReturn(true)
+
+ underTest.handleExternalTouch(DOWN_EVENT)
+ underTest.handleExternalTouch(MOVE_EVENT)
+
+ // Once intercepted, both events are sent to the view.
+ verify(view).onTouchEvent(DOWN_EVENT)
+ verify(view).onTouchEvent(MOVE_EVENT)
+ }
+
+ @Test
+ fun handleExternalTouch_notDispatched_interceptNotCalled() {
+ // Don't accept dispatch
+ whenever(view.dispatchTouchEvent(any())).thenReturn(false)
+
+ underTest.handleExternalTouch(DOWN_EVENT)
+
+ // Interception is not offered.
+ verify(view, never()).onInterceptTouchEvent(any())
+ }
+
+ @Test
+ fun handleExternalTouch_notIntercepted_onTouchNotSent() {
+ // Accept dispatch, but don't dispatch
+ whenever(view.dispatchTouchEvent(any())).thenReturn(true)
+ whenever(view.onInterceptTouchEvent(any())).thenReturn(false)
+
+ underTest.handleExternalTouch(DOWN_EVENT)
+ underTest.handleExternalTouch(MOVE_EVENT)
+
+ // Interception offered for both events, but onTouchEvent is never called.
+ verify(view).onInterceptTouchEvent(DOWN_EVENT)
+ verify(view).onInterceptTouchEvent(MOVE_EVENT)
+ verify(view, never()).onTouchEvent(any())
+ }
+
+ @Test
fun testGetKeyguardMessageArea() =
testScope.runTest {
underTest.keyguardMessageArea
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutControllerTest.java
index 3a427f3..a66a136 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutControllerTest.java
@@ -76,6 +76,7 @@
import com.android.systemui.statusbar.SysuiStatusBarStateController;
import com.android.systemui.statusbar.notification.ColorUpdateLogger;
import com.android.systemui.statusbar.notification.DynamicPrivacyController;
+import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator;
import com.android.systemui.statusbar.notification.collection.NotifCollection;
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
import com.android.systemui.statusbar.notification.collection.provider.NotificationDismissibilityProvider;
@@ -127,6 +128,7 @@
@Mock private NotificationGutsManager mNotificationGutsManager;
@Mock private NotificationsController mNotificationsController;
@Mock private NotificationVisibilityProvider mVisibilityProvider;
+ @Mock private NotificationWakeUpCoordinator mNotificationWakeUpCoordinator;
@Mock private HeadsUpManager mHeadsUpManager;
@Mock private NotificationRoundnessManager mNotificationRoundnessManager;
@Mock private TunerService mTunerService;
@@ -927,6 +929,7 @@
mNotificationGutsManager,
mNotificationsController,
mVisibilityProvider,
+ mNotificationWakeUpCoordinator,
mHeadsUpManager,
mNotificationRoundnessManager,
mTunerService,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/satellite/ui/viewmodel/DeviceBasedSatelliteViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/satellite/ui/viewmodel/DeviceBasedSatelliteViewModelTest.kt
index 64f19b6..8eea29b 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/satellite/ui/viewmodel/DeviceBasedSatelliteViewModelTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/satellite/ui/viewmodel/DeviceBasedSatelliteViewModelTest.kt
@@ -21,11 +21,13 @@
import com.android.systemui.common.shared.model.Icon
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.log.core.FakeLogBuffer
+import com.android.systemui.res.R
import com.android.systemui.statusbar.pipeline.airplane.data.repository.FakeAirplaneModeRepository
import com.android.systemui.statusbar.pipeline.mobile.domain.interactor.FakeMobileIconsInteractor
import com.android.systemui.statusbar.pipeline.mobile.util.FakeMobileMappingsProxy
import com.android.systemui.statusbar.pipeline.satellite.data.prod.FakeDeviceBasedSatelliteRepository
import com.android.systemui.statusbar.pipeline.satellite.domain.interactor.DeviceBasedSatelliteInteractor
+import com.android.systemui.statusbar.pipeline.satellite.shared.model.SatelliteConnectionState
import com.android.systemui.statusbar.pipeline.shared.data.repository.FakeConnectivityRepository
import com.android.systemui.statusbar.pipeline.wifi.data.repository.FakeWifiRepository
import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractorImpl
@@ -76,7 +78,8 @@
)
underTest =
- DeviceBasedSatelliteViewModel(
+ DeviceBasedSatelliteViewModelImpl(
+ context,
interactor,
testScope.backgroundScope,
airplaneModeRepository,
@@ -124,6 +127,7 @@
assertThat(latest).isNull()
}
+ @OptIn(ExperimentalCoroutinesApi::class)
@Test
fun icon_nullWhenShouldNotShow_isEmergencyOnly() =
testScope.runTest {
@@ -298,4 +302,313 @@
// THEN icon is set because the device lost wifi connection
assertThat(latest).isInstanceOf(Icon::class.java)
}
+
+ @Test
+ fun carrierText_nullWhenShouldNotShow_satelliteNotAllowed() =
+ testScope.runTest {
+ val latest by collectLastValue(underTest.carrierText)
+
+ // GIVEN satellite is not allowed
+ repo.isSatelliteAllowedForCurrentLocation.value = false
+
+ // GIVEN all icons are OOS
+ val i1 = mobileIconsInteractor.getMobileConnectionInteractorForSubId(1)
+ i1.isInService.value = false
+ i1.isEmergencyOnly.value = false
+
+ // GIVEN apm is disabled
+ airplaneModeRepository.setIsAirplaneMode(false)
+
+ // THEN carrier text is null because we should not be showing it
+ assertThat(latest).isNull()
+ }
+
+ @Test
+ fun carrierText_nullWhenShouldNotShow_notAllOos() =
+ testScope.runTest {
+ val latest by collectLastValue(underTest.carrierText)
+
+ // GIVEN satellite is allowed + connected
+ repo.isSatelliteAllowedForCurrentLocation.value = true
+ repo.connectionState.value = SatelliteConnectionState.Connected
+
+ // GIVEN all icons are not OOS
+ val i1 = mobileIconsInteractor.getMobileConnectionInteractorForSubId(1)
+ i1.isInService.value = true
+ i1.isEmergencyOnly.value = false
+
+ // GIVEN apm is disabled
+ airplaneModeRepository.setIsAirplaneMode(false)
+
+ // THEN carrier text is null because we have service
+ assertThat(latest).isNull()
+ }
+
+ @OptIn(ExperimentalCoroutinesApi::class)
+ @Test
+ fun carrierText_nullWhenShouldNotShow_isEmergencyOnly() =
+ testScope.runTest {
+ val latest by collectLastValue(underTest.carrierText)
+
+ // GIVEN satellite is allowed + connected
+ repo.isSatelliteAllowedForCurrentLocation.value = true
+ repo.connectionState.value = SatelliteConnectionState.Connected
+
+ // GIVEN all icons are OOS
+ val i1 = mobileIconsInteractor.getMobileConnectionInteractorForSubId(1)
+ i1.isInService.value = false
+ i1.isEmergencyOnly.value = false
+
+ // GIVEN apm is disabled
+ airplaneModeRepository.setIsAirplaneMode(false)
+
+ // Wait for delay to be completed
+ advanceTimeBy(10.seconds)
+
+ // THEN carrier text is set because we don't have service
+ assertThat(latest).isNotNull()
+
+ // GIVEN the connection is emergency only
+ i1.isEmergencyOnly.value = true
+
+ // THEN carrier text is null because we have emergency connection
+ assertThat(latest).isNull()
+ }
+
+ @Test
+ fun carrierText_nullWhenShouldNotShow_apmIsEnabled() =
+ testScope.runTest {
+ val latest by collectLastValue(underTest.carrierText)
+
+ // GIVEN satellite is allowed + connected
+ repo.isSatelliteAllowedForCurrentLocation.value = true
+ repo.connectionState.value = SatelliteConnectionState.Connected
+
+ // GIVEN all icons are OOS
+ val i1 = mobileIconsInteractor.getMobileConnectionInteractorForSubId(1)
+ i1.isInService.value = false
+ i1.isEmergencyOnly.value = false
+
+ // GIVEN apm is enabled
+ airplaneModeRepository.setIsAirplaneMode(true)
+
+ // THEN carrier text is null because we should not be showing it
+ assertThat(latest).isNull()
+ }
+
+ @OptIn(ExperimentalCoroutinesApi::class)
+ @Test
+ fun carrierText_satelliteIsOn() =
+ testScope.runTest {
+ val latest by collectLastValue(underTest.carrierText)
+
+ // GIVEN satellite is allowed + connected
+ repo.isSatelliteAllowedForCurrentLocation.value = true
+ repo.connectionState.value = SatelliteConnectionState.Connected
+
+ // GIVEN all icons are OOS
+ val i1 = mobileIconsInteractor.getMobileConnectionInteractorForSubId(1)
+ i1.isInService.value = false
+ i1.isEmergencyOnly.value = false
+
+ // GIVEN apm is disabled
+ airplaneModeRepository.setIsAirplaneMode(false)
+
+ // Wait for delay to be completed
+ advanceTimeBy(10.seconds)
+
+ // THEN carrier text is set because we don't have service
+ assertThat(latest).isNotNull()
+ }
+
+ @OptIn(ExperimentalCoroutinesApi::class)
+ @Test
+ fun carrierText_hysteresisWhenEnablingText() =
+ testScope.runTest {
+ val latest by collectLastValue(underTest.carrierText)
+
+ // GIVEN satellite is allowed + connected
+ repo.isSatelliteAllowedForCurrentLocation.value = true
+ repo.connectionState.value = SatelliteConnectionState.Connected
+
+ // GIVEN all icons are OOS
+ val i1 = mobileIconsInteractor.getMobileConnectionInteractorForSubId(1)
+ i1.isInService.value = false
+ i1.isEmergencyOnly.value = false
+
+ // GIVEN apm is disabled
+ airplaneModeRepository.setIsAirplaneMode(false)
+
+ // THEN carrier text is null because of the hysteresis
+ assertThat(latest).isNull()
+
+ // Wait for delay to be completed
+ advanceTimeBy(10.seconds)
+
+ // THEN carrier text is set after the delay
+ assertThat(latest).isNotNull()
+
+ // GIVEN apm is enabled
+ airplaneModeRepository.setIsAirplaneMode(true)
+
+ // THEN carrier text is null immediately
+ assertThat(latest).isNull()
+ }
+
+ @OptIn(ExperimentalCoroutinesApi::class)
+ @Test
+ fun carrierText_deviceIsProvisioned() =
+ testScope.runTest {
+ val latest by collectLastValue(underTest.carrierText)
+
+ // GIVEN satellite is allowed + connected
+ repo.isSatelliteAllowedForCurrentLocation.value = true
+ repo.connectionState.value = SatelliteConnectionState.Connected
+
+ // GIVEN all icons are OOS
+ val i1 = mobileIconsInteractor.getMobileConnectionInteractorForSubId(1)
+ i1.isInService.value = false
+ i1.isEmergencyOnly.value = false
+
+ // GIVEN apm is disabled
+ airplaneModeRepository.setIsAirplaneMode(false)
+
+ // GIVEN device is not provisioned
+ deviceProvisionedRepository.setDeviceProvisioned(false)
+
+ // THEN carrier text is null because the device is not provisioned
+ assertThat(latest).isNull()
+
+ // GIVEN device becomes provisioned
+ deviceProvisionedRepository.setDeviceProvisioned(true)
+
+ // Wait for delay to be completed
+ advanceTimeBy(10.seconds)
+
+ // THEN carrier text is null because the device is not provisioned
+ assertThat(latest).isNotNull()
+ }
+
+ @OptIn(ExperimentalCoroutinesApi::class)
+ @Test
+ fun carrierText_wifiIsActive() =
+ testScope.runTest {
+ val latest by collectLastValue(underTest.carrierText)
+
+ // GIVEN satellite is allowed + connected
+ repo.isSatelliteAllowedForCurrentLocation.value = true
+ repo.connectionState.value = SatelliteConnectionState.Connected
+
+ // GIVEN all icons are OOS
+ val i1 = mobileIconsInteractor.getMobileConnectionInteractorForSubId(1)
+ i1.isInService.value = false
+ i1.isEmergencyOnly.value = false
+
+ // GIVEN apm is disabled
+ airplaneModeRepository.setIsAirplaneMode(false)
+
+ // GIVEN device is provisioned
+ deviceProvisionedRepository.setDeviceProvisioned(true)
+
+ // GIVEN wifi network is active
+ wifiRepository.setWifiNetwork(WifiNetworkModel.Active(networkId = 0, level = 1))
+
+ // THEN carrier text is null because the device is connected to wifi
+ assertThat(latest).isNull()
+
+ // GIVEN device loses wifi connection
+ wifiRepository.setWifiNetwork(WifiNetworkModel.Invalid("test"))
+
+ // Wait for delay to be completed
+ advanceTimeBy(10.seconds)
+
+ // THEN carrier text is set because the device lost wifi connection
+ assertThat(latest).isNotNull()
+ }
+
+ @OptIn(ExperimentalCoroutinesApi::class)
+ @Test
+ fun carrierText_connectionStateUnknown_null() =
+ testScope.runTest {
+ val latest by collectLastValue(underTest.carrierText)
+
+ // Set up the conditions for satellite to be enabled
+ repo.isSatelliteAllowedForCurrentLocation.value = true
+ val i1 = mobileIconsInteractor.getMobileConnectionInteractorForSubId(1)
+ i1.isInService.value = false
+ i1.isEmergencyOnly.value = false
+ airplaneModeRepository.setIsAirplaneMode(false)
+
+ repo.connectionState.value = SatelliteConnectionState.Unknown
+
+ // Wait for delay to be completed
+ advanceTimeBy(10.seconds)
+
+ assertThat(latest).isNull()
+ }
+
+ @OptIn(ExperimentalCoroutinesApi::class)
+ @Test
+ fun carrierText_connectionStateOff_null() =
+ testScope.runTest {
+ val latest by collectLastValue(underTest.carrierText)
+
+ // Set up the conditions for satellite to be enabled
+ repo.isSatelliteAllowedForCurrentLocation.value = true
+ val i1 = mobileIconsInteractor.getMobileConnectionInteractorForSubId(1)
+ i1.isInService.value = false
+ i1.isEmergencyOnly.value = false
+ airplaneModeRepository.setIsAirplaneMode(false)
+
+ repo.connectionState.value = SatelliteConnectionState.Off
+
+ // Wait for delay to be completed
+ advanceTimeBy(10.seconds)
+
+ assertThat(latest).isNull()
+ }
+
+ @OptIn(ExperimentalCoroutinesApi::class)
+ @Test
+ fun carrierText_connectionStateOn_notConnectedString() =
+ testScope.runTest {
+ val latest by collectLastValue(underTest.carrierText)
+
+ // Set up the conditions for satellite to be enabled
+ repo.isSatelliteAllowedForCurrentLocation.value = true
+ val i1 = mobileIconsInteractor.getMobileConnectionInteractorForSubId(1)
+ i1.isInService.value = false
+ i1.isEmergencyOnly.value = false
+ airplaneModeRepository.setIsAirplaneMode(false)
+
+ repo.connectionState.value = SatelliteConnectionState.On
+
+ // Wait for delay to be completed
+ advanceTimeBy(10.seconds)
+
+ assertThat(latest)
+ .isEqualTo(context.getString(R.string.satellite_not_connected_carrier_text))
+ }
+
+ @OptIn(ExperimentalCoroutinesApi::class)
+ @Test
+ fun carrierText_connectionStateConnected_connectedString() =
+ testScope.runTest {
+ val latest by collectLastValue(underTest.carrierText)
+
+ // Set up the conditions for satellite to be enabled
+ repo.isSatelliteAllowedForCurrentLocation.value = true
+ val i1 = mobileIconsInteractor.getMobileConnectionInteractorForSubId(1)
+ i1.isInService.value = false
+ i1.isEmergencyOnly.value = false
+ airplaneModeRepository.setIsAirplaneMode(false)
+
+ repo.connectionState.value = SatelliteConnectionState.Connected
+
+ // Wait for delay to be completed
+ advanceTimeBy(10.seconds)
+
+ assertThat(latest)
+ .isEqualTo(context.getString(R.string.satellite_connected_carrier_text))
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/satellite/ui/viewmodel/FakeDeviceBasedSatelliteViewModel.kt
similarity index 62%
copy from packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt
copy to packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/satellite/ui/viewmodel/FakeDeviceBasedSatelliteViewModel.kt
index c4476fc..f125ef12 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/satellite/ui/viewmodel/FakeDeviceBasedSatelliteViewModel.kt
@@ -14,11 +14,12 @@
* limitations under the License.
*/
-package com.android.systemui.volume.panel.component.mediaoutput.shared.model
+package com.android.systemui.statusbar.pipeline.satellite.ui.viewmodel
-import android.media.session.PlaybackState
+import com.android.systemui.common.shared.model.Icon
+import kotlinx.coroutines.flow.MutableStateFlow
-data class SessionWithPlayback(
- val session: MediaDeviceSession,
- val playback: PlaybackState,
-)
+class FakeDeviceBasedSatelliteViewModel : DeviceBasedSatelliteViewModel {
+ override val icon = MutableStateFlow<Icon?>(null)
+ override val carrierText = MutableStateFlow<String?>(null)
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BatteryControllerStartableTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BatteryControllerStartableTest.java
index f1dbee2..c4a7463 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BatteryControllerStartableTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BatteryControllerStartableTest.java
@@ -28,10 +28,11 @@
import android.os.PowerManager;
import android.platform.test.annotations.DisableFlags;
import android.platform.test.annotations.EnableFlags;
-import android.test.suitebuilder.annotation.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
+import androidx.test.filters.SmallTest;
+
import com.android.settingslib.fuelgauge.BatterySaverUtils;
import com.android.systemui.Flags;
import com.android.systemui.SysuiTestCase;
@@ -42,7 +43,6 @@
import com.android.systemui.util.concurrency.FakeExecutor;
import com.android.systemui.util.time.FakeSystemClock;
-
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SensitiveNotificationProtectionControllerFlagDisabledTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SensitiveNotificationProtectionControllerFlagDisabledTest.kt
index 358709f..3e20f68 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SensitiveNotificationProtectionControllerFlagDisabledTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SensitiveNotificationProtectionControllerFlagDisabledTest.kt
@@ -21,6 +21,7 @@
import android.media.projection.MediaProjectionManager
import android.os.Handler
import android.platform.test.annotations.DisableFlags
+import android.telephony.TelephonyManager
import android.testing.AndroidTestingRunner
import androidx.test.filters.SmallTest
import com.android.server.notification.Flags
@@ -46,6 +47,7 @@
@Mock private lateinit var activityManager: IActivityManager
@Mock private lateinit var mediaProjectionManager: MediaProjectionManager
@Mock private lateinit var packageManager: PackageManager
+ @Mock private lateinit var telephonyManager: TelephonyManager
private lateinit var controller: SensitiveNotificationProtectionControllerImpl
@Before
@@ -59,6 +61,7 @@
mediaProjectionManager,
activityManager,
packageManager,
+ telephonyManager,
handler,
FakeExecutor(FakeSystemClock()),
logger
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SensitiveNotificationProtectionControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SensitiveNotificationProtectionControllerTest.kt
index 4ace163..2127057 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SensitiveNotificationProtectionControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/SensitiveNotificationProtectionControllerTest.kt
@@ -37,6 +37,7 @@
import android.platform.test.annotations.RequiresFlagsEnabled
import android.platform.test.flag.junit.DeviceFlagsValueProvider
import android.provider.Settings.Global.DISABLE_SCREEN_SHARE_PROTECTIONS_FOR_APPS_AND_NOTIFICATIONS
+import android.telephony.TelephonyManager
import android.testing.AndroidTestingRunner
import android.testing.TestableLooper.RunWithLooper
import androidx.test.filters.SmallTest
@@ -89,6 +90,7 @@
@Mock private lateinit var activityManager: IActivityManager
@Mock private lateinit var mediaProjectionManager: MediaProjectionManager
@Mock private lateinit var packageManager: PackageManager
+ @Mock private lateinit var telephonyManager: TelephonyManager
@Mock private lateinit var listener1: Runnable
@Mock private lateinit var listener2: Runnable
@Mock private lateinit var listener3: Runnable
@@ -141,6 +143,9 @@
whenever(packageManager.checkPermission(anyString(), anyString()))
.thenReturn(PackageManager.PERMISSION_DENIED)
+ whenever(telephonyManager.getEmergencyAssistancePackageName())
+ .thenReturn(EMERGENCY_ASSISTANCE_PACKAGE_NAME)
+
executor = FakeExecutor(FakeSystemClock())
globalSettings = FakeGlobalSettings()
controller =
@@ -150,6 +155,7 @@
mediaProjectionManager,
activityManager,
packageManager,
+ telephonyManager,
mockExecutorHandler(executor),
executor,
logger
@@ -407,6 +413,26 @@
}
@Test
+ @DisableFlags(FLAG_SCREENSHARE_NOTIFICATION_HIDING_BUG_FIX)
+ fun shouldProtectNotification_projectionActive_isFromEmergencyPackage_fixDisabled_true() {
+ mediaProjectionCallback.onStart(mediaProjectionInfo)
+
+ val notificationEntry = setupNotificationEntry(EMERGENCY_ASSISTANCE_PACKAGE_NAME)
+
+ assertTrue(controller.shouldProtectNotification(notificationEntry))
+ }
+
+ @Test
+ @EnableFlags(FLAG_SCREENSHARE_NOTIFICATION_HIDING_BUG_FIX)
+ fun shouldProtectNotification_projectionActive_isFromEmergencyPackage_false() {
+ mediaProjectionCallback.onStart(mediaProjectionInfo)
+
+ val notificationEntry = setupNotificationEntry(EMERGENCY_ASSISTANCE_PACKAGE_NAME)
+
+ assertFalse(controller.shouldProtectNotification(notificationEntry))
+ }
+
+ @Test
fun shouldProtectNotification_projectionActive_sysuiExempt_false() {
// SystemUi context package name is exempt, but in test scenarios its
// com.android.systemui.tests so use that instead of hardcoding
@@ -742,6 +768,7 @@
private const val TEST_PROJECTION_PACKAGE_NAME =
"com.android.systemui.statusbar.policy.projectionpackage"
private const val TEST_PACKAGE_NAME = "com.android.systemui.statusbar.policy.testpackage"
+ private const val EMERGENCY_ASSISTANCE_PACKAGE_NAME = "com.android.test.emergencyassistance"
private const val BUGREPORT_PACKAGE_NAME = "com.android.test.bugreporthandler"
}
}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/SysuiTestCase.java b/packages/SystemUI/tests/utils/src/com/android/systemui/SysuiTestCase.java
index 353d970..9dcd946 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/SysuiTestCase.java
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/SysuiTestCase.java
@@ -177,7 +177,7 @@
// TODO(b/292141694): build out Ravenwood support for Instrumentation
// Ravenwood doesn't yet provide Instrumentation, so we sidestep this global configuration
// step; any tests that rely on it are already being excluded on Ravenwood
- if (!isRavenwoodTest()) {
+ if (!isRavenwoodTest() && !isScreenshotTest()) {
mRealInstrumentation = InstrumentationRegistry.getInstrumentation();
Instrumentation inst = spy(mRealInstrumentation);
when(inst.getContext()).thenAnswer(invocation -> {
@@ -288,6 +288,10 @@
return !isRavenwoodTest() && Build.FINGERPRINT.contains("robolectric");
}
+ protected boolean isScreenshotTest() {
+ return false;
+ }
+
public static boolean isRavenwoodTest() {
return RavenwoodRule.isOnRavenwood();
}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/TestMocksModule.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/TestMocksModule.kt
index 65dd411..9dae44d 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/TestMocksModule.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/TestMocksModule.kt
@@ -24,6 +24,7 @@
import android.view.LayoutInflater
import com.android.internal.logging.MetricsLogger
import com.android.internal.statusbar.IStatusBarService
+import com.android.internal.widget.LockPatternUtils
import com.android.keyguard.KeyguardSecurityModel
import com.android.keyguard.KeyguardUpdateMonitor
import com.android.keyguard.KeyguardViewController
@@ -152,6 +153,7 @@
@get:Provides val displayMetrics: DisplayMetrics = mock(),
@get:Provides val metricsLogger: MetricsLogger = mock(),
@get:Provides val userManager: UserManager = mock(),
+ @get:Provides val lockPatternUtils: LockPatternUtils = mock(),
// system server mocks
@get:Provides val mockStatusBarService: IStatusBarService = mock(),
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/biometrics/data/repository/FakeFacePropertyRepository.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/biometrics/data/repository/FakeFacePropertyRepository.kt
index 8a95136..65eb338 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/biometrics/data/repository/FakeFacePropertyRepository.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/biometrics/data/repository/FakeFacePropertyRepository.kt
@@ -20,6 +20,7 @@
import android.graphics.Point
import com.android.systemui.biometrics.shared.model.LockoutMode
import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.keyguard.shared.model.DevicePosture
import dagger.Binds
import dagger.Module
import javax.inject.Inject
@@ -42,6 +43,8 @@
override val cameraInfo: StateFlow<CameraInfo?>
get() = currentCameraInfo
+ override val supportedPostures: List<DevicePosture> = listOf(DevicePosture.CLOSED)
+
fun setLockoutMode(userId: Int, mode: LockoutMode) {
lockoutModesForUser[userId] = mode
}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/biometrics/domain/interactor/BiometricStatusInteractorKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/biometrics/domain/interactor/BiometricStatusInteractorKosmos.kt
index 1493f14..081e89b 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/biometrics/domain/interactor/BiometricStatusInteractorKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/biometrics/domain/interactor/BiometricStatusInteractorKosmos.kt
@@ -18,12 +18,14 @@
import com.android.app.activityTaskManager
import com.android.systemui.biometrics.data.repository.biometricStatusRepository
+import com.android.systemui.biometrics.data.repository.fingerprintPropertyRepository
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.Kosmos.Fixture
val Kosmos.biometricStatusInteractor by Fixture {
BiometricStatusInteractorImpl(
activityTaskManager = activityTaskManager,
- biometricStatusRepository = biometricStatusRepository
+ biometricStatusRepository = biometricStatusRepository,
+ fingerprintPropertyRepository = fingerprintPropertyRepository
)
}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/classifier/FalsingCollectorKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/classifier/FalsingCollectorKosmos.kt
index 3a72d11..d31491d 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/classifier/FalsingCollectorKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/classifier/FalsingCollectorKosmos.kt
@@ -18,4 +18,4 @@
import com.android.systemui.kosmos.Kosmos
-val Kosmos.falsingCollector by Kosmos.Fixture { FalsingCollectorFake() }
+var Kosmos.falsingCollector by Kosmos.Fixture<FalsingCollector> { FalsingCollectorFake() }
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/communal/data/repository/FakeCommunalWidgetRepository.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/communal/data/repository/FakeCommunalWidgetRepository.kt
index 4ed6fe2..329c0f1 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/communal/data/repository/FakeCommunalWidgetRepository.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/communal/data/repository/FakeCommunalWidgetRepository.kt
@@ -46,6 +46,10 @@
_communalWidgets.value = _communalWidgets.value.filter { it.appWidgetId != widgetId }
}
+ override fun restoreWidgets(oldToNewWidgetIdMap: Map<Int, Int>) {}
+
+ override fun abortRestoreWidgets() {}
+
private fun onConfigured(id: Int, providerInfo: AppWidgetProviderInfo, priority: Int) {
_communalWidgets.value += listOf(CommunalWidgetContentModel(id, providerInfo, priority))
}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryInteractorKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryInteractorKosmos.kt
index bff10a1..1200866 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryInteractorKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/deviceentry/domain/interactor/DeviceEntryInteractorKosmos.kt
@@ -17,6 +17,7 @@
package com.android.systemui.deviceentry.domain.interactor
import com.android.systemui.authentication.domain.interactor.authenticationInteractor
+import com.android.systemui.bouncer.domain.interactor.alternateBouncerInteractor
import com.android.systemui.deviceentry.data.repository.deviceEntryRepository
import com.android.systemui.flags.fakeSystemPropertiesHelper
import com.android.systemui.keyguard.domain.interactor.trustInteractor
@@ -39,5 +40,6 @@
trustInteractor = trustInteractor,
deviceUnlockedInteractor = deviceUnlockedInteractor,
systemPropertiesHelper = fakeSystemPropertiesHelper,
+ alternateBouncerInteractor = alternateBouncerInteractor,
)
}
diff --git a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/doze/DozeLogKosmos.kt
similarity index 72%
copy from packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt
copy to packages/SystemUI/tests/utils/src/com/android/systemui/doze/DozeLogKosmos.kt
index c4476fc..c54e9d6 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/doze/DozeLogKosmos.kt
@@ -14,11 +14,10 @@
* limitations under the License.
*/
-package com.android.systemui.volume.panel.component.mediaoutput.shared.model
+package com.android.systemui.doze
-import android.media.session.PlaybackState
+import com.android.systemui.kosmos.Kosmos
+import com.android.systemui.kosmos.Kosmos.Fixture
+import com.android.systemui.util.mockito.mock
-data class SessionWithPlayback(
- val session: MediaDeviceSession,
- val playback: PlaybackState,
-)
+val Kosmos.dozeLog: DozeLog by Fixture { mock<DozeLog>() }
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/flags/SceneContainerFlagParameterization.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/flags/SceneContainerFlagParameterization.kt
index 4e24233..e2a1fe4 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/flags/SceneContainerFlagParameterization.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/flags/SceneContainerFlagParameterization.kt
@@ -58,3 +58,8 @@
*/
fun List<FlagsParameterization>.andSceneContainer(): List<FlagsParameterization> =
flatMap { it.andSceneContainer() }.toList()
+
+/** Parameterizes only the scene container flag. */
+fun parameterizeSceneContainerFlag(): List<FlagsParameterization> {
+ return FlagsParameterization.allCombinationsOf().andSceneContainer()
+}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/flags/SceneContainerRule.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/flags/SceneContainerRule.kt
index 9ec1481..5f9f6b4 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/flags/SceneContainerRule.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/flags/SceneContainerRule.kt
@@ -43,6 +43,21 @@
SceneContainerFlag.isEnabled
)
}
+ // Get the flag value, treating the unset error as false.
+ val sceneContainerAconfigEnabled = try {
+ com.android.systemui.Flags.sceneContainer()
+ } catch (e: Exception) {
+ false
+ }
+ if (sceneContainerAconfigEnabled) {
+ Assert.assertTrue(
+ "FLAG_SCENE_CONTAINER is enabled but SceneContainerFlag.isEnabled" +
+ " is false. Use `.andSceneContainer()` from" +
+ " SceneContainerFlagParameterization.kt to parameterize this" +
+ " flag correctly.",
+ SceneContainerFlag.isEnabled
+ )
+ }
if (
description.hasAnnotation<BrokenWithSceneContainer>() &&
SceneContainerFlag.isEnabled
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardClockRepository.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardClockRepository.kt
index 4f2310f..5e5f8cb 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardClockRepository.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardClockRepository.kt
@@ -17,26 +17,24 @@
package com.android.systemui.keyguard.data.repository
import com.android.keyguard.ClockEventController
-import com.android.keyguard.KeyguardClockSwitch.ClockSize
-import com.android.keyguard.KeyguardClockSwitch.LARGE
-import com.android.systemui.keyguard.shared.model.SettingsClockSize
+import com.android.systemui.keyguard.shared.model.ClockSize
+import com.android.systemui.keyguard.shared.model.ClockSizeSetting
import com.android.systemui.plugins.clocks.ClockController
import com.android.systemui.plugins.clocks.ClockId
import com.android.systemui.shared.clocks.DEFAULT_CLOCK_ID
import com.android.systemui.util.mockito.mock
import dagger.Binds
import dagger.Module
-import javax.inject.Inject
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import org.mockito.Mockito
-class FakeKeyguardClockRepository @Inject constructor() : KeyguardClockRepository {
- private val _clockSize = MutableStateFlow(LARGE)
- override val clockSize: StateFlow<Int> = _clockSize
+class FakeKeyguardClockRepository() : KeyguardClockRepository {
+ private val _clockSize = MutableStateFlow(ClockSize.LARGE)
+ override val clockSize: StateFlow<ClockSize> = _clockSize
- private val _selectedClockSize = MutableStateFlow(SettingsClockSize.DYNAMIC)
+ private val _selectedClockSize = MutableStateFlow(ClockSizeSetting.DYNAMIC)
override val selectedClockSize = _selectedClockSize
private val _currentClockId = MutableStateFlow(DEFAULT_CLOCK_ID)
@@ -54,16 +52,17 @@
get() = _shouldForceSmallClock
private var _shouldForceSmallClock: Boolean = false
- override fun setClockSize(@ClockSize size: Int) {
+ override fun setClockSize(size: ClockSize) {
_clockSize.value = size
}
- fun setSelectedClockSize(size: SettingsClockSize) {
- selectedClockSize.value = size
+ fun setSelectedClockSize(size: ClockSizeSetting) {
+ _selectedClockSize.value = size
}
fun setCurrentClock(clockController: ClockController) {
_currentClock.value = clockController
+ _currentClockId.value = clockController.config.id
}
fun setShouldForceSmallClock(shouldForceSmallClock: Boolean) {
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/KeyguardBlueprintRepositoryKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/KeyguardBlueprintRepositoryKosmos.kt
index 8954231..90a93f4 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/KeyguardBlueprintRepositoryKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/KeyguardBlueprintRepositoryKosmos.kt
@@ -16,40 +16,83 @@
package com.android.systemui.keyguard.data.repository
+import android.content.applicationContext
import android.os.fakeExecutorHandler
-import com.android.systemui.keyguard.shared.model.KeyguardBlueprint
-import com.android.systemui.keyguard.shared.model.KeyguardSection
-import com.android.systemui.keyguard.ui.view.layout.blueprints.DefaultKeyguardBlueprint.Companion.DEFAULT
+import com.android.systemui.keyguard.domain.interactor.keyguardBlueprintInteractor
+import com.android.systemui.keyguard.domain.interactor.keyguardClockInteractor
+import com.android.systemui.keyguard.ui.view.layout.blueprints.DefaultKeyguardBlueprint
import com.android.systemui.keyguard.ui.view.layout.blueprints.SplitShadeKeyguardBlueprint
+import com.android.systemui.keyguard.ui.view.layout.sections.ClockSection
+import com.android.systemui.keyguard.ui.viewmodel.keyguardClockViewModel
+import com.android.systemui.keyguard.ui.viewmodel.keyguardSmartspaceViewModel
import com.android.systemui.kosmos.Kosmos
-import com.android.systemui.util.ThreadAssert
import com.android.systemui.util.mockito.mock
+import java.util.Optional
+
+val Kosmos.keyguardClockSection: ClockSection by
+ Kosmos.Fixture {
+ ClockSection(
+ clockInteractor = keyguardClockInteractor,
+ keyguardClockViewModel = keyguardClockViewModel,
+ context = applicationContext,
+ smartspaceViewModel = keyguardSmartspaceViewModel,
+ blueprintInteractor = { keyguardBlueprintInteractor },
+ )
+ }
+
+val Kosmos.defaultKeyguardBlueprint by
+ Kosmos.Fixture {
+ DefaultKeyguardBlueprint(
+ defaultIndicationAreaSection = mock(),
+ defaultDeviceEntrySection = mock(),
+ defaultShortcutsSection = mock(),
+ defaultAmbientIndicationAreaSection = Optional.of(mock()),
+ defaultSettingsPopupMenuSection = mock(),
+ defaultStatusViewSection = mock(),
+ defaultStatusBarSection = mock(),
+ defaultNotificationStackScrollLayoutSection = mock(),
+ aodNotificationIconsSection = mock(),
+ aodBurnInSection = mock(),
+ communalTutorialIndicatorSection = mock(),
+ clockSection = keyguardClockSection,
+ smartspaceSection = mock(),
+ keyguardSliceViewSection = mock(),
+ udfpsAccessibilityOverlaySection = mock(),
+ accessibilityActionsSection = mock(),
+ )
+ }
+
+val Kosmos.splitShadeBlueprint by
+ Kosmos.Fixture {
+ SplitShadeKeyguardBlueprint(
+ defaultIndicationAreaSection = mock(),
+ defaultDeviceEntrySection = mock(),
+ defaultShortcutsSection = mock(),
+ defaultAmbientIndicationAreaSection = Optional.of(mock()),
+ defaultSettingsPopupMenuSection = mock(),
+ defaultStatusViewSection = mock(),
+ defaultStatusBarSection = mock(),
+ splitShadeNotificationStackScrollLayoutSection = mock(),
+ splitShadeGuidelines = mock(),
+ aodNotificationIconsSection = mock(),
+ aodBurnInSection = mock(),
+ communalTutorialIndicatorSection = mock(),
+ clockSection = keyguardClockSection,
+ smartspaceSection = mock(),
+ mediaSection = mock(),
+ accessibilityActionsSection = mock(),
+ )
+ }
val Kosmos.keyguardBlueprintRepository by
Kosmos.Fixture {
KeyguardBlueprintRepository(
blueprints =
setOf(
- defaultBlueprint,
+ defaultKeyguardBlueprint,
splitShadeBlueprint,
),
handler = fakeExecutorHandler,
- assert = mock<ThreadAssert>(),
+ assert = mock(),
)
}
-
-private val defaultBlueprint =
- object : KeyguardBlueprint {
- override val id: String
- get() = DEFAULT
- override val sections: List<KeyguardSection>
- get() = listOf()
- }
-
-private val splitShadeBlueprint =
- object : KeyguardBlueprint {
- override val id: String
- get() = SplitShadeKeyguardBlueprint.Companion.ID
- override val sections: List<KeyguardSection>
- get() = listOf()
- }
diff --git a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/KeyguardSmartspaceRepositoryKosmos.kt
similarity index 72%
copy from packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt
copy to packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/KeyguardSmartspaceRepositoryKosmos.kt
index c4476fc..dc7103f 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/KeyguardSmartspaceRepositoryKosmos.kt
@@ -14,11 +14,8 @@
* limitations under the License.
*/
-package com.android.systemui.volume.panel.component.mediaoutput.shared.model
+package com.android.systemui.keyguard.data.repository
-import android.media.session.PlaybackState
+import com.android.systemui.kosmos.Kosmos
-data class SessionWithPlayback(
- val session: MediaDeviceSession,
- val playback: PlaybackState,
-)
+val Kosmos.keyguardSmartspaceRepository by Kosmos.Fixture { KeyguardSmartspaceRepository() }
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/DozeInteractorKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/DozeInteractorKosmos.kt
new file mode 100644
index 0000000..3304d44
--- /dev/null
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/DozeInteractorKosmos.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.keyguard.domain.interactor
+
+import com.android.systemui.keyguard.data.repository.keyguardRepository
+import com.android.systemui.kosmos.Kosmos
+import com.android.systemui.kosmos.Kosmos.Fixture
+import com.android.systemui.scene.domain.interactor.sceneInteractor
+
+val Kosmos.dozeInteractor: DozeInteractor by Fixture {
+ DozeInteractor(
+ keyguardRepository,
+ { sceneInteractor },
+ )
+}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/FromAlternateBouncerTransitionInteractorKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/FromAlternateBouncerTransitionInteractorKosmos.kt
index 530cbed..78a419f 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/FromAlternateBouncerTransitionInteractorKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/FromAlternateBouncerTransitionInteractorKosmos.kt
@@ -16,6 +16,7 @@
package com.android.systemui.keyguard.domain.interactor
+import com.android.systemui.bouncer.domain.interactor.primaryBouncerInteractor
import com.android.systemui.communal.domain.interactor.communalInteractor
import com.android.systemui.keyguard.data.repository.keyguardTransitionRepository
import com.android.systemui.kosmos.Kosmos
@@ -23,7 +24,9 @@
import com.android.systemui.kosmos.testDispatcher
import com.android.systemui.power.domain.interactor.powerInteractor
import com.android.systemui.statusbar.domain.interactor.keyguardOcclusionInteractor
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+@ExperimentalCoroutinesApi
val Kosmos.fromAlternateBouncerTransitionInteractor by
Kosmos.Fixture {
FromAlternateBouncerTransitionInteractor(
@@ -36,5 +39,6 @@
communalInteractor = communalInteractor,
powerInteractor = powerInteractor,
keyguardOcclusionInteractor = keyguardOcclusionInteractor,
+ primaryBouncerInteractor = primaryBouncerInteractor,
)
}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/FromAodTransitionInteractorKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/FromAodTransitionInteractorKosmos.kt
index bbe37c1..91057b6 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/FromAodTransitionInteractorKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/FromAodTransitionInteractorKosmos.kt
@@ -16,12 +16,14 @@
package com.android.systemui.keyguard.domain.interactor
+import com.android.internal.widget.lockPatternUtils
import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.applicationCoroutineScope
import com.android.systemui.kosmos.testDispatcher
import com.android.systemui.power.domain.interactor.powerInteractor
import com.android.systemui.statusbar.domain.interactor.keyguardOcclusionInteractor
+import com.android.systemui.user.domain.interactor.selectedUserInteractor
val Kosmos.fromAodTransitionInteractor by
Kosmos.Fixture {
@@ -34,5 +36,7 @@
keyguardInteractor = keyguardInteractor,
powerInteractor = powerInteractor,
keyguardOcclusionInteractor = keyguardOcclusionInteractor,
+ selectedUserInteractor = selectedUserInteractor,
+ lockPatternUtils = lockPatternUtils,
)
}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardBlueprintInteractorKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardBlueprintInteractorKosmos.kt
index 87d6c17..5256ce4 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardBlueprintInteractorKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardBlueprintInteractorKosmos.kt
@@ -22,7 +22,7 @@
import com.android.systemui.keyguard.data.repository.keyguardBlueprintRepository
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.applicationCoroutineScope
-import com.android.systemui.statusbar.policy.splitShadeStateController
+import com.android.systemui.shade.domain.interactor.shadeInteractor
val Kosmos.keyguardBlueprintInteractor by
Kosmos.Fixture {
@@ -30,7 +30,7 @@
keyguardBlueprintRepository = keyguardBlueprintRepository,
applicationScope = applicationCoroutineScope,
context = applicationContext,
- splitShadeStateController = splitShadeStateController,
+ shadeInteractor = shadeInteractor,
clockInteractor = keyguardClockInteractor,
configurationInteractor = configurationInteractor,
fingerprintPropertyInteractor = fingerprintPropertyInteractor,
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardSmartspaceInteractorKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardSmartspaceInteractorKosmos.kt
new file mode 100644
index 0000000..b5d5d64
--- /dev/null
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/domain/interactor/KeyguardSmartspaceInteractorKosmos.kt
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+@file:OptIn(ExperimentalCoroutinesApi::class)
+
+package com.android.systemui.keyguard.domain.interactor
+
+import com.android.systemui.keyguard.data.repository.keyguardSmartspaceRepository
+import com.android.systemui.kosmos.Kosmos
+import com.android.systemui.kosmos.Kosmos.Fixture
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+
+var Kosmos.keyguardSmartspaceInteractor by Fixture {
+ KeyguardSmartspaceInteractor(
+ keyguardSmartspaceRepository = keyguardSmartspaceRepository,
+ )
+}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/SettingsClockSize.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/binder/KeyguardBlueprintViewBinderKosmos.kt
similarity index 71%
copy from packages/SystemUI/src/com/android/systemui/keyguard/shared/model/SettingsClockSize.kt
copy to packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/binder/KeyguardBlueprintViewBinderKosmos.kt
index c6b0f58..24d2c2f 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/SettingsClockSize.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/binder/KeyguardBlueprintViewBinderKosmos.kt
@@ -12,12 +12,12 @@
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
- *
*/
-package com.android.systemui.keyguard.shared.model
+package com.android.systemui.keyguard.ui.binder
-enum class SettingsClockSize {
- DYNAMIC,
- SMALL,
-}
+import android.os.fakeExecutorHandler
+import com.android.systemui.kosmos.Kosmos
+
+val Kosmos.keyguardBlueprintViewBinder by
+ Kosmos.Fixture { KeyguardBlueprintViewBinder(fakeExecutorHandler) }
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/DreamingToGlanceableHubTransitionViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/DreamingToGlanceableHubTransitionViewModelKosmos.kt
index 298c70d..00741eb 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/DreamingToGlanceableHubTransitionViewModelKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/DreamingToGlanceableHubTransitionViewModelKosmos.kt
@@ -17,7 +17,6 @@
package com.android.systemui.keyguard.ui.viewmodel
import com.android.systemui.common.ui.domain.interactor.configurationInteractor
-import com.android.systemui.keyguard.domain.interactor.fromDreamingTransitionInteractor
import com.android.systemui.keyguard.ui.keyguardTransitionAnimationFlow
import com.android.systemui.kosmos.Kosmos
@@ -26,6 +25,5 @@
DreamingToGlanceableHubTransitionViewModel(
configurationInteractor = configurationInteractor,
animationFlow = keyguardTransitionAnimationFlow,
- fromDreamingTransitionInteractor = fromDreamingTransitionInteractor
)
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/SettingsClockSize.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBlueprintViewModelKosmos.kt
similarity index 67%
copy from packages/SystemUI/src/com/android/systemui/keyguard/shared/model/SettingsClockSize.kt
copy to packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBlueprintViewModelKosmos.kt
index c6b0f58..63b87c0 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/shared/model/SettingsClockSize.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardBlueprintViewModelKosmos.kt
@@ -12,12 +12,12 @@
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
- *
*/
-package com.android.systemui.keyguard.shared.model
+package com.android.systemui.keyguard.ui.viewmodel
-enum class SettingsClockSize {
- DYNAMIC,
- SMALL,
-}
+import com.android.systemui.keyguard.domain.interactor.keyguardBlueprintInteractor
+import com.android.systemui.kosmos.Kosmos
+
+val Kosmos.keyguardBlueprintViewModel by
+ Kosmos.Fixture { KeyguardBlueprintViewModel(keyguardBlueprintInteractor) }
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardClockViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardClockViewModelKosmos.kt
index a048d3c..6d46694 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardClockViewModelKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardClockViewModelKosmos.kt
@@ -16,11 +16,14 @@
package com.android.systemui.keyguard.ui.viewmodel
+import android.content.res.mainResources
+import com.android.systemui.common.ui.domain.interactor.configurationInteractor
import com.android.systemui.keyguard.domain.interactor.keyguardClockInteractor
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.applicationCoroutineScope
import com.android.systemui.shade.domain.interactor.shadeInteractor
import com.android.systemui.statusbar.notification.stack.domain.interactor.notificationsKeyguardInteractor
+import com.android.systemui.statusbar.ui.systemBarUtilsProxy
val Kosmos.keyguardClockViewModel by
Kosmos.Fixture {
@@ -29,5 +32,8 @@
applicationScope = applicationCoroutineScope,
notifsKeyguardInteractor = notificationsKeyguardInteractor,
shadeInteractor = shadeInteractor,
+ systemBarUtils = systemBarUtilsProxy,
+ configurationInteractor = configurationInteractor,
+ resources = mainResources
)
}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardSmartspaceViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardSmartspaceViewModelKosmos.kt
new file mode 100644
index 0000000..d33d594
--- /dev/null
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardSmartspaceViewModelKosmos.kt
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.keyguard.ui.viewmodel
+
+import com.android.systemui.keyguard.domain.interactor.keyguardSmartspaceInteractor
+import com.android.systemui.kosmos.Kosmos
+import com.android.systemui.kosmos.applicationCoroutineScope
+import com.android.systemui.util.mockito.mock
+
+val Kosmos.keyguardSmartspaceViewModel by
+ Kosmos.Fixture {
+ KeyguardSmartspaceViewModel(
+ applicationScope = applicationCoroutineScope,
+ smartspaceController = mock(),
+ keyguardClockViewModel = keyguardClockViewModel,
+ smartspaceInteractor = keyguardSmartspaceInteractor,
+ )
+ }
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/kosmos/KosmosJavaAdapter.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/kosmos/KosmosJavaAdapter.kt
index 162f278..d4b7937 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/kosmos/KosmosJavaAdapter.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/kosmos/KosmosJavaAdapter.kt
@@ -22,6 +22,7 @@
import android.os.fakeExecutorHandler
import com.android.systemui.SysuiTestCase
import com.android.systemui.bouncer.data.repository.bouncerRepository
+import com.android.systemui.bouncer.data.repository.fakeKeyguardBouncerRepository
import com.android.systemui.bouncer.domain.interactor.simBouncerInteractor
import com.android.systemui.classifier.falsingCollector
import com.android.systemui.common.ui.data.repository.fakeConfigurationRepository
@@ -30,8 +31,8 @@
import com.android.systemui.communal.domain.interactor.communalInteractor
import com.android.systemui.concurrency.fakeExecutor
import com.android.systemui.deviceentry.domain.interactor.deviceEntryInteractor
+import com.android.systemui.deviceentry.domain.interactor.deviceEntryUdfpsInteractor
import com.android.systemui.deviceentry.domain.interactor.deviceUnlockedInteractor
-import com.android.systemui.flags.fakeFeatureFlagsClassic
import com.android.systemui.globalactions.domain.interactor.globalActionsInteractor
import com.android.systemui.haptics.qs.qsLongPressEffect
import com.android.systemui.jank.interactionJankMonitor
@@ -41,6 +42,7 @@
import com.android.systemui.keyguard.domain.interactor.fromLockscreenTransitionInteractor
import com.android.systemui.keyguard.domain.interactor.fromPrimaryBouncerTransitionInteractor
import com.android.systemui.keyguard.domain.interactor.keyguardClockInteractor
+import com.android.systemui.keyguard.domain.interactor.keyguardInteractor
import com.android.systemui.keyguard.domain.interactor.keyguardTransitionInteractor
import com.android.systemui.model.sceneContainerPlugin
import com.android.systemui.plugins.statusbar.statusBarStateController
@@ -50,6 +52,8 @@
import com.android.systemui.scene.sceneContainerConfig
import com.android.systemui.scene.shared.model.sceneDataSource
import com.android.systemui.settings.brightness.domain.interactor.brightnessMirrorShowingInteractor
+import com.android.systemui.shade.data.repository.shadeRepository
+import com.android.systemui.shade.domain.interactor.shadeInteractor
import com.android.systemui.shade.shadeController
import com.android.systemui.statusbar.notification.stack.domain.interactor.sharedNotificationContainerInteractor
import com.android.systemui.statusbar.phone.screenOffAnimationController
@@ -69,7 +73,6 @@
val testDispatcher by lazy { kosmos.testDispatcher }
val testScope by lazy { kosmos.testScope }
- val fakeFeatureFlags by lazy { kosmos.fakeFeatureFlagsClassic }
val fakeExecutor by lazy { kosmos.fakeExecutor }
val fakeExecutorHandler by lazy { kosmos.fakeExecutorHandler }
val configurationRepository by lazy { kosmos.fakeConfigurationRepository }
@@ -77,6 +80,8 @@
val bouncerRepository by lazy { kosmos.bouncerRepository }
val communalRepository by lazy { kosmos.fakeCommunalRepository }
val keyguardRepository by lazy { kosmos.fakeKeyguardRepository }
+ val keyguardBouncerRepository by lazy { kosmos.fakeKeyguardBouncerRepository }
+ val keyguardInteractor by lazy { kosmos.keyguardInteractor }
val keyguardTransitionRepository by lazy { kosmos.fakeKeyguardTransitionRepository }
val keyguardTransitionInteractor by lazy { kosmos.keyguardTransitionInteractor }
val powerRepository by lazy { kosmos.fakePowerRepository }
@@ -91,6 +96,7 @@
val falsingCollector by lazy { kosmos.falsingCollector }
val powerInteractor by lazy { kosmos.powerInteractor }
val deviceEntryInteractor by lazy { kosmos.deviceEntryInteractor }
+ val deviceEntryUdfpsInteractor by lazy { kosmos.deviceEntryUdfpsInteractor }
val deviceUnlockedInteractor by lazy { kosmos.deviceUnlockedInteractor }
val communalInteractor by lazy { kosmos.communalInteractor }
val sceneContainerPlugin by lazy { kosmos.sceneContainerPlugin }
@@ -110,6 +116,8 @@
val brightnessMirrorShowingInteractor by lazy { kosmos.brightnessMirrorShowingInteractor }
val qsLongPressEffect by lazy { kosmos.qsLongPressEffect }
val shadeController by lazy { kosmos.shadeController }
+ val shadeRepository by lazy { kosmos.shadeRepository }
+ val shadeInteractor by lazy { kosmos.shadeInteractor }
init {
kosmos.applicationContext = testCase.context
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/media/controls/domain/pipeline/interactor/factory/MediaControlInteractorFactoryKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/media/controls/domain/pipeline/interactor/factory/MediaControlInteractorFactoryKosmos.kt
new file mode 100644
index 0000000..461eaa2
--- /dev/null
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/media/controls/domain/pipeline/interactor/factory/MediaControlInteractorFactoryKosmos.kt
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.media.controls.domain.pipeline.interactor.factory
+
+import android.content.applicationContext
+import com.android.internal.logging.InstanceId
+import com.android.systemui.activityIntentHelper
+import com.android.systemui.bluetooth.mockBroadcastDialogController
+import com.android.systemui.kosmos.Kosmos
+import com.android.systemui.media.controls.data.repository.mediaFilterRepository
+import com.android.systemui.media.controls.domain.pipeline.interactor.MediaControlInteractor
+import com.android.systemui.media.controls.domain.pipeline.mediaDataProcessor
+import com.android.systemui.media.mediaOutputDialogManager
+import com.android.systemui.plugins.activityStarter
+import com.android.systemui.statusbar.notificationLockscreenUserManager
+import com.android.systemui.statusbar.policy.keyguardStateController
+
+val Kosmos.mediaControlInteractorFactory by
+ Kosmos.Fixture {
+ object : MediaControlInteractorFactory {
+ override fun create(instanceId: InstanceId): MediaControlInteractor {
+ return MediaControlInteractor(
+ applicationContext = applicationContext,
+ instanceId = instanceId,
+ repository = mediaFilterRepository,
+ mediaDataProcessor = mediaDataProcessor,
+ keyguardStateController = keyguardStateController,
+ activityStarter = activityStarter,
+ activityIntentHelper = activityIntentHelper,
+ lockscreenUserManager = notificationLockscreenUserManager,
+ mediaOutputDialogManager = mediaOutputDialogManager,
+ broadcastDialogController = mockBroadcastDialogController,
+ )
+ }
+ }
+ }
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/media/controls/ui/viewmodel/MediaCarouselViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/media/controls/ui/viewmodel/MediaCarouselViewModelKosmos.kt
new file mode 100644
index 0000000..9a181cd
--- /dev/null
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/media/controls/ui/viewmodel/MediaCarouselViewModelKosmos.kt
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.media.controls.ui.viewmodel
+
+import android.content.applicationContext
+import com.android.systemui.kosmos.Kosmos
+import com.android.systemui.kosmos.applicationCoroutineScope
+import com.android.systemui.kosmos.testDispatcher
+import com.android.systemui.media.controls.domain.pipeline.interactor.factory.mediaControlInteractorFactory
+import com.android.systemui.media.controls.domain.pipeline.interactor.mediaCarouselInteractor
+import com.android.systemui.media.controls.util.mediaFlags
+import com.android.systemui.media.controls.util.mediaUiEventLogger
+import com.android.systemui.statusbar.notification.collection.provider.VisualStabilityProvider
+
+val Kosmos.mediaCarouselViewModel by
+ Kosmos.Fixture {
+ MediaCarouselViewModel(
+ applicationScope = applicationCoroutineScope,
+ applicationContext = applicationContext,
+ backgroundDispatcher = testDispatcher,
+ visualStabilityProvider = VisualStabilityProvider(),
+ interactor = mediaCarouselInteractor,
+ controlInteractorFactory = mediaControlInteractorFactory,
+ recommendationsViewModel = mediaRecommendationsViewModel,
+ logger = mediaUiEventLogger,
+ mediaFlags = mediaFlags,
+ )
+ }
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/media/controls/ui/viewmodel/MediaControlViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/media/controls/ui/viewmodel/MediaControlViewModelKosmos.kt
index 2f3d3c3..b3fb15f 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/media/controls/ui/viewmodel/MediaControlViewModelKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/media/controls/ui/viewmodel/MediaControlViewModelKosmos.kt
@@ -17,8 +17,8 @@
package com.android.systemui.media.controls.ui.viewmodel
import android.content.applicationContext
-import com.android.systemui.concurrency.fakeExecutor
import com.android.systemui.kosmos.Kosmos
+import com.android.systemui.kosmos.applicationCoroutineScope
import com.android.systemui.kosmos.testDispatcher
import com.android.systemui.media.controls.domain.pipeline.interactor.mediaControlInteractor
import com.android.systemui.media.controls.util.mediaUiEventLogger
@@ -26,9 +26,9 @@
val Kosmos.mediaControlViewModel by
Kosmos.Fixture {
MediaControlViewModel(
+ applicationScope = applicationCoroutineScope,
applicationContext = applicationContext,
backgroundDispatcher = testDispatcher,
- backgroundExecutor = fakeExecutor,
interactor = mediaControlInteractor,
logger = mediaUiEventLogger,
)
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/model/SysUiStateKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/model/SysUiStateKosmos.kt
index 8faeb39..6ddf633 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/model/SysUiStateKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/model/SysUiStateKosmos.kt
@@ -19,10 +19,13 @@
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.Kosmos.Fixture
import com.android.systemui.settings.displayTracker
+import org.mockito.Mockito.spy
val Kosmos.sysUiState by Fixture {
- SysUiState(
- displayTracker,
- sceneContainerPlugin,
+ spy(
+ SysUiState(
+ displayTracker,
+ sceneContainerPlugin,
+ )
)
}
diff --git a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/qs/panels/data/repository/GridLayoutTypeRepositoryKosmos.kt
similarity index 72%
copy from packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt
copy to packages/SystemUI/tests/utils/src/com/android/systemui/qs/panels/data/repository/GridLayoutTypeRepositoryKosmos.kt
index c4476fc..f846d57 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/qs/panels/data/repository/GridLayoutTypeRepositoryKosmos.kt
@@ -14,11 +14,8 @@
* limitations under the License.
*/
-package com.android.systemui.volume.panel.component.mediaoutput.shared.model
+package com.android.systemui.qs.panels.data.repository
-import android.media.session.PlaybackState
+import com.android.systemui.kosmos.Kosmos
-data class SessionWithPlayback(
- val session: MediaDeviceSession,
- val playback: PlaybackState,
-)
+val Kosmos.gridLayoutTypeRepository by Kosmos.Fixture { GridLayoutTypeRepository() }
diff --git a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/qs/panels/data/repository/IconTilesRepositoryKosmos.kt
similarity index 72%
copy from packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt
copy to packages/SystemUI/tests/utils/src/com/android/systemui/qs/panels/data/repository/IconTilesRepositoryKosmos.kt
index c4476fc..685e772 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/qs/panels/data/repository/IconTilesRepositoryKosmos.kt
@@ -14,11 +14,8 @@
* limitations under the License.
*/
-package com.android.systemui.volume.panel.component.mediaoutput.shared.model
+package com.android.systemui.qs.panels.data.repository
-import android.media.session.PlaybackState
+import com.android.systemui.kosmos.Kosmos
-data class SessionWithPlayback(
- val session: MediaDeviceSession,
- val playback: PlaybackState,
-)
+val Kosmos.iconTilesRepository by Kosmos.Fixture { IconTilesRepositoryImpl() }
diff --git a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/qs/panels/domain/interactor/GridLayoutTypeInteractorKosmos.kt
similarity index 67%
copy from packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt
copy to packages/SystemUI/tests/utils/src/com/android/systemui/qs/panels/domain/interactor/GridLayoutTypeInteractorKosmos.kt
index c4476fc..e44fa07 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/qs/panels/domain/interactor/GridLayoutTypeInteractorKosmos.kt
@@ -14,11 +14,10 @@
* limitations under the License.
*/
-package com.android.systemui.volume.panel.component.mediaoutput.shared.model
+package com.android.systemui.qs.panels.domain.interactor
-import android.media.session.PlaybackState
+import com.android.systemui.kosmos.Kosmos
+import com.android.systemui.qs.panels.data.repository.gridLayoutTypeRepository
-data class SessionWithPlayback(
- val session: MediaDeviceSession,
- val playback: PlaybackState,
-)
+val Kosmos.gridLayoutTypeInteractor by
+ Kosmos.Fixture { GridLayoutTypeInteractor(gridLayoutTypeRepository) }
diff --git a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/qs/panels/domain/interactor/IconTilesInteractorKosmos.kt
similarity index 69%
copy from packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt
copy to packages/SystemUI/tests/utils/src/com/android/systemui/qs/panels/domain/interactor/IconTilesInteractorKosmos.kt
index c4476fc..eaa702f 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/qs/panels/domain/interactor/IconTilesInteractorKosmos.kt
@@ -14,11 +14,9 @@
* limitations under the License.
*/
-package com.android.systemui.volume.panel.component.mediaoutput.shared.model
+package com.android.systemui.qs.panels.domain.interactor
-import android.media.session.PlaybackState
+import com.android.systemui.kosmos.Kosmos
+import com.android.systemui.qs.panels.data.repository.iconTilesRepository
-data class SessionWithPlayback(
- val session: MediaDeviceSession,
- val playback: PlaybackState,
-)
+val Kosmos.iconTilesInteractor by Kosmos.Fixture { IconTilesInteractor(iconTilesRepository) }
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/qs/panels/ui/viewmodel/TileGridViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/qs/panels/ui/viewmodel/TileGridViewModelKosmos.kt
new file mode 100644
index 0000000..9851f04
--- /dev/null
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/qs/panels/ui/viewmodel/TileGridViewModelKosmos.kt
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.qs.panels.ui.viewmodel
+
+import com.android.systemui.kosmos.Kosmos
+import com.android.systemui.qs.panels.domain.interactor.gridLayoutTypeInteractor
+import com.android.systemui.qs.panels.domain.interactor.iconTilesInteractor
+import com.android.systemui.qs.panels.shared.model.InfiniteGridLayoutType
+import com.android.systemui.qs.panels.ui.compose.InfiniteGridLayout
+import com.android.systemui.qs.pipeline.domain.interactor.currentTilesInteractor
+
+val Kosmos.tileGridViewModel by
+ Kosmos.Fixture {
+ TileGridViewModel(
+ gridLayoutTypeInteractor,
+ mapOf(Pair(InfiniteGridLayoutType::class.java, InfiniteGridLayout())),
+ currentTilesInteractor,
+ iconTilesInteractor
+ )
+ }
diff --git a/packages/SystemUI/tests/src/com/android/systemui/scene/FakeWindowRootViewComponent.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/scene/FakeWindowRootViewComponent.kt
similarity index 95%
rename from packages/SystemUI/tests/src/com/android/systemui/scene/FakeWindowRootViewComponent.kt
rename to packages/SystemUI/tests/utils/src/com/android/systemui/scene/FakeWindowRootViewComponent.kt
index 63a05d7..6ac3a62 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/scene/FakeWindowRootViewComponent.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/scene/FakeWindowRootViewComponent.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2023 The Android Open Source Project
+ * Copyright (C) 2024 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/scene/SceneKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/scene/SceneKosmos.kt
index 2cdf76d..7f6a7bd 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/scene/SceneKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/scene/SceneKosmos.kt
@@ -2,6 +2,8 @@
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.Kosmos.Fixture
+import com.android.systemui.kosmos.testScope
+import com.android.systemui.scene.shared.model.FakeScene
import com.android.systemui.scene.shared.model.SceneContainerConfig
import com.android.systemui.scene.shared.model.Scenes
@@ -16,5 +18,18 @@
)
}
+val Kosmos.fakeScenes by Fixture {
+ sceneKeys
+ .map { key ->
+ FakeScene(
+ scope = testScope.backgroundScope,
+ key = key,
+ )
+ }
+ .toSet()
+}
+
+val Kosmos.scenes by Fixture { fakeScenes }
+
val Kosmos.initialSceneKey by Fixture { Scenes.Lockscreen }
val Kosmos.sceneContainerConfig by Fixture { SceneContainerConfig(sceneKeys, initialSceneKey) }
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/scene/domain/interactor/SceneContainerStartableKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/scene/domain/interactor/SceneContainerStartableKosmos.kt
new file mode 100644
index 0000000..8f6171d
--- /dev/null
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/scene/domain/interactor/SceneContainerStartableKosmos.kt
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.scene.domain.interactor
+
+import com.android.systemui.authentication.domain.interactor.authenticationInteractor
+import com.android.systemui.bouncer.domain.interactor.bouncerInteractor
+import com.android.systemui.bouncer.domain.interactor.simBouncerInteractor
+import com.android.systemui.classifier.falsingCollector
+import com.android.systemui.classifier.falsingManager
+import com.android.systemui.deviceentry.domain.interactor.deviceEntryFaceAuthInteractor
+import com.android.systemui.deviceentry.domain.interactor.deviceEntryInteractor
+import com.android.systemui.deviceentry.domain.interactor.deviceUnlockedInteractor
+import com.android.systemui.keyguard.domain.interactor.keyguardInteractor
+import com.android.systemui.kosmos.Kosmos
+import com.android.systemui.kosmos.Kosmos.Fixture
+import com.android.systemui.kosmos.testScope
+import com.android.systemui.model.sysUiState
+import com.android.systemui.power.domain.interactor.powerInteractor
+import com.android.systemui.scene.domain.startable.SceneContainerStartable
+import com.android.systemui.scene.shared.logger.sceneLogger
+import com.android.systemui.settings.displayTracker
+import com.android.systemui.shade.domain.interactor.shadeInteractor
+import com.android.systemui.statusbar.notification.stack.domain.interactor.headsUpNotificationInteractor
+import com.android.systemui.statusbar.notificationShadeWindowController
+import com.android.systemui.statusbar.phone.centralSurfaces
+import com.android.systemui.statusbar.policy.domain.interactor.deviceProvisioningInteractor
+import dagger.Lazy
+
+val Kosmos.sceneContainerStartable by Fixture {
+ SceneContainerStartable(
+ applicationScope = testScope.backgroundScope,
+ sceneInteractor = sceneInteractor,
+ deviceEntryInteractor = deviceEntryInteractor,
+ deviceUnlockedInteractor = deviceUnlockedInteractor,
+ bouncerInteractor = bouncerInteractor,
+ keyguardInteractor = keyguardInteractor,
+ sysUiState = sysUiState,
+ displayId = displayTracker.defaultDisplayId,
+ sceneLogger = sceneLogger,
+ falsingCollector = falsingCollector,
+ falsingManager = falsingManager,
+ powerInteractor = powerInteractor,
+ simBouncerInteractor = Lazy { simBouncerInteractor },
+ authenticationInteractor = Lazy { authenticationInteractor },
+ windowController = notificationShadeWindowController,
+ deviceProvisioningInteractor = deviceProvisioningInteractor,
+ centralSurfaces = centralSurfaces,
+ headsUpInteractor = headsUpNotificationInteractor,
+ occlusionInteractor = sceneContainerOcclusionInteractor,
+ faceUnlockInteractor = deviceEntryFaceAuthInteractor,
+ shadeInteractor = shadeInteractor,
+ )
+}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/scene/shared/model/FakeScene.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/scene/shared/model/FakeScene.kt
new file mode 100644
index 0000000..eeaa9db
--- /dev/null
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/scene/shared/model/FakeScene.kt
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.scene.shared.model
+
+import com.android.compose.animation.scene.SceneKey
+import com.android.compose.animation.scene.UserAction
+import com.android.compose.animation.scene.UserActionResult
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.channels.Channel
+import kotlinx.coroutines.flow.SharingStarted
+import kotlinx.coroutines.flow.onCompletion
+import kotlinx.coroutines.flow.onStart
+import kotlinx.coroutines.flow.receiveAsFlow
+import kotlinx.coroutines.flow.stateIn
+
+class FakeScene(
+ val scope: CoroutineScope,
+ override val key: SceneKey,
+) : Scene {
+ var isDestinationScenesBeingCollected = false
+
+ private val destinationScenesChannel = Channel<Map<UserAction, UserActionResult>>()
+
+ override val destinationScenes =
+ destinationScenesChannel
+ .receiveAsFlow()
+ .onStart { isDestinationScenesBeingCollected = true }
+ .onCompletion { isDestinationScenesBeingCollected = false }
+ .stateIn(
+ scope = scope,
+ started = SharingStarted.WhileSubscribed(),
+ initialValue = emptyMap(),
+ )
+
+ suspend fun setDestinationScenes(value: Map<UserAction, UserActionResult>) {
+ destinationScenesChannel.send(value)
+ }
+}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/shade/ShadeTestUtil.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/shade/ShadeTestUtil.kt
new file mode 100644
index 0000000..a47b2e8
--- /dev/null
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/shade/ShadeTestUtil.kt
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.shade
+
+import com.android.compose.animation.scene.ObservableTransitionState
+import com.android.compose.animation.scene.SceneKey
+import com.android.systemui.scene.domain.interactor.SceneInteractor
+import com.android.systemui.scene.shared.flag.SceneContainerFlag
+import com.android.systemui.scene.shared.model.Scenes
+import com.android.systemui.shade.data.repository.FakeShadeRepository
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.flowOf
+import kotlinx.coroutines.test.TestScope
+import kotlinx.coroutines.test.runCurrent
+import org.junit.Assert
+
+/** Sets up shade state for tests for either value of the scene container flag. */
+class ShadeTestUtil constructor(val delegate: ShadeTestUtilDelegate) {
+
+ /** Sets both shade and QS expansion. One value must be zero or values must add up to 1f. */
+ fun setShadeAndQsExpansion(shadeExpansion: Float, qsExpansion: Float) {
+ Assert.assertTrue(
+ "One expansion must be zero or both must add up to 1",
+ shadeExpansion == 0f || qsExpansion == 0f || shadeExpansion + qsExpansion == 1f,
+ )
+ delegate.assertFlagValid()
+ delegate.setShadeAndQsExpansionInternal(shadeExpansion, qsExpansion)
+ }
+}
+
+/** Sets up shade state for tests for a specific value of the scene container flag. */
+interface ShadeTestUtilDelegate {
+ /** Sets both shade and QS expansion. One value must be zero or values must add up to 1f. */
+ fun setShadeAndQsExpansionInternal(shadeExpansion: Float, qsExpansion: Float)
+
+ /** Asserts that the scene container flag matches this implementation. */
+ fun assertFlagValid()
+}
+
+/** Sets up shade state for tests when the scene container flag is disabled. */
+class ShadeTestUtilLegacyImpl(val testScope: TestScope, val shadeRepository: FakeShadeRepository) :
+ ShadeTestUtilDelegate {
+ override fun setShadeAndQsExpansionInternal(shadeExpansion: Float, qsExpansion: Float) {
+ shadeRepository.setLegacyShadeExpansion(shadeExpansion)
+ shadeRepository.setQsExpansion(qsExpansion)
+ testScope.runCurrent()
+ }
+
+ override fun assertFlagValid() {
+ Assert.assertFalse(SceneContainerFlag.isEnabled)
+ }
+}
+
+/** Sets up shade state for tests when the scene container flag is disabled. */
+class ShadeTestUtilSceneImpl(val testScope: TestScope, val sceneInteractor: SceneInteractor) :
+ ShadeTestUtilDelegate {
+ override fun setShadeAndQsExpansionInternal(shadeExpansion: Float, qsExpansion: Float) {
+ if (shadeExpansion == 0f) {
+ setTransitionProgress(Scenes.Lockscreen, Scenes.QuickSettings, qsExpansion)
+ } else if (qsExpansion == 0f) {
+ setTransitionProgress(Scenes.Lockscreen, Scenes.Shade, shadeExpansion)
+ } else {
+ setTransitionProgress(Scenes.Shade, Scenes.QuickSettings, qsExpansion)
+ }
+ }
+
+ private fun setTransitionProgress(from: SceneKey, to: SceneKey, progress: Float) {
+ sceneInteractor.changeScene(from, "test")
+ val transitionState =
+ MutableStateFlow<ObservableTransitionState>(
+ ObservableTransitionState.Transition(
+ fromScene = from,
+ toScene = to,
+ progress = MutableStateFlow(progress),
+ isInitiatedByUserInput = false,
+ isUserInputOngoing = flowOf(false),
+ )
+ )
+ sceneInteractor.setTransitionState(transitionState)
+ testScope.runCurrent()
+ }
+
+ override fun assertFlagValid() {
+ Assert.assertTrue(SceneContainerFlag.isEnabled)
+ }
+}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/shade/ShadeTestUtilKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/shade/ShadeTestUtilKosmos.kt
new file mode 100644
index 0000000..9eeb345
--- /dev/null
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/shade/ShadeTestUtilKosmos.kt
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.shade
+
+import com.android.systemui.kosmos.Kosmos
+import com.android.systemui.kosmos.testScope
+import com.android.systemui.scene.domain.interactor.sceneInteractor
+import com.android.systemui.scene.shared.flag.SceneContainerFlag
+import com.android.systemui.shade.data.repository.fakeShadeRepository
+
+var Kosmos.shadeTestUtil: ShadeTestUtil by
+ Kosmos.Fixture {
+ ShadeTestUtil(
+ if (SceneContainerFlag.isEnabled) {
+ ShadeTestUtilSceneImpl(testScope, sceneInteractor)
+ } else {
+ ShadeTestUtilLegacyImpl(testScope, fakeShadeRepository)
+ }
+ )
+ }
diff --git a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/PulseExpansionHandler.kt
similarity index 71%
copy from packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt
copy to packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/PulseExpansionHandler.kt
index c4476fc..73b775e 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/PulseExpansionHandler.kt
@@ -14,11 +14,10 @@
* limitations under the License.
*/
-package com.android.systemui.volume.panel.component.mediaoutput.shared.model
+package com.android.systemui.statusbar
-import android.media.session.PlaybackState
+import com.android.systemui.kosmos.Kosmos
+import com.android.systemui.util.mockito.mock
-data class SessionWithPlayback(
- val session: MediaDeviceSession,
- val playback: PlaybackState,
-)
+val Kosmos.pulseExpansionHandler: PulseExpansionHandler by
+ Kosmos.Fixture { mock<PulseExpansionHandler>() }
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationScrollViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationScrollViewModelKosmos.kt
index 10cc136..6370a5d 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationScrollViewModelKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationScrollViewModelKosmos.kt
@@ -17,6 +17,7 @@
package com.android.systemui.statusbar.notification.stack.ui.viewmodel
import com.android.systemui.dump.dumpManager
+import com.android.systemui.keyguard.domain.interactor.keyguardInteractor
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.Kosmos.Fixture
import com.android.systemui.scene.domain.interactor.sceneInteractor
@@ -29,5 +30,6 @@
stackAppearanceInteractor = notificationStackAppearanceInteractor,
shadeInteractor = shadeInteractor,
sceneInteractor = sceneInteractor,
+ keyguardInteractor = { keyguardInteractor },
)
}
diff --git a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/phone/BiometricUnlockController.kt
similarity index 60%
copy from packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt
copy to packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/phone/BiometricUnlockController.kt
index c4476fc..f377e28b 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/phone/BiometricUnlockController.kt
@@ -14,11 +14,15 @@
* limitations under the License.
*/
-package com.android.systemui.volume.panel.component.mediaoutput.shared.model
+@file:OptIn(ExperimentalCoroutinesApi::class)
-import android.media.session.PlaybackState
+package com.android.systemui.statusbar.phone
-data class SessionWithPlayback(
- val session: MediaDeviceSession,
- val playback: PlaybackState,
-)
+import com.android.systemui.kosmos.Kosmos
+import com.android.systemui.kosmos.Kosmos.Fixture
+import com.android.systemui.util.mockito.mock
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+
+val Kosmos.biometricUnlockController: BiometricUnlockController by Fixture {
+ mock<BiometricUnlockController>()
+}
diff --git a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/phone/CentralSurfacesKosmos.kt
similarity index 70%
copy from packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt
copy to packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/phone/CentralSurfacesKosmos.kt
index c4476fc..1611f62 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/phone/CentralSurfacesKosmos.kt
@@ -14,11 +14,10 @@
* limitations under the License.
*/
-package com.android.systemui.volume.panel.component.mediaoutput.shared.model
+package com.android.systemui.statusbar.phone
-import android.media.session.PlaybackState
+import com.android.systemui.kosmos.Kosmos
+import com.android.systemui.kosmos.Kosmos.Fixture
+import com.android.systemui.util.mockito.mock
-data class SessionWithPlayback(
- val session: MediaDeviceSession,
- val playback: PlaybackState,
-)
+val Kosmos.centralSurfaces by Fixture { mock<CentralSurfaces>() }
diff --git a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/phone/DozeScrimController.kt
similarity index 68%
copy from packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt
copy to packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/phone/DozeScrimController.kt
index c4476fc..0a1923d 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/phone/DozeScrimController.kt
@@ -14,11 +14,10 @@
* limitations under the License.
*/
-package com.android.systemui.volume.panel.component.mediaoutput.shared.model
+package com.android.systemui.statusbar.phone
-import android.media.session.PlaybackState
+import com.android.systemui.kosmos.Kosmos
+import com.android.systemui.kosmos.Kosmos.Fixture
+import com.android.systemui.util.mockito.mock
-data class SessionWithPlayback(
- val session: MediaDeviceSession,
- val playback: PlaybackState,
-)
+val Kosmos.dozeScrimController: DozeScrimController by Fixture { mock<DozeScrimController>() }
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/phone/DozeServiceHostKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/phone/DozeServiceHostKosmos.kt
index 370b177..0b5a68e 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/phone/DozeServiceHostKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/phone/DozeServiceHostKosmos.kt
@@ -16,9 +16,45 @@
package com.android.systemui.statusbar.phone
+import android.os.powerManager
+import com.android.keyguard.keyguardUpdateMonitor
+import com.android.systemui.assist.assistManager
+import com.android.systemui.biometrics.authController
+import com.android.systemui.doze.dozeLog
+import com.android.systemui.keyguard.domain.interactor.dozeInteractor
+import com.android.systemui.keyguard.wakefulnessLifecycle
import com.android.systemui.kosmos.Kosmos
+import com.android.systemui.plugins.statusbar.statusBarStateController
+import com.android.systemui.shade.domain.interactor.shadeLockscreenInteractor
+import com.android.systemui.statusbar.notificationShadeWindowController
+import com.android.systemui.statusbar.policy.batteryController
+import com.android.systemui.statusbar.policy.deviceProvisionedController
+import com.android.systemui.statusbar.policy.headsUpManager
+import com.android.systemui.statusbar.pulseExpansionHandler
import kotlinx.coroutines.ExperimentalCoroutinesApi
-import org.mockito.Mockito.mock
@OptIn(ExperimentalCoroutinesApi::class)
-val Kosmos.dozeServiceHost: DozeServiceHost by Kosmos.Fixture { mock(DozeServiceHost::class.java) }
+val Kosmos.dozeServiceHost: DozeServiceHost by
+ Kosmos.Fixture {
+ DozeServiceHost(
+ dozeLog,
+ powerManager,
+ wakefulnessLifecycle,
+ statusBarStateController,
+ deviceProvisionedController,
+ headsUpManager,
+ batteryController,
+ scrimController,
+ { biometricUnlockController },
+ { assistManager },
+ dozeScrimController,
+ keyguardUpdateMonitor,
+ pulseExpansionHandler,
+ notificationShadeWindowController,
+ notificationWakeUpCoordinator,
+ authController,
+ notificationIconAreaController,
+ shadeLockscreenInteractor,
+ dozeInteractor,
+ )
+ }
diff --git a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/phone/NotificationWakeUpCoordinator.kt
similarity index 60%
copy from packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt
copy to packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/phone/NotificationWakeUpCoordinator.kt
index c4476fc..0c0f87b 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/phone/NotificationWakeUpCoordinator.kt
@@ -14,11 +14,13 @@
* limitations under the License.
*/
-package com.android.systemui.volume.panel.component.mediaoutput.shared.model
+package com.android.systemui.statusbar.phone
-import android.media.session.PlaybackState
+import com.android.systemui.kosmos.Kosmos
+import com.android.systemui.kosmos.Kosmos.Fixture
+import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator
+import com.android.systemui.util.mockito.mock
-data class SessionWithPlayback(
- val session: MediaDeviceSession,
- val playback: PlaybackState,
-)
+val Kosmos.notificationWakeUpCoordinator: NotificationWakeUpCoordinator by Fixture {
+ mock<NotificationWakeUpCoordinator>()
+}
diff --git a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/policy/BatteryControllerKosmos.kt
similarity index 68%
copy from packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt
copy to packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/policy/BatteryControllerKosmos.kt
index c4476fc..b31a45c 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/policy/BatteryControllerKosmos.kt
@@ -14,11 +14,10 @@
* limitations under the License.
*/
-package com.android.systemui.volume.panel.component.mediaoutput.shared.model
+package com.android.systemui.statusbar.policy
-import android.media.session.PlaybackState
+import com.android.systemui.kosmos.Kosmos
+import com.android.systemui.kosmos.Kosmos.Fixture
+import com.android.systemui.util.mockito.mock
-data class SessionWithPlayback(
- val session: MediaDeviceSession,
- val playback: PlaybackState,
-)
+val Kosmos.batteryController: BatteryController by Fixture { mock<BatteryController>() }
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/ui/FakeSystemBarUtilsProxy.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/ui/FakeSystemBarUtilsProxy.kt
index d38baba..7e993b4 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/ui/FakeSystemBarUtilsProxy.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/ui/FakeSystemBarUtilsProxy.kt
@@ -16,6 +16,31 @@
package com.android.systemui.statusbar.ui
-class FakeSystemBarUtilsProxy(private var statusBarHeight: Int) : SystemBarUtilsProxy {
- override fun getStatusBarHeight(): Int = statusBarHeight
+import com.android.systemui.statusbar.policy.FakeConfigurationController
+
+class FakeSystemBarUtilsProxy(
+ val fakeConfigurationController: FakeConfigurationController,
+ statusBarHeight: Int,
+ keyguardStatusBarHeight: Int,
+) : SystemBarUtilsProxy {
+ var fakeStatusBarHeight: Int = statusBarHeight
+ get() = field
+ set(value) {
+ if (field != value) {
+ field = value
+ fakeConfigurationController.notifyConfigurationChanged()
+ }
+ }
+
+ var fakeKeyguardStatusBarHeight = keyguardStatusBarHeight
+ get() = field
+ set(value) {
+ if (field != value) {
+ field = value
+ fakeConfigurationController.notifyConfigurationChanged()
+ }
+ }
+
+ override fun getStatusBarHeight(): Int = fakeStatusBarHeight
+ override fun getStatusBarHeaderHeightKeyguard(): Int = fakeKeyguardStatusBarHeight
}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/ui/SystemBarUtilsProxyKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/ui/SystemBarUtilsProxyKosmos.kt
index f24037d..dce22f8b 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/ui/SystemBarUtilsProxyKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/ui/SystemBarUtilsProxyKosmos.kt
@@ -21,6 +21,7 @@
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.Kosmos.Fixture
import com.android.systemui.res.R
+import com.android.systemui.statusbar.policy.fakeConfigurationController
/**
* Main fixture for supplying a [SystemBarUtilsProxy]. Should be used by other fixtures. Unless
@@ -47,5 +48,9 @@
* tests in order to provide custom results.
*/
var Kosmos.fakeSystemBarUtilsProxy by Fixture {
- FakeSystemBarUtilsProxy(mainResources.getDimensionPixelSize(R.dimen.status_bar_height))
+ FakeSystemBarUtilsProxy(
+ fakeConfigurationController,
+ mainResources.getDimensionPixelSize(R.dimen.status_bar_height),
+ mainResources.getDimensionPixelSize(R.dimen.status_bar_header_height_keyguard),
+ )
}
diff --git a/ravenwood/texts/ravenwood-annotation-allowed-classes.txt b/ravenwood/texts/ravenwood-annotation-allowed-classes.txt
index 9b4d378..243e224 100644
--- a/ravenwood/texts/ravenwood-annotation-allowed-classes.txt
+++ b/ravenwood/texts/ravenwood-annotation-allowed-classes.txt
@@ -266,6 +266,8 @@
android.telephony.ModemActivityInfo
android.telephony.ServiceState
+android.os.connectivity.WifiActivityEnergyInfo
+
com.android.server.LocalServices
com.android.internal.util.BitUtils
diff --git a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
index 5e566aa..522aa67 100644
--- a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
+++ b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
@@ -202,6 +202,7 @@
// Default max API calls per reset interval for generated preview API rate limiting.
private static final int DEFAULT_GENERATED_PREVIEW_MAX_CALLS_PER_INTERVAL = 2;
+ private static final String PENDING_DELETED_IDS_ATTR = "pending_deleted_ids";
private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@Override
@@ -228,6 +229,11 @@
onPackageBroadcastReceived(intent, getSendingUserId());
updateWidgetPackageSuspensionMaskedState(intent, false, getSendingUserId());
break;
+ case Intent.ACTION_PACKAGE_RESTARTED:
+ case Intent.ACTION_PACKAGE_UNSTOPPED:
+ if (!android.content.pm.Flags.stayStopped()) return;
+ updateWidgetPackageStoppedMaskedState(intent);
+ break;
default:
onPackageBroadcastReceived(intent, getSendingUserId());
break;
@@ -396,7 +402,10 @@
packageFilter.addAction(Intent.ACTION_PACKAGE_CHANGED);
packageFilter.addAction(Intent.ACTION_PACKAGE_REMOVED);
packageFilter.addAction(Intent.ACTION_PACKAGE_DATA_CLEARED);
+ packageFilter.addAction(Intent.ACTION_PACKAGE_RESTARTED);
+ packageFilter.addAction(Intent.ACTION_PACKAGE_UNSTOPPED);
packageFilter.addDataScheme("package");
+ packageFilter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
mContext.registerReceiverAsUser(mBroadcastReceiver, UserHandle.ALL,
packageFilter, null, mCallbackHandler);
@@ -581,14 +590,19 @@
changed |= provider.setMaskedByQuietProfileLocked(quietProfile);
try {
boolean suspended;
+ boolean stopped;
try {
suspended = mPackageManager.isPackageSuspendedForUser(
provider.id.componentName.getPackageName(), provider.getUserId());
+ stopped = mPackageManager.isPackageStoppedForUser(
+ provider.id.componentName.getPackageName(), provider.getUserId());
} catch (IllegalArgumentException ex) {
// Package not found.
suspended = false;
+ stopped = false;
}
changed |= provider.setMaskedBySuspendedPackageLocked(suspended);
+ changed |= provider.setMaskedByStoppedPackageLocked(stopped);
} catch (RemoteException e) {
Slog.e(TAG, "Failed to query application info", e);
}
@@ -636,6 +650,82 @@
}
/**
+ * Update the masked state for a stopped or unstopped package.
+ */
+ private void updateWidgetPackageStoppedMaskedState(@NonNull Intent intent) {
+ final int providerUid = intent.getIntExtra(Intent.EXTRA_UID, Process.INVALID_UID);
+ final Uri uri = intent.getData();
+ if (providerUid == Process.INVALID_UID || uri == null) {
+ return;
+ }
+
+ final String packageName = uri.getSchemeSpecificPart();
+ if (packageName == null) {
+ return;
+ }
+
+ boolean isStopped;
+ try {
+ isStopped = mPackageManager.isPackageStoppedForUser(packageName,
+ UserHandle.getUserId(providerUid));
+ } catch (Exception e) {
+ Slog.e(TAG, "Failed to query package stopped state", e);
+ return;
+ }
+
+ if (DEBUG) {
+ Slog.i(TAG, "Updating package stopped masked state for uid " + providerUid + " package "
+ + packageName + " isStopped " + isStopped);
+ }
+ synchronized (mLock) {
+ final int count = mProviders.size();
+ for (int i = 0; i < count; i++) {
+ Provider provider = mProviders.get(i);
+ if (providerUid != provider.id.uid
+ || !packageName.equals(provider.id.componentName.getPackageName())) {
+ continue;
+ }
+ if (provider.setMaskedByStoppedPackageLocked(isStopped)) {
+ if (provider.isMaskedLocked()) {
+ maskWidgetsViewsLocked(provider, null);
+ cancelBroadcastsLocked(provider);
+ } else {
+ unmaskWidgetsViewsLocked(provider);
+ final int widgetCount = provider.widgets.size();
+ if (widgetCount > 0) {
+ final int[] widgetIds = new int[widgetCount];
+ for (int j = 0; j < widgetCount; j++) {
+ widgetIds[j] = provider.widgets.get(j).appWidgetId;
+ }
+ registerForBroadcastsLocked(provider, widgetIds);
+ sendUpdateIntentLocked(provider, widgetIds, /* interactive= */ false);
+ }
+
+ final int pendingIdsCount = provider.pendingDeletedWidgetIds.size();
+ if (pendingIdsCount > 0) {
+ if (DEBUG) {
+ Slog.i(TAG, "Sending missed deleted broadcasts for "
+ + provider.id.componentName + " "
+ + provider.pendingDeletedWidgetIds);
+ }
+ for (int j = 0; j < pendingIdsCount; j++) {
+ sendDeletedIntentLocked(provider.id.componentName,
+ provider.id.getProfile(),
+ provider.pendingDeletedWidgetIds.get(j));
+ }
+ provider.pendingDeletedWidgetIds.clear();
+ if (widgetCount == 0) {
+ sendDisabledIntentLocked(provider);
+ }
+ saveGroupStateAsync(provider.id.getProfile().getIdentifier());
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /**
* Mask the target widget belonging to the specified provider, or all active widgets
* of the provider if target widget == null.
*/
@@ -648,11 +738,11 @@
R.layout.work_widget_mask_view);
ApplicationInfo appInfo = provider.info.providerInfo.applicationInfo;
final int appUserId = provider.getUserId();
- boolean showBadge;
+ boolean showBadge = false;
final long identity = Binder.clearCallingIdentity();
try {
- final Intent onClickIntent;
+ Intent onClickIntent = null;
if (provider.maskedByQuietProfile) {
showBadge = true;
@@ -676,7 +766,7 @@
appInfo.packageName, suspendingPackage, dialogInfo, null, null,
appUserId);
}
- } else /* provider.maskedByLockedProfile */ {
+ } else if (provider.maskedByLockedProfile) {
showBadge = true;
onClickIntent = mKeyguardManager
.createConfirmDeviceCredentialIntent(null, null, appUserId);
@@ -684,6 +774,8 @@
onClickIntent.setFlags(
FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
}
+ } else if (provider.maskedByStoppedPackage) {
+ showBadge = mUserManager.hasBadge(appUserId);
}
Icon icon = appInfo.icon != 0
@@ -697,7 +789,14 @@
for (int j = 0; j < widgetCount; j++) {
Widget widget = provider.widgets.get(j);
if (targetWidget != null && targetWidget != widget) continue;
- if (onClickIntent != null) {
+ if (provider.maskedByStoppedPackage) {
+ Intent intent = createUpdateIntentLocked(provider,
+ new int[] { widget.appWidgetId });
+ views.setOnClickPendingIntent(android.R.id.background,
+ PendingIntent.getBroadcast(mContext, widget.appWidgetId,
+ intent, PendingIntent.FLAG_UPDATE_CURRENT
+ | PendingIntent.FLAG_IMMUTABLE));
+ } else if (onClickIntent != null) {
views.setOnClickPendingIntent(android.R.id.background,
PendingIntent.getActivity(mContext, widget.appWidgetId, onClickIntent,
PendingIntent.FLAG_UPDATE_CURRENT
@@ -1950,15 +2049,23 @@
if (provider != null) {
provider.widgets.remove(widget);
if (!provider.zombie) {
- // send the broacast saying that this appWidgetId has been deleted
- sendDeletedIntentLocked(widget);
+ // If the package is not stopped, send the broadcast saying that this appWidgetId
+ // has been deleted. Otherwise, save the ID and send the broadcast when the package
+ // is unstopped.
+ if (!provider.maskedByStoppedPackage) {
+ sendDeletedIntentLocked(widget);
+ } else {
+ provider.pendingDeletedWidgetIds.add(widget.appWidgetId);
+ }
if (provider.widgets.isEmpty()) {
// cancel the future updates
cancelBroadcastsLocked(provider);
- // send the broacast saying that the provider is not in use any more
- sendDisabledIntentLocked(provider);
+ // send the broadcast saying that the provider is not in use any more
+ if (!provider.maskedByStoppedPackage) {
+ sendDisabledIntentLocked(provider);
+ }
}
}
}
@@ -2033,8 +2140,9 @@
final HashSet<Integer> ids = mRemoteViewsServicesAppWidgets.get(key);
if (ids.remove(widget.appWidgetId)) {
// If we have removed the last app widget referencing this service, then we
- // should destroy it and remove it from this set
- if (ids.isEmpty()) {
+ // should destroy it and remove it from this set. This is skipped for widgets whose
+ // provider is in a stopped package, to avoid waking up the package.
+ if (ids.isEmpty() && !widget.provider.maskedByStoppedPackage) {
destroyRemoteViewsService(key.second.getIntent(), widget);
it.remove();
}
@@ -2544,18 +2652,29 @@
private void sendUpdateIntentLocked(Provider provider, int[] appWidgetIds,
boolean interactive) {
- Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
- intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
- intent.setComponent(provider.id.componentName);
+ Intent intent = createUpdateIntentLocked(provider, appWidgetIds);
sendBroadcastAsUser(intent, provider.id.getProfile(), interactive);
}
+ private Intent createUpdateIntentLocked(Provider provider, int[] appWidgetIds) {
+ Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
+ intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
+ intent.setComponent(provider.id.componentName);
+ return intent;
+ }
+
private void sendDeletedIntentLocked(Widget widget) {
+ sendDeletedIntentLocked(widget.provider.id.componentName, widget.provider.id.getProfile(),
+ widget.appWidgetId);
+ }
+
+ private void sendDeletedIntentLocked(ComponentName provider, UserHandle profile,
+ int appWidgetId) {
Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_DELETED);
- intent.setComponent(widget.provider.id.componentName);
- intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widget.appWidgetId);
+ intent.setComponent(provider);
+ intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
// Cleanup after deletion isn't an interactive UX case
- sendBroadcastAsUser(intent, widget.provider.id.getProfile(), false);
+ sendBroadcastAsUser(intent, profile, false);
}
private void sendDisabledIntentLocked(Provider provider) {
@@ -2684,6 +2803,14 @@
if (persistsProviderInfo && p.mInfoParsed) {
AppWidgetXmlUtil.writeAppWidgetProviderInfoLocked(out, p.info);
}
+ final int pendingIdsCount = p.pendingDeletedWidgetIds.size();
+ if (pendingIdsCount > 0) {
+ final List<String> idStrings = new ArrayList<>();
+ for (int i = 0; i < pendingIdsCount; i++) {
+ idStrings.add(String.valueOf(p.pendingDeletedWidgetIds.get(i)));
+ }
+ out.attribute(null, PENDING_DELETED_IDS_ATTR, String.join(",", idStrings));
+ }
out.endTag(null, "p");
}
@@ -3022,7 +3149,7 @@
continue;
}
- if (provider.widgets.size() > 0) {
+ if (provider.widgets.size() > 0 && !provider.maskedByStoppedPackage) {
Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER,
"appwidget init " + provider.id.componentName.getPackageName());
provider.widgets.forEach(widget -> {
@@ -3440,6 +3567,16 @@
legacyProviderIndex);
provider.tag = providerTag;
provider.infoTag = parser.getAttributeValue(null, "info_tag");
+
+ final String pendingDeletedIds = parser.getAttributeValue(null,
+ PENDING_DELETED_IDS_ATTR);
+ if (pendingDeletedIds != null && !pendingDeletedIds.isEmpty()) {
+ final String[] idStrings = pendingDeletedIds.split(",");
+ for (int i = 0; i < idStrings.length; i++) {
+ provider.pendingDeletedWidgetIds.add(
+ Integer.parseInt(idStrings[i]));
+ }
+ }
} else if ("h".equals(tag)) {
legacyHostIndex++;
Host host = new Host();
@@ -4443,6 +4580,11 @@
boolean maskedByLockedProfile;
boolean maskedByQuietProfile;
boolean maskedBySuspendedPackage;
+ // This provider's package has been stopped
+ boolean maskedByStoppedPackage;
+ // Widget IDs for which we haven't yet sent DELETED broadcasts because the package was
+ // stopped.
+ IntArray pendingDeletedWidgetIds = new IntArray();
boolean mInfoParsed = false;
@@ -4598,8 +4740,15 @@
return masked != oldState;
}
+ public boolean setMaskedByStoppedPackageLocked(boolean masked) {
+ boolean oldState = maskedByStoppedPackage;
+ maskedByStoppedPackage = masked;
+ return masked != oldState;
+ }
+
public boolean isMaskedLocked() {
- return maskedByQuietProfile || maskedByLockedProfile || maskedBySuspendedPackage;
+ return maskedByQuietProfile || maskedByLockedProfile || maskedBySuspendedPackage
+ || maskedByStoppedPackage;
}
public boolean shouldBePersisted() {
diff --git a/services/autofill/bugfixes.aconfig b/services/autofill/bugfixes.aconfig
index 590a1ef..0c3d40d 100644
--- a/services/autofill/bugfixes.aconfig
+++ b/services/autofill/bugfixes.aconfig
@@ -1,4 +1,5 @@
package: "android.service.autofill"
+container: "system"
flag {
name: "test"
diff --git a/services/autofill/features.aconfig b/services/autofill/features.aconfig
index c130cee..1dc3b73 100644
--- a/services/autofill/features.aconfig
+++ b/services/autofill/features.aconfig
@@ -1,4 +1,5 @@
package: "android.service.autofill"
+container: "system"
flag {
name: "autofill_credman_integration"
diff --git a/services/autofill/java/com/android/server/autofill/RemoteFillService.java b/services/autofill/java/com/android/server/autofill/RemoteFillService.java
index c96688c..7ceb3bb 100644
--- a/services/autofill/java/com/android/server/autofill/RemoteFillService.java
+++ b/services/autofill/java/com/android/server/autofill/RemoteFillService.java
@@ -28,6 +28,7 @@
import android.content.Intent;
import android.content.IntentSender;
import android.os.Handler;
+import android.os.IBinder;
import android.os.ICancellationSignal;
import android.os.RemoteException;
import android.service.autofill.AutofillService;
@@ -42,7 +43,6 @@
import android.service.autofill.SaveRequest;
import android.text.format.DateUtils;
import android.util.Slog;
-import android.view.autofill.IAutoFillManagerClient;
import com.android.internal.infra.AbstractRemoteService;
import com.android.internal.infra.ServiceConnector;
@@ -283,8 +283,7 @@
return callback;
}
- public void onFillCredentialRequest(@NonNull FillRequest request,
- IAutoFillManagerClient autofillCallback) {
+ public void onFillCredentialRequest(@NonNull FillRequest request, IBinder autofillCallback) {
if (sVerbose) {
Slog.v(TAG, "onFillRequest:" + request);
}
diff --git a/services/autofill/java/com/android/server/autofill/SecondaryProviderHandler.java b/services/autofill/java/com/android/server/autofill/SecondaryProviderHandler.java
index ce9d180..044a064 100644
--- a/services/autofill/java/com/android/server/autofill/SecondaryProviderHandler.java
+++ b/services/autofill/java/com/android/server/autofill/SecondaryProviderHandler.java
@@ -21,11 +21,11 @@
import android.content.ComponentName;
import android.content.Context;
import android.content.IntentSender;
+import android.os.IBinder;
import android.service.autofill.ConvertCredentialResponse;
import android.service.autofill.FillRequest;
import android.service.autofill.FillResponse;
import android.util.Slog;
-import android.view.autofill.IAutoFillManagerClient;
/**
* Requests autofill response from a Remote Autofill Service. This autofill service can be
@@ -105,8 +105,7 @@
/**
* Requests a new fill response.
*/
- public void onFillRequest(FillRequest pendingFillRequest, int flag,
- IAutoFillManagerClient client) {
+ public void onFillRequest(FillRequest pendingFillRequest, int flag, IBinder client) {
Slog.v(TAG, "Requesting fill response to secondary provider.");
mLastFlag = flag;
if (mRemoteFillService != null && mRemoteFillService.isCredentialAutofillService()) {
diff --git a/services/autofill/java/com/android/server/autofill/Session.java b/services/autofill/java/com/android/server/autofill/Session.java
index 3a38406..cd1ef88 100644
--- a/services/autofill/java/com/android/server/autofill/Session.java
+++ b/services/autofill/java/com/android/server/autofill/Session.java
@@ -757,13 +757,14 @@
mPendingInlineSuggestionsRequest, id);
}
mSecondaryProviderHandler.onFillRequest(mPendingFillRequest,
- mPendingFillRequest.getFlags(), mClient);
+ mPendingFillRequest.getFlags(), mClient.asBinder());
} else if (mRemoteFillService != null) {
if (mIsPrimaryCredential) {
mPendingFillRequest = addCredentialManagerDataToClientState(
mPendingFillRequest,
mPendingInlineSuggestionsRequest, id);
- mRemoteFillService.onFillCredentialRequest(mPendingFillRequest, mClient);
+ mRemoteFillService.onFillCredentialRequest(mPendingFillRequest,
+ mClient.asBinder());
} else {
mRemoteFillService.onFillRequest(mPendingFillRequest);
}
@@ -2897,7 +2898,7 @@
+ ", clientState=" + newClientState + ", authenticationId=" + authenticationId);
}
if (Flags.autofillCredmanDevIntegration() && exception != null
- && exception instanceof GetCredentialException) {
+ && !exception.getType().equals(GetCredentialException.TYPE_USER_CANCELED)) {
if (dataset != null && dataset.getFieldIds().size() == 1) {
if (sDebug) {
Slog.d(TAG, "setAuthenticationResultLocked(): result returns with"
@@ -6494,21 +6495,15 @@
}
}
if (exception != null) {
- mClient.onGetCredentialException(id, viewId, exception.getType(),
- exception.getMessage());
+ if (viewId.isVirtualInt()) {
+ sendResponseToViewNode(viewId, /*response=*/ null, exception);
+ } else {
+ mClient.onGetCredentialException(id, viewId, exception.getType(),
+ exception.getMessage());
+ }
} else if (response != null) {
if (viewId.isVirtualInt()) {
- ViewNode viewNode = getViewNodeFromContextsLocked(viewId);
- if (viewNode != null && viewNode.getPendingCredentialCallback() != null) {
- Bundle resultData = new Bundle();
- resultData.putParcelable(
- CredentialProviderService.EXTRA_GET_CREDENTIAL_RESPONSE,
- response);
- viewNode.getPendingCredentialCallback().send(SUCCESS_CREDMAN_SELECTOR,
- resultData);
- } else {
- Slog.w(TAG, "View node not found after GetCredentialResponse");
- }
+ sendResponseToViewNode(viewId, response, /*exception=*/ null);
} else {
mClient.onGetCredentialResponse(id, viewId, response);
}
@@ -6522,6 +6517,30 @@
}
}
+ @GuardedBy("mLock")
+ private void sendResponseToViewNode(AutofillId viewId, GetCredentialResponse response,
+ GetCredentialException exception) {
+ ViewNode viewNode = getViewNodeFromContextsLocked(viewId);
+ if (viewNode != null && viewNode.getPendingCredentialCallback() != null) {
+ Bundle resultData = new Bundle();
+ if (response != null) {
+ resultData.putParcelable(
+ CredentialProviderService.EXTRA_GET_CREDENTIAL_RESPONSE,
+ response);
+ viewNode.getPendingCredentialCallback().send(SUCCESS_CREDMAN_SELECTOR,
+ resultData);
+ } else if (exception != null) {
+ resultData.putStringArray(
+ CredentialProviderService.EXTRA_GET_CREDENTIAL_EXCEPTION,
+ new String[] {exception.getType(), exception.getMessage()});
+ viewNode.getPendingCredentialCallback().send(FAILURE_CREDMAN_SELECTOR,
+ resultData);
+ }
+ } else {
+ Slog.w(TAG, "View node not found after GetCredentialResponse");
+ }
+ }
+
void autoFillApp(Dataset dataset) {
synchronized (mLock) {
if (mDestroyed) {
diff --git a/services/backup/java/com/android/server/backup/BackupManagerService.java b/services/backup/java/com/android/server/backup/BackupManagerService.java
index 0353d5a..5f0071d 100644
--- a/services/backup/java/com/android/server/backup/BackupManagerService.java
+++ b/services/backup/java/com/android/server/backup/BackupManagerService.java
@@ -1516,7 +1516,7 @@
String op = nextArg(args, argIndex);
argIndex++;
- if ("--help".equals(op)) {
+ if ("--help".equals(op) || "-h".equals(op)) {
showDumpUsage(pw);
return;
}
@@ -1548,19 +1548,17 @@
}
return;
}
- if (op == null || "agents".startsWith(op) || "transportclients".equals(op)
- || "transportstats".equals(op)) {
- for (int i = 0; i < mUserServices.size(); i++) {
- UserBackupManagerService userBackupManagerService =
- getServiceForUserIfCallerHasPermission(mUserServices.keyAt(i), "dump()");
- if (userBackupManagerService != null) {
- userBackupManagerService.dump(fd, pw, args);
- }
- }
- return;
- }
- showDumpUsage(pw);
+ // We get here if we have no parameters or parameters unkonwn to us.
+ // Print dumpsys info in either case: bug report creation passes some parameter to
+ // dumpsys that we don't need to check.
+ for (int i = 0; i < mUserServices.size(); i++) {
+ UserBackupManagerService userBackupManagerService =
+ getServiceForUserIfCallerHasPermission(mUserServices.keyAt(i), "dump()");
+ if (userBackupManagerService != null) {
+ userBackupManagerService.dump(fd, pw, args);
+ }
+ }
}
private String nextArg(String[] args, int argIndex) {
diff --git a/services/companion/java/com/android/server/companion/virtual/InputController.java b/services/companion/java/com/android/server/companion/virtual/InputController.java
index 3c25835..9b72288 100644
--- a/services/companion/java/com/android/server/companion/virtual/InputController.java
+++ b/services/companion/java/com/android/server/companion/virtual/InputController.java
@@ -226,7 +226,7 @@
token.unlinkToDeath(inputDeviceDescriptor.getDeathRecipient(), /* flags= */ 0);
mNativeWrapper.closeUinput(inputDeviceDescriptor.getNativePointer());
String phys = inputDeviceDescriptor.getPhys();
- InputManagerGlobal.getInstance().removeUniqueIdAssociationByDescriptor(phys);
+ InputManagerGlobal.getInstance().removeUniqueIdAssociation(phys);
// Type associations are added in the case of navigation touchpads. Those should be removed
// once the input device gets closed.
if (inputDeviceDescriptor.getType() == InputDeviceDescriptor.TYPE_NAVIGATION_TOUCHPAD) {
@@ -319,9 +319,9 @@
return formatSimple("virtual%s:%d", type, sNextPhysId.getAndIncrement());
}
- private void setUniqueIdAssociationByPort(int displayId, String phys) {
+ private void setUniqueIdAssociation(int displayId, String phys) {
final String displayUniqueId = mDisplayManagerInternal.getDisplayInfo(displayId).uniqueId;
- InputManagerGlobal.getInstance().addUniqueIdAssociationByPort(phys, displayUniqueId);
+ InputManagerGlobal.getInstance().addUniqueIdAssociation(phys, displayUniqueId);
}
boolean sendDpadKeyEvent(@NonNull IBinder token, @NonNull VirtualKeyEvent event) {
@@ -809,7 +809,7 @@
final int inputDeviceId;
- setUniqueIdAssociationByPort(displayId, phys);
+ setUniqueIdAssociation(displayId, phys);
try (WaitForDevice waiter = new WaitForDevice(deviceName, vendorId, productId, displayId)) {
ptr = deviceOpener.get();
// See INVALID_PTR in libs/input/VirtualInputDevice.cpp.
@@ -835,7 +835,7 @@
throw e;
}
} catch (DeviceCreationException e) {
- InputManagerGlobal.getInstance().removeUniqueIdAssociationByPort(phys);
+ InputManagerGlobal.getInstance().removeUniqueIdAssociation(phys);
throw e;
}
diff --git a/services/contextualsearch/flags/flags.aconfig b/services/contextualsearch/flags/flags.aconfig
new file mode 100644
index 0000000..6d2da06
--- /dev/null
+++ b/services/contextualsearch/flags/flags.aconfig
@@ -0,0 +1,10 @@
+package: "com.android.server.contextualsearch.flags"
+container: "system"
+
+flag {
+ name: "enable_exclude_persistent_ui"
+ namespace: "machine_learning"
+ description: "Excluding persistent UI from contextual search screenshot."
+ is_fixed_read_only: true
+ bug: "333312675"
+}
\ No newline at end of file
diff --git a/services/contextualsearch/java/com/android/server/contextualsearch/ContextualSearchManagerService.java b/services/contextualsearch/java/com/android/server/contextualsearch/ContextualSearchManagerService.java
index 16a9933..9a73a2d 100644
--- a/services/contextualsearch/java/com/android/server/contextualsearch/ContextualSearchManagerService.java
+++ b/services/contextualsearch/java/com/android/server/contextualsearch/ContextualSearchManagerService.java
@@ -17,18 +17,30 @@
package com.android.server.contextualsearch;
import static android.Manifest.permission.ACCESS_CONTEXTUAL_SEARCH;
+import static android.app.AppOpsManager.OP_ASSIST_SCREENSHOT;
+import static android.app.AppOpsManager.OP_ASSIST_STRUCTURE;
import static android.content.Context.CONTEXTUAL_SEARCH_SERVICE;
import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
import static android.content.Intent.FLAG_ACTIVITY_NO_ANIMATION;
import static android.content.Intent.FLAG_ACTIVITY_NO_USER_ACTION;
import static android.content.pm.PackageManager.MATCH_FACTORY_ONLY;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
+import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR;
+import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL;
+import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR;
+
+import static com.android.server.contextualsearch.flags.Flags.enableExcludePersistentUi;
+import static com.android.server.wm.ActivityTaskManagerInternal.ASSIST_KEY_CONTENT;
+import static com.android.server.wm.ActivityTaskManagerInternal.ASSIST_KEY_STRUCTURE;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.app.ActivityOptions;
+import android.app.AppOpsManager;
import android.app.admin.DevicePolicyManagerInternal;
+import android.app.assist.AssistContent;
+import android.app.assist.AssistStructure;
import android.app.contextualsearch.CallbackToken;
import android.app.contextualsearch.ContextualSearchManager;
import android.app.contextualsearch.ContextualSearchState;
@@ -37,6 +49,7 @@
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
+import android.content.pm.PackageManagerInternal;
import android.content.pm.ResolveInfo;
import android.graphics.Bitmap;
import android.os.Binder;
@@ -49,15 +62,20 @@
import android.os.Process;
import android.os.RemoteException;
import android.os.ResultReceiver;
+import android.os.ServiceManager;
import android.os.ShellCallback;
+import android.os.SystemClock;
import android.util.Log;
import android.util.Slog;
+import android.view.IWindowManager;
import android.window.ScreenCapture;
import com.android.internal.R;
import com.android.internal.annotations.GuardedBy;
import com.android.server.LocalServices;
import com.android.server.SystemService;
+import com.android.server.am.AssistDataRequester;
+import com.android.server.am.AssistDataRequester.AssistDataRequesterCallbacks;
import com.android.server.wm.ActivityAssistInfo;
import com.android.server.wm.ActivityTaskManagerInternal;
import com.android.server.wm.WindowManagerInternal;
@@ -66,21 +84,69 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
+import java.util.Set;
public class ContextualSearchManagerService extends SystemService {
-
+ private static final String TAG = ContextualSearchManagerService.class.getSimpleName();
private static final int MSG_RESET_TEMPORARY_PACKAGE = 0;
private static final int MAX_TEMP_PACKAGE_DURATION_MS = 1_000 * 60 * 2; // 2 minutes
+
private final Context mContext;
private final ActivityTaskManagerInternal mAtmInternal;
+ private final PackageManagerInternal mPackageManager;
private final WindowManagerInternal mWmInternal;
private final DevicePolicyManagerInternal mDpmInternal;
+ private final Object mLock = new Object();
+ private final AssistDataRequester mAssistDataRequester;
- private Handler mTemporaryHandler;
+ private final AssistDataRequesterCallbacks mAssistDataCallbacks =
+ new AssistDataRequesterCallbacks() {
+ @Override
+ public boolean canHandleReceivedAssistDataLocked() {
+ synchronized (mLock) {
+ return mStateCallback != null;
+ }
+ }
+
+ @Override
+ public void onAssistDataReceivedLocked(
+ final Bundle data,
+ final int activityIndex,
+ final int activityCount) {
+ final IContextualSearchCallback callback;
+ synchronized (mLock) {
+ callback = mStateCallback;
+ }
+
+ if (callback != null) {
+ try {
+ callback.onResult(new ContextualSearchState(
+ data.getParcelable(ASSIST_KEY_STRUCTURE, AssistStructure.class),
+ data.getParcelable(ASSIST_KEY_CONTENT, AssistContent.class),
+ data));
+ } catch (RemoteException e) {
+ Log.e(TAG, "Error invoking ContextualSearchCallback", e);
+ }
+ } else {
+ Log.w(TAG, "Callback went away!");
+ }
+ }
+
+ @Override
+ public void onAssistRequestCompleted() {
+ synchronized (mLock) {
+ mStateCallback = null;
+ }
+ }
+ };
@GuardedBy("this")
+ private Handler mTemporaryHandler;
+ @GuardedBy("this")
private String mTemporaryPackage = null;
- private static final String TAG = ContextualSearchManagerService.class.getSimpleName();
+
+ @GuardedBy("mLock")
+ private IContextualSearchCallback mStateCallback;
public ContextualSearchManagerService(@NonNull Context context) {
super(context);
@@ -88,8 +154,14 @@
mContext = context;
mAtmInternal = Objects.requireNonNull(
LocalServices.getService(ActivityTaskManagerInternal.class));
+ mPackageManager = LocalServices.getService(PackageManagerInternal.class);
mWmInternal = Objects.requireNonNull(LocalServices.getService(WindowManagerInternal.class));
mDpmInternal = LocalServices.getService(DevicePolicyManagerInternal.class);
+ mAssistDataRequester = new AssistDataRequester(
+ mContext,
+ IWindowManager.Stub.asInterface(ServiceManager.getService(Context.WINDOW_SERVICE)),
+ mContext.getSystemService(AppOpsManager.class),
+ mAssistDataCallbacks, mLock, OP_ASSIST_STRUCTURE, OP_ASSIST_SCREENSHOT);
}
@Override
@@ -174,25 +246,53 @@
if (DEBUG_USER) Log.d(TAG, "Launch component: " + launchIntent.getComponent());
launchIntent.addFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_NO_ANIMATION
| FLAG_ACTIVITY_NO_USER_ACTION);
+ launchIntent.putExtra(
+ ContextualSearchManager.EXTRA_INVOCATION_TIME_MS,
+ SystemClock.uptimeMillis());
launchIntent.putExtra(ContextualSearchManager.EXTRA_ENTRYPOINT, entrypoint);
launchIntent.putExtra(ContextualSearchManager.EXTRA_TOKEN, mToken);
boolean isAssistDataAllowed = mAtmInternal.isAssistDataAllowed();
final List<ActivityAssistInfo> records = mAtmInternal.getTopVisibleActivities();
+ final List<IBinder> activityTokens = new ArrayList<>(records.size());
ArrayList<String> visiblePackageNames = new ArrayList<>();
boolean isManagedProfileVisible = false;
for (ActivityAssistInfo record : records) {
// Add the package name to the list only if assist data is allowed.
if (isAssistDataAllowed) {
visiblePackageNames.add(record.getComponentName().getPackageName());
+ activityTokens.add(record.getActivityToken());
}
if (mDpmInternal != null
&& mDpmInternal.isUserOrganizationManaged(record.getUserId())) {
isManagedProfileVisible = true;
}
}
+ if (isAssistDataAllowed) {
+ try {
+ final String csPackage = Objects.requireNonNull(launchIntent.getPackage());
+ final int csUid = mPackageManager.getPackageUid(csPackage, 0, 0);
+ mAssistDataRequester.requestAssistData(
+ activityTokens,
+ /* fetchData */ true,
+ /* fetchScreenshot */ false,
+ /* allowFetchData */ true,
+ /* allowFetchScreenshot */ false,
+ csUid,
+ csPackage,
+ null);
+ } catch (Exception e) {
+ Log.e(TAG, "Could not request assist data", e);
+ }
+ }
final ScreenCapture.ScreenshotHardwareBuffer shb;
if (mWmInternal != null) {
- shb = mWmInternal.takeAssistScreenshot();
+ if (enableExcludePersistentUi()) {
+ shb = mWmInternal.takeAssistScreenshot(
+ Set.of(TYPE_STATUS_BAR, TYPE_NAVIGATION_BAR, TYPE_NAVIGATION_BAR_PANEL));
+ } else {
+ shb = mWmInternal.takeAssistScreenshot(/* windowTypesToExclude= */ Set.of());
+ }
+
} else {
shb = null;
}
@@ -264,6 +364,7 @@
synchronized (this) {
if (DEBUG_USER) Log.d(TAG, "startContextualSearch");
enforcePermission("startContextualSearch");
+ mAssistDataRequester.cancel();
mToken = new CallbackToken();
// We get the launch intent with the system server's identity because the system
// server has READ_FRAME_BUFFER permission to get the screenshot and because only
@@ -298,17 +399,19 @@
return;
}
mToken = null;
- // Process data request
- try {
- callback.onResult(new ContextualSearchState(null, null, Bundle.EMPTY));
- } catch (RemoteException e) {
- Log.e(TAG, "Could not invoke onResult callback", e);
+ synchronized (mLock) {
+ mStateCallback = callback;
}
+ mAssistDataRequester.processPendingAssistData();
}
- public void onShellCommand(@Nullable FileDescriptor in, @Nullable FileDescriptor out,
- @Nullable FileDescriptor err, @NonNull String[] args,
- @Nullable ShellCallback callback, @NonNull ResultReceiver resultReceiver) {
+ public void onShellCommand(
+ @Nullable FileDescriptor in,
+ @Nullable FileDescriptor out,
+ @Nullable FileDescriptor err,
+ @NonNull String[] args,
+ @Nullable ShellCallback callback,
+ @NonNull ResultReceiver resultReceiver) {
new ContextualSearchManagerShellCommand(ContextualSearchManagerService.this)
.exec(this, in, out, err, args, callback, resultReceiver);
}
diff --git a/services/core/Android.bp b/services/core/Android.bp
index e095fa3..300b147 100644
--- a/services/core/Android.bp
+++ b/services/core/Android.bp
@@ -234,7 +234,6 @@
"android.hidl.manager-V1.2-java",
"cbor-java",
"com.android.media.audio-aconfig-java",
- "dropbox_flags_lib",
"icu4j_calendar_astronomer",
"android.security.aaid_aidl-java",
"netd-client",
diff --git a/services/core/java/com/android/server/SensitiveContentProtectionManagerService.java b/services/core/java/com/android/server/SensitiveContentProtectionManagerService.java
index 6c7546e..64bca33 100644
--- a/services/core/java/com/android/server/SensitiveContentProtectionManagerService.java
+++ b/services/core/java/com/android/server/SensitiveContentProtectionManagerService.java
@@ -17,6 +17,7 @@
package com.android.server;
import static android.permission.flags.Flags.sensitiveContentImprovements;
+import static android.permission.flags.Flags.sensitiveContentMetricsBugfix;
import static android.permission.flags.Flags.sensitiveNotificationAppProtection;
import static android.provider.Settings.Global.DISABLE_SCREEN_SHARE_PROTECTIONS_FOR_APPS_AND_NOTIFICATIONS;
import static android.view.flags.Flags.sensitiveContentAppProtection;
@@ -93,7 +94,7 @@
private boolean mProjectionActive = false;
private static class MediaProjectionSession {
- private final int mUid;
+ private final int mUid; // UID of app that started projection session
private final long mSessionId;
private final boolean mIsExempted;
private final ArraySet<String> mAllSeenNotificationKeys = new ArraySet<>();
@@ -320,6 +321,12 @@
}
mProjectionActive = true;
+
+ if (sensitiveContentMetricsBugfix()) {
+ mWindowManager.setBlockScreenCaptureForAppsSessionId(
+ mMediaProjectionSession.mSessionId);
+ }
+
if (sensitiveNotificationAppProtection()) {
updateAppsThatShouldBlockScreenCapture();
}
diff --git a/services/core/java/com/android/server/SystemConfig.java b/services/core/java/com/android/server/SystemConfig.java
index 1a3ef73..a508ebf 100644
--- a/services/core/java/com/android/server/SystemConfig.java
+++ b/services/core/java/com/android/server/SystemConfig.java
@@ -106,6 +106,9 @@
// property for runtime configuration differentiation in vendor
private static final String VENDOR_SKU_PROPERTY = "ro.boot.product.vendor.sku";
+ // property for runtime configuration differentation in product
+ private static final String PRODUCT_SKU_PROPERTY = "ro.boot.hardware.sku";
+
private static final ArrayMap<String, ArraySet<String>> EMPTY_PERMISSIONS =
new ArrayMap<>();
@@ -694,6 +697,17 @@
readPermissions(parser, Environment.buildPath(
Environment.getProductDirectory(), "etc", "permissions"), productPermissionFlag);
+ String productSkuProperty = SystemProperties.get(PRODUCT_SKU_PROPERTY, "");
+ if (!productSkuProperty.isEmpty()) {
+ String productSkuDir = "sku_" + productSkuProperty;
+ readPermissions(parser, Environment.buildPath(
+ Environment.getProductDirectory(), "etc", "sysconfig", productSkuDir),
+ productPermissionFlag);
+ readPermissions(parser, Environment.buildPath(
+ Environment.getProductDirectory(), "etc", "permissions", productSkuDir),
+ productPermissionFlag);
+ }
+
// Allow /system_ext to customize all system configs
readPermissions(parser, Environment.buildPath(
Environment.getSystemExtDirectory(), "etc", "sysconfig"), ALLOW_ALL);
diff --git a/services/core/java/com/android/server/TelephonyRegistry.java b/services/core/java/com/android/server/TelephonyRegistry.java
index bd67cf420..e171064 100644
--- a/services/core/java/com/android/server/TelephonyRegistry.java
+++ b/services/core/java/com/android/server/TelephonyRegistry.java
@@ -425,6 +425,8 @@
private int[] mSCBMReason;
private boolean[] mSCBMStarted;
+ private boolean[] mCarrierRoamingNtnMode = null;
+
/**
* Per-phone map of precise data connection state. The key of the map is the pair of transport
* type and APN setting. This is the cache to prevent redundant callbacks to the listeners.
@@ -723,6 +725,7 @@
mECBMStarted = copyOf(mECBMStarted, mNumPhones);
mSCBMReason = copyOf(mSCBMReason, mNumPhones);
mSCBMStarted = copyOf(mSCBMStarted, mNumPhones);
+ mCarrierRoamingNtnMode = copyOf(mCarrierRoamingNtnMode, mNumPhones);
// ds -> ss switch.
if (mNumPhones < oldNumPhones) {
cutListToSize(mCellInfo, mNumPhones);
@@ -781,6 +784,7 @@
mECBMStarted[i] = false;
mSCBMReason[i] = TelephonyManager.STOP_REASON_UNKNOWN;
mSCBMStarted[i] = false;
+ mCarrierRoamingNtnMode[i] = false;
}
}
}
@@ -854,6 +858,7 @@
mECBMStarted = new boolean[numPhones];
mSCBMReason = new int[numPhones];
mSCBMStarted = new boolean[numPhones];
+ mCarrierRoamingNtnMode = new boolean[numPhones];
for (int i = 0; i < numPhones; i++) {
mCallState[i] = TelephonyManager.CALL_STATE_IDLE;
@@ -897,6 +902,7 @@
mECBMStarted[i] = false;
mSCBMReason[i] = TelephonyManager.STOP_REASON_UNKNOWN;
mSCBMStarted[i] = false;
+ mCarrierRoamingNtnMode[i] = false;
}
mAppOps = mContext.getSystemService(AppOpsManager.class);
@@ -1523,6 +1529,14 @@
remove(r.binder);
}
}
+ if (events.contains(TelephonyCallback.EVENT_CARRIER_ROAMING_NTN_MODE_CHANGED)) {
+ try {
+ r.callback.onCarrierRoamingNtnModeChanged(
+ mCarrierRoamingNtnMode[r.phoneId]);
+ } catch (RemoteException ex) {
+ remove(r.binder);
+ }
+ }
}
}
}
@@ -3512,6 +3526,41 @@
handleRemoveListLocked();
}
+ /**
+ * Notify external listeners that carrier roaming non-terrestrial network mode changed.
+ * @param subId subscription ID.
+ * @param active {@code true} If the device is connected to carrier roaming
+ * non-terrestrial network or was connected within the
+ * {CarrierConfigManager#KEY_SATELLITE_CONNECTION_HYSTERESIS_SEC_INT}
+ * duration, {code false} otherwise.
+ */
+ public void notifyCarrierRoamingNtnModeChanged(int subId, boolean active) {
+ if (!checkNotifyPermission("notifyCarrierRoamingNtnModeChanged")) {
+ return;
+ }
+
+ if (VDBG) {
+ log("notifyCarrierRoamingNtnModeChanged: subId=" + subId + " active=" + active);
+ }
+
+ synchronized (mRecords) {
+ int phoneId = getPhoneIdFromSubId(subId);
+ mCarrierRoamingNtnMode[phoneId] = active;
+ for (Record r : mRecords) {
+ if (r.matchTelephonyCallbackEvent(
+ TelephonyCallback.EVENT_CARRIER_ROAMING_NTN_MODE_CHANGED)
+ && idMatch(r, subId, phoneId)) {
+ try {
+ r.callback.onCarrierRoamingNtnModeChanged(active);
+ } catch (RemoteException ex) {
+ mRemoveList.add(r.binder);
+ }
+ }
+ }
+ handleRemoveListLocked();
+ }
+ }
+
@NeverCompile // Avoid size overhead of debugging code.
@Override
public void dump(FileDescriptor fd, PrintWriter writer, String[] args) {
diff --git a/services/core/java/com/android/server/adaptiveauth/AdaptiveAuthService.java b/services/core/java/com/android/server/adaptiveauth/AdaptiveAuthService.java
index 0e0bf81..4da5cfc 100644
--- a/services/core/java/com/android/server/adaptiveauth/AdaptiveAuthService.java
+++ b/services/core/java/com/android/server/adaptiveauth/AdaptiveAuthService.java
@@ -23,7 +23,13 @@
import android.content.pm.PackageManager;
import android.hardware.biometrics.AuthenticationStateListener;
import android.hardware.biometrics.BiometricManager;
-import android.hardware.biometrics.BiometricSourceType;
+import android.hardware.biometrics.events.AuthenticationAcquiredInfo;
+import android.hardware.biometrics.events.AuthenticationErrorInfo;
+import android.hardware.biometrics.events.AuthenticationFailedInfo;
+import android.hardware.biometrics.events.AuthenticationHelpInfo;
+import android.hardware.biometrics.events.AuthenticationStartedInfo;
+import android.hardware.biometrics.events.AuthenticationStoppedInfo;
+import android.hardware.biometrics.events.AuthenticationSucceededInfo;
import android.os.Build;
import android.os.Handler;
import android.os.Looper;
@@ -131,30 +137,35 @@
private final AuthenticationStateListener mAuthenticationStateListener =
new AuthenticationStateListener.Stub() {
@Override
- public void onAuthenticationStarted(int requestReason) {}
+ public void onAuthenticationAcquired(AuthenticationAcquiredInfo authInfo) {}
@Override
- public void onAuthenticationStopped() {}
+ public void onAuthenticationError(AuthenticationErrorInfo authInfo) {}
@Override
- public void onAuthenticationSucceeded(int requestReason, int userId) {
+ public void onAuthenticationFailed(AuthenticationFailedInfo authInfo) {
+ Slog.i(TAG, "AuthenticationStateListener#onAuthenticationFailed");
+ mHandler.obtainMessage(MSG_REPORT_BIOMETRIC_AUTH_ATTEMPT, AUTH_FAILURE,
+ authInfo.getUserId()).sendToTarget();
+ }
+
+ @Override
+ public void onAuthenticationHelp(AuthenticationHelpInfo authInfo) {}
+
+ @Override
+ public void onAuthenticationStarted(AuthenticationStartedInfo authInfo) {}
+
+ @Override
+ public void onAuthenticationStopped(AuthenticationStoppedInfo authInfo) {}
+
+ @Override
+ public void onAuthenticationSucceeded(AuthenticationSucceededInfo authInfo) {
if (DEBUG) {
Slog.d(TAG, "AuthenticationStateListener#onAuthenticationSucceeded");
}
- mHandler.obtainMessage(MSG_REPORT_BIOMETRIC_AUTH_ATTEMPT, AUTH_SUCCESS, userId)
- .sendToTarget();
+ mHandler.obtainMessage(MSG_REPORT_BIOMETRIC_AUTH_ATTEMPT, AUTH_SUCCESS,
+ authInfo.getUserId()).sendToTarget();
}
-
- @Override
- public void onAuthenticationFailed(int requestReason, int userId) {
- Slog.i(TAG, "AuthenticationStateListener#onAuthenticationFailed");
- mHandler.obtainMessage(MSG_REPORT_BIOMETRIC_AUTH_ATTEMPT, AUTH_FAILURE, userId)
- .sendToTarget();
- }
-
- @Override
- public void onAuthenticationAcquired(BiometricSourceType biometricSourceType,
- int requestReason, int acquiredInfo) {}
};
private final Handler mHandler = new Handler(Looper.getMainLooper()) {
diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java
index 26e9bf5..eec22c9 100644
--- a/services/core/java/com/android/server/am/ActiveServices.java
+++ b/services/core/java/com/android/server/am/ActiveServices.java
@@ -2422,8 +2422,6 @@
getTimeLimitedFgsType(foregroundServiceType);
final TimeLimitedFgsInfo fgsTypeInfo = fgsInfo.get(timeLimitedFgsType);
if (fgsTypeInfo != null) {
- // TODO(b/330399444): check to see if all time book-keeping for
- // time limited types should use elapsedRealtime instead of uptime
final long before24Hr = Math.max(0,
SystemClock.elapsedRealtime() - (24 * 60 * 60 * 1000));
final long lastTimeOutAt = fgsTypeInfo.getTimeLimitExceededAt();
@@ -3598,11 +3596,9 @@
Slog.d(TAG_SERVICE, "[STALE] Short FGS timed out: " + sr
+ " " + sr.getShortFgsTimedEventDescription(nowUptime));
}
- mShortFGSAnrTimer.discard(sr);
return;
}
Slog.e(TAG_SERVICE, "Short FGS timed out: " + sr);
- mShortFGSAnrTimer.accept(sr);
traceInstant("short FGS timeout: ", sr);
logFGSStateChangeLocked(sr,
@@ -3682,8 +3678,10 @@
Slog.d(TAG_SERVICE, "[STALE] Short FGS ANR'ed: " + sr
+ " " + sr.getShortFgsTimedEventDescription(nowUptime));
}
+ mShortFGSAnrTimer.discard(sr);
return;
}
+ mShortFGSAnrTimer.accept(sr);
final String message = "Short FGS ANR'ed: " + sr;
if (DEBUG_SHORT_SERVICE) {
@@ -3757,7 +3755,7 @@
}
traceInstant("FGS start: ", sr);
- final long nowUptime = SystemClock.uptimeMillis();
+ final long nowRealtime = SystemClock.elapsedRealtime();
// Fetch/create/update the fgs info for the time-limited type.
SparseArray<TimeLimitedFgsInfo> fgsInfo = mTimeLimitedFgsInfo.get(sr.appInfo.uid);
@@ -3768,10 +3766,10 @@
final int timeLimitedFgsType = getTimeLimitedFgsType(sr.foregroundServiceType);
TimeLimitedFgsInfo fgsTypeInfo = fgsInfo.get(timeLimitedFgsType);
if (fgsTypeInfo == null) {
- fgsTypeInfo = sr.createTimeLimitedFgsInfo(nowUptime);
+ fgsTypeInfo = sr.createTimeLimitedFgsInfo(nowRealtime);
fgsInfo.put(timeLimitedFgsType, fgsTypeInfo);
}
- fgsTypeInfo.setLastFgsStartTime(nowUptime);
+ fgsTypeInfo.setLastFgsStartTime(nowRealtime);
// We'll cancel the previous ANR timer and start a fresh one below.
mFGSAnrTimer.cancel(sr);
@@ -3845,14 +3843,14 @@
final TimeLimitedFgsInfo fgsTypeInfo = fgsInfo.get(fgsType);
if (fgsTypeInfo != null) {
// Update total runtime for the time-limited fgs type and mark it as timed out.
- final long nowUptime = SystemClock.uptimeMillis();
+ final long nowRealtime = SystemClock.elapsedRealtime();
fgsTypeInfo.updateTotalRuntime();
- fgsTypeInfo.setTimeLimitExceededAt(nowUptime);
+ fgsTypeInfo.setTimeLimitExceededAt(nowRealtime);
logFGSStateChangeLocked(sr,
FOREGROUND_SERVICE_STATE_CHANGED__STATE__TIMED_OUT,
- nowUptime > fgsTypeInfo.getLastFgsStartTime()
- ? (int) (nowUptime - fgsTypeInfo.getLastFgsStartTime()) : 0,
+ nowRealtime > fgsTypeInfo.getLastFgsStartTime()
+ ? (int) (nowRealtime - fgsTypeInfo.getLastFgsStartTime()) : 0,
FGS_STOP_REASON_UNKNOWN,
FGS_TYPE_POLICY_CHECK_UNKNOWN,
FOREGROUND_SERVICE_STATE_CHANGED__FGS_START_API__FGSSTARTAPI_NA,
@@ -3867,8 +3865,10 @@
Slog.w(TAG_SERVICE, "Exception from scheduleTimeoutServiceForType: " + e);
}
- // ANR the service after giving the service some time to clean up.
- mFGSAnrTimer.start(sr, mAm.mConstants.mFgsAnrExtraWaitDuration);
+ if (android.app.Flags.introduceNewServiceOntimeoutCallback()) {
+ // ANR the service after giving the service some time to clean up.
+ mFGSAnrTimer.start(sr, mAm.mConstants.mFgsAnrExtraWaitDuration);
+ }
}
}
@@ -7424,7 +7424,6 @@
mActiveServiceAnrTimer.discard(proc);
return;
}
- mActiveServiceAnrTimer.accept(proc);
final long now = SystemClock.uptimeMillis();
final long maxTime = now
- (psr.shouldExecServicesFg()
@@ -7443,6 +7442,7 @@
}
}
if (timeout != null && mAm.mProcessList.isInLruListLOSP(proc)) {
+ mActiveServiceAnrTimer.accept(proc);
Slog.w(TAG, "Timeout executing service: " + timeout);
StringWriter sw = new StringWriter();
PrintWriter pw = new FastPrintWriter(sw, false, 1024);
@@ -7457,6 +7457,7 @@
timeoutRecord = TimeoutRecord.forServiceExec(timeout.shortInstanceName,
waitedMillis);
} else {
+ mActiveServiceAnrTimer.discard(proc);
final long delay = psr.shouldExecServicesFg()
? (nextTime + mAm.mConstants.SERVICE_TIMEOUT) :
(nextTime + mAm.mConstants.SERVICE_BACKGROUND_TIMEOUT)
@@ -7491,7 +7492,6 @@
return;
}
- mServiceFGAnrTimer.accept(r);
app = r.app;
if (app != null && app.isDebugging()) {
// The app's being debugged; let it ride
@@ -7499,6 +7499,8 @@
return;
}
+ mServiceFGAnrTimer.accept(r);
+
if (DEBUG_BACKGROUND_CHECK) {
Slog.i(TAG, "Service foreground-required timeout for " + r);
}
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 6612319..6286263 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -463,6 +463,7 @@
import com.android.server.os.NativeTombstoneManager;
import com.android.server.pm.Computer;
import com.android.server.pm.Installer;
+import com.android.server.pm.PackageManagerServiceUtils;
import com.android.server.pm.UserManagerInternal;
import com.android.server.pm.permission.PermissionManagerServiceInternal;
import com.android.server.pm.pkg.AndroidPackage;
@@ -13851,6 +13852,8 @@
// Goodbye!
removePidLocked(pid, app);
mHandler.removeMessages(PROC_START_TIMEOUT_MSG, app);
+ mHandler.removeMessages(BIND_APPLICATION_TIMEOUT_SOFT_MSG, app);
+ mHandler.removeMessages(BIND_APPLICATION_TIMEOUT_HARD_MSG, app);
mBatteryStatsService.noteProcessFinish(app.processName, app.info.uid);
if (app.isolated) {
mBatteryStatsService.removeIsolatedUid(app.uid, app.info.uid);
@@ -15876,6 +15879,11 @@
registeredReceivers = mReceiverResolver.queryIntent(snapshot, intent,
resolvedType, false /*defaultOnly*/, userId);
}
+ if (registeredReceivers != null) {
+ PackageManagerServiceUtils.applyNullActionBlocking(
+ mPlatformCompat, snapshot, registeredReceivers,
+ true, intent, callingUid);
+ }
}
BroadcastQueue.traceEnd(cookie);
@@ -20697,7 +20705,7 @@
/** @see Binder#getCallingPid */
public int getCallingPid() {
- return Binder.getCallingUid();
+ return Binder.getCallingPid();
}
/** @see Binder#clearCallingIdentity */
diff --git a/services/core/java/com/android/server/am/BatteryStatsService.java b/services/core/java/com/android/server/am/BatteryStatsService.java
index f98799d..4f84149 100644
--- a/services/core/java/com/android/server/am/BatteryStatsService.java
+++ b/services/core/java/com/android/server/am/BatteryStatsService.java
@@ -133,6 +133,7 @@
import com.android.server.power.stats.PowerStatsStore;
import com.android.server.power.stats.PowerStatsUidResolver;
import com.android.server.power.stats.SystemServerCpuThreadReader.SystemServiceCpuThreadTimes;
+import com.android.server.power.stats.WifiPowerStatsProcessor;
import com.android.server.power.stats.wakeups.CpuWakeupStats;
import java.io.File;
@@ -412,6 +413,8 @@
com.android.internal.R.integer.config_defaultPowerStatsThrottlePeriodCpu);
final long powerStatsThrottlePeriodMobileRadio = context.getResources().getInteger(
com.android.internal.R.integer.config_defaultPowerStatsThrottlePeriodMobileRadio);
+ final long powerStatsThrottlePeriodWifi = context.getResources().getInteger(
+ com.android.internal.R.integer.config_defaultPowerStatsThrottlePeriodWifi);
mBatteryStatsConfig =
new BatteryStatsImpl.BatteryStatsConfig.Builder()
.setResetOnUnplugHighBatteryLevel(resetOnUnplugHighBatteryLevel)
@@ -422,6 +425,9 @@
.setPowerStatsThrottlePeriodMillis(
BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO,
powerStatsThrottlePeriodMobileRadio)
+ .setPowerStatsThrottlePeriodMillis(
+ BatteryConsumer.POWER_COMPONENT_WIFI,
+ powerStatsThrottlePeriodWifi)
.build();
mPowerStatsUidResolver = new PowerStatsUidResolver();
mStats = new BatteryStatsImpl(mBatteryStatsConfig, Clock.SYSTEM_CLOCK, mMonotonicClock,
@@ -480,6 +486,7 @@
AggregatedPowerStatsConfig.STATE_PROCESS_STATE)
.setProcessor(
new CpuPowerStatsProcessor(mPowerProfile, mCpuScalingPolicies));
+
config.trackPowerComponent(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO)
.trackDeviceStates(
AggregatedPowerStatsConfig.STATE_POWER,
@@ -490,9 +497,21 @@
AggregatedPowerStatsConfig.STATE_PROCESS_STATE)
.setProcessor(
new MobileRadioPowerStatsProcessor(mPowerProfile));
+
config.trackPowerComponent(BatteryConsumer.POWER_COMPONENT_PHONE,
BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO)
.setProcessor(new PhoneCallPowerStatsProcessor());
+
+ config.trackPowerComponent(BatteryConsumer.POWER_COMPONENT_WIFI)
+ .trackDeviceStates(
+ AggregatedPowerStatsConfig.STATE_POWER,
+ AggregatedPowerStatsConfig.STATE_SCREEN)
+ .trackUidStates(
+ AggregatedPowerStatsConfig.STATE_POWER,
+ AggregatedPowerStatsConfig.STATE_SCREEN,
+ AggregatedPowerStatsConfig.STATE_PROCESS_STATE)
+ .setProcessor(
+ new WifiPowerStatsProcessor(mPowerProfile));
return config;
}
@@ -518,14 +537,22 @@
public void systemServicesReady() {
mStats.setPowerStatsCollectorEnabled(BatteryConsumer.POWER_COMPONENT_CPU,
Flags.streamlinedBatteryStats());
- mStats.setPowerStatsCollectorEnabled(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO,
- Flags.streamlinedConnectivityBatteryStats());
mBatteryUsageStatsProvider.setPowerStatsExporterEnabled(
BatteryConsumer.POWER_COMPONENT_CPU,
Flags.streamlinedBatteryStats());
+
+ mStats.setPowerStatsCollectorEnabled(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO,
+ Flags.streamlinedConnectivityBatteryStats());
mBatteryUsageStatsProvider.setPowerStatsExporterEnabled(
BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO,
Flags.streamlinedConnectivityBatteryStats());
+
+ mStats.setPowerStatsCollectorEnabled(BatteryConsumer.POWER_COMPONENT_WIFI,
+ Flags.streamlinedConnectivityBatteryStats());
+ mBatteryUsageStatsProvider.setPowerStatsExporterEnabled(
+ BatteryConsumer.POWER_COMPONENT_WIFI,
+ Flags.streamlinedConnectivityBatteryStats());
+
mWorker.systemServicesReady();
mStats.systemServicesReady(mContext);
mCpuWakeupStats.systemServicesReady();
diff --git a/services/core/java/com/android/server/am/CachedAppOptimizer.java b/services/core/java/com/android/server/am/CachedAppOptimizer.java
index fa6b54b..211f952 100644
--- a/services/core/java/com/android/server/am/CachedAppOptimizer.java
+++ b/services/core/java/com/android/server/am/CachedAppOptimizer.java
@@ -2371,6 +2371,14 @@
return;
}
+ if (opt.shouldNotFreeze()) {
+ if (DEBUG_FREEZER) {
+ Slog.d(TAG_AM, "Skipping freeze because process is marked "
+ + "should not be frozen");
+ }
+ return;
+ }
+
if (pid == 0 || opt.isFrozen()) {
// Already frozen or not a real process, either one being
// launched or one being killed
diff --git a/services/core/java/com/android/server/am/ServiceRecord.java b/services/core/java/com/android/server/am/ServiceRecord.java
index 045d137..065f3bd 100644
--- a/services/core/java/com/android/server/am/ServiceRecord.java
+++ b/services/core/java/com/android/server/am/ServiceRecord.java
@@ -30,9 +30,9 @@
import static com.android.server.am.ActivityManagerDebugConfig.TAG_AM;
import static com.android.server.am.ActivityManagerDebugConfig.TAG_WITH_CLASS_NAME;
+import android.annotation.ElapsedRealtimeLong;
import android.annotation.NonNull;
import android.annotation.Nullable;
-import android.annotation.UptimeMillisLong;
import android.app.BackgroundStartPrivileges;
import android.app.IApplicationThread;
import android.app.Notification;
@@ -677,46 +677,46 @@
* Data container class to help track certain fgs info for time-restricted types.
*/
static class TimeLimitedFgsInfo {
- @UptimeMillisLong
+ @ElapsedRealtimeLong
private long mFirstFgsStartTime;
- @UptimeMillisLong
+ @ElapsedRealtimeLong
private long mLastFgsStartTime;
- @UptimeMillisLong
+ @ElapsedRealtimeLong
private long mTimeLimitExceededAt = Long.MIN_VALUE;
private long mTotalRuntime = 0;
- TimeLimitedFgsInfo(@UptimeMillisLong long startTime) {
+ TimeLimitedFgsInfo(@ElapsedRealtimeLong long startTime) {
mFirstFgsStartTime = startTime;
mLastFgsStartTime = startTime;
}
- @UptimeMillisLong
+ @ElapsedRealtimeLong
public long getFirstFgsStartTime() {
return mFirstFgsStartTime;
}
- public void setLastFgsStartTime(@UptimeMillisLong long startTime) {
+ public void setLastFgsStartTime(@ElapsedRealtimeLong long startTime) {
mLastFgsStartTime = startTime;
}
- @UptimeMillisLong
+ @ElapsedRealtimeLong
public long getLastFgsStartTime() {
return mLastFgsStartTime;
}
public void updateTotalRuntime() {
- mTotalRuntime += SystemClock.uptimeMillis() - mLastFgsStartTime;
+ mTotalRuntime += SystemClock.elapsedRealtime() - mLastFgsStartTime;
}
public long getTotalRuntime() {
return mTotalRuntime;
}
- public void setTimeLimitExceededAt(@UptimeMillisLong long timeLimitExceededAt) {
+ public void setTimeLimitExceededAt(@ElapsedRealtimeLong long timeLimitExceededAt) {
mTimeLimitExceededAt = timeLimitExceededAt;
}
- @UptimeMillisLong
+ @ElapsedRealtimeLong
public long getTimeLimitExceededAt() {
return mTimeLimitExceededAt;
}
@@ -1858,8 +1858,8 @@
/**
* Called when a time-limited FGS starts.
*/
- public TimeLimitedFgsInfo createTimeLimitedFgsInfo(long nowUptime) {
- return new TimeLimitedFgsInfo(nowUptime);
+ public TimeLimitedFgsInfo createTimeLimitedFgsInfo(@ElapsedRealtimeLong long nowRealtime) {
+ return new TimeLimitedFgsInfo(nowRealtime);
}
/**
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 b8bfeda..e59de6a 100644
--- a/services/core/java/com/android/server/appop/AppOpsService.java
+++ b/services/core/java/com/android/server/appop/AppOpsService.java
@@ -2773,15 +2773,15 @@
}
code = AppOpsManager.opToSwitch(code);
UidState uidState = getUidStateLocked(uid, false);
- if (uidState != null
- && mAppOpsCheckingService.getUidMode(
- uidState.uid, getPersistentId(virtualDeviceId), code)
- != AppOpsManager.opToDefaultMode(code)) {
- final int rawMode =
- mAppOpsCheckingService.getUidMode(
- uidState.uid, getPersistentId(virtualDeviceId), code);
- return raw ? rawMode : uidState.evalMode(code, rawMode);
+ if (uidState != null) {
+ int rawUidMode = mAppOpsCheckingService.getUidMode(
+ uidState.uid, getPersistentId(virtualDeviceId), code);
+
+ if (rawUidMode != AppOpsManager.opToDefaultMode(code)) {
+ return raw ? rawUidMode : uidState.evalMode(code, rawUidMode);
+ }
}
+
Op op = getOpLocked(code, uid, packageName, null, false, pvr.bypass, /* edit */ false);
if (op == null) {
return AppOpsManager.opToDefaultMode(code);
@@ -3682,26 +3682,24 @@
isRestricted = isOpRestrictedLocked(uid, code, packageName, attributionTag,
virtualDeviceId, pvr.bypass, false);
final int switchCode = AppOpsManager.opToSwitch(code);
+
+ int rawUidMode;
if (isOpAllowedForUid(uid)) {
// Op is always allowed for the UID, do nothing.
// If there is a non-default per UID policy (we set UID op mode only if
// non-default) it takes over, otherwise use the per package policy.
- } else if (mAppOpsCheckingService.getUidMode(
- uidState.uid, getPersistentId(virtualDeviceId), switchCode)
+ } else if ((rawUidMode =
+ mAppOpsCheckingService.getUidMode(
+ uidState.uid, getPersistentId(virtualDeviceId), switchCode))
!= AppOpsManager.opToDefaultMode(switchCode)) {
- final int uidMode =
- uidState.evalMode(
- code,
- mAppOpsCheckingService.getUidMode(
- uidState.uid,
- getPersistentId(virtualDeviceId),
- switchCode));
+ final int uidMode = uidState.evalMode(code, rawUidMode);
if (!shouldStartForMode(uidMode, startIfModeDefault)) {
if (DEBUG) {
Slog.d(TAG, "startOperation: uid reject #" + uidMode + " for code "
+ switchCode + " (" + code + ") uid " + uid + " package "
- + packageName + " flags: " + AppOpsManager.flagsToString(flags));
+ + packageName + " flags: "
+ + AppOpsManager.flagsToString(flags));
}
attributedOp.rejected(uidState.getState(), flags);
scheduleOpStartedIfNeededLocked(code, uid, packageName, attributionTag,
@@ -3710,8 +3708,8 @@
return new SyncNotedAppOp(uidMode, code, attributionTag, packageName);
}
} else {
- final Op switchOp = switchCode != code ? getOpLocked(ops, switchCode, uid, true)
- : op;
+ final Op switchOp =
+ switchCode != code ? getOpLocked(ops, switchCode, uid, true) : op;
final int mode =
switchOp.uidState.evalMode(
switchOp.op,
@@ -3721,9 +3719,12 @@
UserHandle.getUserId(switchOp.uid)));
if (mode != AppOpsManager.MODE_ALLOWED
&& (!startIfModeDefault || mode != MODE_DEFAULT)) {
- if (DEBUG) Slog.d(TAG, "startOperation: reject #" + mode + " for code "
- + switchCode + " (" + code + ") uid " + uid + " package "
- + packageName + " flags: " + AppOpsManager.flagsToString(flags));
+ if (DEBUG) {
+ Slog.d(TAG, "startOperation: reject #" + mode + " for code "
+ + switchCode + " (" + code + ") uid " + uid + " package "
+ + packageName + " flags: "
+ + AppOpsManager.flagsToString(flags));
+ }
attributedOp.rejected(uidState.getState(), flags);
scheduleOpStartedIfNeededLocked(code, uid, packageName, attributionTag,
virtualDeviceId, flags, mode, startType, attributionFlags,
@@ -3731,6 +3732,7 @@
return new SyncNotedAppOp(mode, code, attributionTag, packageName);
}
}
+
if (DEBUG) Slog.d(TAG, "startOperation: allowing code " + code + " uid " + uid
+ " package " + packageName + " restricted: " + isRestricted
+ " flags: " + AppOpsManager.flagsToString(flags));
diff --git a/services/core/java/com/android/server/biometrics/sensors/AuthenticationStateListeners.java b/services/core/java/com/android/server/biometrics/sensors/AuthenticationStateListeners.java
index 1dc882e5..82419e6 100644
--- a/services/core/java/com/android/server/biometrics/sensors/AuthenticationStateListeners.java
+++ b/services/core/java/com/android/server/biometrics/sensors/AuthenticationStateListeners.java
@@ -18,8 +18,13 @@
import android.annotation.NonNull;
import android.hardware.biometrics.AuthenticationStateListener;
-import android.hardware.biometrics.BiometricFingerprintConstants;
-import android.hardware.biometrics.BiometricSourceType;
+import android.hardware.biometrics.events.AuthenticationAcquiredInfo;
+import android.hardware.biometrics.events.AuthenticationErrorInfo;
+import android.hardware.biometrics.events.AuthenticationFailedInfo;
+import android.hardware.biometrics.events.AuthenticationHelpInfo;
+import android.hardware.biometrics.events.AuthenticationStartedInfo;
+import android.hardware.biometrics.events.AuthenticationStoppedInfo;
+import android.hardware.biometrics.events.AuthenticationSucceededInfo;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Slog;
@@ -64,14 +69,73 @@
}
/**
- * Defines behavior in response to authentication starting
- * @param requestReason reason from [BiometricRequestConstants.RequestReason] for requesting
- * authentication starting
+ * Defines behavior in response to biometric authentication being acquired.
+ * @param authInfo information related to the biometric authentication acquired.
*/
- public void onAuthenticationStarted(int requestReason) {
+ public void onAuthenticationAcquired(AuthenticationAcquiredInfo authInfo) {
for (AuthenticationStateListener listener: mAuthenticationStateListeners) {
try {
- listener.onAuthenticationStarted(requestReason);
+ listener.onAuthenticationAcquired(authInfo);
+ } catch (RemoteException e) {
+ Slog.e(TAG, "Remote exception in notifying listener that authentication "
+ + "acquired", e);
+ }
+ }
+ }
+
+ /**
+ * Defines behavior in response to an unrecoverable error encountered during authentication.
+ * @param authInfo information related to the unrecoverable auth error encountered
+ */
+ public void onAuthenticationError(AuthenticationErrorInfo authInfo) {
+ for (AuthenticationStateListener listener : mAuthenticationStateListeners) {
+ try {
+ listener.onAuthenticationError(authInfo);
+ } catch (RemoteException e) {
+ Slog.e(TAG, "Remote exception in notifying listener of unrecoverable"
+ + " authentication error", e);
+ }
+ }
+ }
+
+ /**
+ * Defines behavior in response to a failed authentication
+ * @param authInfo information related to the failed authentication
+ */
+ public void onAuthenticationFailed(AuthenticationFailedInfo authInfo) {
+ for (AuthenticationStateListener listener : mAuthenticationStateListeners) {
+ try {
+ listener.onAuthenticationFailed(authInfo);
+ } catch (RemoteException e) {
+ Slog.e(TAG, "Remote exception in notifying listener that authentication "
+ + "failed", e);
+ }
+ }
+ }
+
+ /**
+ * Defines behavior in response to a recoverable error encountered during authentication.
+ * @param authInfo information related to the recoverable auth error encountered
+ */
+ public void onAuthenticationHelp(AuthenticationHelpInfo authInfo) {
+ for (AuthenticationStateListener listener : mAuthenticationStateListeners) {
+ try {
+ listener.onAuthenticationHelp(authInfo);
+ } catch (RemoteException e) {
+ Slog.e(TAG, "Remote exception in notifying listener of recoverable"
+ + " authentication error", e);
+ }
+ }
+ }
+
+ /**
+ * Defines behavior in response to authentication starting
+ * @param authInfo information related to the authentication starting
+ */
+ public void onAuthenticationStarted(AuthenticationStartedInfo authInfo) {
+ for (AuthenticationStateListener listener: mAuthenticationStateListeners) {
+ try {
+ listener.onAuthenticationStarted(authInfo);
} catch (RemoteException e) {
Slog.e(TAG, "Remote exception in notifying listener that authentication "
+ "started", e);
@@ -81,11 +145,12 @@
/**
* Defines behavior in response to authentication stopping
+ * @param authInfo information related to the authentication stopping
*/
- public void onAuthenticationStopped() {
+ public void onAuthenticationStopped(AuthenticationStoppedInfo authInfo) {
for (AuthenticationStateListener listener: mAuthenticationStateListeners) {
try {
- listener.onAuthenticationStopped();
+ listener.onAuthenticationStopped(authInfo);
} catch (RemoteException e) {
Slog.e(TAG, "Remote exception in notifying listener that authentication "
+ "stopped", e);
@@ -95,14 +160,12 @@
/**
* Defines behavior in response to a successful authentication
- * @param requestReason Reason from [BiometricRequestConstants.RequestReason] for the requested
- * authentication
- * @param userId The user Id for the requested authentication
+ * @param authInfo information related to the successful authentication
*/
- public void onAuthenticationSucceeded(int requestReason, int userId) {
+ public void onAuthenticationSucceeded(AuthenticationSucceededInfo authInfo) {
for (AuthenticationStateListener listener: mAuthenticationStateListeners) {
try {
- listener.onAuthenticationSucceeded(requestReason, userId);
+ listener.onAuthenticationSucceeded(authInfo);
} catch (RemoteException e) {
Slog.e(TAG, "Remote exception in notifying listener that authentication "
+ "succeeded", e);
@@ -110,44 +173,6 @@
}
}
- /**
- * Defines behavior in response to a failed authentication
- * @param requestReason Reason from [BiometricRequestConstants.RequestReason] for the requested
- * authentication
- * @param userId The user Id for the requested authentication
- */
- public void onAuthenticationFailed(int requestReason, int userId) {
- for (AuthenticationStateListener listener : mAuthenticationStateListeners) {
- try {
- listener.onAuthenticationFailed(requestReason, userId);
- } catch (RemoteException e) {
- Slog.e(TAG, "Remote exception in notifying listener that authentication "
- + "failed", e);
- }
- }
- }
-
- /**
- * Defines behavior in response to biometric being acquired.
- * @param biometricSourceType identifies [BiometricSourceType] biometric was acquired for
- * @param requestReason reason from [BiometricRequestConstants.RequestReason] for authentication
- * @param acquiredInfo [BiometricFingerprintConstants.FingerprintAcquired] int corresponding to
- * a known acquired message.
- */
- public void onAuthenticationAcquired(
- BiometricSourceType biometricSourceType, int requestReason,
- @BiometricFingerprintConstants.FingerprintAcquired int acquiredInfo
- ) {
- for (AuthenticationStateListener listener: mAuthenticationStateListeners) {
- try {
- listener.onAuthenticationAcquired(biometricSourceType, requestReason, acquiredInfo);
- } catch (RemoteException e) {
- Slog.e(TAG, "Remote exception in notifying listener that authentication "
- + "stopped", e);
- }
- }
- }
-
@Override
public void binderDied() {
// Do nothing, handled below
diff --git a/services/core/java/com/android/server/biometrics/sensors/EnrollClient.java b/services/core/java/com/android/server/biometrics/sensors/EnrollClient.java
index af6de5c..438367d 100644
--- a/services/core/java/com/android/server/biometrics/sensors/EnrollClient.java
+++ b/services/core/java/com/android/server/biometrics/sensors/EnrollClient.java
@@ -20,6 +20,7 @@
import android.content.Context;
import android.hardware.biometrics.BiometricAuthenticator;
import android.hardware.biometrics.BiometricRequestConstants;
+import android.hardware.face.FaceEnrollOptions;
import android.hardware.fingerprint.FingerprintManager;
import android.os.IBinder;
import android.os.RemoteException;
@@ -136,7 +137,8 @@
return true;
}
- protected int getRequestReasonFromEnrollReason(@FingerprintManager.EnrollReason int reason) {
+ protected int getRequestReasonFromFingerprintEnrollReason(
+ @FingerprintManager.EnrollReason int reason) {
switch (reason) {
case FingerprintManager.ENROLL_FIND_SENSOR:
return BiometricRequestConstants.REASON_ENROLL_FIND_SENSOR;
@@ -146,4 +148,15 @@
return BiometricRequestConstants.REASON_UNKNOWN;
}
}
+
+ protected int getRequestReasonFromFaceEnrollReason(
+ @FaceEnrollOptions.EnrollReason int reason) {
+ return switch (reason) {
+ case FaceEnrollOptions.ENROLL_REASON_RE_ENROLL_NOTIFICATION,
+ FaceEnrollOptions.ENROLL_REASON_SETTINGS,
+ FaceEnrollOptions.ENROLL_REASON_SUW ->
+ BiometricRequestConstants.REASON_ENROLL_ENROLLING;
+ default -> BiometricRequestConstants.REASON_UNKNOWN;
+ };
+ }
}
diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient.java
index c43c7d9..8d32235 100644
--- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient.java
+++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClient.java
@@ -17,6 +17,10 @@
package com.android.server.biometrics.sensors.face.aidl;
import static android.adaptiveauth.Flags.reportBiometricAuthAttempts;
+import static android.hardware.biometrics.BiometricFaceConstants.FACE_ACQUIRED_VENDOR;
+import static android.hardware.biometrics.BiometricFaceConstants.FACE_ACQUIRED_VENDOR_BASE;
+import static android.hardware.face.FaceManager.getAuthHelpMessage;
+import static android.hardware.face.FaceManager.getErrorString;
import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -27,7 +31,15 @@
import android.hardware.biometrics.BiometricConstants;
import android.hardware.biometrics.BiometricFaceConstants;
import android.hardware.biometrics.BiometricManager.Authenticators;
+import android.hardware.biometrics.BiometricSourceType;
import android.hardware.biometrics.common.ICancellationSignal;
+import android.hardware.biometrics.events.AuthenticationAcquiredInfo;
+import android.hardware.biometrics.events.AuthenticationErrorInfo;
+import android.hardware.biometrics.events.AuthenticationFailedInfo;
+import android.hardware.biometrics.events.AuthenticationHelpInfo;
+import android.hardware.biometrics.events.AuthenticationStartedInfo;
+import android.hardware.biometrics.events.AuthenticationStoppedInfo;
+import android.hardware.biometrics.events.AuthenticationSucceededInfo;
import android.hardware.biometrics.face.IFace;
import android.hardware.face.FaceAuthenticateOptions;
import android.hardware.face.FaceAuthenticationFrame;
@@ -63,11 +75,11 @@
extends AuthenticationClient<AidlSession, FaceAuthenticateOptions>
implements LockoutConsumer {
private static final String TAG = "FaceAuthenticationClient";
-
@NonNull
private final UsageStats mUsageStats;
@NonNull
private final AuthSessionCoordinator mAuthSessionCoordinator;
+ private final boolean mIsStrongBiometric;
private final int[] mBiometricPromptIgnoreList;
private final int[] mBiometricPromptIgnoreListVendor;
private final int[] mKeyguardIgnoreList;
@@ -118,6 +130,7 @@
allowBackgroundAuthentication, false /* shouldVibrate */,
biometricStrength);
setRequestId(requestId);
+ mIsStrongBiometric = isStrongBiometric;
mUsageStats = usageStats;
mSensorPrivacyManager = sensorPrivacyManager;
mAuthSessionCoordinator = biometricContext.getAuthSessionCoordinator();
@@ -149,6 +162,9 @@
@Override
protected void startHalOperation() {
+ mAuthenticationStateListeners.onAuthenticationStarted(new AuthenticationStartedInfo.Builder(
+ BiometricSourceType.FACE, getRequestReason()).build()
+ );
try {
if (mSensorPrivacyManager != null
&& mSensorPrivacyManager
@@ -196,6 +212,9 @@
@Override
protected void stopHalOperation() {
+ mAuthenticationStateListeners.onAuthenticationStopped(new AuthenticationStoppedInfo
+ .Builder(BiometricSourceType.FACE, getRequestReason()).build()
+ );
unsubscribeBiometricContext();
if (mCancellationSignal != null) {
@@ -226,6 +245,9 @@
// 3) Authenticated == false
// 4) onLockout
// 5) onLockoutTimed
+ mAuthenticationStateListeners.onAuthenticationStopped(new AuthenticationStoppedInfo
+ .Builder(BiometricSourceType.FACE, getRequestReason()).build()
+ );
mCallback.onClientFinished(this, true /* success */);
}
@@ -245,11 +267,15 @@
if (reportBiometricAuthAttempts()) {
if (authenticated) {
- mAuthenticationStateListeners.onAuthenticationSucceeded(getRequestReason(),
- getTargetUserId());
+ mAuthenticationStateListeners.onAuthenticationSucceeded(
+ new AuthenticationSucceededInfo.Builder(BiometricSourceType.FACE,
+ getRequestReason(), mIsStrongBiometric, getTargetUserId()).build()
+ );
} else {
- mAuthenticationStateListeners.onAuthenticationFailed(getRequestReason(),
- getTargetUserId());
+ mAuthenticationStateListeners.onAuthenticationFailed(
+ new AuthenticationFailedInfo.Builder(BiometricSourceType.FACE,
+ getRequestReason(), getTargetUserId()).build()
+ );
}
}
}
@@ -263,8 +289,14 @@
error,
vendorCode,
getTargetUserId()));
-
+ mAuthenticationStateListeners.onAuthenticationError(
+ new AuthenticationErrorInfo.Builder(BiometricSourceType.FACE, getRequestReason(),
+ getErrorString(getContext(), error, vendorCode), error).build()
+ );
super.onError(error, vendorCode);
+ mAuthenticationStateListeners.onAuthenticationStopped(new AuthenticationStoppedInfo
+ .Builder(BiometricSourceType.FACE, getRequestReason()).build()
+ );
}
private int[] getAcquireIgnorelist() {
@@ -276,7 +308,7 @@
}
private boolean shouldSendAcquiredMessage(int acquireInfo, int vendorCode) {
- return acquireInfo == FaceManager.FACE_ACQUIRED_VENDOR
+ return acquireInfo == FACE_ACQUIRED_VENDOR
? !Utils.listContains(getAcquireVendorIgnorelist(), vendorCode)
: !Utils.listContains(getAcquireIgnorelist(), acquireInfo);
}
@@ -285,6 +317,20 @@
public void onAcquired(int acquireInfo, int vendorCode) {
mLastAcquire = acquireInfo;
final boolean shouldSend = shouldSendAcquiredMessage(acquireInfo, vendorCode);
+ if (shouldSend) {
+ mAuthenticationStateListeners.onAuthenticationAcquired(
+ new AuthenticationAcquiredInfo.Builder(BiometricSourceType.FACE,
+ getRequestReason(), acquireInfo).build()
+ );
+ final String helpMessage = getAuthHelpMessage(getContext(), acquireInfo, vendorCode);
+ if (helpMessage != null) {
+ final int helpCode = getHelpCode(acquireInfo, vendorCode);
+ mAuthenticationStateListeners.onAuthenticationHelp(
+ new AuthenticationHelpInfo.Builder(BiometricSourceType.FACE,
+ getRequestReason(), helpMessage, helpCode).build()
+ );
+ }
+ }
onAcquiredInternal(acquireInfo, vendorCode, shouldSend);
//Check if it is AIDL (lockoutTracker = null) or if it there is no lockout for HIDL
@@ -310,9 +356,27 @@
final boolean shouldSend = shouldSendAcquiredMessage(acquireInfo, vendorCode);
if (shouldSend) {
try {
+ if (shouldSend) {
+ mAuthenticationStateListeners.onAuthenticationAcquired(
+ new AuthenticationAcquiredInfo.Builder(BiometricSourceType.FACE,
+ getRequestReason(), acquireInfo).build()
+ );
+ final String helpMessage = getAuthHelpMessage(getContext(), acquireInfo,
+ vendorCode);
+ if (helpMessage != null) {
+ final int helpCode = getHelpCode(acquireInfo, vendorCode);
+ mAuthenticationStateListeners.onAuthenticationHelp(
+ new AuthenticationHelpInfo.Builder(BiometricSourceType.FACE,
+ getRequestReason(), helpMessage, helpCode).build()
+ );
+ }
+ }
getListener().onAuthenticationFrame(frame);
} catch (RemoteException e) {
Slog.w(TAG, "Failed to send authentication frame", e);
+ mAuthenticationStateListeners.onAuthenticationStopped(new AuthenticationStoppedInfo
+ .Builder(BiometricSourceType.FACE, getRequestReason()).build()
+ );
mCallback.onClientFinished(this, false /* success */);
}
}
@@ -329,7 +393,6 @@
PerformanceTracker.getInstanceForSensorId(getSensorId())
.incrementTimedLockoutForUser(getTargetUserId());
-
onError(error, 0 /* vendorCode */);
}
@@ -344,7 +407,12 @@
PerformanceTracker.getInstanceForSensorId(getSensorId())
.incrementPermanentLockoutForUser(getTargetUserId());
-
onError(error, 0 /* vendorCode */);
}
+
+ private static int getHelpCode(int acquireInfo, int vendorCode) {
+ return acquireInfo == FACE_ACQUIRED_VENDOR
+ ? vendorCode + FACE_ACQUIRED_VENDOR_BASE
+ : acquireInfo;
+ }
}
diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceDetectClient.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceDetectClient.java
index dcd94896..8b4da31 100644
--- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceDetectClient.java
+++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceDetectClient.java
@@ -16,12 +16,19 @@
package com.android.server.biometrics.sensors.face.aidl;
+import static android.hardware.face.FaceManager.getErrorString;
+
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.Context;
import android.hardware.SensorPrivacyManager;
import android.hardware.biometrics.BiometricConstants;
+import android.hardware.biometrics.BiometricRequestConstants;
+import android.hardware.biometrics.BiometricSourceType;
import android.hardware.biometrics.common.ICancellationSignal;
+import android.hardware.biometrics.events.AuthenticationErrorInfo;
+import android.hardware.biometrics.events.AuthenticationStartedInfo;
+import android.hardware.biometrics.events.AuthenticationStoppedInfo;
import android.hardware.face.FaceAuthenticateOptions;
import android.os.IBinder;
import android.os.RemoteException;
@@ -33,6 +40,7 @@
import com.android.server.biometrics.log.BiometricLogger;
import com.android.server.biometrics.log.OperationContextExt;
import com.android.server.biometrics.sensors.AcquisitionClient;
+import com.android.server.biometrics.sensors.AuthenticationStateListeners;
import com.android.server.biometrics.sensors.ClientMonitorCallback;
import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter;
import com.android.server.biometrics.sensors.DetectionConsumer;
@@ -51,15 +59,17 @@
private final FaceAuthenticateOptions mOptions;
@Nullable private ICancellationSignal mCancellationSignal;
@Nullable private SensorPrivacyManager mSensorPrivacyManager;
+ @NonNull private final AuthenticationStateListeners mAuthenticationStateListeners;
FaceDetectClient(@NonNull Context context, @NonNull Supplier<AidlSession> lazyDaemon,
@NonNull IBinder token, long requestId,
@NonNull ClientMonitorCallbackConverter listener,
@NonNull FaceAuthenticateOptions options,
@NonNull BiometricLogger logger, @NonNull BiometricContext biometricContext,
+ @NonNull AuthenticationStateListeners authenticationStateListeners,
boolean isStrongBiometric) {
this(context, lazyDaemon, token, requestId, listener, options,
- logger, biometricContext, isStrongBiometric,
+ logger, biometricContext, authenticationStateListeners, isStrongBiometric,
context.getSystemService(SensorPrivacyManager.class));
}
@@ -69,11 +79,13 @@
@NonNull ClientMonitorCallbackConverter listener,
@NonNull FaceAuthenticateOptions options,
@NonNull BiometricLogger logger, @NonNull BiometricContext biometricContext,
+ @NonNull AuthenticationStateListeners authenticationStateListeners,
boolean isStrongBiometric, SensorPrivacyManager sensorPrivacyManager) {
super(context, lazyDaemon, token, listener, options.getUserId(),
options.getOpPackageName(), 0 /* cookie */, options.getSensorId(),
false /* shouldVibrate */, logger, biometricContext);
setRequestId(requestId);
+ mAuthenticationStateListeners = authenticationStateListeners;
mIsStrongBiometric = isStrongBiometric;
mSensorPrivacyManager = sensorPrivacyManager;
mOptions = options;
@@ -87,6 +99,10 @@
@Override
protected void stopHalOperation() {
+ mAuthenticationStateListeners.onAuthenticationStopped(new AuthenticationStoppedInfo
+ .Builder(BiometricSourceType.FACE, BiometricRequestConstants.REASON_AUTH_KEYGUARD)
+ .build()
+ );
unsubscribeBiometricContext();
if (mCancellationSignal != null) {
@@ -101,6 +117,10 @@
@Override
protected void startHalOperation() {
+ mAuthenticationStateListeners.onAuthenticationStarted(new AuthenticationStartedInfo
+ .Builder(BiometricSourceType.FACE, BiometricRequestConstants.REASON_AUTH_KEYGUARD)
+ .build()
+ );
if (mSensorPrivacyManager != null
&& mSensorPrivacyManager
.isSensorPrivacyEnabled(SensorPrivacyManager.TOGGLE_TYPE_SOFTWARE,
@@ -118,6 +138,20 @@
}
}
+ @Override
+ public void onError(@BiometricConstants.Errors int error, int vendorCode) {
+ mAuthenticationStateListeners.onAuthenticationError(
+ new AuthenticationErrorInfo.Builder(BiometricSourceType.FACE,
+ BiometricRequestConstants.REASON_AUTH_KEYGUARD,
+ getErrorString(getContext(), error, vendorCode), error).build()
+ );
+ super.onError(error, vendorCode);
+ mAuthenticationStateListeners.onAuthenticationStopped(new AuthenticationStoppedInfo
+ .Builder(BiometricSourceType.FACE, BiometricRequestConstants.REASON_AUTH_KEYGUARD)
+ .build()
+ );
+ }
+
private void doDetectInteraction() throws RemoteException {
final AidlSession session = getFreshDaemon();
diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceEnrollClient.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceEnrollClient.java
index 73e8ece..3eecc6d 100644
--- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceEnrollClient.java
+++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceEnrollClient.java
@@ -16,11 +16,22 @@
package com.android.server.biometrics.sensors.face.aidl;
+import static android.hardware.biometrics.BiometricFaceConstants.FACE_ACQUIRED_VENDOR;
+import static android.hardware.biometrics.BiometricFaceConstants.FACE_ACQUIRED_VENDOR_BASE;
+import static android.hardware.face.FaceManager.getEnrollHelpMessage;
+import static android.hardware.face.FaceManager.getErrorString;
+
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.Context;
+import android.hardware.biometrics.BiometricConstants;
import android.hardware.biometrics.BiometricFaceConstants;
+import android.hardware.biometrics.BiometricSourceType;
import android.hardware.biometrics.common.ICancellationSignal;
+import android.hardware.biometrics.events.AuthenticationErrorInfo;
+import android.hardware.biometrics.events.AuthenticationHelpInfo;
+import android.hardware.biometrics.events.AuthenticationStartedInfo;
+import android.hardware.biometrics.events.AuthenticationStoppedInfo;
import android.hardware.biometrics.face.EnrollmentType;
import android.hardware.biometrics.face.FaceEnrollOptions;
import android.hardware.biometrics.face.Feature;
@@ -28,7 +39,6 @@
import android.hardware.common.NativeHandle;
import android.hardware.face.Face;
import android.hardware.face.FaceEnrollFrame;
-import android.hardware.face.FaceManager;
import android.hardware.keymaster.HardwareAuthToken;
import android.os.IBinder;
import android.os.RemoteException;
@@ -41,6 +51,7 @@
import com.android.server.biometrics.log.BiometricContext;
import com.android.server.biometrics.log.BiometricLogger;
import com.android.server.biometrics.log.OperationContextExt;
+import com.android.server.biometrics.sensors.AuthenticationStateListeners;
import com.android.server.biometrics.sensors.BaseClientMonitor;
import com.android.server.biometrics.sensors.BiometricNotificationUtils;
import com.android.server.biometrics.sensors.BiometricUtils;
@@ -66,12 +77,14 @@
@NonNull private final int[] mEnrollIgnoreList;
@NonNull private final int[] mEnrollIgnoreListVendor;
@NonNull private final int[] mDisabledFeatures;
+ @NonNull private final AuthenticationStateListeners mAuthenticationStateListeners;
@Nullable private final Surface mPreviewSurface;
@Nullable private android.os.NativeHandle mOsPreviewHandle;
@Nullable private NativeHandle mHwPreviewHandle;
@Nullable private ICancellationSignal mCancellationSignal;
private final int mMaxTemplatesPerUser;
private final boolean mDebugConsent;
+ private final @android.hardware.face.FaceEnrollOptions.EnrollReason int mEnrollReason;
private final ClientMonitorCallback mPreviewHandleDeleterCallback =
new ClientMonitorCallback() {
@@ -93,11 +106,14 @@
@Nullable Surface previewSurface, int sensorId,
@NonNull BiometricLogger logger, @NonNull BiometricContext biometricContext,
int maxTemplatesPerUser, boolean debugConsent,
- android.hardware.face.FaceEnrollOptions options) {
+ android.hardware.face.FaceEnrollOptions options,
+ @NonNull AuthenticationStateListeners authenticationStateListeners) {
super(context, lazyDaemon, token, listener, userId, hardwareAuthToken, opPackageName, utils,
timeoutSec, sensorId, false /* shouldVibrate */, logger, biometricContext,
BiometricFaceConstants.reasonToMetric(options.getEnrollReason()));
setRequestId(requestId);
+ mAuthenticationStateListeners = authenticationStateListeners;
+ mEnrollReason = options.getEnrollReason();
mEnrollIgnoreList = getContext().getResources()
.getIntArray(R.array.config_face_acquire_enroll_ignorelist);
mEnrollIgnoreListVendor = getContext().getResources()
@@ -133,7 +149,7 @@
}
private boolean shouldSendAcquiredMessage(int acquireInfo, int vendorCode) {
- return acquireInfo == FaceManager.FACE_ACQUIRED_VENDOR
+ return acquireInfo == FACE_ACQUIRED_VENDOR
? !Utils.listContains(mEnrollIgnoreListVendor, vendorCode)
: !Utils.listContains(mEnrollIgnoreList, acquireInfo);
}
@@ -141,6 +157,15 @@
@Override
public void onAcquired(int acquireInfo, int vendorCode) {
final boolean shouldSend = shouldSendAcquiredMessage(acquireInfo, vendorCode);
+ if (shouldSend) {
+ final int helpCode = getHelpCode(acquireInfo, vendorCode);
+ final String helpMessage = getEnrollHelpMessage(getContext(), acquireInfo, vendorCode);
+ mAuthenticationStateListeners.onAuthenticationHelp(
+ new AuthenticationHelpInfo.Builder(BiometricSourceType.FACE,
+ getRequestReasonFromFaceEnrollReason(mEnrollReason), helpMessage,
+ helpCode).build()
+ );
+ }
onAcquiredInternal(acquireInfo, vendorCode, shouldSend);
}
@@ -158,6 +183,14 @@
final boolean shouldSend = shouldSendAcquiredMessage(acquireInfo, vendorCode);
if (shouldSend) {
try {
+ final int helpCode = getHelpCode(acquireInfo, vendorCode);
+ final String helpMessage = getEnrollHelpMessage(getContext(), acquireInfo,
+ vendorCode);
+ mAuthenticationStateListeners.onAuthenticationHelp(
+ new AuthenticationHelpInfo.Builder(BiometricSourceType.FACE,
+ getRequestReasonFromFaceEnrollReason(mEnrollReason), helpMessage,
+ helpCode).build()
+ );
getListener().onEnrollmentFrame(frame);
} catch (RemoteException e) {
Slog.w(TAG, "Failed to send enrollment frame", e);
@@ -168,6 +201,10 @@
@Override
protected void startHalOperation() {
+ mAuthenticationStateListeners.onAuthenticationStarted(new AuthenticationStartedInfo
+ .Builder(BiometricSourceType.FACE,
+ getRequestReasonFromFaceEnrollReason(mEnrollReason)).build()
+ );
obtainSurfaceHandlesIfNeeded();
try {
List<Byte> featureList = new ArrayList<Byte>();
@@ -200,6 +237,20 @@
}
}
+ @Override
+ public void onError(@BiometricConstants.Errors int error, int vendorCode) {
+ mAuthenticationStateListeners.onAuthenticationError(
+ new AuthenticationErrorInfo.Builder(BiometricSourceType.FACE,
+ getRequestReasonFromFaceEnrollReason(mEnrollReason),
+ getErrorString(getContext(), error, vendorCode), error).build()
+ );
+ super.onError(error, vendorCode);
+ mAuthenticationStateListeners.onAuthenticationStopped(
+ new AuthenticationStoppedInfo.Builder(BiometricSourceType.FACE,
+ getRequestReasonFromFaceEnrollReason(mEnrollReason)).build()
+ );
+ }
+
private void doEnroll(byte[] features) throws RemoteException {
final AidlSession session = getFreshDaemon();
final HardwareAuthToken hat =
@@ -241,9 +292,12 @@
}
}
-
@Override
protected void stopHalOperation() {
+ mAuthenticationStateListeners.onAuthenticationStopped(new AuthenticationStoppedInfo
+ .Builder(BiometricSourceType.FACE,
+ getRequestReasonFromFaceEnrollReason(mEnrollReason)).build()
+ );
unsubscribeBiometricContext();
if (mCancellationSignal != null) {
@@ -307,4 +361,10 @@
mPreviewSurface.release();
}
}
+
+ private static int getHelpCode(int acquireInfo, int vendorCode) {
+ return acquireInfo == FACE_ACQUIRED_VENDOR
+ ? vendorCode + FACE_ACQUIRED_VENDOR_BASE
+ : acquireInfo;
+ }
}
diff --git a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceProvider.java b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceProvider.java
index 75b4fd3..e71cffe 100644
--- a/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceProvider.java
+++ b/services/core/java/com/android/server/biometrics/sensors/face/aidl/FaceProvider.java
@@ -496,7 +496,8 @@
createLogger(BiometricsProtoEnums.ACTION_ENROLL,
BiometricsProtoEnums.CLIENT_UNKNOWN,
mAuthenticationStatsCollector),
- mBiometricContext, maxTemplatesPerUser, debugConsent, options);
+ mBiometricContext, maxTemplatesPerUser, debugConsent, options,
+ mAuthenticationStateListeners);
scheduleForSensor(sensorId, client, mBiometricStateCallback);
});
return id;
@@ -522,7 +523,7 @@
token, id, callback, options,
createLogger(BiometricsProtoEnums.ACTION_AUTHENTICATE, statsClient,
mAuthenticationStatsCollector),
- mBiometricContext, isStrongBiometric);
+ mBiometricContext, mAuthenticationStateListeners, isStrongBiometric);
scheduleForSensor(sensorId, client, mBiometricStateCallback);
});
diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient.java
index 5edcbed..00a5911 100644
--- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient.java
+++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClient.java
@@ -17,6 +17,10 @@
package com.android.server.biometrics.sensors.fingerprint.aidl;
import static android.adaptiveauth.Flags.reportBiometricAuthAttempts;
+import static android.hardware.biometrics.BiometricFingerprintConstants.FINGERPRINT_ACQUIRED_VENDOR;
+import static android.hardware.biometrics.BiometricFingerprintConstants.FINGERPRINT_ACQUIRED_VENDOR_BASE;
+import static android.hardware.fingerprint.FingerprintManager.getAcquiredString;
+import static android.hardware.fingerprint.FingerprintManager.getErrorString;
import static com.android.systemui.shared.Flags.sidefpsControllerRefactor;
@@ -31,6 +35,14 @@
import android.hardware.biometrics.BiometricManager.Authenticators;
import android.hardware.biometrics.BiometricSourceType;
import android.hardware.biometrics.common.ICancellationSignal;
+import android.hardware.biometrics.common.OperationState;
+import android.hardware.biometrics.events.AuthenticationAcquiredInfo;
+import android.hardware.biometrics.events.AuthenticationErrorInfo;
+import android.hardware.biometrics.events.AuthenticationFailedInfo;
+import android.hardware.biometrics.events.AuthenticationHelpInfo;
+import android.hardware.biometrics.events.AuthenticationStartedInfo;
+import android.hardware.biometrics.events.AuthenticationStoppedInfo;
+import android.hardware.biometrics.events.AuthenticationSucceededInfo;
import android.hardware.biometrics.fingerprint.PointerContext;
import android.hardware.fingerprint.FingerprintAuthenticateOptions;
import android.hardware.fingerprint.FingerprintManager;
@@ -77,6 +89,7 @@
private final FingerprintSensorPropertiesInternal mSensorProps;
@NonNull
private final CallbackWithProbe<Probe> mALSProbeCallback;
+ private final boolean mIsStrongBiometric;
private final AuthSessionCoordinator mAuthSessionCoordinator;
@NonNull private final AuthenticationStateListeners mAuthenticationStateListeners;
@Nullable
@@ -131,6 +144,7 @@
mSensorOverlays = new SensorOverlays(udfpsOverlayController, sidefpsController);
}
mAuthenticationStateListeners = authenticationStateListeners;
+ mIsStrongBiometric = isStrongBiometric;
mSensorProps = sensorProps;
mALSProbeCallback = getLogger().getAmbientLightProbe(false /* startWithClient */);
mAuthSessionCoordinator = biometricContext.getAuthSessionCoordinator();
@@ -179,18 +193,24 @@
mState = STATE_STOPPED;
resetIgnoreDisplayTouches();
mSensorOverlays.hide(getSensorId());
- if (sidefpsControllerRefactor()) {
- mAuthenticationStateListeners.onAuthenticationStopped();
- }
if (reportBiometricAuthAttempts()) {
- mAuthenticationStateListeners.onAuthenticationSucceeded(getRequestReason(),
- getTargetUserId());
+ mAuthenticationStateListeners.onAuthenticationSucceeded(
+ new AuthenticationSucceededInfo.Builder(BiometricSourceType.FINGERPRINT,
+ getRequestReason(), mIsStrongBiometric, getTargetUserId()).build()
+ );
+ }
+ if (sidefpsControllerRefactor()) {
+ mAuthenticationStateListeners.onAuthenticationStopped(new AuthenticationStoppedInfo
+ .Builder(BiometricSourceType.FINGERPRINT, getRequestReason()).build()
+ );
}
} else {
mState = STATE_STARTED_PAUSED_ATTEMPTED;
if (reportBiometricAuthAttempts()) {
- mAuthenticationStateListeners.onAuthenticationFailed(getRequestReason(),
- getTargetUserId());
+ mAuthenticationStateListeners.onAuthenticationFailed(new AuthenticationFailedInfo
+ .Builder(BiometricSourceType.FINGERPRINT, getRequestReason(),
+ getTargetUserId()).build()
+ );
}
}
}
@@ -216,9 +236,12 @@
// client.
resetIgnoreDisplayTouches();
mSensorOverlays.hide(getSensorId());
- if (sidefpsControllerRefactor()) {
- mAuthenticationStateListeners.onAuthenticationStopped();
- }
+ mAuthenticationStateListeners.onAuthenticationError(
+ new AuthenticationErrorInfo.Builder(BiometricSourceType.FINGERPRINT,
+ getRequestReason(),
+ getErrorString(getContext(), errorCode, 0 /* vendorCode */),
+ errorCode).build()
+ );
onErrorInternal(errorCode, 0 /* vendorCode */, false /* finish */);
cancel();
}
@@ -227,10 +250,23 @@
@Override
public void onAcquired(@FingerprintAcquired int acquiredInfo, int vendorCode) {
+ mAuthenticationStateListeners.onAuthenticationAcquired(
+ new AuthenticationAcquiredInfo.Builder(BiometricSourceType.FINGERPRINT,
+ getRequestReason(), acquiredInfo).build()
+ );
+ if (acquiredInfo != BiometricFingerprintConstants.FINGERPRINT_ACQUIRED_START) {
+ String helpMsg = getAcquiredString(getContext(), acquiredInfo, vendorCode);
+ if (helpMsg != null) {
+ int helpCode = acquiredInfo == FINGERPRINT_ACQUIRED_VENDOR
+ ? (vendorCode + FINGERPRINT_ACQUIRED_VENDOR_BASE) : acquiredInfo;
+ mAuthenticationStateListeners.onAuthenticationHelp(
+ new AuthenticationHelpInfo.Builder(BiometricSourceType.FINGERPRINT,
+ getRequestReason(), helpMsg, helpCode).build()
+ );
+ }
+ }
// For UDFPS, notify SysUI with acquiredInfo, so that the illumination can be turned off
// for most ACQUIRED messages. See BiometricFingerprintConstants#FingerprintAcquired
- mAuthenticationStateListeners.onAuthenticationAcquired(
- BiometricSourceType.FINGERPRINT, getRequestReason(), acquiredInfo);
mSensorOverlays.ifUdfps(controller -> controller.onAcquired(getSensorId(), acquiredInfo));
super.onAcquired(acquiredInfo, vendorCode);
PerformanceTracker pt = PerformanceTracker.getInstanceForSensorId(getSensorId());
@@ -239,6 +275,11 @@
@Override
public void onError(int errorCode, int vendorCode) {
+ mAuthenticationStateListeners.onAuthenticationError(
+ new AuthenticationErrorInfo.Builder(BiometricSourceType.FINGERPRINT,
+ getRequestReason(), getErrorString(getContext(), errorCode, vendorCode),
+ errorCode).build()
+ );
super.onError(errorCode, vendorCode);
if (errorCode == BiometricFingerprintConstants.FINGERPRINT_ERROR_BAD_CALIBRATION) {
@@ -248,7 +289,9 @@
resetIgnoreDisplayTouches();
mSensorOverlays.hide(getSensorId());
if (sidefpsControllerRefactor()) {
- mAuthenticationStateListeners.onAuthenticationStopped();
+ mAuthenticationStateListeners.onAuthenticationStopped(new AuthenticationStoppedInfo
+ .Builder(BiometricSourceType.FINGERPRINT, getRequestReason()).build()
+ );
}
}
@@ -257,7 +300,9 @@
resetIgnoreDisplayTouches();
mSensorOverlays.show(getSensorId(), getRequestReason(), this);
if (sidefpsControllerRefactor()) {
- mAuthenticationStateListeners.onAuthenticationStarted(getRequestReason());
+ mAuthenticationStateListeners.onAuthenticationStarted(new AuthenticationStartedInfo
+ .Builder(BiometricSourceType.FINGERPRINT, getRequestReason()).build()
+ );
}
try {
@@ -268,9 +313,6 @@
BiometricFingerprintConstants.FINGERPRINT_ERROR_HW_UNAVAILABLE,
0 /* vendorCode */);
mSensorOverlays.hide(getSensorId());
- if (sidefpsControllerRefactor()) {
- mAuthenticationStateListeners.onAuthenticationStopped();
- }
mCallback.onClientFinished(this, false /* success */);
}
}
@@ -297,15 +339,18 @@
BiometricFingerprintConstants.FINGERPRINT_ERROR_HW_UNAVAILABLE,
0 /* vendorCode */);
mSensorOverlays.hide(getSensorId());
- if (sidefpsControllerRefactor()) {
- mAuthenticationStateListeners.onAuthenticationStopped();
- }
mCallback.onClientFinished(this, false /* success */);
}
}, ctx -> {
if (session.hasContextMethods()) {
try {
session.getSession().onContextChanged(ctx);
+ // TODO(b/317414324): Deprecate setIgnoreDisplayTouches
+ if (ctx.operationState != null && ctx.operationState.getTag()
+ == OperationState.fingerprintOperationState) {
+ session.getSession().setIgnoreDisplayTouches(ctx.operationState
+ .getFingerprintOperationState().isHardwareIgnoringTouches);
+ }
} catch (RemoteException e) {
Slog.e(TAG, "Unable to notify context changed", e);
}
@@ -325,7 +370,9 @@
resetIgnoreDisplayTouches();
mSensorOverlays.hide(getSensorId());
if (sidefpsControllerRefactor()) {
- mAuthenticationStateListeners.onAuthenticationStopped();
+ mAuthenticationStateListeners.onAuthenticationStopped(new AuthenticationStoppedInfo
+ .Builder(BiometricSourceType.FINGERPRINT, getRequestReason()).build()
+ );
}
unsubscribeBiometricContext();
@@ -417,6 +464,10 @@
.incrementTimedLockoutForUser(getTargetUserId());
try {
+ mAuthenticationStateListeners.onAuthenticationError(new AuthenticationErrorInfo
+ .Builder(BiometricSourceType.FINGERPRINT, getRequestReason(),
+ getErrorString(getContext(), error, 0), error).build()
+ );
getListener().onError(getSensorId(), getCookie(), error, 0 /* vendorCode */);
} catch (RemoteException e) {
Slog.e(TAG, "Remote exception", e);
@@ -425,7 +476,9 @@
resetIgnoreDisplayTouches();
mSensorOverlays.hide(getSensorId());
if (sidefpsControllerRefactor()) {
- mAuthenticationStateListeners.onAuthenticationStopped();
+ mAuthenticationStateListeners.onAuthenticationStopped(new AuthenticationStoppedInfo
+ .Builder(BiometricSourceType.FINGERPRINT, getRequestReason()).build()
+ );
}
mCallback.onClientFinished(this, false /* success */);
}
@@ -448,6 +501,10 @@
.incrementPermanentLockoutForUser(getTargetUserId());
try {
+ mAuthenticationStateListeners.onAuthenticationError(new AuthenticationErrorInfo
+ .Builder(BiometricSourceType.FINGERPRINT, getRequestReason(),
+ getErrorString(getContext(), error, 0), error).build()
+ );
getListener().onError(getSensorId(), getCookie(), error, 0 /* vendorCode */);
} catch (RemoteException e) {
Slog.e(TAG, "Remote exception", e);
@@ -456,7 +513,9 @@
resetIgnoreDisplayTouches();
mSensorOverlays.hide(getSensorId());
if (sidefpsControllerRefactor()) {
- mAuthenticationStateListeners.onAuthenticationStopped();
+ mAuthenticationStateListeners.onAuthenticationStopped(new AuthenticationStoppedInfo
+ .Builder(BiometricSourceType.FINGERPRINT, getRequestReason()).build()
+ );
}
mCallback.onClientFinished(this, false /* success */);
}
diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintDetectClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintDetectClient.java
index 1db2fad..b6c33ba 100644
--- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintDetectClient.java
+++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintDetectClient.java
@@ -22,7 +22,10 @@
import android.annotation.Nullable;
import android.content.Context;
import android.hardware.biometrics.BiometricRequestConstants;
+import android.hardware.biometrics.BiometricSourceType;
import android.hardware.biometrics.common.ICancellationSignal;
+import android.hardware.biometrics.events.AuthenticationStartedInfo;
+import android.hardware.biometrics.events.AuthenticationStoppedInfo;
import android.hardware.fingerprint.FingerprintAuthenticateOptions;
import android.hardware.fingerprint.IUdfpsOverlayController;
import android.os.IBinder;
@@ -34,6 +37,7 @@
import com.android.server.biometrics.log.BiometricLogger;
import com.android.server.biometrics.log.OperationContextExt;
import com.android.server.biometrics.sensors.AcquisitionClient;
+import com.android.server.biometrics.sensors.AuthenticationStateListeners;
import com.android.server.biometrics.sensors.ClientMonitorCallback;
import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter;
import com.android.server.biometrics.sensors.DetectionConsumer;
@@ -52,6 +56,9 @@
private final boolean mIsStrongBiometric;
private final FingerprintAuthenticateOptions mOptions;
+
+ @NonNull private final AuthenticationStateListeners mAuthenticationStateListeners;
+
@NonNull private final SensorOverlays mSensorOverlays;
@Nullable private ICancellationSignal mCancellationSignal;
@@ -61,12 +68,14 @@
@NonNull ClientMonitorCallbackConverter listener,
@NonNull FingerprintAuthenticateOptions options,
@NonNull BiometricLogger biometricLogger, @NonNull BiometricContext biometricContext,
+ @NonNull AuthenticationStateListeners authenticationStateListeners,
@Nullable IUdfpsOverlayController udfpsOverlayController,
boolean isStrongBiometric) {
super(context, lazyDaemon, token, listener, options.getUserId(),
options.getOpPackageName(), 0 /* cookie */, options.getSensorId(),
true /* shouldVibrate */, biometricLogger, biometricContext);
setRequestId(requestId);
+ mAuthenticationStateListeners = authenticationStateListeners;
mIsStrongBiometric = isStrongBiometric;
if (sidefpsControllerRefactor()) {
mSensorOverlays = new SensorOverlays(udfpsOverlayController);
@@ -87,6 +96,12 @@
protected void stopHalOperation() {
resetIgnoreDisplayTouches();
mSensorOverlays.hide(getSensorId());
+ if (sidefpsControllerRefactor()) {
+ mAuthenticationStateListeners.onAuthenticationStopped(
+ new AuthenticationStoppedInfo.Builder(BiometricSourceType.FINGERPRINT,
+ BiometricRequestConstants.REASON_AUTH_KEYGUARD).build()
+ );
+ }
unsubscribeBiometricContext();
if (mCancellationSignal != null) {
@@ -104,11 +119,25 @@
resetIgnoreDisplayTouches();
mSensorOverlays.show(getSensorId(), BiometricRequestConstants.REASON_AUTH_KEYGUARD,
this);
+
+ if (sidefpsControllerRefactor()) {
+ mAuthenticationStateListeners.onAuthenticationStarted(
+ new AuthenticationStartedInfo.Builder(BiometricSourceType.FINGERPRINT,
+ BiometricRequestConstants.REASON_AUTH_KEYGUARD).build()
+ );
+ }
+
try {
doDetectInteraction();
} catch (RemoteException e) {
Slog.e(TAG, "Remote exception when requesting finger detect", e);
mSensorOverlays.hide(getSensorId());
+ if (sidefpsControllerRefactor()) {
+ mAuthenticationStateListeners.onAuthenticationStopped(
+ new AuthenticationStoppedInfo.Builder(BiometricSourceType.FINGERPRINT,
+ BiometricRequestConstants.REASON_AUTH_KEYGUARD).build()
+ );
+ }
mCallback.onClientFinished(this, false /* success */);
}
}
@@ -125,6 +154,14 @@
} catch (RemoteException e) {
Slog.e(TAG, "Unable to start detect interaction", e);
mSensorOverlays.hide(getSensorId());
+ if (sidefpsControllerRefactor()) {
+ mAuthenticationStateListeners.onAuthenticationStopped(
+ new AuthenticationStoppedInfo.Builder(
+ BiometricSourceType.FINGERPRINT,
+ BiometricRequestConstants.REASON_AUTH_KEYGUARD
+ ).build()
+ );
+ }
mCallback.onClientFinished(this, false /* success */);
}
}, ctx -> {
diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClient.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClient.java
index 86ebabe..3d170db 100644
--- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClient.java
+++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClient.java
@@ -16,6 +16,12 @@
package com.android.server.biometrics.sensors.fingerprint.aidl;
+import static android.hardware.biometrics.BiometricFingerprintConstants.FINGERPRINT_ACQUIRED_START;
+import static android.hardware.biometrics.BiometricFingerprintConstants.FINGERPRINT_ACQUIRED_VENDOR;
+import static android.hardware.biometrics.BiometricFingerprintConstants.FINGERPRINT_ACQUIRED_VENDOR_BASE;
+import static android.hardware.fingerprint.FingerprintManager.getAcquiredString;
+import static android.hardware.fingerprint.FingerprintManager.getErrorString;
+
import static com.android.systemui.shared.Flags.sidefpsControllerRefactor;
import android.annotation.NonNull;
@@ -24,8 +30,14 @@
import android.hardware.biometrics.BiometricAuthenticator;
import android.hardware.biometrics.BiometricFingerprintConstants;
import android.hardware.biometrics.BiometricFingerprintConstants.FingerprintAcquired;
+import android.hardware.biometrics.BiometricSourceType;
import android.hardware.biometrics.BiometricStateListener;
import android.hardware.biometrics.common.ICancellationSignal;
+import android.hardware.biometrics.events.AuthenticationAcquiredInfo;
+import android.hardware.biometrics.events.AuthenticationErrorInfo;
+import android.hardware.biometrics.events.AuthenticationHelpInfo;
+import android.hardware.biometrics.events.AuthenticationStartedInfo;
+import android.hardware.biometrics.events.AuthenticationStoppedInfo;
import android.hardware.biometrics.fingerprint.PointerContext;
import android.hardware.fingerprint.Fingerprint;
import android.hardware.fingerprint.FingerprintEnrollOptions;
@@ -150,7 +162,11 @@
resetIgnoreDisplayTouches();
mSensorOverlays.hide(getSensorId());
if (sidefpsControllerRefactor()) {
- mAuthenticationStateListeners.onAuthenticationStopped();
+ mAuthenticationStateListeners.onAuthenticationStopped(
+ new AuthenticationStoppedInfo.Builder(
+ BiometricSourceType.FINGERPRINT,
+ getRequestReasonFromFingerprintEnrollReason(mEnrollReason)).build()
+ );
}
}
@@ -158,6 +174,24 @@
@Override
public void onAcquired(@FingerprintAcquired int acquiredInfo, int vendorCode) {
+ if (acquiredInfo != FINGERPRINT_ACQUIRED_START) {
+ mAuthenticationStateListeners.onAuthenticationAcquired(
+ new AuthenticationAcquiredInfo.Builder(BiometricSourceType.FINGERPRINT,
+ getRequestReasonFromFingerprintEnrollReason(mEnrollReason),
+ acquiredInfo).build()
+ );
+ }
+ String helpMsg = getAcquiredString(getContext(), acquiredInfo, vendorCode);
+ if (helpMsg != null) {
+ int helpCode = acquiredInfo == FINGERPRINT_ACQUIRED_VENDOR
+ ? (vendorCode + FINGERPRINT_ACQUIRED_VENDOR_BASE) : acquiredInfo;
+ mAuthenticationStateListeners.onAuthenticationHelp(
+ new AuthenticationHelpInfo.Builder(BiometricSourceType.FINGERPRINT,
+ getRequestReasonFromFingerprintEnrollReason(mEnrollReason),
+ helpMsg, helpCode).build()
+ );
+ }
+
boolean acquiredGood =
acquiredInfo == BiometricFingerprintConstants.FINGERPRINT_ACQUIRED_GOOD;
// For UDFPS, notify SysUI that the illumination can be turned off.
@@ -181,11 +215,20 @@
@Override
public void onError(int errorCode, int vendorCode) {
+ mAuthenticationStateListeners.onAuthenticationError(new AuthenticationErrorInfo
+ .Builder(BiometricSourceType.FINGERPRINT,
+ getRequestReasonFromFingerprintEnrollReason(mEnrollReason),
+ getErrorString(getContext(), errorCode, vendorCode), errorCode).build()
+ );
super.onError(errorCode, vendorCode);
+
resetIgnoreDisplayTouches();
mSensorOverlays.hide(getSensorId());
if (sidefpsControllerRefactor()) {
- mAuthenticationStateListeners.onAuthenticationStopped();
+ mAuthenticationStateListeners.onAuthenticationStopped(
+ new AuthenticationStoppedInfo.Builder(BiometricSourceType.FINGERPRINT,
+ getRequestReasonFromFingerprintEnrollReason(mEnrollReason)).build()
+ );
}
}
@@ -198,11 +241,13 @@
@Override
protected void startHalOperation() {
resetIgnoreDisplayTouches();
- mSensorOverlays.show(getSensorId(), getRequestReasonFromEnrollReason(mEnrollReason),
- this);
+ mSensorOverlays.show(getSensorId(),
+ getRequestReasonFromFingerprintEnrollReason(mEnrollReason), this);
if (sidefpsControllerRefactor()) {
- mAuthenticationStateListeners.onAuthenticationStarted(
- getRequestReasonFromEnrollReason(mEnrollReason));
+ mAuthenticationStateListeners.onAuthenticationStarted(new AuthenticationStartedInfo
+ .Builder(BiometricSourceType.FINGERPRINT,
+ getRequestReasonFromFingerprintEnrollReason(mEnrollReason)).build()
+ );
}
BiometricNotificationUtils.cancelBadCalibrationNotification(getContext());
@@ -250,7 +295,10 @@
resetIgnoreDisplayTouches();
mSensorOverlays.hide(getSensorId());
if (sidefpsControllerRefactor()) {
- mAuthenticationStateListeners.onAuthenticationStopped();
+ mAuthenticationStateListeners.onAuthenticationStopped(new AuthenticationStoppedInfo
+ .Builder(BiometricSourceType.FINGERPRINT,
+ getRequestReasonFromFingerprintEnrollReason(mEnrollReason)).build()
+ );
}
unsubscribeBiometricContext();
diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java
index 9c8d98d..f485a65 100644
--- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java
+++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java
@@ -537,7 +537,8 @@
options,
createLogger(BiometricsProtoEnums.ACTION_AUTHENTICATE, statsClient,
mAuthenticationStatsCollector),
- mBiometricContext, mUdfpsOverlayController, isStrongBiometric);
+ mBiometricContext, mAuthenticationStateListeners, mUdfpsOverlayController,
+ isStrongBiometric);
scheduleForSensor(sensorId, client, mBiometricStateCallback);
});
diff --git a/services/core/java/com/android/server/connectivity/Android.bp b/services/core/java/com/android/server/connectivity/Android.bp
index a374ec2..0916594 100644
--- a/services/core/java/com/android/server/connectivity/Android.bp
+++ b/services/core/java/com/android/server/connectivity/Android.bp
@@ -1,6 +1,7 @@
aconfig_declarations {
name: "connectivity_flags",
package: "com.android.server.connectivity",
+ container: "system",
srcs: ["flags.aconfig"],
}
diff --git a/services/core/java/com/android/server/connectivity/flags.aconfig b/services/core/java/com/android/server/connectivity/flags.aconfig
index 32593d4..8fd3ce5 100644
--- a/services/core/java/com/android/server/connectivity/flags.aconfig
+++ b/services/core/java/com/android/server/connectivity/flags.aconfig
@@ -1,8 +1,9 @@
package: "com.android.server.connectivity"
+container: "system"
flag {
name: "replace_vpn_profile_store"
namespace: "android_core_networking"
description: "This flag controls the usage of VpnBlobStore to replace LegacyVpnProfileStore."
bug: "307903113"
-}
\ No newline at end of file
+}
diff --git a/services/core/java/com/android/server/display/DisplayBrightnessState.java b/services/core/java/com/android/server/display/DisplayBrightnessState.java
index e3e3be2..baa154d 100644
--- a/services/core/java/com/android/server/display/DisplayBrightnessState.java
+++ b/services/core/java/com/android/server/display/DisplayBrightnessState.java
@@ -45,6 +45,7 @@
private final float mCustomAnimationRate;
private final BrightnessEvent mBrightnessEvent;
+ private final int mBrightnessAdjustmentFlag;
private DisplayBrightnessState(Builder builder) {
mBrightness = builder.getBrightness();
@@ -58,6 +59,7 @@
mCustomAnimationRate = builder.getCustomAnimationRate();
mShouldUpdateScreenBrightnessSetting = builder.shouldUpdateScreenBrightnessSetting();
mBrightnessEvent = builder.getBrightnessEvent();
+ mBrightnessAdjustmentFlag = builder.getBrightnessAdjustmentFlag();
}
/**
@@ -138,6 +140,14 @@
return mBrightnessEvent;
}
+ /**
+ * Gets the flag representing the reason for the brightness adjustment. This can be
+ * automatic(e.g. because of the change in the lux), or user initiated(e.g. moving the slider)
+ */
+ public int getBrightnessAdjustmentFlag() {
+ return mBrightnessAdjustmentFlag;
+ }
+
@Override
public String toString() {
StringBuilder stringBuilder = new StringBuilder("DisplayBrightnessState:");
@@ -157,6 +167,7 @@
.append(mShouldUpdateScreenBrightnessSetting);
stringBuilder.append("\n mBrightnessEvent:")
.append(Objects.toString(mBrightnessEvent, "null"));
+ stringBuilder.append("\n mBrightnessAdjustmentFlag:").append(mBrightnessAdjustmentFlag);
return stringBuilder.toString();
}
@@ -187,7 +198,8 @@
&& mCustomAnimationRate == otherState.getCustomAnimationRate()
&& mShouldUpdateScreenBrightnessSetting
== otherState.shouldUpdateScreenBrightnessSetting()
- && Objects.equals(mBrightnessEvent, otherState.getBrightnessEvent());
+ && Objects.equals(mBrightnessEvent, otherState.getBrightnessEvent())
+ && mBrightnessAdjustmentFlag == otherState.getBrightnessAdjustmentFlag();
}
@Override
@@ -195,7 +207,7 @@
return Objects.hash(mBrightness, mSdrBrightness, mBrightnessReason,
mShouldUseAutoBrightness, mIsSlowChange, mMaxBrightness, mMinBrightness,
mCustomAnimationRate,
- mShouldUpdateScreenBrightnessSetting, mBrightnessEvent);
+ mShouldUpdateScreenBrightnessSetting, mBrightnessEvent, mBrightnessAdjustmentFlag);
}
/**
@@ -222,6 +234,8 @@
private BrightnessEvent mBrightnessEvent;
+ public int mBrightnessAdjustmentFlag = 0;
+
/**
* Create a builder starting with the values from the specified {@link
* DisplayBrightnessState}.
@@ -242,6 +256,7 @@
builder.setShouldUpdateScreenBrightnessSetting(
state.shouldUpdateScreenBrightnessSetting());
builder.setBrightnessEvent(state.getBrightnessEvent());
+ builder.setBrightnessAdjustmentFlag(state.getBrightnessAdjustmentFlag());
return builder;
}
@@ -418,7 +433,6 @@
return new DisplayBrightnessState(this);
}
-
/**
* This is used to get the BrightnessEvent object from its builder
*/
@@ -434,5 +448,21 @@
mBrightnessEvent = brightnessEvent;
return this;
}
+
+ /**
+ * This is used to get the brightness adjustment flag from its builder
+ */
+ public int getBrightnessAdjustmentFlag() {
+ return mBrightnessAdjustmentFlag;
+ }
+
+
+ /**
+ * This is used to set the brightness adjustment flag
+ */
+ public Builder setBrightnessAdjustmentFlag(int brightnessAdjustmentFlag) {
+ mBrightnessAdjustmentFlag = brightnessAdjustmentFlag;
+ return this;
+ }
}
}
diff --git a/services/core/java/com/android/server/display/DisplayDeviceConfig.java b/services/core/java/com/android/server/display/DisplayDeviceConfig.java
index 5c93181..a6335e3 100644
--- a/services/core/java/com/android/server/display/DisplayDeviceConfig.java
+++ b/services/core/java/com/android/server/display/DisplayDeviceConfig.java
@@ -70,6 +70,7 @@
import com.android.server.display.config.PowerThrottlingPoint;
import com.android.server.display.config.PredefinedBrightnessLimitNames;
import com.android.server.display.config.RefreshRateConfigs;
+import com.android.server.display.config.RefreshRateData;
import com.android.server.display.config.RefreshRateRange;
import com.android.server.display.config.RefreshRateThrottlingMap;
import com.android.server.display.config.RefreshRateThrottlingPoint;
@@ -617,9 +618,7 @@
private static final String STABLE_ID_SUFFIX_FORMAT = "id_%d";
private static final String NO_SUFFIX_FORMAT = "%d";
private static final long STABLE_FLAG = 1L << 62;
- private static final int DEFAULT_PEAK_REFRESH_RATE = 0;
- private static final int DEFAULT_REFRESH_RATE = 60;
- private static final int DEFAULT_REFRESH_RATE_IN_HBM = 0;
+
private static final int DEFAULT_HIGH_REFRESH_RATE = 0;
private static final float[] DEFAULT_BRIGHTNESS_THRESHOLDS = new float[]{};
@@ -754,32 +753,6 @@
private boolean mDdcAutoBrightnessAvailable = true;
/**
- * The default peak refresh rate for a given device. This value prevents the framework from
- * using higher refresh rates, even if display modes with higher refresh rates are available
- * from hardware composer. Only has an effect if the value is non-zero.
- */
- private int mDefaultPeakRefreshRate = DEFAULT_PEAK_REFRESH_RATE;
-
- /**
- * The default refresh rate for a given device. This value sets the higher default
- * refresh rate. If the hardware composer on the device supports display modes with
- * a higher refresh rate than the default value specified here, the framework may use those
- * higher refresh rate modes if an app chooses one by setting preferredDisplayModeId or calling
- * setFrameRate(). We have historically allowed fallback to mDefaultPeakRefreshRate if
- * mDefaultRefreshRate is set to 0, but this is not supported anymore.
- */
- private int mDefaultRefreshRate = DEFAULT_REFRESH_RATE;
-
- /**
- * Default refresh rate while the device has high brightness mode enabled for HDR.
- */
- private int mDefaultRefreshRateInHbmHdr = DEFAULT_REFRESH_RATE_IN_HBM;
-
- /**
- * Default refresh rate while the device has high brightness mode enabled for Sunlight.
- */
- private int mDefaultRefreshRateInHbmSunlight = DEFAULT_REFRESH_RATE_IN_HBM;
- /**
* Default refresh rate in the high zone defined by brightness and ambient thresholds.
* If non-positive, then the refresh rate is unchanged even if thresholds are configured.
*/
@@ -867,6 +840,8 @@
@Nullable
public EvenDimmerBrightnessData mEvenDimmerBrightnessData;
+ private RefreshRateData mRefreshRateData = RefreshRateData.DEFAULT_REFRESH_RATE_DATA;
+
/**
* Maximum screen brightness setting when screen brightness capped in Wear Bedtime mode.
*/
@@ -1450,33 +1425,8 @@
return mDisplayBrightnessMapping.getBrightnessArray(mode, preset);
}
- /**
- * @return Default peak refresh rate of the associated display
- */
- public int getDefaultPeakRefreshRate() {
- return mDefaultPeakRefreshRate;
- }
-
- /**
- * @return Default refresh rate of the associated display
- */
- public int getDefaultRefreshRate() {
- return mDefaultRefreshRate;
- }
-
- /**
- * @return Default refresh rate while the device has high brightness mode enabled for HDR.
- */
- public int getDefaultRefreshRateInHbmHdr() {
- return mDefaultRefreshRateInHbmHdr;
- }
-
- /**
- * @return Default refresh rate while the device has high brightness mode enabled because of
- * high lux.
- */
- public int getDefaultRefreshRateInHbmSunlight() {
- return mDefaultRefreshRateInHbmSunlight;
+ public RefreshRateData getRefreshRateData() {
+ return mRefreshRateData;
}
/**
@@ -1687,11 +1637,8 @@
+ "\n"
+ "mDefaultLowBlockingZoneRefreshRate= " + mDefaultLowBlockingZoneRefreshRate
+ ", mDefaultHighBlockingZoneRefreshRate= " + mDefaultHighBlockingZoneRefreshRate
- + ", mDefaultPeakRefreshRate= " + mDefaultPeakRefreshRate
- + ", mDefaultRefreshRate= " + mDefaultRefreshRate
+ + ", mRefreshRateData= " + mRefreshRateData
+ ", mRefreshRateZoneProfiles= " + mRefreshRateZoneProfiles
- + ", mDefaultRefreshRateInHbmHdr= " + mDefaultRefreshRateInHbmHdr
- + ", mDefaultRefreshRateInHbmSunlight= " + mDefaultRefreshRateInHbmSunlight
+ ", mRefreshRateThrottlingMap= " + mRefreshRateThrottlingMap
+ ", mLowBlockingZoneThermalMapId= " + mLowBlockingZoneThermalMapId
+ ", mHighBlockingZoneThermalMapId= " + mHighBlockingZoneThermalMapId
@@ -1782,6 +1729,8 @@
mScreenOffBrightnessSensor = SensorData.loadScreenOffBrightnessSensorConfig(config);
mProximitySensor = SensorData.loadProxSensorConfig(mFlags, config);
mTempSensor = SensorData.loadTempSensorConfig(mFlags, config);
+ mRefreshRateData = RefreshRateData
+ .loadRefreshRateData(config, mContext.getResources());
loadAmbientHorizonFromDdc(config);
loadBrightnessChangeThresholds(config);
loadAutoBrightnessConfigValues(config);
@@ -1812,6 +1761,8 @@
mAmbientLightSensor = SensorData.loadAmbientLightSensorConfig(mContext.getResources());
mProximitySensor = SensorData.loadSensorUnspecifiedConfig();
mTempSensor = SensorData.loadTempSensorUnspecifiedConfig();
+ mRefreshRateData = RefreshRateData
+ .loadRefreshRateData(null, mContext.getResources());
loadBrightnessChangeThresholdsFromXml();
loadAutoBrightnessConfigsFromConfigXml();
loadAutoBrightnessAvailableFromConfigXml();
@@ -2162,33 +2113,13 @@
BlockingZoneConfig higherBlockingZoneConfig =
(refreshRateConfigs == null) ? null
: refreshRateConfigs.getHigherBlockingZoneConfigs();
- loadPeakDefaultRefreshRate(refreshRateConfigs);
- loadDefaultRefreshRate(refreshRateConfigs);
- loadDefaultRefreshRateInHbm(refreshRateConfigs);
loadLowerRefreshRateBlockingZones(lowerBlockingZoneConfig);
loadHigherRefreshRateBlockingZones(higherBlockingZoneConfig);
loadRefreshRateZoneProfiles(refreshRateConfigs);
}
- private void loadPeakDefaultRefreshRate(RefreshRateConfigs refreshRateConfigs) {
- if (refreshRateConfigs == null || refreshRateConfigs.getDefaultPeakRefreshRate() == null) {
- mDefaultPeakRefreshRate = mContext.getResources().getInteger(
- R.integer.config_defaultPeakRefreshRate);
- } else {
- mDefaultPeakRefreshRate =
- refreshRateConfigs.getDefaultPeakRefreshRate().intValue();
- }
- }
- private void loadDefaultRefreshRate(RefreshRateConfigs refreshRateConfigs) {
- if (refreshRateConfigs == null || refreshRateConfigs.getDefaultRefreshRate() == null) {
- mDefaultRefreshRate = mContext.getResources().getInteger(
- R.integer.config_defaultRefreshRate);
- } else {
- mDefaultRefreshRate =
- refreshRateConfigs.getDefaultRefreshRate().intValue();
- }
- }
+
/** Loads the refresh rate profiles. */
private void loadRefreshRateZoneProfiles(RefreshRateConfigs refreshRateConfigs) {
@@ -2205,26 +2136,6 @@
}
}
- private void loadDefaultRefreshRateInHbm(RefreshRateConfigs refreshRateConfigs) {
- if (refreshRateConfigs != null
- && refreshRateConfigs.getDefaultRefreshRateInHbmHdr() != null) {
- mDefaultRefreshRateInHbmHdr = refreshRateConfigs.getDefaultRefreshRateInHbmHdr()
- .intValue();
- } else {
- mDefaultRefreshRateInHbmHdr = mContext.getResources().getInteger(
- R.integer.config_defaultRefreshRateInHbmHdr);
- }
-
- if (refreshRateConfigs != null
- && refreshRateConfigs.getDefaultRefreshRateInHbmSunlight() != null) {
- mDefaultRefreshRateInHbmSunlight =
- refreshRateConfigs.getDefaultRefreshRateInHbmSunlight().intValue();
- } else {
- mDefaultRefreshRateInHbmSunlight = mContext.getResources().getInteger(
- R.integer.config_defaultRefreshRateInHbmSunlight);
- }
- }
-
/**
* Loads the refresh rate configurations pertaining to the lower blocking zones.
*/
diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java
index 896670e4..c5d8686 100644
--- a/services/core/java/com/android/server/display/DisplayPowerController.java
+++ b/services/core/java/com/android/server/display/DisplayPowerController.java
@@ -1345,6 +1345,7 @@
boolean slowChange = displayBrightnessState.isSlowChange();
// custom transition duration
float customAnimationRate = displayBrightnessState.getCustomAnimationRate();
+ int brightnessAdjustmentFlags = displayBrightnessState.getBrightnessAdjustmentFlag();
final boolean userSetBrightnessChanged =
mDisplayBrightnessController.getIsUserSetScreenBrightnessUpdated();
if (displayBrightnessState.getBrightnessEvent() != null) {
@@ -1392,19 +1393,13 @@
displayBrightnessState.shouldUpdateScreenBrightnessSetting();
float currentBrightnessSetting = mDisplayBrightnessController.getCurrentBrightness();
// Apply auto-brightness.
- int brightnessAdjustmentFlags = 0;
// All the conditions inside this if block will be moved to AutomaticBrightnessStrategy
if (mFlags.isRefactorDisplayPowerControllerEnabled()
&& displayBrightnessState.getBrightnessReason().getReason()
== BrightnessReason.REASON_AUTOMATIC) {
- brightnessAdjustmentFlags =
- mAutomaticBrightnessStrategy.getAutoBrightnessAdjustmentReasonsFlags();
- updateScreenBrightnessSetting = currentBrightnessSetting != brightnessState;
- mBrightnessReasonTemp.setReason(BrightnessReason.REASON_AUTOMATIC);
if (mScreenOffBrightnessSensorController != null) {
mScreenOffBrightnessSensorController.setLightSensorEnabled(false);
}
- setBrightnessFromOffload(PowerManager.BRIGHTNESS_INVALID_FLOAT);
}
if (!mFlags.isRefactorDisplayPowerControllerEnabled()) {
diff --git a/services/core/java/com/android/server/display/brightness/DisplayBrightnessController.java b/services/core/java/com/android/server/display/brightness/DisplayBrightnessController.java
index 8b3e4a4..6a88a76 100644
--- a/services/core/java/com/android/server/display/brightness/DisplayBrightnessController.java
+++ b/services/core/java/com/android/server/display/brightness/DisplayBrightnessController.java
@@ -146,7 +146,8 @@
synchronized (mLock) {
mDisplayBrightnessStrategy = mDisplayBrightnessStrategySelector.selectStrategy(
constructStrategySelectionRequest(displayPowerRequest, targetDisplayState));
- state = mDisplayBrightnessStrategy.updateBrightness(displayPowerRequest);
+ state = mDisplayBrightnessStrategy
+ .updateBrightness(constructStrategyExecutionRequest(displayPowerRequest));
}
// This is a temporary measure until AutomaticBrightnessStrategy works as a traditional
@@ -550,4 +551,10 @@
return new StrategySelectionRequest(displayPowerRequest, targetDisplayState,
lastUserSetScreenBrightness, userSetBrightnessChanged);
}
+
+ private StrategyExecutionRequest constructStrategyExecutionRequest(
+ DisplayManagerInternal.DisplayPowerRequest displayPowerRequest) {
+ float currentScreenBrightness = getCurrentBrightness();
+ return new StrategyExecutionRequest(displayPowerRequest, currentScreenBrightness);
+ }
}
diff --git a/services/core/java/com/android/server/display/brightness/DisplayBrightnessStrategySelector.java b/services/core/java/com/android/server/display/brightness/DisplayBrightnessStrategySelector.java
index da66879..282083f 100644
--- a/services/core/java/com/android/server/display/brightness/DisplayBrightnessStrategySelector.java
+++ b/services/core/java/com/android/server/display/brightness/DisplayBrightnessStrategySelector.java
@@ -121,7 +121,8 @@
(mDisplayManagerFlags.isRefactorDisplayPowerControllerEnabled())
? mAutomaticBrightnessStrategy1 : mAutomaticBrightnessStrategy2;
if (flags.isDisplayOffloadEnabled()) {
- mOffloadBrightnessStrategy = injector.getOffloadBrightnessStrategy();
+ mOffloadBrightnessStrategy = injector
+ .getOffloadBrightnessStrategy(mDisplayManagerFlags);
} else {
mOffloadBrightnessStrategy = null;
}
@@ -314,8 +315,9 @@
return new AutomaticBrightnessStrategy2(context, displayId);
}
- OffloadBrightnessStrategy getOffloadBrightnessStrategy() {
- return new OffloadBrightnessStrategy();
+ OffloadBrightnessStrategy getOffloadBrightnessStrategy(
+ DisplayManagerFlags displayManagerFlags) {
+ return new OffloadBrightnessStrategy(displayManagerFlags);
}
}
}
diff --git a/services/core/java/com/android/server/display/brightness/StrategyExecutionRequest.java b/services/core/java/com/android/server/display/brightness/StrategyExecutionRequest.java
new file mode 100644
index 0000000..82c0bbf
--- /dev/null
+++ b/services/core/java/com/android/server/display/brightness/StrategyExecutionRequest.java
@@ -0,0 +1,60 @@
+/*
+ * 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.display.brightness;
+
+import android.hardware.display.DisplayManagerInternal;
+
+import java.util.Objects;
+
+/**
+ * A wrapper class to encapsulate the request to execute the selected strategy
+ */
+public final class StrategyExecutionRequest {
+ // The request to change the associated display's state and brightness
+ private final DisplayManagerInternal.DisplayPowerRequest mDisplayPowerRequest;
+
+ private final float mCurrentScreenBrightness;
+
+ public StrategyExecutionRequest(DisplayManagerInternal.DisplayPowerRequest displayPowerRequest,
+ float currentScreenBrightness) {
+ mDisplayPowerRequest = displayPowerRequest;
+ mCurrentScreenBrightness = currentScreenBrightness;
+ }
+
+ public DisplayManagerInternal.DisplayPowerRequest getDisplayPowerRequest() {
+ return mDisplayPowerRequest;
+ }
+
+ public float getCurrentScreenBrightness() {
+ return mCurrentScreenBrightness;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (!(obj instanceof StrategyExecutionRequest)) {
+ return false;
+ }
+ StrategyExecutionRequest other = (StrategyExecutionRequest) obj;
+ return Objects.equals(mDisplayPowerRequest, other.getDisplayPowerRequest())
+ && mCurrentScreenBrightness == other.getCurrentScreenBrightness();
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(mDisplayPowerRequest, mCurrentScreenBrightness);
+ }
+}
diff --git a/services/core/java/com/android/server/display/brightness/strategy/AutomaticBrightnessStrategy.java b/services/core/java/com/android/server/display/brightness/strategy/AutomaticBrightnessStrategy.java
index 4be7332..5c4fa842 100644
--- a/services/core/java/com/android/server/display/brightness/strategy/AutomaticBrightnessStrategy.java
+++ b/services/core/java/com/android/server/display/brightness/strategy/AutomaticBrightnessStrategy.java
@@ -20,7 +20,6 @@
import android.annotation.Nullable;
import android.content.Context;
import android.hardware.display.BrightnessConfiguration;
-import android.hardware.display.DisplayManagerInternal;
import android.os.PowerManager;
import android.os.UserHandle;
import android.provider.Settings;
@@ -32,6 +31,7 @@
import com.android.server.display.brightness.BrightnessEvent;
import com.android.server.display.brightness.BrightnessReason;
import com.android.server.display.brightness.BrightnessUtils;
+import com.android.server.display.brightness.StrategyExecutionRequest;
import com.android.server.display.brightness.StrategySelectionNotifyRequest;
import java.io.PrintWriter;
@@ -96,13 +96,21 @@
// want to re-evaluate the auto-brightness state
private boolean mIsConfigured;
- public AutomaticBrightnessStrategy(Context context, int displayId) {
+ private Injector mInjector;
+
+ @VisibleForTesting
+ AutomaticBrightnessStrategy(Context context, int displayId, Injector injector) {
super(context, displayId);
mContext = context;
mDisplayId = displayId;
mAutoBrightnessAdjustment = getAutoBrightnessAdjustmentSetting();
mPendingAutoBrightnessAdjustment = PowerManager.BRIGHTNESS_INVALID_FLOAT;
mTemporaryAutoBrightnessAdjustment = PowerManager.BRIGHTNESS_INVALID_FLOAT;
+ mInjector = (injector == null) ? new RealInjector() : injector;
+ }
+
+ public AutomaticBrightnessStrategy(Context context, int displayId) {
+ this(context, displayId, null);
}
/**
@@ -252,10 +260,10 @@
@Override
public DisplayBrightnessState updateBrightness(
- DisplayManagerInternal.DisplayPowerRequest displayPowerRequest) {
+ StrategyExecutionRequest strategyExecutionRequest) {
BrightnessReason brightnessReason = new BrightnessReason();
brightnessReason.setReason(BrightnessReason.REASON_AUTOMATIC);
- BrightnessEvent brightnessEvent = new BrightnessEvent(mDisplayId);
+ BrightnessEvent brightnessEvent = mInjector.getBrightnessEvent(mDisplayId);
float brightness = getAutomaticScreenBrightness(brightnessEvent);
return new DisplayBrightnessState.Builder()
.setBrightness(brightness)
@@ -265,6 +273,9 @@
.setIsSlowChange(hasAppliedAutoBrightness()
&& !getAutoBrightnessAdjustmentChanged())
.setBrightnessEvent(brightnessEvent)
+ .setBrightnessAdjustmentFlag(mAutoBrightnessAdjustmentReasonsFlags)
+ .setShouldUpdateScreenBrightnessSetting(
+ brightness != strategyExecutionRequest.getCurrentScreenBrightness())
.build();
}
@@ -360,13 +371,6 @@
}
/**
- * Gets the auto-brightness adjustment flag change reason
- */
- public int getAutoBrightnessAdjustmentReasonsFlags() {
- return mAutoBrightnessAdjustmentReasonsFlags;
- }
-
- /**
* Returns if the auto brightness has been applied
*/
public boolean hasAppliedAutoBrightness() {
@@ -497,4 +501,15 @@
Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ, 0.0f, UserHandle.USER_CURRENT);
return Float.isNaN(adj) ? 0.0f : BrightnessUtils.clampBrightnessAdjustment(adj);
}
+
+ @VisibleForTesting
+ interface Injector {
+ BrightnessEvent getBrightnessEvent(int displayId);
+ }
+
+ static class RealInjector implements Injector {
+ public BrightnessEvent getBrightnessEvent(int displayId) {
+ return new BrightnessEvent(displayId);
+ }
+ }
}
diff --git a/services/core/java/com/android/server/display/brightness/strategy/BoostBrightnessStrategy.java b/services/core/java/com/android/server/display/brightness/strategy/BoostBrightnessStrategy.java
index 9c1acea..009a47a 100644
--- a/services/core/java/com/android/server/display/brightness/strategy/BoostBrightnessStrategy.java
+++ b/services/core/java/com/android/server/display/brightness/strategy/BoostBrightnessStrategy.java
@@ -16,12 +16,12 @@
package com.android.server.display.brightness.strategy;
-import android.hardware.display.DisplayManagerInternal;
import android.os.PowerManager;
import com.android.server.display.DisplayBrightnessState;
import com.android.server.display.brightness.BrightnessReason;
import com.android.server.display.brightness.BrightnessUtils;
+import com.android.server.display.brightness.StrategyExecutionRequest;
import com.android.server.display.brightness.StrategySelectionNotifyRequest;
import java.io.PrintWriter;
@@ -37,7 +37,7 @@
// Set the brightness to the maximum value when display brightness boost is requested
@Override
public DisplayBrightnessState updateBrightness(
- DisplayManagerInternal.DisplayPowerRequest displayPowerRequest) {
+ StrategyExecutionRequest strategyExecutionRequest) {
// Todo(b/241308599): Introduce a validator class and add validations before setting
// the brightness
DisplayBrightnessState displayBrightnessState =
diff --git a/services/core/java/com/android/server/display/brightness/strategy/DisplayBrightnessStrategy.java b/services/core/java/com/android/server/display/brightness/strategy/DisplayBrightnessStrategy.java
index 61dd6d5..e96b83a 100644
--- a/services/core/java/com/android/server/display/brightness/strategy/DisplayBrightnessStrategy.java
+++ b/services/core/java/com/android/server/display/brightness/strategy/DisplayBrightnessStrategy.java
@@ -17,9 +17,9 @@
package com.android.server.display.brightness.strategy;
import android.annotation.NonNull;
-import android.hardware.display.DisplayManagerInternal;
import com.android.server.display.DisplayBrightnessState;
+import com.android.server.display.brightness.StrategyExecutionRequest;
import com.android.server.display.brightness.StrategySelectionNotifyRequest;
import java.io.PrintWriter;
@@ -33,10 +33,10 @@
/**
* Decides the DisplayBrightnessState that the system should change to.
*
- * @param displayPowerRequest The request to evaluate the updated brightness
+ * @param strategyExecutionRequest The request to evaluate the updated brightness
*/
DisplayBrightnessState updateBrightness(
- DisplayManagerInternal.DisplayPowerRequest displayPowerRequest);
+ StrategyExecutionRequest strategyExecutionRequest);
/**
* Returns the name of the Strategy
diff --git a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt b/services/core/java/com/android/server/display/brightness/strategy/DisplayBrightnessStrategyConstants.java
similarity index 72%
copy from packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt
copy to services/core/java/com/android/server/display/brightness/strategy/DisplayBrightnessStrategyConstants.java
index c4476fc..504683a 100644
--- a/packages/SystemUI/src/com/android/systemui/volume/panel/component/mediaoutput/shared/model/SessionWithPlayback.kt
+++ b/services/core/java/com/android/server/display/brightness/strategy/DisplayBrightnessStrategyConstants.java
@@ -14,11 +14,8 @@
* limitations under the License.
*/
-package com.android.systemui.volume.panel.component.mediaoutput.shared.model
+package com.android.server.display.brightness.strategy;
-import android.media.session.PlaybackState
-
-data class SessionWithPlayback(
- val session: MediaDeviceSession,
- val playback: PlaybackState,
-)
+public class DisplayBrightnessStrategyConstants {
+ static final String INVALID_BRIGHTNESS_STRATEGY_NAME = "InvalidBrightnessStrategy";
+}
diff --git a/services/core/java/com/android/server/display/brightness/strategy/DozeBrightnessStrategy.java b/services/core/java/com/android/server/display/brightness/strategy/DozeBrightnessStrategy.java
index 1f7efd1..2b493f3 100644
--- a/services/core/java/com/android/server/display/brightness/strategy/DozeBrightnessStrategy.java
+++ b/services/core/java/com/android/server/display/brightness/strategy/DozeBrightnessStrategy.java
@@ -16,11 +16,10 @@
package com.android.server.display.brightness.strategy;
-import android.hardware.display.DisplayManagerInternal;
-
import com.android.server.display.DisplayBrightnessState;
import com.android.server.display.brightness.BrightnessReason;
import com.android.server.display.brightness.BrightnessUtils;
+import com.android.server.display.brightness.StrategyExecutionRequest;
import com.android.server.display.brightness.StrategySelectionNotifyRequest;
import java.io.PrintWriter;
@@ -32,11 +31,12 @@
@Override
public DisplayBrightnessState updateBrightness(
- DisplayManagerInternal.DisplayPowerRequest displayPowerRequest) {
+ StrategyExecutionRequest strategyExecutionRequest) {
// Todo(b/241308599): Introduce a validator class and add validations before setting
// the brightness
return BrightnessUtils.constructDisplayBrightnessState(BrightnessReason.REASON_DOZE,
- displayPowerRequest.dozeScreenBrightness, displayPowerRequest.dozeScreenBrightness,
+ strategyExecutionRequest.getDisplayPowerRequest().dozeScreenBrightness,
+ strategyExecutionRequest.getDisplayPowerRequest().dozeScreenBrightness,
getName());
}
diff --git a/services/core/java/com/android/server/display/brightness/strategy/FollowerBrightnessStrategy.java b/services/core/java/com/android/server/display/brightness/strategy/FollowerBrightnessStrategy.java
index baac276..5a07ce2 100644
--- a/services/core/java/com/android/server/display/brightness/strategy/FollowerBrightnessStrategy.java
+++ b/services/core/java/com/android/server/display/brightness/strategy/FollowerBrightnessStrategy.java
@@ -16,12 +16,12 @@
package com.android.server.display.brightness.strategy;
-import android.hardware.display.DisplayManagerInternal;
import android.os.PowerManager;
import com.android.server.display.DisplayBrightnessState;
import com.android.server.display.brightness.BrightnessReason;
import com.android.server.display.brightness.BrightnessUtils;
+import com.android.server.display.brightness.StrategyExecutionRequest;
import com.android.server.display.brightness.StrategySelectionNotifyRequest;
import java.io.PrintWriter;
@@ -49,7 +49,7 @@
@Override
public DisplayBrightnessState updateBrightness(
- DisplayManagerInternal.DisplayPowerRequest displayPowerRequest) {
+ StrategyExecutionRequest strategyExecutionRequest) {
// Todo(b/241308599): Introduce a validator class and add validations before setting
// the brightness
return BrightnessUtils.constructDisplayBrightnessState(BrightnessReason.REASON_FOLLOWER,
diff --git a/services/core/java/com/android/server/display/brightness/strategy/InvalidBrightnessStrategy.java b/services/core/java/com/android/server/display/brightness/strategy/InvalidBrightnessStrategy.java
index 4abd028..9dc6cff 100644
--- a/services/core/java/com/android/server/display/brightness/strategy/InvalidBrightnessStrategy.java
+++ b/services/core/java/com/android/server/display/brightness/strategy/InvalidBrightnessStrategy.java
@@ -16,12 +16,12 @@
package com.android.server.display.brightness.strategy;
-import android.hardware.display.DisplayManagerInternal;
import android.os.PowerManager;
import com.android.server.display.DisplayBrightnessState;
import com.android.server.display.brightness.BrightnessReason;
import com.android.server.display.brightness.BrightnessUtils;
+import com.android.server.display.brightness.StrategyExecutionRequest;
import com.android.server.display.brightness.StrategySelectionNotifyRequest;
import java.io.PrintWriter;
@@ -32,7 +32,7 @@
public class InvalidBrightnessStrategy implements DisplayBrightnessStrategy {
@Override
public DisplayBrightnessState updateBrightness(
- DisplayManagerInternal.DisplayPowerRequest displayPowerRequest) {
+ StrategyExecutionRequest strategyExecutionRequest) {
return BrightnessUtils.constructDisplayBrightnessState(BrightnessReason.REASON_UNKNOWN,
PowerManager.BRIGHTNESS_INVALID_FLOAT, PowerManager.BRIGHTNESS_INVALID_FLOAT,
getName());
@@ -40,7 +40,7 @@
@Override
public String getName() {
- return "InvalidBrightnessStrategy";
+ return DisplayBrightnessStrategyConstants.INVALID_BRIGHTNESS_STRATEGY_NAME;
}
@Override
diff --git a/services/core/java/com/android/server/display/brightness/strategy/OffloadBrightnessStrategy.java b/services/core/java/com/android/server/display/brightness/strategy/OffloadBrightnessStrategy.java
index 64dc47c..b46873a 100644
--- a/services/core/java/com/android/server/display/brightness/strategy/OffloadBrightnessStrategy.java
+++ b/services/core/java/com/android/server/display/brightness/strategy/OffloadBrightnessStrategy.java
@@ -16,12 +16,13 @@
package com.android.server.display.brightness.strategy;
-import android.hardware.display.DisplayManagerInternal;
import android.os.PowerManager;
import com.android.server.display.DisplayBrightnessState;
import com.android.server.display.brightness.BrightnessReason;
+import com.android.server.display.brightness.StrategyExecutionRequest;
import com.android.server.display.brightness.StrategySelectionNotifyRequest;
+import com.android.server.display.feature.DisplayManagerFlags;
import java.io.PrintWriter;
@@ -32,19 +33,29 @@
public class OffloadBrightnessStrategy implements DisplayBrightnessStrategy {
private float mOffloadScreenBrightness;
+ private final DisplayManagerFlags mDisplayManagerFlags;
- public OffloadBrightnessStrategy() {
+ public OffloadBrightnessStrategy(DisplayManagerFlags displayManagerFlags) {
+ mDisplayManagerFlags = displayManagerFlags;
mOffloadScreenBrightness = PowerManager.BRIGHTNESS_INVALID_FLOAT;
}
@Override
public DisplayBrightnessState updateBrightness(
- DisplayManagerInternal.DisplayPowerRequest displayPowerRequest) {
+ StrategyExecutionRequest strategyExecutionRequest) {
+ float offloadBrightness = mOffloadScreenBrightness;
+ if (mDisplayManagerFlags.isRefactorDisplayPowerControllerEnabled()) {
+ // We reset the offload brightness to invalid so that there is no stale value lingering
+ // around. After this request is processed, the current brightness will be set to
+ // offload brightness. Hence even if the lux values don't become valid for the next
+ // request, we will fallback to the current brightness anyways.
+ mOffloadScreenBrightness = PowerManager.BRIGHTNESS_INVALID_FLOAT;
+ }
BrightnessReason brightnessReason = new BrightnessReason();
brightnessReason.setReason(BrightnessReason.REASON_OFFLOAD);
return new DisplayBrightnessState.Builder()
- .setBrightness(mOffloadScreenBrightness)
- .setSdrBrightness(mOffloadScreenBrightness)
+ .setBrightness(offloadBrightness)
+ .setSdrBrightness(offloadBrightness)
.setBrightnessReason(brightnessReason)
.setDisplayBrightnessStrategyName(getName())
.setIsSlowChange(false)
@@ -77,7 +88,15 @@
@Override
public void strategySelectionPostProcessor(
StrategySelectionNotifyRequest strategySelectionNotifyRequest) {
- // DO NOTHING
+ // We reset the offload brightness only if the selected strategy is not offload or invalid,
+ // as we are yet to use the brightness to evaluate the brightness state.
+ if (!strategySelectionNotifyRequest.getSelectedDisplayBrightnessStrategy().getName()
+ .equals(getName())
+ && !strategySelectionNotifyRequest.getSelectedDisplayBrightnessStrategy().getName()
+ .equals(
+ DisplayBrightnessStrategyConstants.INVALID_BRIGHTNESS_STRATEGY_NAME)) {
+ mOffloadScreenBrightness = PowerManager.BRIGHTNESS_INVALID_FLOAT;
+ }
}
@Override
diff --git a/services/core/java/com/android/server/display/brightness/strategy/OverrideBrightnessStrategy.java b/services/core/java/com/android/server/display/brightness/strategy/OverrideBrightnessStrategy.java
index 9605a88..a2982b1 100644
--- a/services/core/java/com/android/server/display/brightness/strategy/OverrideBrightnessStrategy.java
+++ b/services/core/java/com/android/server/display/brightness/strategy/OverrideBrightnessStrategy.java
@@ -16,11 +16,10 @@
package com.android.server.display.brightness.strategy;
-import android.hardware.display.DisplayManagerInternal;
-
import com.android.server.display.DisplayBrightnessState;
import com.android.server.display.brightness.BrightnessReason;
import com.android.server.display.brightness.BrightnessUtils;
+import com.android.server.display.brightness.StrategyExecutionRequest;
import com.android.server.display.brightness.StrategySelectionNotifyRequest;
import java.io.PrintWriter;
@@ -31,12 +30,13 @@
public class OverrideBrightnessStrategy implements DisplayBrightnessStrategy {
@Override
public DisplayBrightnessState updateBrightness(
- DisplayManagerInternal.DisplayPowerRequest displayPowerRequest) {
+ StrategyExecutionRequest strategyExecutionRequest) {
// Todo(b/241308599): Introduce a validator class and add validations before setting
// the brightness
return BrightnessUtils.constructDisplayBrightnessState(BrightnessReason.REASON_OVERRIDE,
- displayPowerRequest.screenBrightnessOverride,
- displayPowerRequest.screenBrightnessOverride, getName());
+ strategyExecutionRequest.getDisplayPowerRequest().screenBrightnessOverride,
+ strategyExecutionRequest.getDisplayPowerRequest()
+ .screenBrightnessOverride, getName());
}
@Override
diff --git a/services/core/java/com/android/server/display/brightness/strategy/ScreenOffBrightnessStrategy.java b/services/core/java/com/android/server/display/brightness/strategy/ScreenOffBrightnessStrategy.java
index c9dc298..6a3162c 100644
--- a/services/core/java/com/android/server/display/brightness/strategy/ScreenOffBrightnessStrategy.java
+++ b/services/core/java/com/android/server/display/brightness/strategy/ScreenOffBrightnessStrategy.java
@@ -16,12 +16,12 @@
package com.android.server.display.brightness.strategy;
-import android.hardware.display.DisplayManagerInternal;
import android.os.PowerManager;
import com.android.server.display.DisplayBrightnessState;
import com.android.server.display.brightness.BrightnessReason;
import com.android.server.display.brightness.BrightnessUtils;
+import com.android.server.display.brightness.StrategyExecutionRequest;
import com.android.server.display.brightness.StrategySelectionNotifyRequest;
import java.io.PrintWriter;
@@ -32,7 +32,7 @@
public class ScreenOffBrightnessStrategy implements DisplayBrightnessStrategy {
@Override
public DisplayBrightnessState updateBrightness(
- DisplayManagerInternal.DisplayPowerRequest displayPowerRequest) {
+ StrategyExecutionRequest strategyExecutionRequest) {
// Todo(b/241308599): Introduce a validator class and add validations before setting
// the brightness
return BrightnessUtils.constructDisplayBrightnessState(BrightnessReason.REASON_SCREEN_OFF,
diff --git a/services/core/java/com/android/server/display/brightness/strategy/TemporaryBrightnessStrategy.java b/services/core/java/com/android/server/display/brightness/strategy/TemporaryBrightnessStrategy.java
index 6a691d1..6b8817a 100644
--- a/services/core/java/com/android/server/display/brightness/strategy/TemporaryBrightnessStrategy.java
+++ b/services/core/java/com/android/server/display/brightness/strategy/TemporaryBrightnessStrategy.java
@@ -16,12 +16,12 @@
package com.android.server.display.brightness.strategy;
-import android.hardware.display.DisplayManagerInternal;
import android.os.PowerManager;
import com.android.server.display.DisplayBrightnessState;
import com.android.server.display.brightness.BrightnessReason;
import com.android.server.display.brightness.BrightnessUtils;
+import com.android.server.display.brightness.StrategyExecutionRequest;
import com.android.server.display.brightness.StrategySelectionNotifyRequest;
import java.io.PrintWriter;
@@ -43,7 +43,7 @@
// WindowManager or based on the display state.
@Override
public DisplayBrightnessState updateBrightness(
- DisplayManagerInternal.DisplayPowerRequest displayPowerRequest) {
+ StrategyExecutionRequest strategyExecutionRequest) {
// Todo(b/241308599): Introduce a validator class and add validations before setting
// the brightness
DisplayBrightnessState displayBrightnessState =
diff --git a/services/core/java/com/android/server/display/config/RefreshRateData.java b/services/core/java/com/android/server/display/config/RefreshRateData.java
new file mode 100644
index 0000000..b186fd5
--- /dev/null
+++ b/services/core/java/com/android/server/display/config/RefreshRateData.java
@@ -0,0 +1,138 @@
+/*
+ * 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.display.config;
+
+import android.annotation.Nullable;
+import android.content.res.Resources;
+
+import com.android.internal.R;
+
+/**
+ * RefreshRates config for display
+ */
+public class RefreshRateData {
+ public static RefreshRateData DEFAULT_REFRESH_RATE_DATA = loadRefreshRateData(null, null);
+
+ private static final int DEFAULT_REFRESH_RATE = 60;
+ private static final int DEFAULT_PEAK_REFRESH_RATE = 0;
+ private static final int DEFAULT_REFRESH_RATE_IN_HBM = 0;
+
+ /**
+ * The default refresh rate for a given device. This value sets the higher default
+ * refresh rate. If the hardware composer on the device supports display modes with
+ * a higher refresh rate than the default value specified here, the framework may use those
+ * higher refresh rate modes if an app chooses one by setting preferredDisplayModeId or calling
+ * setFrameRate(). We have historically allowed fallback to mDefaultPeakRefreshRate if
+ * defaultRefreshRate is set to 0, but this is not supported anymore.
+ */
+ public final int defaultRefreshRate;
+
+ /**
+ * The default peak refresh rate for a given device. This value prevents the framework from
+ * using higher refresh rates, even if display modes with higher refresh rates are available
+ * from hardware composer. Only has an effect if the value is non-zero.
+ */
+ public final int defaultPeakRefreshRate;
+
+ /**
+ * Default refresh rate while the device has high brightness mode enabled for HDR.
+ */
+ public final int defaultRefreshRateInHbmHdr;
+
+ /**
+ * Default refresh rate while the device has high brightness mode enabled for Sunlight.
+ */
+ public final int defaultRefreshRateInHbmSunlight;
+
+ public RefreshRateData(int defaultRefreshRate, int defaultPeakRefreshRate,
+ int defaultRefreshRateInHbmHdr, int defaultRefreshRateInHbmSunlight) {
+ this.defaultRefreshRate = defaultRefreshRate;
+ this.defaultPeakRefreshRate = defaultPeakRefreshRate;
+ this.defaultRefreshRateInHbmHdr = defaultRefreshRateInHbmHdr;
+ this.defaultRefreshRateInHbmSunlight = defaultRefreshRateInHbmSunlight;
+ }
+
+
+ @Override
+ public String toString() {
+ return "RefreshRateData {"
+ + "defaultRefreshRate: " + defaultRefreshRate
+ + "defaultPeakRefreshRate: " + defaultPeakRefreshRate
+ + "defaultRefreshRateInHbmHdr: " + defaultRefreshRateInHbmHdr
+ + "defaultRefreshRateInHbmSunlight: " + defaultRefreshRateInHbmSunlight
+ + "} ";
+ }
+
+ /**
+ * Loads RefreshRateData from DisplayConfiguration and Resources
+ */
+ public static RefreshRateData loadRefreshRateData(
+ @Nullable DisplayConfiguration config, @Nullable Resources resources) {
+ RefreshRateConfigs refreshRateConfigs = config == null ? null : config.getRefreshRate();
+
+ int defaultRefreshRate = loadDefaultRefreshRate(refreshRateConfigs, resources);
+ int defaultPeakRefreshRate = loadDefaultPeakRefreshRate(refreshRateConfigs, resources);
+ int defaultRefreshRateInHbmHdr = loadDefaultRefreshRateInHbm(refreshRateConfigs, resources);
+ int defaultRefreshRateInHbmSunlight = loadDefaultRefreshRateInHbmSunlight(
+ refreshRateConfigs, resources);
+
+ return new RefreshRateData(defaultRefreshRate, defaultPeakRefreshRate,
+ defaultRefreshRateInHbmHdr, defaultRefreshRateInHbmSunlight);
+ }
+
+ private static int loadDefaultRefreshRate(
+ @Nullable RefreshRateConfigs refreshRateConfigs, @Nullable Resources resources) {
+ if (refreshRateConfigs != null && refreshRateConfigs.getDefaultRefreshRate() != null) {
+ return refreshRateConfigs.getDefaultRefreshRate().intValue();
+ } else if (resources != null) {
+ return resources.getInteger(R.integer.config_defaultRefreshRate);
+ }
+ return DEFAULT_REFRESH_RATE;
+ }
+
+ private static int loadDefaultPeakRefreshRate(
+ @Nullable RefreshRateConfigs refreshRateConfigs, @Nullable Resources resources) {
+ if (refreshRateConfigs != null && refreshRateConfigs.getDefaultPeakRefreshRate() != null) {
+ return refreshRateConfigs.getDefaultPeakRefreshRate().intValue();
+ } else if (resources != null) {
+ return resources.getInteger(R.integer.config_defaultPeakRefreshRate);
+ }
+ return DEFAULT_PEAK_REFRESH_RATE;
+ }
+
+ private static int loadDefaultRefreshRateInHbm(
+ @Nullable RefreshRateConfigs refreshRateConfigs, @Nullable Resources resources) {
+ if (refreshRateConfigs != null
+ && refreshRateConfigs.getDefaultRefreshRateInHbmHdr() != null) {
+ return refreshRateConfigs.getDefaultRefreshRateInHbmHdr().intValue();
+ } else if (resources != null) {
+ return resources.getInteger(R.integer.config_defaultRefreshRateInHbmHdr);
+ }
+ return DEFAULT_REFRESH_RATE_IN_HBM;
+ }
+
+ private static int loadDefaultRefreshRateInHbmSunlight(
+ @Nullable RefreshRateConfigs refreshRateConfigs, @Nullable Resources resources) {
+ if (refreshRateConfigs != null
+ && refreshRateConfigs.getDefaultRefreshRateInHbmSunlight() != null) {
+ return refreshRateConfigs.getDefaultRefreshRateInHbmSunlight().intValue();
+ } else if (resources != null) {
+ return resources.getInteger(R.integer.config_defaultRefreshRateInHbmSunlight);
+ }
+ return DEFAULT_REFRESH_RATE_IN_HBM;
+ }
+}
diff --git a/services/core/java/com/android/server/display/feature/display_flags.aconfig b/services/core/java/com/android/server/display/feature/display_flags.aconfig
index c68ef9b..a7dd243 100644
--- a/services/core/java/com/android/server/display/feature/display_flags.aconfig
+++ b/services/core/java/com/android/server/display/feature/display_flags.aconfig
@@ -126,7 +126,7 @@
name: "even_dimmer"
namespace: "display_manager"
description: "Feature flag for extending the brightness below traditional range"
- bug: "179428400"
+ bug: "294760970"
is_fixed_read_only: true
}
diff --git a/services/core/java/com/android/server/display/mode/DisplayModeDirector.java b/services/core/java/com/android/server/display/mode/DisplayModeDirector.java
index fa42316..1c8c8a4 100644
--- a/services/core/java/com/android/server/display/mode/DisplayModeDirector.java
+++ b/services/core/java/com/android/server/display/mode/DisplayModeDirector.java
@@ -77,6 +77,7 @@
import com.android.server.LocalServices;
import com.android.server.display.DisplayDeviceConfig;
import com.android.server.display.config.IdleScreenRefreshRateTimeoutLuxThresholdPoint;
+import com.android.server.display.config.RefreshRateData;
import com.android.server.display.feature.DeviceConfigParameterProvider;
import com.android.server.display.feature.DisplayManagerFlags;
import com.android.server.display.utils.AmbientFilter;
@@ -961,13 +962,15 @@
* This is used to update the refresh rate configs from the DeviceConfig, which
* if missing from DisplayDeviceConfig, and finally fallback to config.xml.
*/
- public void setRefreshRates(DisplayDeviceConfig displayDeviceConfig,
+ void setRefreshRates(DisplayDeviceConfig displayDeviceConfig,
boolean attemptReadFromFeatureParams) {
+ RefreshRateData refreshRateData = displayDeviceConfig == null ? null
+ : displayDeviceConfig.getRefreshRateData();
setDefaultPeakRefreshRate(displayDeviceConfig, attemptReadFromFeatureParams);
mDefaultRefreshRate =
- (displayDeviceConfig == null) ? (float) mContext.getResources().getInteger(
- R.integer.config_defaultRefreshRate)
- : (float) displayDeviceConfig.getDefaultRefreshRate();
+ (refreshRateData == null) ? (float) mContext.getResources().getInteger(
+ R.integer.config_defaultRefreshRate)
+ : (float) refreshRateData.defaultRefreshRate;
}
public void observe() {
@@ -1049,7 +1052,8 @@
defaultPeakRefreshRate =
(displayDeviceConfig == null) ? (float) mContext.getResources().getInteger(
R.integer.config_defaultPeakRefreshRate)
- : (float) displayDeviceConfig.getDefaultPeakRefreshRate();
+ : (float) displayDeviceConfig.getRefreshRateData()
+ .defaultPeakRefreshRate;
}
mDefaultPeakRefreshRate = defaultPeakRefreshRate;
}
@@ -2809,7 +2813,7 @@
private int getRefreshRateInHbmHdr(DisplayDeviceConfig displayDeviceConfig) {
return getRefreshRate(
() -> mConfigParameterProvider.getRefreshRateInHbmHdr(),
- () -> displayDeviceConfig.getDefaultRefreshRateInHbmHdr(),
+ () -> displayDeviceConfig.getRefreshRateData().defaultRefreshRateInHbmHdr,
R.integer.config_defaultRefreshRateInHbmHdr,
displayDeviceConfig
);
@@ -2818,7 +2822,7 @@
private int getRefreshRateInHbmSunlight(DisplayDeviceConfig displayDeviceConfig) {
return getRefreshRate(
() -> mConfigParameterProvider.getRefreshRateInHbmSunlight(),
- () -> displayDeviceConfig.getDefaultRefreshRateInHbmSunlight(),
+ () -> displayDeviceConfig.getRefreshRateData().defaultRefreshRateInHbmSunlight,
R.integer.config_defaultRefreshRateInHbmSunlight,
displayDeviceConfig
);
diff --git a/services/core/java/com/android/server/dreams/DreamController.java b/services/core/java/com/android/server/dreams/DreamController.java
index 0e8a5fb..a818eab 100644
--- a/services/core/java/com/android/server/dreams/DreamController.java
+++ b/services/core/java/com/android/server/dreams/DreamController.java
@@ -249,6 +249,16 @@
mCurrentDream.mAppTask = appTask;
}
+ void setDreamHasFocus(boolean hasFocus) {
+ if (mCurrentDream != null) {
+ mCurrentDream.mDreamHasFocus = hasFocus;
+ }
+ }
+
+ boolean dreamHasFocus() {
+ return mCurrentDream != null && mCurrentDream.mDreamHasFocus;
+ }
+
/**
* Sends a user activity signal to PowerManager to stop the screen from turning off immediately
* if there hasn't been any user interaction in a while.
@@ -271,6 +281,21 @@
stopDreamInstance(immediate, reason, mCurrentDream);
}
+ public boolean bringDreamToFront() {
+ if (mCurrentDream == null || mCurrentDream.mService == null) {
+ return false;
+ }
+
+ try {
+ mCurrentDream.mService.comeToFront();
+ return true;
+ } catch (RemoteException e) {
+ Slog.e(TAG, "Error asking dream to come to the front", e);
+ }
+
+ return false;
+ }
+
/**
* Stops the given dream instance.
*
@@ -426,6 +451,7 @@
private String mStopReason;
private long mDreamStartTime;
public boolean mWakingGently;
+ public boolean mDreamHasFocus;
private final Runnable mStopPreviousDreamsIfNeeded = this::stopPreviousDreamsIfNeeded;
private final Runnable mReleaseWakeLockIfNeeded = this::releaseWakeLockIfNeeded;
diff --git a/services/core/java/com/android/server/dreams/DreamManagerService.java b/services/core/java/com/android/server/dreams/DreamManagerService.java
index 42c9e08..fc63494 100644
--- a/services/core/java/com/android/server/dreams/DreamManagerService.java
+++ b/services/core/java/com/android/server/dreams/DreamManagerService.java
@@ -20,6 +20,7 @@
import static android.app.WindowConfiguration.ACTIVITY_TYPE_ASSISTANT;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_DREAM;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
+import static android.service.dreams.Flags.dreamTracksFocus;
import static com.android.server.wm.ActivityInterceptorCallback.DREAM_MANAGER_ORDERED_ID;
@@ -406,8 +407,10 @@
/** Whether dreaming can start given user settings and the current dock/charge state. */
private boolean canStartDreamingInternal(boolean isScreenOn) {
synchronized (mLock) {
- // Can't start dreaming if we are already dreaming.
- if (isScreenOn && isDreamingInternal()) {
+ // Can't start dreaming if we are already dreaming and the dream has focus. If we are
+ // dreaming but the dream does not have focus, then the dream can be brought to the
+ // front so it does have focus.
+ if (isScreenOn && isDreamingInternal() && dreamHasFocus()) {
return false;
}
@@ -442,11 +445,20 @@
}
}
+ private boolean dreamHasFocus() {
+ // Dreams always had focus before they were able to track it.
+ return !dreamTracksFocus() || mController.dreamHasFocus();
+ }
+
protected void requestStartDreamFromShell() {
requestDreamInternal();
}
private void requestDreamInternal() {
+ if (isDreamingInternal() && !dreamHasFocus() && mController.bringDreamToFront()) {
+ return;
+ }
+
// Ask the power manager to nap. It will eventually call back into
// startDream() if/when it is appropriate to start dreaming.
// Because napping could cause the screen to turn off immediately if the dream
@@ -1128,6 +1140,16 @@
});
}
+ @Override
+ public void onDreamFocusChanged(boolean hasFocus) {
+ final long ident = Binder.clearCallingIdentity();
+ try {
+ mController.setDreamHasFocus(hasFocus);
+ } finally {
+ Binder.restoreCallingIdentity(ident);
+ }
+ }
+
boolean canLaunchDreamActivity(String dreamPackageName, String packageName,
int callingUid) {
if (dreamPackageName == null || packageName == null) {
diff --git a/services/core/java/com/android/server/feature/Android.bp b/services/core/java/com/android/server/feature/Android.bp
deleted file mode 100644
index b0fbab6..0000000
--- a/services/core/java/com/android/server/feature/Android.bp
+++ /dev/null
@@ -1,13 +0,0 @@
-aconfig_declarations {
- name: "dropbox_flags",
- package: "com.android.server.feature.flags",
- container: "system",
- srcs: [
- "dropbox_flags.aconfig",
- ],
-}
-
-java_aconfig_library {
- name: "dropbox_flags_lib",
- aconfig_declarations: "dropbox_flags",
-}
diff --git a/services/core/java/com/android/server/flags/compaction.aconfig b/services/core/java/com/android/server/flags/compaction.aconfig
index 58cc560..067a1c9 100644
--- a/services/core/java/com/android/server/flags/compaction.aconfig
+++ b/services/core/java/com/android/server/flags/compaction.aconfig
@@ -1,4 +1,5 @@
package: "com.android.server.flags"
+container: "system"
flag {
name: "disable_system_compaction"
diff --git a/services/core/java/com/android/server/flags/pinner.aconfig b/services/core/java/com/android/server/flags/pinner.aconfig
index 606a6be..16a45cd 100644
--- a/services/core/java/com/android/server/flags/pinner.aconfig
+++ b/services/core/java/com/android/server/flags/pinner.aconfig
@@ -1,4 +1,5 @@
package: "com.android.server.flags"
+container: "system"
flag {
name: "pin_webview"
diff --git a/services/core/java/com/android/server/flags/services.aconfig b/services/core/java/com/android/server/flags/services.aconfig
index bc10993..e43d086 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/input/InputManagerService.java b/services/core/java/com/android/server/input/InputManagerService.java
index 73df594..f32c11d 100644
--- a/services/core/java/com/android/server/input/InputManagerService.java
+++ b/services/core/java/com/android/server/input/InputManagerService.java
@@ -250,19 +250,8 @@
private final Object mAssociationsLock = new Object();
@GuardedBy("mAssociationsLock")
private final Map<String, Integer> mRuntimeAssociations = new ArrayMap<>();
-
- // The associations of input devices to displays by port. Maps from {InputDevice#mName} (String)
- // to {DisplayInfo#uniqueId} (String) so that events from the Input Device go to a
- // specific display.
@GuardedBy("mAssociationsLock")
- private final Map<String, String> mUniqueIdAssociationsByPort = new ArrayMap<>();
-
- // The associations of input devices to displays by descriptor. Maps from
- // {InputDevice#mDescriptor} to {DisplayInfo#uniqueId} (String) so that events from the
- // input device go to a specific display.
- @GuardedBy("mAssociationsLock")
- private final Map<String, String> mUniqueIdAssociationsByDescriptor = new ArrayMap<>();
-
+ private final Map<String, String> mUniqueIdAssociations = new ArrayMap<>();
// The map from input port (String) to the keyboard layout identifiers (comma separated string
// containing language tag and layout type) associated with the corresponding keyboard device.
// Currently only accessed by InputReader.
@@ -1752,8 +1741,8 @@
/**
* Add a runtime association between the input port and the display port. This overrides any
* static associations.
- * @param inputPort the port of the input device
- * @param displayPort the physical port of the associated display
+ * @param inputPort The port of the input device.
+ * @param displayPort The physical port of the associated display.
*/
@Override // Binder call
public void addPortAssociation(@NonNull String inputPort, int displayPort) {
@@ -1774,7 +1763,7 @@
/**
* Remove the runtime association between the input port and the display port. Any existing
* static association for the cleared input port will be restored.
- * @param inputPort the port of the input device to be cleared
+ * @param inputPort The port of the input device to be cleared.
*/
@Override // Binder call
public void removePortAssociation(@NonNull String inputPort) {
@@ -1793,11 +1782,10 @@
}
@Override // Binder call
- public void addUniqueIdAssociationByPort(@NonNull String inputPort,
- @NonNull String displayUniqueId) {
+ public void addUniqueIdAssociation(@NonNull String inputPort, @NonNull String displayUniqueId) {
if (!checkCallingPermission(
android.Manifest.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY,
- "addUniqueIdAssociationByPort()")) {
+ "addUniqueIdAssociation()")) {
throw new SecurityException(
"Requires ASSOCIATE_INPUT_DEVICE_TO_DISPLAY permission");
}
@@ -1805,65 +1793,22 @@
Objects.requireNonNull(inputPort);
Objects.requireNonNull(displayUniqueId);
synchronized (mAssociationsLock) {
- mUniqueIdAssociationsByPort.put(inputPort, displayUniqueId);
+ mUniqueIdAssociations.put(inputPort, displayUniqueId);
}
mNative.changeUniqueIdAssociation();
}
@Override // Binder call
- public void removeUniqueIdAssociationByPort(@NonNull String inputPort) {
+ public void removeUniqueIdAssociation(@NonNull String inputPort) {
if (!checkCallingPermission(
android.Manifest.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY,
- "removeUniqueIdAssociationByPort()")) {
+ "removeUniqueIdAssociation()")) {
throw new SecurityException("Requires ASSOCIATE_INPUT_DEVICE_TO_DISPLAY permission");
}
Objects.requireNonNull(inputPort);
synchronized (mAssociationsLock) {
- mUniqueIdAssociationsByPort.remove(inputPort);
- }
- mNative.changeUniqueIdAssociation();
- }
-
- /**
- * Adds a runtime association between the input device descriptor and the display unique id.
- * @param inputDeviceDescriptor the descriptor of the input device
- * @param displayUniqueId the unique ID of the display
- */
- @Override // Binder call
- public void addUniqueIdAssociationByDescriptor(@NonNull String inputDeviceDescriptor,
- @NonNull String displayUniqueId) {
- if (!checkCallingPermission(
- android.Manifest.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY,
- "addUniqueIdAssociationByDescriptor()")) {
- throw new SecurityException(
- "Requires ASSOCIATE_INPUT_DEVICE_TO_DISPLAY permission");
- }
-
- Objects.requireNonNull(inputDeviceDescriptor);
- Objects.requireNonNull(displayUniqueId);
- synchronized (mAssociationsLock) {
- mUniqueIdAssociationsByDescriptor.put(inputDeviceDescriptor, displayUniqueId);
- }
- mNative.changeUniqueIdAssociation();
- }
-
- /**
- * Removes the runtime association between the input device and the display.
- * @param inputDeviceDescriptor the descriptor of the input device
- */
- @Override // Binder call
- public void removeUniqueIdAssociationByDescriptor(@NonNull String inputDeviceDescriptor) {
- if (!checkCallingPermission(
- android.Manifest.permission.ASSOCIATE_INPUT_DEVICE_TO_DISPLAY,
- "removeUniqueIdAssociationByDescriptor()")) {
- throw new SecurityException(
- "Requires ASSOCIATE_INPUT_DEVICE_TO_DISPLAY permission");
- }
-
- Objects.requireNonNull(inputDeviceDescriptor);
- synchronized (mAssociationsLock) {
- mUniqueIdAssociationsByDescriptor.remove(inputDeviceDescriptor);
+ mUniqueIdAssociations.remove(inputPort);
}
mNative.changeUniqueIdAssociation();
}
@@ -2238,20 +2183,13 @@
pw.println(" display: " + v);
});
}
- if (!mUniqueIdAssociationsByPort.isEmpty()) {
+ if (!mUniqueIdAssociations.isEmpty()) {
pw.println("Unique Id Associations:");
- mUniqueIdAssociationsByPort.forEach((k, v) -> {
+ mUniqueIdAssociations.forEach((k, v) -> {
pw.print(" port: " + k);
pw.println(" uniqueId: " + v);
});
}
- if (!mUniqueIdAssociationsByDescriptor.isEmpty()) {
- pw.println("Unique Id Associations:");
- mUniqueIdAssociationsByDescriptor.forEach((k, v) -> {
- pw.print(" descriptor: " + k);
- pw.println(" uniqueId: " + v);
- });
- }
if (!mDeviceTypeAssociations.isEmpty()) {
pw.println("Type Associations:");
mDeviceTypeAssociations.forEach((k, v) -> {
@@ -2684,21 +2622,10 @@
// Native callback
@SuppressWarnings("unused")
- private String[] getInputUniqueIdAssociationsByPort() {
+ private String[] getInputUniqueIdAssociations() {
final Map<String, String> associations;
synchronized (mAssociationsLock) {
- associations = new HashMap<>(mUniqueIdAssociationsByPort);
- }
-
- return flatten(associations);
- }
-
- // Native callback
- @SuppressWarnings("unused")
- private String[] getInputUniqueIdAssociationsByDescriptor() {
- final Map<String, String> associations;
- synchronized (mAssociationsLock) {
- associations = new HashMap<>(mUniqueIdAssociationsByDescriptor);
+ associations = new HashMap<>(mUniqueIdAssociations);
}
return flatten(associations);
diff --git a/services/core/java/com/android/server/inputmethod/HandwritingEventReceiverSurface.java b/services/core/java/com/android/server/inputmethod/HandwritingEventReceiverSurface.java
index dbbbed3..d132449 100644
--- a/services/core/java/com/android/server/inputmethod/HandwritingEventReceiverSurface.java
+++ b/services/core/java/com/android/server/inputmethod/HandwritingEventReceiverSurface.java
@@ -85,6 +85,17 @@
mIsIntercepting = true;
}
+ void setNotTouchable(boolean notTouchable) {
+ if (notTouchable) {
+ mWindowHandle.inputConfig |= InputConfig.NOT_TOUCHABLE;
+ } else {
+ mWindowHandle.inputConfig &= ~InputConfig.NOT_TOUCHABLE;
+ }
+ new SurfaceControl.Transaction()
+ .setInputWindowInfo(mInputSurface, mWindowHandle)
+ .apply();
+ }
+
boolean isIntercepting() {
return mIsIntercepting;
}
diff --git a/services/core/java/com/android/server/inputmethod/HandwritingModeController.java b/services/core/java/com/android/server/inputmethod/HandwritingModeController.java
index dbdac41..7956e03 100644
--- a/services/core/java/com/android/server/inputmethod/HandwritingModeController.java
+++ b/services/core/java/com/android/server/inputmethod/HandwritingModeController.java
@@ -159,6 +159,13 @@
return OptionalInt.of(mCurrentRequestId);
}
+ void setNotTouchable(boolean notTouchable) {
+ if (!getCurrentRequestId().isPresent()) {
+ return;
+ }
+ mHandwritingSurface.setNotTouchable(notTouchable);
+ }
+
boolean isStylusGestureOngoing() {
if (mRecordingGestureAfterStylusUp && !mHandwritingBuffer.isEmpty()) {
// If it is less than AFTER_STYLUS_UP_ALLOW_PERIOD_MS after the stylus up event, return
diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
index 808e296..7bd47f5 100644
--- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
@@ -6548,6 +6548,12 @@
@BinderThread
@Override
+ public void setHandwritingSurfaceNotTouchable(boolean notTouchable) {
+ mImms.mHwController.setNotTouchable(notTouchable);
+ }
+
+ @BinderThread
+ @Override
public void createInputContentUriToken(Uri contentUri, String packageName,
AndroidFuture future /* T=IBinder */) {
@SuppressWarnings("unchecked")
diff --git a/services/core/java/com/android/server/location/contexthub/ContextHubTransactionManager.java b/services/core/java/com/android/server/location/contexthub/ContextHubTransactionManager.java
index b18871c..a0dbfa0 100644
--- a/services/core/java/com/android/server/location/contexthub/ContextHubTransactionManager.java
+++ b/services/core/java/com/android/server/location/contexthub/ContextHubTransactionManager.java
@@ -28,6 +28,7 @@
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
+import java.util.Random;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
@@ -77,9 +78,12 @@
private final AtomicInteger mNextAvailableId = new AtomicInteger();
/**
- * The next available message sequence number
+ * The next available message sequence number. We choose a random
+ * number to start with to avoid collisions and limit the bound to
+ * half of the max value to avoid overflow.
*/
- private final AtomicInteger mNextAvailableMessageSequenceNumber = new AtomicInteger();
+ private final AtomicInteger mNextAvailableMessageSequenceNumber =
+ new AtomicInteger(new Random().nextInt(Integer.MAX_VALUE / 2));
/*
* An executor and the future object for scheduling timeout timers
diff --git a/services/core/java/com/android/server/media/MediaRoute2ProviderServiceProxy.java b/services/core/java/com/android/server/media/MediaRoute2ProviderServiceProxy.java
index db83d4b..a7fd750 100644
--- a/services/core/java/com/android/server/media/MediaRoute2ProviderServiceProxy.java
+++ b/services/core/java/com/android/server/media/MediaRoute2ProviderServiceProxy.java
@@ -233,7 +233,7 @@
return false;
}
boolean bindDueToManagerScan =
- mIsManagerScanning && Flags.enablePreventionOfManagerScansWhenNoAppsScan();
+ mIsManagerScanning && !Flags.enablePreventionOfManagerScansWhenNoAppsScan();
if (!getSessionInfos().isEmpty() || bindDueToManagerScan) {
// We bind if any manager is scanning (regardless of whether an app is scanning) to give
// the opportunity for providers to publish routing sessions that were established
diff --git a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java
index e50189b..869b89a 100644
--- a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java
+++ b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java
@@ -3411,7 +3411,14 @@
for (RouterRecord activeRouterRecord : activeRouterRecords) {
RouteDiscoveryPreference preference = activeRouterRecord.mDiscoveryPreference;
preferredFeatures.addAll(preference.getPreferredFeatures());
- if (activeRouterRecord.isActivelyScanning()) {
+
+ boolean isRouterRecordActivelyScanning =
+ Flags.enablePreventionOfManagerScansWhenNoAppsScan()
+ ? (activeRouterRecord.isActivelyScanning() || shouldForceActiveScan)
+ && !preference.getPreferredFeatures().isEmpty()
+ : activeRouterRecord.isActivelyScanning();
+
+ if (isRouterRecordActivelyScanning) {
activeScan = true;
activelyScanningPackages.add(activeRouterRecord.mPackageName);
}
diff --git a/services/core/java/com/android/server/media/MediaServerUtils.java b/services/core/java/com/android/server/media/MediaServerUtils.java
index 6a954d6..f16d426 100644
--- a/services/core/java/com/android/server/media/MediaServerUtils.java
+++ b/services/core/java/com/android/server/media/MediaServerUtils.java
@@ -74,10 +74,7 @@
}
final PackageManagerInternal packageManagerInternal =
LocalServices.getService(PackageManagerInternal.class);
- final int actualUid =
- packageManagerInternal.getPackageUid(
- packageName, 0 /* flags */, UserHandle.getUserId(uid));
- if (!UserHandle.isSameApp(uid, actualUid)) {
+ if (!packageManagerInternal.isSameApp(packageName, uid, UserHandle.getUserId(uid))) {
String[] uidPackages = context.getPackageManager().getPackagesForUid(uid);
throw new IllegalArgumentException(
"packageName does not belong to the calling uid; "
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index ebea05d..bff3d39 100755
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -98,6 +98,7 @@
import static android.os.UserHandle.USER_SYSTEM;
import static android.service.notification.Flags.callstyleCallbackApi;
import static android.service.notification.Flags.redactSensitiveNotificationsFromUntrustedListeners;
+import static android.service.notification.Flags.redactSensitiveNotificationsBigTextStyle;
import static android.service.notification.NotificationListenerService.FLAG_FILTER_TYPE_ALERTING;
import static android.service.notification.NotificationListenerService.FLAG_FILTER_TYPE_CONVERSATIONS;
import static android.service.notification.NotificationListenerService.FLAG_FILTER_TYPE_ONGOING;
@@ -139,6 +140,7 @@
import static android.service.notification.NotificationListenerService.TRIM_LIGHT;
import static android.view.WindowManager.LayoutParams.TYPE_TOAST;
import static android.view.contentprotection.flags.Flags.rapidClearNotificationsByListenerAppOpEnabled;
+
import static com.android.internal.util.FrameworkStatsLog.DND_MODE_RULE;
import static com.android.internal.util.FrameworkStatsLog.PACKAGE_NOTIFICATION_CHANNEL_GROUP_PREFERENCES;
import static com.android.internal.util.FrameworkStatsLog.PACKAGE_NOTIFICATION_CHANNEL_PREFERENCES;
@@ -306,6 +308,7 @@
import android.view.accessibility.AccessibilityManager;
import android.widget.RemoteViews;
import android.widget.Toast;
+
import com.android.internal.R;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
@@ -357,7 +360,9 @@
import com.android.server.wm.ActivityTaskManagerInternal;
import com.android.server.wm.BackgroundActivityStartCallback;
import com.android.server.wm.WindowManagerInternal;
+
import libcore.io.IoUtils;
+
import org.json.JSONException;
import org.json.JSONObject;
import org.xmlpull.v1.XmlPullParserException;
@@ -3780,9 +3785,9 @@
// If cancellation will be prevented due to lifetime extension, we send updates
// to system UI.
synchronized (mNotificationLock) {
- notifySystemUiListenerLifetimeExtendedListLocked(mNotificationList,
+ maybeNotifySystemUiListenerLifetimeExtendedListLocked(mNotificationList,
packageImportance);
- notifySystemUiListenerLifetimeExtendedListLocked(mEnqueuedNotifications,
+ maybeNotifySystemUiListenerLifetimeExtendedListLocked(mEnqueuedNotifications,
packageImportance);
}
} else {
@@ -4969,10 +4974,10 @@
| FLAG_LIFETIME_EXTENDED_BY_DIRECT_REPLY);
// If cancellation will be prevented due to lifetime extension, we send
// an update to system UI.
- notifySystemUiListenerLifetimeExtendedListLocked(mNotificationList,
- packageImportance);
- notifySystemUiListenerLifetimeExtendedListLocked(mEnqueuedNotifications,
- packageImportance);
+ maybeNotifySystemUiListenerLifetimeExtendedListLocked(
+ mNotificationList, packageImportance);
+ maybeNotifySystemUiListenerLifetimeExtendedListLocked(
+ mEnqueuedNotifications, packageImportance);
} else {
cancelAllLocked(callingUid, callingPid, info.userid,
REASON_LISTENER_CANCEL_ALL, info, info.supportsProfiles(),
@@ -7235,6 +7240,10 @@
}
}
}
+ if (Flags.traceCancelEvents()) {
+ Trace.instant(Trace.TRACE_TAG_SYSTEM_SERVER, "cancelNotificationInternal: " +
+ SmallHash.hash(Objects.hashCode(tag) ^ id));
+ }
cancelNotification(uid, callingPid, pkg, tag, id, 0,
mustNotHaveFlags, false, userId, REASON_APP_CANCEL, null);
@@ -8289,14 +8298,6 @@
mUsageStats.registerClickedByUser(r);
}
- // If cancellation will be prevented due to lifetime extension, we need to
- // send an update to system UI. This must be checked before flags are checked.
- // We do not want to send this update.
- if (lifetimeExtensionRefactor() && mReason != REASON_CLICK) {
- maybeNotifySystemUiListenerLifetimeExtendedLocked(r, mPkg,
- packageImportance);
- }
-
if ((mReason == REASON_LISTENER_CANCEL
&& r.getNotification().isBubbleNotification())
|| (mReason == REASON_CLICK && r.canBubble()
@@ -8313,6 +8314,12 @@
return;
}
if ((r.getNotification().flags & mMustNotHaveFlags) != 0) {
+ if (lifetimeExtensionRefactor()) {
+ // If cancellation will be prevented due to lifetime extension,
+ // we need to send an update to system UI first.
+ maybeNotifySystemUiListenerLifetimeExtendedLocked(r, mPkg,
+ packageImportance);
+ }
return;
}
@@ -11235,7 +11242,7 @@
@FlaggedApi(FLAG_LIFETIME_EXTENSION_REFACTOR)
@GuardedBy("mNotificationLock")
- private void notifySystemUiListenerLifetimeExtendedListLocked(
+ private void maybeNotifySystemUiListenerLifetimeExtendedListLocked(
List<NotificationRecord> notificationList, int packageImportance) {
for (int i = notificationList.size() - 1; i >= 0; --i) {
NotificationRecord record = notificationList.get(i);
@@ -11775,10 +11782,18 @@
}
if (lifetimeExtensionRefactor()) {
+ if (sendRedacted && redactedSbn == null) {
+ redactedSbn = redactStatusBarNotification(sbn);
+ redactedCache = new TrimCache(redactedSbn);
+ }
+ final StatusBarNotification sbnToPost = sendRedacted
+ ? redactedCache.ForListener(info) : trimCache.ForListener(info);
+
// Checks if this is a request to notify system UI about a notification that
// has been lifetime extended.
// (We only need to check old for the flag, because in both cancellation and
- // update cases, old should have the flag.)
+ // update cases, old should have the flag, whereas in update cases the
+ // new will NOT have the flag.)
// If it is such a request, and this is system UI, we send the post request
// only to System UI, and break as we don't need to continue checking other
// Managed Services.
@@ -11786,7 +11801,7 @@
&& (old.getNotification().flags
& FLAG_LIFETIME_EXTENDED_BY_DIRECT_REPLY) > 0) {
final NotificationRankingUpdate update = makeRankingUpdateLocked(info);
- listenerCalls.add(() -> notifyPosted(info, oldSbn, update));
+ listenerCalls.add(() -> notifyPosted(info, sbnToPost, update));
break;
}
}
@@ -11917,6 +11932,14 @@
redactedText, System.currentTimeMillis(), empty));
redactedNotifBuilder.setStyle(messageStyle);
}
+ if (redactSensitiveNotificationsBigTextStyle()
+ && oldNotif.isStyle(Notification.BigTextStyle.class)) {
+ Notification.BigTextStyle bigTextStyle = new Notification.BigTextStyle();
+ bigTextStyle.bigText(mContext.getString(R.string.redacted_notification_message));
+ bigTextStyle.setBigContentTitle("");
+ bigTextStyle.setSummaryText("");
+ redactedNotifBuilder.setStyle(bigTextStyle);
+ }
Notification redacted = redactedNotifBuilder.build();
// Notification extras can't always be overridden by a builder (configured by a system
diff --git a/services/core/java/com/android/server/notification/NotificationRecord.java b/services/core/java/com/android/server/notification/NotificationRecord.java
index c69bead..38c95f7 100644
--- a/services/core/java/com/android/server/notification/NotificationRecord.java
+++ b/services/core/java/com/android/server/notification/NotificationRecord.java
@@ -66,15 +66,16 @@
import android.text.TextUtils;
import android.util.ArraySet;
import android.util.Log;
-import android.util.TimeUtils;
import android.util.proto.ProtoOutputStream;
import android.widget.RemoteViews;
+
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.server.EventLogTags;
import com.android.server.LocalServices;
import com.android.server.uri.UriGrantsManagerInternal;
+
import dalvik.annotation.optimization.NeverCompile;
import java.io.PrintWriter;
@@ -501,8 +502,8 @@
pw.println(prefix + "uid=" + getSbn().getUid() + " userId=" + getSbn().getUserId());
pw.println(prefix + "opPkg=" + getSbn().getOpPkg());
pw.println(prefix + "icon=" + notification.getSmallIcon());
- pw.println(prefix + "flags=0x" + Integer.toHexString(notification.flags));
- pw.println(prefix + "originalFlags=0x" + Integer.toHexString(mOriginalFlags));
+ pw.println(prefix + "flags=" + Notification.flagsToString(notification.flags));
+ pw.println(prefix + "originalFlags=" + Notification.flagsToString(mOriginalFlags));
pw.println(prefix + "pri=" + notification.priority);
pw.println(prefix + "key=" + getSbn().getKey());
pw.println(prefix + "seen=" + mStats.hasSeen());
@@ -537,8 +538,7 @@
pw.println(prefix + "mInterruptionTimeMs=" + mInterruptionTimeMs);
pw.println(prefix + "mSuppressedVisualEffects= " + mSuppressedVisualEffects);
if (mPreChannelsNotification) {
- pw.println(prefix + String.format("defaults=0x%08x flags=0x%08x",
- notification.defaults, notification.flags));
+ pw.println(prefix + "defaults=" + Notification.defaultsToString(notification.defaults));
pw.println(prefix + "n.sound=" + notification.sound);
pw.println(prefix + "n.audioStreamType=" + notification.audioStreamType);
pw.println(prefix + "n.audioAttributes=" + notification.audioAttributes);
@@ -1165,7 +1165,11 @@
mVibration = calculateVibration();
if (restrictAudioAttributesCall() || restrictAudioAttributesAlarm()
|| restrictAudioAttributesMedia()) {
- mAttributes = channel.getAudioAttributes();
+ if (channel.getAudioAttributes() != null) {
+ mAttributes = channel.getAudioAttributes();
+ } else {
+ mAttributes = Notification.AUDIO_ATTRIBUTES_DEFAULT;
+ }
}
}
}
diff --git a/services/core/java/com/android/server/notification/ZenModeHelper.java b/services/core/java/com/android/server/notification/ZenModeHelper.java
index 4a3812b..4747689 100644
--- a/services/core/java/com/android/server/notification/ZenModeHelper.java
+++ b/services/core/java/com/android/server/notification/ZenModeHelper.java
@@ -1105,9 +1105,12 @@
* {@link ZenRule#equals} or {@link AutomaticZenRule#equals}, for various reasons:
* <ul>
* <li>some metadata-related fields are not considered
- * <li>some fields (like {@code condition} are always reset, and ignored for this result
+ * <li>some fields (like {@code condition} are normally reset, and ignored for this result
* <li>an app may provide changes that are not actually applied, as described above
* </ul>
+ *
+ * <p>The rule's {@link ZenRule#condition} is cleared (meaning that an active rule will be
+ * deactivated) unless the update has origin == {@link ZenModeConfig#UPDATE_ORIGIN_USER}.
*/
private boolean populateZenRule(String pkg, AutomaticZenRule azr, ZenRule rule,
@ConfigChangeOrigin int origin, boolean isNew) {
@@ -1122,11 +1125,20 @@
modified = true;
}
- rule.condition = null;
if (!Objects.equals(rule.conditionId, azr.getConditionId())) {
rule.conditionId = azr.getConditionId();
modified = true;
}
+ boolean shouldPreserveCondition = Flags.modesApi() && Flags.modesUi()
+ && !isNew && origin == UPDATE_ORIGIN_USER
+ && rule.enabled == azr.isEnabled()
+ && rule.conditionId != null && rule.condition != null
+ && rule.conditionId.equals(rule.condition.id);
+ if (!shouldPreserveCondition) {
+ // Do not update 'modified'. If only this changes we treat it as a no-op updateAZR.
+ rule.condition = null;
+ }
+
if (rule.enabled != azr.isEnabled()) {
rule.enabled = azr.isEnabled();
rule.snoozing = false;
diff --git a/services/core/java/com/android/server/notification/flags.aconfig b/services/core/java/com/android/server/notification/flags.aconfig
index 2859871..af3db6c 100644
--- a/services/core/java/com/android/server/notification/flags.aconfig
+++ b/services/core/java/com/android/server/notification/flags.aconfig
@@ -101,3 +101,30 @@
description: "Stores restore data for not-yet-installed pkgs for 48 hours"
bug: "334999659"
}
+
+flag {
+ name: "trace_cancel_events"
+ namespace: "systemui"
+ description: "Adds performance tracing for binder cancel calls"
+ bug: "331677193"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
+
+flag {
+ name: "exit_invalid_cancel_early"
+ namespace: "systemui"
+ description: "aborts cancel binder events early if notif doesn't exist"
+ bug: "331677193"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
+
+flag {
+ name: "use_ipcdatacache_channels"
+ namespace: "systemui"
+ description: "Adds an IPCDataCache for notification channel/group lookups"
+ bug: "331677193"
+}
diff --git a/services/core/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceManagerService.java b/services/core/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceManagerService.java
index 8f6aa95..99401a1 100644
--- a/services/core/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceManagerService.java
+++ b/services/core/java/com/android/server/ondeviceintelligence/OnDeviceIntelligenceManagerService.java
@@ -207,8 +207,9 @@
return;
}
ensureRemoteIntelligenceServiceInitialized();
+ int callerUid = Binder.getCallingUid();
mRemoteOnDeviceIntelligenceService.run(
- service -> service.getFeature(Binder.getCallingUid(), id, featureCallback));
+ service -> service.getFeature(callerUid, id, featureCallback));
}
@Override
@@ -227,8 +228,9 @@
return;
}
ensureRemoteIntelligenceServiceInitialized();
+ int callerUid = Binder.getCallingUid();
mRemoteOnDeviceIntelligenceService.run(
- service -> service.listFeatures(Binder.getCallingUid(),
+ service -> service.listFeatures(callerUid,
listFeaturesCallback));
}
@@ -250,8 +252,9 @@
return;
}
ensureRemoteIntelligenceServiceInitialized();
+ int callerUid = Binder.getCallingUid();
mRemoteOnDeviceIntelligenceService.run(
- service -> service.getFeatureDetails(Binder.getCallingUid(), feature,
+ service -> service.getFeatureDetails(callerUid, feature,
featureDetailsCallback));
}
@@ -272,8 +275,9 @@
PersistableBundle.EMPTY);
}
ensureRemoteIntelligenceServiceInitialized();
+ int callerUid = Binder.getCallingUid();
mRemoteOnDeviceIntelligenceService.run(
- service -> service.requestFeatureDownload(Binder.getCallingUid(), feature,
+ service -> service.requestFeatureDownload(callerUid, feature,
wrapCancellationFuture(cancellationSignalFuture),
downloadCallback));
}
@@ -301,9 +305,9 @@
PersistableBundle.EMPTY);
}
ensureRemoteInferenceServiceInitialized();
-
+ int callerUid = Binder.getCallingUid();
result = mRemoteInferenceService.post(
- service -> service.requestTokenInfo(Binder.getCallingUid(), feature,
+ service -> service.requestTokenInfo(callerUid, feature,
request,
wrapCancellationFuture(cancellationSignalFuture),
wrapWithValidation(tokenInfoCallback)));
@@ -340,8 +344,9 @@
PersistableBundle.EMPTY);
}
ensureRemoteInferenceServiceInitialized();
+ int callerUid = Binder.getCallingUid();
result = mRemoteInferenceService.post(
- service -> service.processRequest(Binder.getCallingUid(), feature,
+ service -> service.processRequest(callerUid, feature,
request,
requestType,
wrapCancellationFuture(cancellationSignalFuture),
@@ -379,8 +384,9 @@
PersistableBundle.EMPTY);
}
ensureRemoteInferenceServiceInitialized();
+ int callerUid = Binder.getCallingUid();
result = mRemoteInferenceService.post(
- service -> service.processRequestStreaming(Binder.getCallingUid(),
+ service -> service.processRequestStreaming(callerUid,
feature,
request, requestType,
wrapCancellationFuture(cancellationSignalFuture),
diff --git a/services/core/java/com/android/server/pm/ComputerEngine.java b/services/core/java/com/android/server/pm/ComputerEngine.java
index 2005b17..6a25f64 100644
--- a/services/core/java/com/android/server/pm/ComputerEngine.java
+++ b/services/core/java/com/android/server/pm/ComputerEngine.java
@@ -584,8 +584,8 @@
list = new ArrayList<>(1);
list.add(ri);
PackageManagerServiceUtils.applyEnforceIntentFilterMatching(
- mInjector.getCompatibility(), mComponentResolver,
- list, false, intent, resolvedType, filterCallingUid);
+ mInjector.getCompatibility(), this, list, false, intent,
+ resolvedType, filterCallingUid);
}
}
} else {
@@ -609,13 +609,15 @@
}
list = lockedResult.result;
}
+ PackageManagerServiceUtils.applyNullActionBlocking(
+ mInjector.getCompatibility(), this, list, false, intent, filterCallingUid);
}
if (originalIntent != null) {
// We also have to ensure all components match the original intent
PackageManagerServiceUtils.applyEnforceIntentFilterMatching(
- mInjector.getCompatibility(), mComponentResolver,
- list, false, originalIntent, resolvedType, filterCallingUid);
+ mInjector.getCompatibility(), this, list, false, originalIntent,
+ resolvedType, filterCallingUid);
}
return skipPostResolution ? list : applyPostResolutionFilter(
@@ -698,20 +700,22 @@
list = new ArrayList<>(1);
list.add(ri);
PackageManagerServiceUtils.applyEnforceIntentFilterMatching(
- mInjector.getCompatibility(), mComponentResolver,
- list, false, intent, resolvedType, callingUid);
+ mInjector.getCompatibility(), this, list, false, intent,
+ resolvedType, callingUid);
}
}
} else {
list = queryIntentServicesInternalBody(intent, resolvedType, flags,
userId, callingUid, instantAppPkgName);
+ PackageManagerServiceUtils.applyNullActionBlocking(
+ mInjector.getCompatibility(), this, list, false, intent, callingUid);
}
if (originalIntent != null) {
// We also have to ensure all components match the original intent
PackageManagerServiceUtils.applyEnforceIntentFilterMatching(
- mInjector.getCompatibility(), mComponentResolver,
- list, false, originalIntent, resolvedType, callingUid);
+ mInjector.getCompatibility(), this, list, false, originalIntent,
+ resolvedType, callingUid);
}
return list;
diff --git a/services/core/java/com/android/server/pm/PackageManagerNative.java b/services/core/java/com/android/server/pm/PackageManagerNative.java
index d035084..66ecd6e 100644
--- a/services/core/java/com/android/server/pm/PackageManagerNative.java
+++ b/services/core/java/com/android/server/pm/PackageManagerNative.java
@@ -68,6 +68,11 @@
}
}
+ @Override
+ public int getPackageUid(String packageName, long flags, int userId) throws RemoteException {
+ return mPm.snapshotComputer().getPackageUid(packageName, flags, userId);
+ }
+
// NB: this differentiates between preloads and sideloads
@Override
public String getInstallerForPackage(String packageName) throws RemoteException {
diff --git a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java
index 9484d0d..5f04a0b 100644
--- a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java
+++ b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java
@@ -27,6 +27,7 @@
import static com.android.internal.content.NativeLibraryHelper.LIB64_DIR_NAME;
import static com.android.internal.content.NativeLibraryHelper.LIB_DIR_NAME;
import static com.android.internal.util.FrameworkStatsLog.UNSAFE_INTENT_EVENT_REPORTED__EVENT_TYPE__EXPLICIT_INTENT_FILTER_UNMATCH;
+import static com.android.internal.util.FrameworkStatsLog.UNSAFE_INTENT_EVENT_REPORTED__EVENT_TYPE__NULL_ACTION_MATCH;
import static com.android.server.LocalManagerRegistry.ManagerNotFoundException;
import static com.android.server.pm.PackageInstallerSession.APP_METADATA_FILE_ACCESS_MODE;
import static com.android.server.pm.PackageInstallerSession.getAppMetadataSizeLimit;
@@ -115,6 +116,7 @@
import com.android.server.pm.pkg.AndroidPackageSplit;
import com.android.server.pm.pkg.PackageStateInternal;
import com.android.server.pm.resolution.ComponentResolverApi;
+import com.android.server.pm.snapshot.PackageDataSnapshot;
import com.android.server.pm.verify.domain.DomainVerificationManagerInternal;
import dalvik.system.VMRuntime;
@@ -1198,9 +1200,77 @@
return (ps.getFlags() & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0;
}
- // Static to give access to ComputeEngine
+ private static ParsedMainComponent componentInfoToComponent(
+ ComponentInfo info, ComponentResolverApi resolver, boolean isReceiver) {
+ if (info instanceof ActivityInfo) {
+ if (isReceiver) {
+ return resolver.getReceiver(info.getComponentName());
+ } else {
+ return resolver.getActivity(info.getComponentName());
+ }
+ } else if (info instanceof ServiceInfo) {
+ return resolver.getService(info.getComponentName());
+ } else {
+ // This shall never happen
+ throw new IllegalArgumentException("Unsupported component type");
+ }
+ }
+
+ /**
+ * Under the correct conditions, remove components if the intent has null action.
+ *
+ * `compat` and `snapshot` may be null when this method is called in ActivityManagerService
+ * CTS tests. The code in this method will properly avoid control flows using these arguments.
+ */
+ public static void applyNullActionBlocking(
+ @Nullable PlatformCompat compat, @Nullable PackageDataSnapshot snapshot,
+ List componentList, boolean isReceiver, Intent intent, int filterCallingUid) {
+ if (ActivityManager.canAccessUnexportedComponents(filterCallingUid)) return;
+
+ final Computer computer = (Computer) snapshot;
+ ComponentResolverApi resolver = null;
+
+ final boolean enforce = android.security.Flags.blockNullActionIntents()
+ && (compat == null || compat.isChangeEnabledByUidInternal(
+ IntentFilter.BLOCK_NULL_ACTION_INTENTS, filterCallingUid));
+
+ for (int i = componentList.size() - 1; i >= 0; --i) {
+ boolean match = true;
+
+ Object c = componentList.get(i);
+ if (c instanceof ResolveInfo resolveInfo) {
+ if (computer == null) {
+ // PackageManagerService is not started
+ return;
+ }
+ if (resolver == null) {
+ resolver = computer.getComponentResolver();
+ }
+ final ParsedMainComponent comp = componentInfoToComponent(
+ resolveInfo.getComponentInfo(), resolver, isReceiver);
+ if (!comp.getIntents().isEmpty() && intent.getAction() == null) {
+ match = false;
+ }
+ } else if (c instanceof IntentFilter) {
+ if (intent.getAction() == null) {
+ match = false;
+ }
+ }
+
+ if (!match) {
+ ActivityManagerUtils.logUnsafeIntentEvent(
+ UNSAFE_INTENT_EVENT_REPORTED__EVENT_TYPE__NULL_ACTION_MATCH,
+ filterCallingUid, intent, null, enforce);
+ if (enforce) {
+ Slog.w(TAG, "Blocking intent with null action: " + intent);
+ componentList.remove(i);
+ }
+ }
+ }
+ }
+
public static void applyEnforceIntentFilterMatching(
- PlatformCompat compat, ComponentResolverApi resolver,
+ PlatformCompat compat, PackageDataSnapshot snapshot,
List<ResolveInfo> resolveInfos, boolean isReceiver,
Intent intent, String resolvedType, int filterCallingUid) {
if (DISABLE_ENFORCE_INTENTS_TO_MATCH_INTENT_FILTERS.get()) return;
@@ -1208,13 +1278,19 @@
// Do not enforce filter matching when the caller is system or root
if (ActivityManager.canAccessUnexportedComponents(filterCallingUid)) return;
+ final Computer computer = (Computer) snapshot;
+ final ComponentResolverApi resolver = computer.getComponentResolver();
+
final Printer logPrinter = DEBUG_INTENT_MATCHING
? new LogPrinter(Log.VERBOSE, TAG, Log.LOG_ID_SYSTEM)
: null;
- final boolean enforce = android.security.Flags.enforceIntentFilterMatch()
+ final boolean enforceMatch = android.security.Flags.enforceIntentFilterMatch()
&& compat.isChangeEnabledByUidInternal(
ENFORCE_INTENTS_TO_MATCH_INTENT_FILTERS, filterCallingUid);
+ final boolean blockNullAction = android.security.Flags.blockNullActionIntents()
+ && compat.isChangeEnabledByUidInternal(
+ IntentFilter.BLOCK_NULL_ACTION_INTENTS, filterCallingUid);
for (int i = resolveInfos.size() - 1; i >= 0; --i) {
final ComponentInfo info = resolveInfos.get(i).getComponentInfo();
@@ -1224,40 +1300,53 @@
continue;
}
- final ParsedMainComponent comp;
- if (info instanceof ActivityInfo) {
- if (isReceiver) {
- comp = resolver.getReceiver(info.getComponentName());
- } else {
- comp = resolver.getActivity(info.getComponentName());
- }
- } else if (info instanceof ServiceInfo) {
- comp = resolver.getService(info.getComponentName());
- } else {
- // This shall never happen
- throw new IllegalArgumentException("Unsupported component type");
- }
+ final ParsedMainComponent comp = componentInfoToComponent(info, resolver, isReceiver);
if (comp == null || comp.getIntents().isEmpty()) {
continue;
}
- boolean match = false;
- for (int j = 0, size = comp.getIntents().size(); j < size; ++j) {
- IntentFilter intentFilter = comp.getIntents().get(j).getIntentFilter();
- if (IntentResolver.intentMatchesFilter(intentFilter, intent, resolvedType)) {
- match = true;
- break;
+ Boolean match = null;
+
+ if (intent.getAction() == null) {
+ ActivityManagerUtils.logUnsafeIntentEvent(
+ UNSAFE_INTENT_EVENT_REPORTED__EVENT_TYPE__NULL_ACTION_MATCH,
+ filterCallingUid, intent, resolvedType, enforceMatch && blockNullAction);
+ if (blockNullAction) {
+ // Skip intent filter matching if blocking null action
+ match = false;
}
}
- if (!match) {
+
+ if (match == null) {
+ // Check if any intent filter matches
+ for (int j = 0, size = comp.getIntents().size(); j < size; ++j) {
+ IntentFilter intentFilter = comp.getIntents().get(j).getIntentFilter();
+ if (IntentResolver.intentMatchesFilter(intentFilter, intent, resolvedType)) {
+ match = true;
+ break;
+ }
+ }
+ }
+
+ // At this point, the value `match` has the following states:
+ // null : Intent does not match any intent filter
+ // false: Null action intent detected AND blockNullAction == true
+ // true : The intent matches at least one intent filter
+
+ if (match == null) {
ActivityManagerUtils.logUnsafeIntentEvent(
UNSAFE_INTENT_EVENT_REPORTED__EVENT_TYPE__EXPLICIT_INTENT_FILTER_UNMATCH,
- filterCallingUid, intent, resolvedType, enforce);
+ filterCallingUid, intent, resolvedType, enforceMatch);
+ match = false;
+ }
+
+ if (!match) {
+ // All non-matching intents has to be marked accordingly
if (android.security.Flags.enforceIntentFilterMatch()) {
intent.addExtendedFlags(Intent.EXTENDED_FLAG_FILTER_MISMATCH);
}
- if (enforce) {
+ if (enforceMatch) {
Slog.w(TAG, "Intent does not match component's intent filter: " + intent);
Slog.w(TAG, "Access blocked: " + comp.getComponentName());
if (DEBUG_INTENT_MATCHING) {
@@ -1271,7 +1360,6 @@
}
}
-
/**
* Do NOT use for intent resolution filtering. That should be done with
* {@link DomainVerificationManagerInternal#filterToApprovedApp(Intent, List, int, Function)}.
diff --git a/services/core/java/com/android/server/pm/ResolveIntentHelper.java b/services/core/java/com/android/server/pm/ResolveIntentHelper.java
index b664e39..309a448 100644
--- a/services/core/java/com/android/server/pm/ResolveIntentHelper.java
+++ b/services/core/java/com/android/server/pm/ResolveIntentHelper.java
@@ -458,7 +458,7 @@
list = new ArrayList<>(1);
list.add(ri);
PackageManagerServiceUtils.applyEnforceIntentFilterMatching(
- mPlatformCompat, componentResolver, list, true, intent,
+ mPlatformCompat, computer, list, true, intent,
resolvedType, filterCallingUid);
}
}
@@ -479,12 +479,14 @@
list = result;
}
}
+ PackageManagerServiceUtils.applyNullActionBlocking(
+ mPlatformCompat, computer, list, true, intent, filterCallingUid);
}
if (originalIntent != null) {
// We also have to ensure all components match the original intent
PackageManagerServiceUtils.applyEnforceIntentFilterMatching(
- mPlatformCompat, componentResolver,
+ mPlatformCompat, computer,
list, true, originalIntent, resolvedType, filterCallingUid);
}
diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
index 20c5b5f..28254d0 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
@@ -462,8 +462,8 @@
}
@Override
- public int getNumRegisteredAttributionSources(int uid) {
- return mAttributionSourceRegistry.getNumRegisteredAttributionSources(uid);
+ public int getRegisteredAttributionSourceCount(int uid) {
+ return mAttributionSourceRegistry.getRegisteredAttributionSourceCount(uid);
}
@Override
@@ -943,7 +943,7 @@
}
}
- public int getNumRegisteredAttributionSources(int uid) {
+ public int getRegisteredAttributionSourceCount(int uid) {
mContext.enforceCallingOrSelfPermission(UPDATE_APP_OPS_STATS,
"getting the number of registered AttributionSources requires "
+ "UPDATE_APP_OPS_STATS");
@@ -952,14 +952,13 @@
System.gc();
System.gc();
synchronized (mLock) {
- int[] numForUid = { 0 };
- mAttributions.forEach((key, value) -> {
- if (value.getUid() == uid) {
- numForUid[0]++;
+ int numForUid = 0;
+ for (Map.Entry<IBinder, AttributionSource> entry : mAttributions.entrySet()) {
+ if (entry.getValue().getUid() == uid) {
+ numForUid++;
}
-
- });
- return numForUid[0];
+ }
+ return numForUid;
}
}
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index b4919a4..db18276 100644
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -76,6 +76,7 @@
import static android.view.contentprotection.flags.Flags.createAccessibilityOverlayAppOpEnabled;
import static com.android.hardware.input.Flags.emojiAndScreenshotKeycodesAvailable;
+import static com.android.server.flags.Flags.newBugreportKeyboardShortcut;
import static com.android.internal.config.sysui.SystemUiDeviceConfigFlags.SCREENSHOT_KEYCHORD_DELAY;
import static com.android.server.policy.WindowManagerPolicy.WindowManagerFuncs.CAMERA_LENS_COVERED;
import static com.android.server.policy.WindowManagerPolicy.WindowManagerFuncs.CAMERA_LENS_COVER_ABSENT;
@@ -466,8 +467,8 @@
// Assigned on main thread, accessed on UI thread
volatile VrManagerInternal mVrManagerInternal;
- /** If true, hitting shift & menu will broadcast Intent.ACTION_BUG_REPORT */
- boolean mEnableShiftMenuBugReports = false;
+ /** If true, can use a keyboard shortcut to trigger a bugreport. */
+ boolean mEnableBugReportKeyboardShortcut = false;
/** Controller that supports enabling an AccessibilityService by holding down the volume keys */
private AccessibilityShortcutController mAccessibilityShortcutController;
@@ -2303,7 +2304,7 @@
"PhoneWindowManager.mBroadcastWakeLock");
mPowerKeyWakeLock = mPowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
"PhoneWindowManager.mPowerKeyWakeLock");
- mEnableShiftMenuBugReports = "1".equals(SystemProperties.get("ro.debuggable"));
+ mEnableBugReportKeyboardShortcut = "1".equals(SystemProperties.get("ro.debuggable"));
mLidKeyboardAccessibility = mContext.getResources().getInteger(
com.android.internal.R.integer.config_lidKeyboardAccessibility);
mLidNavigationAccessibility = mContext.getResources().getInteger(
@@ -2360,8 +2361,7 @@
mDisplayFoldController = DisplayFoldController.create(mContext, DEFAULT_DISPLAY);
- mAccessibilityManager = (AccessibilityManager) mContext.getSystemService(
- Context.ACCESSIBILITY_SERVICE);
+ mAccessibilityManager = mContext.getSystemService(AccessibilityManager.class);
// register for dock events
IntentFilter filter = new IntentFilter();
@@ -3409,19 +3409,6 @@
switch (keyCode) {
case KeyEvent.KEYCODE_HOME:
return handleHomeShortcuts(focusedToken, event);
- case KeyEvent.KEYCODE_MENU:
- // Hijack modified menu keys for debugging features
- final int chordBug = KeyEvent.META_SHIFT_ON;
-
- if (mEnableShiftMenuBugReports && firstDown
- && (metaState & chordBug) == chordBug) {
- Intent intent = new Intent(Intent.ACTION_BUG_REPORT);
- mContext.sendOrderedBroadcastAsUser(intent, UserHandle.CURRENT,
- null, null, null, 0, null, null);
- logKeyboardSystemsEvent(event, KeyboardLogEvent.TRIGGER_BUG_REPORT);
- return true;
- }
- break;
case KeyEvent.KEYCODE_RECENT_APPS:
if (firstDown) {
showRecentApps(false /* triggeredFromAltTab */);
@@ -3487,6 +3474,19 @@
}
break;
case KeyEvent.KEYCODE_DEL:
+ if (newBugreportKeyboardShortcut()) {
+ if (mEnableBugReportKeyboardShortcut && firstDown
+ && event.isMetaPressed() && event.isCtrlPressed()) {
+ try {
+ mActivityManagerService.requestInteractiveBugReport();
+ } catch (RemoteException e) {
+ Slog.d(TAG, "Error taking bugreport", e);
+ }
+ logKeyboardSystemsEvent(event, KeyboardLogEvent.TRIGGER_BUG_REPORT);
+ return true;
+ }
+ }
+ // fall through
case KeyEvent.KEYCODE_ESCAPE:
if (firstDown && event.isMetaPressed()) {
logKeyboardSystemsEvent(event, KeyboardLogEvent.BACK);
diff --git a/services/core/java/com/android/server/power/hint/Android.bp b/services/core/java/com/android/server/power/hint/Android.bp
index d7dd902..6dadf8f 100644
--- a/services/core/java/com/android/server/power/hint/Android.bp
+++ b/services/core/java/com/android/server/power/hint/Android.bp
@@ -11,3 +11,10 @@
name: "power_hint_flags_lib",
aconfig_declarations: "power_hint_flags",
}
+
+java_aconfig_library {
+ name: "power_hint_flags_lib_host",
+ aconfig_declarations: "power_hint_flags",
+ host_supported: true,
+ defaults: ["framework-minus-apex-aconfig-java-defaults"],
+}
diff --git a/services/core/java/com/android/server/power/hint/HintManagerService.java b/services/core/java/com/android/server/power/hint/HintManagerService.java
index 101983e..6e17fd3 100644
--- a/services/core/java/com/android/server/power/hint/HintManagerService.java
+++ b/services/core/java/com/android/server/power/hint/HintManagerService.java
@@ -20,11 +20,14 @@
import static com.android.server.power.hint.Flags.powerhintThreadCleanup;
import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.app.ActivityManager;
import android.app.ActivityManagerInternal;
import android.app.StatsManager;
import android.app.UidObserver;
import android.content.Context;
+import android.hardware.power.SessionConfig;
+import android.hardware.power.SessionTag;
import android.hardware.power.WorkDuration;
import android.os.Binder;
import android.os.Handler;
@@ -67,6 +70,7 @@
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
/** An hint service implementation that runs in System Server process. */
public final class HintManagerService extends SystemService {
@@ -87,7 +91,7 @@
@GuardedBy("mLock")
private final ArrayMap<Integer, ArrayMap<IBinder, ArraySet<AppHintSession>>> mActiveSessions;
- /** Lock to protect HAL handles and listen list. */
+ /** Lock to protect mActiveSessions. */
private final Object mLock = new Object();
@GuardedBy("mNonIsolatedTidsLock")
@@ -104,6 +108,8 @@
private final Context mContext;
+ private AtomicBoolean mConfigCreationSupport = new AtomicBoolean(true);
+
private static final String PROPERTY_SF_ENABLE_CPU_HINT = "debug.sf.enable_adpf_cpu_hint";
private static final String PROPERTY_HWUI_ENABLE_HINT_MANAGER = "debug.hwui.use_hint_manager";
@@ -217,6 +223,9 @@
private static native long nativeCreateHintSession(int tgid, int uid, int[] tids,
long durationNanos);
+ private static native long nativeCreateHintSessionWithConfig(int tgid, int uid, int[] tids,
+ long durationNanos, int tag, SessionConfig config);
+
private static native void nativePauseHintSession(long halPtr);
private static native void nativeResumeHintSession(long halPtr);
@@ -253,6 +262,12 @@
return nativeCreateHintSession(tgid, uid, tids, durationNanos);
}
+ /** Wrapper for HintManager.nativeCreateHintSessionWithConfig */
+ public long halCreateHintSessionWithConfig(
+ int tgid, int uid, int[] tids, long durationNanos, int tag, SessionConfig config) {
+ return nativeCreateHintSessionWithConfig(tgid, uid, tids, durationNanos, tag, config);
+ }
+
/** Wrapper for HintManager.nativePauseHintSession */
public void halPauseHintSession(long halPtr) {
nativePauseHintSession(halPtr);
@@ -612,8 +627,12 @@
@VisibleForTesting
final class BinderService extends IHintManager.Stub {
@Override
- public IHintSession createHintSession(IBinder token, int[] tids, long durationNanos) {
- if (!isHalSupported()) return null;
+ public IHintSession createHintSessionWithConfig(@NonNull IBinder token,
+ @NonNull int[] tids, long durationNanos, @SessionTag int tag,
+ @Nullable SessionConfig config) {
+ if (!isHalSupported()) {
+ throw new UnsupportedOperationException("PowerHAL is not supported!");
+ }
java.util.Objects.requireNonNull(token);
java.util.Objects.requireNonNull(tids);
@@ -634,8 +653,35 @@
throw new SecurityException(errMsg);
}
- long halSessionPtr = mNativeWrapper.halCreateHintSession(callingTgid, callingUid,
- tids, durationNanos);
+ Long halSessionPtr = null;
+ if (mConfigCreationSupport.get()) {
+ try {
+ halSessionPtr = mNativeWrapper.halCreateHintSessionWithConfig(
+ callingTgid, callingUid, tids, durationNanos, tag, config);
+ } catch (UnsupportedOperationException e) {
+ mConfigCreationSupport.set(false);
+ } catch (IllegalStateException e) {
+ Slog.e("createHintSessionWithConfig failed: ", e.getMessage());
+ throw new IllegalStateException(
+ "createHintSessionWithConfig failed: " + e.getMessage());
+ }
+ }
+
+ if (halSessionPtr == null) {
+ try {
+ halSessionPtr = mNativeWrapper.halCreateHintSession(callingTgid,
+ callingUid, tids, durationNanos);
+ } catch (UnsupportedOperationException e) {
+ Slog.w("createHintSession unsupported: ", e.getMessage());
+ throw new UnsupportedOperationException(
+ "createHintSession unsupported: " + e.getMessage());
+ } catch (IllegalStateException e) {
+ Slog.e("createHintSession failed: ", e.getMessage());
+ throw new IllegalStateException(
+ "createHintSession failed: " + e.getMessage());
+ }
+ }
+
if (powerhintThreadCleanup()) {
synchronized (mNonIsolatedTidsLock) {
for (int i = nonIsolated.size() - 1; i >= 0; i--) {
@@ -644,9 +690,6 @@
}
}
}
- if (halSessionPtr == 0) {
- return null;
- }
AppHintSession hs = new AppHintSession(callingUid, callingTgid, tids, token,
halSessionPtr, durationNanos);
diff --git a/services/core/java/com/android/server/power/stats/BatteryStatsImpl.java b/services/core/java/com/android/server/power/stats/BatteryStatsImpl.java
index 54cb9c9..49c4000 100644
--- a/services/core/java/com/android/server/power/stats/BatteryStatsImpl.java
+++ b/services/core/java/com/android/server/power/stats/BatteryStatsImpl.java
@@ -19,6 +19,7 @@
import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
import static android.net.NetworkCapabilities.TRANSPORT_WIFI;
import static android.os.BatteryStats.Uid.NUM_PROCESS_STATE;
+import static android.os.BatteryStats.Uid.NUM_WIFI_BATCHED_SCAN_BINS;
import static android.os.BatteryStatsManager.NUM_WIFI_STATES;
import static android.os.BatteryStatsManager.NUM_WIFI_SUPPL_STATES;
@@ -292,7 +293,25 @@
private int[] mCpuPowerBracketMap;
private final CpuPowerStatsCollector mCpuPowerStatsCollector;
private final MobileRadioPowerStatsCollector mMobileRadioPowerStatsCollector;
+ private final WifiPowerStatsCollector mWifiPowerStatsCollector;
private final SparseBooleanArray mPowerStatsCollectorEnabled = new SparseBooleanArray();
+ private final WifiPowerStatsCollector.WifiStatsRetriever mWifiStatsRetriever =
+ new WifiPowerStatsCollector.WifiStatsRetriever() {
+ @Override
+ public void retrieveWifiScanTimes(Callback callback) {
+ synchronized (BatteryStatsImpl.this) {
+ retrieveWifiScanTimesLocked(callback);
+ }
+ }
+
+ @Override
+ public long getWifiActiveDuration() {
+ synchronized (BatteryStatsImpl.this) {
+ return getGlobalWifiRunningTime(mClock.elapsedRealtime() * 1000,
+ STATS_SINCE_CHARGED) / 1000;
+ }
+ }
+ };
public LongSparseArray<SamplingTimer> getKernelMemoryStats() {
return mKernelMemoryStats;
@@ -501,6 +520,8 @@
TimeUnit.MINUTES.toMillis(1));
setPowerStatsThrottlePeriodMillis(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO,
TimeUnit.HOURS.toMillis(1));
+ setPowerStatsThrottlePeriodMillis(BatteryConsumer.POWER_COMPONENT_WIFI,
+ TimeUnit.HOURS.toMillis(1));
}
/**
@@ -1885,11 +1906,12 @@
}
private class PowerStatsCollectorInjector implements CpuPowerStatsCollector.Injector,
- MobileRadioPowerStatsCollector.Injector {
+ MobileRadioPowerStatsCollector.Injector, WifiPowerStatsCollector.Injector {
private PackageManager mPackageManager;
private PowerStatsCollector.ConsumedEnergyRetriever mConsumedEnergyRetriever;
private NetworkStatsManager mNetworkStatsManager;
private TelephonyManager mTelephonyManager;
+ private WifiManager mWifiManager;
void setContext(Context context) {
mPackageManager = context.getPackageManager();
@@ -1897,6 +1919,7 @@
LocalServices.getService(PowerStatsInternal.class));
mNetworkStatsManager = context.getSystemService(NetworkStatsManager.class);
mTelephonyManager = context.getSystemService(TelephonyManager.class);
+ mWifiManager = context.getSystemService(WifiManager.class);
}
@Override
@@ -1950,11 +1973,26 @@
}
@Override
+ public Supplier<NetworkStats> getWifiNetworkStatsSupplier() {
+ return () -> readWifiNetworkStatsLocked(mNetworkStatsManager);
+ }
+
+ @Override
+ public WifiPowerStatsCollector.WifiStatsRetriever getWifiStatsRetriever() {
+ return mWifiStatsRetriever;
+ }
+
+ @Override
public TelephonyManager getTelephonyManager() {
return mTelephonyManager;
}
@Override
+ public WifiManager getWifiManager() {
+ return mWifiManager;
+ }
+
+ @Override
public LongSupplier getCallDurationSupplier() {
return () -> mPhoneOnTimer.getTotalTimeLocked(mClock.elapsedRealtime() * 1000,
STATS_SINCE_CHARGED);
@@ -6354,7 +6392,11 @@
HistoryItem.STATE2_WIFI_ON_FLAG);
mWifiOn = true;
mWifiOnTimer.startRunningLocked(elapsedRealtimeMs);
- scheduleSyncExternalStatsLocked("wifi-off", ExternalStatsSync.UPDATE_WIFI);
+ if (mWifiPowerStatsCollector.isEnabled()) {
+ mWifiPowerStatsCollector.schedule();
+ } else {
+ scheduleSyncExternalStatsLocked("wifi-off", ExternalStatsSync.UPDATE_WIFI);
+ }
}
}
@@ -6365,7 +6407,11 @@
HistoryItem.STATE2_WIFI_ON_FLAG);
mWifiOn = false;
mWifiOnTimer.stopRunningLocked(elapsedRealtimeMs);
- scheduleSyncExternalStatsLocked("wifi-on", ExternalStatsSync.UPDATE_WIFI);
+ if (mWifiPowerStatsCollector.isEnabled()) {
+ mWifiPowerStatsCollector.schedule();
+ } else {
+ scheduleSyncExternalStatsLocked("wifi-on", ExternalStatsSync.UPDATE_WIFI);
+ }
}
}
@@ -6757,8 +6803,11 @@
.noteWifiRunningLocked(elapsedRealtimeMs);
}
}
-
- scheduleSyncExternalStatsLocked("wifi-running", ExternalStatsSync.UPDATE_WIFI);
+ if (mWifiPowerStatsCollector.isEnabled()) {
+ mWifiPowerStatsCollector.schedule();
+ } else {
+ scheduleSyncExternalStatsLocked("wifi-running", ExternalStatsSync.UPDATE_WIFI);
+ }
} else {
Log.w(TAG, "noteWifiRunningLocked -- called while WIFI running");
}
@@ -6827,7 +6876,11 @@
}
}
- scheduleSyncExternalStatsLocked("wifi-stopped", ExternalStatsSync.UPDATE_WIFI);
+ if (mWifiPowerStatsCollector.isEnabled()) {
+ mWifiPowerStatsCollector.schedule();
+ } else {
+ scheduleSyncExternalStatsLocked("wifi-stopped", ExternalStatsSync.UPDATE_WIFI);
+ }
} else {
Log.w(TAG, "noteWifiStoppedLocked -- called while WIFI not running");
}
@@ -6842,7 +6895,11 @@
}
mWifiState = wifiState;
mWifiStateTimer[wifiState].startRunningLocked(elapsedRealtimeMs);
- scheduleSyncExternalStatsLocked("wifi-state", ExternalStatsSync.UPDATE_WIFI);
+ if (mWifiPowerStatsCollector.isEnabled()) {
+ mWifiPowerStatsCollector.schedule();
+ } else {
+ scheduleSyncExternalStatsLocked("wifi-state", ExternalStatsSync.UPDATE_WIFI);
+ }
}
}
@@ -6965,6 +7022,25 @@
.noteWifiBatchedScanStoppedLocked(elapsedRealtimeMs);
}
+ private void retrieveWifiScanTimesLocked(
+ WifiPowerStatsCollector.WifiStatsRetriever.Callback callback) {
+ long elapsedTimeUs = mClock.elapsedRealtime() * 1000;
+ for (int i = mUidStats.size() - 1; i >= 0; i--) {
+ int uid = mUidStats.keyAt(i);
+ Uid uidStats = mUidStats.valueAt(i);
+ long scanTimeUs = uidStats.getWifiScanTime(elapsedTimeUs, STATS_SINCE_CHARGED);
+ long batchScanTimeUs = 0;
+ for (int bucket = 0; bucket < NUM_WIFI_BATCHED_SCAN_BINS; bucket++) {
+ batchScanTimeUs += uidStats.getWifiBatchedScanTime(bucket, elapsedTimeUs,
+ STATS_SINCE_CHARGED);
+ }
+ if (scanTimeUs != 0 || batchScanTimeUs != 0) {
+ callback.onWifiScanTime(uid, (scanTimeUs + 500) / 1000,
+ (batchScanTimeUs + 500) / 1000);
+ }
+ }
+ }
+
private int mWifiMulticastNesting = 0;
@GuardedBy("this")
@@ -11101,6 +11177,11 @@
BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO));
mMobileRadioPowerStatsCollector.addConsumer(this::recordPowerStats);
+ mWifiPowerStatsCollector = new WifiPowerStatsCollector(
+ mPowerStatsCollectorInjector, mBatteryStatsConfig.getPowerStatsThrottlePeriod(
+ BatteryConsumer.POWER_COMPONENT_WIFI));
+ mWifiPowerStatsCollector.addConsumer(this::recordPowerStats);
+
mStartCount++;
initTimersAndCounters();
mOnBattery = mOnBatteryInternal = false;
@@ -12095,10 +12176,10 @@
}
}
if (lastEntry != null) {
- delta.mRxBytes = entry.getRxBytes() - lastEntry.getRxBytes();
- delta.mRxPackets = entry.getRxPackets() - lastEntry.getRxPackets();
- delta.mTxBytes = entry.getTxBytes() - lastEntry.getTxBytes();
- delta.mTxPackets = entry.getTxPackets() - lastEntry.getTxPackets();
+ delta.mRxBytes = Math.max(0, entry.getRxBytes() - lastEntry.getRxBytes());
+ delta.mRxPackets = Math.max(0, entry.getRxPackets() - lastEntry.getRxPackets());
+ delta.mTxBytes = Math.max(0, entry.getTxBytes() - lastEntry.getTxBytes());
+ delta.mTxPackets = Math.max(0, entry.getTxPackets() - lastEntry.getTxPackets());
} else {
delta.mRxBytes = entry.getRxBytes();
delta.mRxPackets = entry.getRxPackets();
@@ -12119,6 +12200,10 @@
public void updateWifiState(@Nullable final WifiActivityEnergyInfo info,
final long consumedChargeUC, long elapsedRealtimeMs, long uptimeMs,
@NonNull NetworkStatsManager networkStatsManager) {
+ if (mWifiPowerStatsCollector.isEnabled()) {
+ return;
+ }
+
if (DEBUG_ENERGY) {
synchronized (mWifiNetworkLock) {
Slog.d(TAG, "Updating wifi stats: " + Arrays.toString(mWifiIfaces));
@@ -14507,6 +14592,10 @@
mPowerStatsCollectorEnabled.get(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO));
mMobileRadioPowerStatsCollector.schedule();
+ mWifiPowerStatsCollector.setEnabled(
+ mPowerStatsCollectorEnabled.get(BatteryConsumer.POWER_COMPONENT_WIFI));
+ mWifiPowerStatsCollector.schedule();
+
mSystemReady = true;
}
@@ -14521,6 +14610,8 @@
return mCpuPowerStatsCollector;
case BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO:
return mMobileRadioPowerStatsCollector;
+ case BatteryConsumer.POWER_COMPONENT_WIFI:
+ return mWifiPowerStatsCollector;
}
return null;
}
@@ -16056,6 +16147,7 @@
public void schedulePowerStatsSampleCollection() {
mCpuPowerStatsCollector.forceSchedule();
mMobileRadioPowerStatsCollector.forceSchedule();
+ mWifiPowerStatsCollector.forceSchedule();
}
/**
@@ -16074,6 +16166,7 @@
public void dumpStatsSample(PrintWriter pw) {
mCpuPowerStatsCollector.collectAndDump(pw);
mMobileRadioPowerStatsCollector.collectAndDump(pw);
+ mWifiPowerStatsCollector.collectAndDump(pw);
}
private final Runnable mWriteAsyncRunnable = () -> {
diff --git a/services/core/java/com/android/server/power/stats/BatteryUsageStatsProvider.java b/services/core/java/com/android/server/power/stats/BatteryUsageStatsProvider.java
index 97f0986..0d5eabc 100644
--- a/services/core/java/com/android/server/power/stats/BatteryUsageStatsProvider.java
+++ b/services/core/java/com/android/server/power/stats/BatteryUsageStatsProvider.java
@@ -87,7 +87,9 @@
mPowerCalculators.add(new PhonePowerCalculator(mPowerProfile));
}
}
- mPowerCalculators.add(new WifiPowerCalculator(mPowerProfile));
+ if (!mPowerStatsExporterEnabled.get(BatteryConsumer.POWER_COMPONENT_WIFI)) {
+ mPowerCalculators.add(new WifiPowerCalculator(mPowerProfile));
+ }
mPowerCalculators.add(new BluetoothPowerCalculator(mPowerProfile));
mPowerCalculators.add(new SensorPowerCalculator(
mContext.getSystemService(SensorManager.class)));
diff --git a/services/core/java/com/android/server/power/stats/WifiPowerStatsCollector.java b/services/core/java/com/android/server/power/stats/WifiPowerStatsCollector.java
new file mode 100644
index 0000000..6321053
--- /dev/null
+++ b/services/core/java/com/android/server/power/stats/WifiPowerStatsCollector.java
@@ -0,0 +1,328 @@
+/*
+ * 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.power.stats;
+
+import android.content.pm.PackageManager;
+import android.hardware.power.stats.EnergyConsumerType;
+import android.net.NetworkStats;
+import android.net.wifi.WifiManager;
+import android.os.BatteryConsumer;
+import android.os.Handler;
+import android.os.PersistableBundle;
+import android.os.connectivity.WifiActivityEnergyInfo;
+import android.util.Slog;
+import android.util.SparseArray;
+
+import com.android.internal.os.Clock;
+import com.android.internal.os.PowerStats;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.TimeUnit;
+import java.util.function.IntSupplier;
+import java.util.function.Supplier;
+
+public class WifiPowerStatsCollector extends PowerStatsCollector {
+ private static final String TAG = "WifiPowerStatsCollector";
+
+ private static final long WIFI_ACTIVITY_REQUEST_TIMEOUT = 20000;
+
+ private static final long ENERGY_UNSPECIFIED = -1;
+
+ interface WifiStatsRetriever {
+ interface Callback {
+ void onWifiScanTime(int uid, long scanTimeMs, long batchScanTimeMs);
+ }
+
+ void retrieveWifiScanTimes(Callback callback);
+ long getWifiActiveDuration();
+ }
+
+ interface Injector {
+ Handler getHandler();
+ Clock getClock();
+ PowerStatsUidResolver getUidResolver();
+ PackageManager getPackageManager();
+ ConsumedEnergyRetriever getConsumedEnergyRetriever();
+ IntSupplier getVoltageSupplier();
+ Supplier<NetworkStats> getWifiNetworkStatsSupplier();
+ WifiManager getWifiManager();
+ WifiStatsRetriever getWifiStatsRetriever();
+ }
+
+ private final Injector mInjector;
+
+ private WifiPowerStatsLayout mLayout;
+ private boolean mIsInitialized;
+ private boolean mPowerReportingSupported;
+
+ private PowerStats mPowerStats;
+ private long[] mDeviceStats;
+ private volatile WifiManager mWifiManager;
+ private volatile Supplier<NetworkStats> mNetworkStatsSupplier;
+ private volatile WifiStatsRetriever mWifiStatsRetriever;
+ private ConsumedEnergyRetriever mConsumedEnergyRetriever;
+ private IntSupplier mVoltageSupplier;
+ private int[] mEnergyConsumerIds = new int[0];
+ private WifiActivityEnergyInfo mLastWifiActivityInfo =
+ new WifiActivityEnergyInfo(0, 0, 0, 0, 0, 0);
+ private NetworkStats mLastNetworkStats;
+ private long[] mLastConsumedEnergyUws;
+ private int mLastVoltageMv;
+
+ private static class WifiScanTimes {
+ public long basicScanTimeMs;
+ public long batchedScanTimeMs;
+ }
+ private final WifiScanTimes mScanTimes = new WifiScanTimes();
+ private final SparseArray<WifiScanTimes> mLastScanTimes = new SparseArray<>();
+ private long mLastWifiActiveDuration;
+
+ public WifiPowerStatsCollector(Injector injector, long throttlePeriodMs) {
+ super(injector.getHandler(), throttlePeriodMs, injector.getUidResolver(),
+ injector.getClock());
+ mInjector = injector;
+ }
+
+ @Override
+ public void setEnabled(boolean enabled) {
+ if (enabled) {
+ PackageManager packageManager = mInjector.getPackageManager();
+ super.setEnabled(packageManager != null
+ && packageManager.hasSystemFeature(PackageManager.FEATURE_WIFI));
+ } else {
+ super.setEnabled(false);
+ }
+ }
+
+ private boolean ensureInitialized() {
+ if (mIsInitialized) {
+ return true;
+ }
+
+ if (!isEnabled()) {
+ return false;
+ }
+
+ mConsumedEnergyRetriever = mInjector.getConsumedEnergyRetriever();
+ mVoltageSupplier = mInjector.getVoltageSupplier();
+ mWifiManager = mInjector.getWifiManager();
+ mNetworkStatsSupplier = mInjector.getWifiNetworkStatsSupplier();
+ mWifiStatsRetriever = mInjector.getWifiStatsRetriever();
+ mPowerReportingSupported =
+ mWifiManager != null && mWifiManager.isEnhancedPowerReportingSupported();
+
+ mEnergyConsumerIds = mConsumedEnergyRetriever.getEnergyConsumerIds(EnergyConsumerType.WIFI);
+ mLastConsumedEnergyUws = new long[mEnergyConsumerIds.length];
+ Arrays.fill(mLastConsumedEnergyUws, ENERGY_UNSPECIFIED);
+
+ mLayout = new WifiPowerStatsLayout();
+ mLayout.addDeviceWifiActivity(mPowerReportingSupported);
+ mLayout.addDeviceSectionEnergyConsumers(mEnergyConsumerIds.length);
+ mLayout.addUidNetworkStats();
+ mLayout.addDeviceSectionUsageDuration();
+ mLayout.addDeviceSectionPowerEstimate();
+ mLayout.addUidSectionPowerEstimate();
+
+ PersistableBundle extras = new PersistableBundle();
+ mLayout.toExtras(extras);
+ PowerStats.Descriptor powerStatsDescriptor = new PowerStats.Descriptor(
+ BatteryConsumer.POWER_COMPONENT_WIFI, mLayout.getDeviceStatsArrayLength(),
+ null, 0, mLayout.getUidStatsArrayLength(),
+ extras);
+ mPowerStats = new PowerStats(powerStatsDescriptor);
+ mDeviceStats = mPowerStats.stats;
+
+ mIsInitialized = true;
+ return true;
+ }
+
+ @Override
+ protected PowerStats collectStats() {
+ if (!ensureInitialized()) {
+ return null;
+ }
+
+ if (mPowerReportingSupported) {
+ collectWifiActivityInfo();
+ } else {
+ collectWifiActivityStats();
+ }
+ collectNetworkStats();
+ collectWifiScanTime();
+
+ if (mEnergyConsumerIds.length != 0) {
+ collectEnergyConsumers();
+ }
+
+ return mPowerStats;
+ }
+
+ private void collectWifiActivityInfo() {
+ CompletableFuture<WifiActivityEnergyInfo> immediateFuture = new CompletableFuture<>();
+ mWifiManager.getWifiActivityEnergyInfoAsync(Runnable::run,
+ immediateFuture::complete);
+
+ WifiActivityEnergyInfo activityInfo;
+ try {
+ activityInfo = immediateFuture.get(WIFI_ACTIVITY_REQUEST_TIMEOUT,
+ TimeUnit.MILLISECONDS);
+ } catch (Exception e) {
+ Slog.e(TAG, "Cannot acquire WifiActivityEnergyInfo", e);
+ activityInfo = null;
+ }
+
+ if (activityInfo == null) {
+ return;
+ }
+
+ long rxDuration = activityInfo.getControllerRxDurationMillis()
+ - mLastWifiActivityInfo.getControllerRxDurationMillis();
+ long txDuration = activityInfo.getControllerTxDurationMillis()
+ - mLastWifiActivityInfo.getControllerTxDurationMillis();
+ long scanDuration = activityInfo.getControllerScanDurationMillis()
+ - mLastWifiActivityInfo.getControllerScanDurationMillis();
+ long idleDuration = activityInfo.getControllerIdleDurationMillis()
+ - mLastWifiActivityInfo.getControllerIdleDurationMillis();
+
+ mLayout.setDeviceRxTime(mDeviceStats, rxDuration);
+ mLayout.setDeviceTxTime(mDeviceStats, txDuration);
+ mLayout.setDeviceScanTime(mDeviceStats, scanDuration);
+ mLayout.setDeviceIdleTime(mDeviceStats, idleDuration);
+
+ mPowerStats.durationMs = rxDuration + txDuration + scanDuration + idleDuration;
+
+ mLastWifiActivityInfo = activityInfo;
+ }
+
+ private void collectWifiActivityStats() {
+ long duration = mWifiStatsRetriever.getWifiActiveDuration();
+ mLayout.setDeviceActiveTime(mDeviceStats, Math.max(0, duration - mLastWifiActiveDuration));
+ mLastWifiActiveDuration = duration;
+ mPowerStats.durationMs = duration;
+ }
+
+ private void collectNetworkStats() {
+ mPowerStats.uidStats.clear();
+
+ NetworkStats networkStats = mNetworkStatsSupplier.get();
+ if (networkStats == null) {
+ return;
+ }
+
+ List<BatteryStatsImpl.NetworkStatsDelta> delta =
+ BatteryStatsImpl.computeDelta(networkStats, mLastNetworkStats);
+ mLastNetworkStats = networkStats;
+ for (int i = delta.size() - 1; i >= 0; i--) {
+ BatteryStatsImpl.NetworkStatsDelta uidDelta = delta.get(i);
+ long rxBytes = uidDelta.getRxBytes();
+ long txBytes = uidDelta.getTxBytes();
+ long rxPackets = uidDelta.getRxPackets();
+ long txPackets = uidDelta.getTxPackets();
+ if (rxBytes == 0 && txBytes == 0 && rxPackets == 0 && txPackets == 0) {
+ continue;
+ }
+
+ int uid = mUidResolver.mapUid(uidDelta.getUid());
+ long[] stats = mPowerStats.uidStats.get(uid);
+ if (stats == null) {
+ stats = new long[mLayout.getUidStatsArrayLength()];
+ mPowerStats.uidStats.put(uid, stats);
+ mLayout.setUidRxBytes(stats, rxBytes);
+ mLayout.setUidTxBytes(stats, txBytes);
+ mLayout.setUidRxPackets(stats, rxPackets);
+ mLayout.setUidTxPackets(stats, txPackets);
+ } else {
+ mLayout.setUidRxBytes(stats, mLayout.getUidRxBytes(stats) + rxBytes);
+ mLayout.setUidTxBytes(stats, mLayout.getUidTxBytes(stats) + txBytes);
+ mLayout.setUidRxPackets(stats, mLayout.getUidRxPackets(stats) + rxPackets);
+ mLayout.setUidTxPackets(stats, mLayout.getUidTxPackets(stats) + txPackets);
+ }
+ }
+ }
+
+ private void collectWifiScanTime() {
+ mScanTimes.basicScanTimeMs = 0;
+ mScanTimes.batchedScanTimeMs = 0;
+ mWifiStatsRetriever.retrieveWifiScanTimes((uid, scanTimeMs, batchScanTimeMs) -> {
+ WifiScanTimes lastScanTimes = mLastScanTimes.get(uid);
+ if (lastScanTimes == null) {
+ lastScanTimes = new WifiScanTimes();
+ mLastScanTimes.put(uid, lastScanTimes);
+ }
+
+ long scanTimeDelta = Math.max(0, scanTimeMs - lastScanTimes.basicScanTimeMs);
+ long batchScanTimeDelta = Math.max(0,
+ batchScanTimeMs - lastScanTimes.batchedScanTimeMs);
+ if (scanTimeDelta != 0 || batchScanTimeDelta != 0) {
+ mScanTimes.basicScanTimeMs += scanTimeDelta;
+ mScanTimes.batchedScanTimeMs += batchScanTimeDelta;
+ uid = mUidResolver.mapUid(uid);
+ long[] stats = mPowerStats.uidStats.get(uid);
+ if (stats == null) {
+ stats = new long[mLayout.getUidStatsArrayLength()];
+ mPowerStats.uidStats.put(uid, stats);
+ mLayout.setUidScanTime(stats, scanTimeDelta);
+ mLayout.setUidBatchScanTime(stats, batchScanTimeDelta);
+ } else {
+ mLayout.setUidScanTime(stats, mLayout.getUidScanTime(stats) + scanTimeDelta);
+ mLayout.setUidBatchScanTime(stats,
+ mLayout.getUidBatchedScanTime(stats) + batchScanTimeDelta);
+ }
+ }
+ lastScanTimes.basicScanTimeMs = scanTimeMs;
+ lastScanTimes.batchedScanTimeMs = batchScanTimeMs;
+ });
+
+ mLayout.setDeviceBasicScanTime(mDeviceStats, mScanTimes.basicScanTimeMs);
+ mLayout.setDeviceBatchedScanTime(mDeviceStats, mScanTimes.batchedScanTimeMs);
+ }
+
+ private void collectEnergyConsumers() {
+ int voltageMv = mVoltageSupplier.getAsInt();
+ if (voltageMv <= 0) {
+ Slog.wtf(TAG, "Unexpected battery voltage (" + voltageMv
+ + " mV) when querying energy consumers");
+ return;
+ }
+
+ int averageVoltage = mLastVoltageMv != 0 ? (mLastVoltageMv + voltageMv) / 2 : voltageMv;
+ mLastVoltageMv = voltageMv;
+
+ long[] energyUws = mConsumedEnergyRetriever.getConsumedEnergyUws(mEnergyConsumerIds);
+ if (energyUws == null) {
+ return;
+ }
+
+ for (int i = energyUws.length - 1; i >= 0; i--) {
+ long energyDelta = mLastConsumedEnergyUws[i] != ENERGY_UNSPECIFIED
+ ? energyUws[i] - mLastConsumedEnergyUws[i] : 0;
+ if (energyDelta < 0) {
+ // Likely, restart of powerstats HAL
+ energyDelta = 0;
+ }
+ mLayout.setConsumedEnergy(mPowerStats.stats, i, uJtoUc(energyDelta, averageVoltage));
+ mLastConsumedEnergyUws[i] = energyUws[i];
+ }
+ }
+
+ @Override
+ protected void onUidRemoved(int uid) {
+ super.onUidRemoved(uid);
+ mLastScanTimes.remove(uid);
+ }
+}
diff --git a/services/core/java/com/android/server/power/stats/WifiPowerStatsLayout.java b/services/core/java/com/android/server/power/stats/WifiPowerStatsLayout.java
new file mode 100644
index 0000000..0fa6ec6
--- /dev/null
+++ b/services/core/java/com/android/server/power/stats/WifiPowerStatsLayout.java
@@ -0,0 +1,241 @@
+/*
+ * 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.power.stats;
+
+import android.annotation.NonNull;
+import android.os.PersistableBundle;
+
+import com.android.internal.os.PowerStats;
+
+public class WifiPowerStatsLayout extends PowerStatsLayout {
+ private static final String TAG = "WifiPowerStatsLayout";
+ private static final int UNSPECIFIED = -1;
+ private static final String EXTRA_POWER_REPORTING_SUPPORTED = "prs";
+ private static final String EXTRA_DEVICE_RX_TIME_POSITION = "dt-rx";
+ private static final String EXTRA_DEVICE_TX_TIME_POSITION = "dt-tx";
+ private static final String EXTRA_DEVICE_SCAN_TIME_POSITION = "dt-scan";
+ private static final String EXTRA_DEVICE_BASIC_SCAN_TIME_POSITION = "dt-basic-scan";
+ private static final String EXTRA_DEVICE_BATCHED_SCAN_TIME_POSITION = "dt-batch-scan";
+ private static final String EXTRA_DEVICE_IDLE_TIME_POSITION = "dt-idle";
+ private static final String EXTRA_DEVICE_ACTIVE_TIME_POSITION = "dt-on";
+ private static final String EXTRA_UID_RX_BYTES_POSITION = "urxb";
+ private static final String EXTRA_UID_TX_BYTES_POSITION = "utxb";
+ private static final String EXTRA_UID_RX_PACKETS_POSITION = "urxp";
+ private static final String EXTRA_UID_TX_PACKETS_POSITION = "utxp";
+ private static final String EXTRA_UID_SCAN_TIME_POSITION = "ut-scan";
+ private static final String EXTRA_UID_BATCH_SCAN_TIME_POSITION = "ut-bscan";
+
+ private boolean mPowerReportingSupported;
+ private int mDeviceRxTimePosition;
+ private int mDeviceTxTimePosition;
+ private int mDeviceIdleTimePosition;
+ private int mDeviceScanTimePosition;
+ private int mDeviceBasicScanTimePosition;
+ private int mDeviceBatchedScanTimePosition;
+ private int mDeviceActiveTimePosition;
+ private int mUidRxBytesPosition;
+ private int mUidTxBytesPosition;
+ private int mUidRxPacketsPosition;
+ private int mUidTxPacketsPosition;
+ private int mUidScanTimePosition;
+ private int mUidBatchScanTimePosition;
+
+ WifiPowerStatsLayout() {
+ }
+
+ WifiPowerStatsLayout(@NonNull PowerStats.Descriptor descriptor) {
+ super(descriptor);
+ }
+
+ void addDeviceWifiActivity(boolean powerReportingSupported) {
+ mPowerReportingSupported = powerReportingSupported;
+ if (mPowerReportingSupported) {
+ mDeviceActiveTimePosition = UNSPECIFIED;
+ mDeviceRxTimePosition = addDeviceSection(1);
+ mDeviceTxTimePosition = addDeviceSection(1);
+ mDeviceIdleTimePosition = addDeviceSection(1);
+ mDeviceScanTimePosition = addDeviceSection(1);
+ } else {
+ mDeviceActiveTimePosition = addDeviceSection(1);
+ mDeviceRxTimePosition = UNSPECIFIED;
+ mDeviceTxTimePosition = UNSPECIFIED;
+ mDeviceIdleTimePosition = UNSPECIFIED;
+ mDeviceScanTimePosition = UNSPECIFIED;
+ }
+ mDeviceBasicScanTimePosition = addDeviceSection(1);
+ mDeviceBatchedScanTimePosition = addDeviceSection(1);
+ }
+
+ void addUidNetworkStats() {
+ mUidRxBytesPosition = addUidSection(1);
+ mUidTxBytesPosition = addUidSection(1);
+ mUidRxPacketsPosition = addUidSection(1);
+ mUidTxPacketsPosition = addUidSection(1);
+ mUidScanTimePosition = addUidSection(1);
+ mUidBatchScanTimePosition = addUidSection(1);
+ }
+
+ public boolean isPowerReportingSupported() {
+ return mPowerReportingSupported;
+ }
+
+ public void setDeviceRxTime(long[] stats, long durationMillis) {
+ stats[mDeviceRxTimePosition] = durationMillis;
+ }
+
+ public long getDeviceRxTime(long[] stats) {
+ return stats[mDeviceRxTimePosition];
+ }
+
+ public void setDeviceTxTime(long[] stats, long durationMillis) {
+ stats[mDeviceTxTimePosition] = durationMillis;
+ }
+
+ public long getDeviceTxTime(long[] stats) {
+ return stats[mDeviceTxTimePosition];
+ }
+
+ public void setDeviceScanTime(long[] stats, long durationMillis) {
+ stats[mDeviceScanTimePosition] = durationMillis;
+ }
+
+ public long getDeviceScanTime(long[] stats) {
+ return stats[mDeviceScanTimePosition];
+ }
+
+ public void setDeviceBasicScanTime(long[] stats, long durationMillis) {
+ stats[mDeviceBasicScanTimePosition] = durationMillis;
+ }
+
+ public long getDeviceBasicScanTime(long[] stats) {
+ return stats[mDeviceBasicScanTimePosition];
+ }
+
+ public void setDeviceBatchedScanTime(long[] stats, long durationMillis) {
+ stats[mDeviceBatchedScanTimePosition] = durationMillis;
+ }
+
+ public long getDeviceBatchedScanTime(long[] stats) {
+ return stats[mDeviceBatchedScanTimePosition];
+ }
+
+ public void setDeviceIdleTime(long[] stats, long durationMillis) {
+ stats[mDeviceIdleTimePosition] = durationMillis;
+ }
+
+ public long getDeviceIdleTime(long[] stats) {
+ return stats[mDeviceIdleTimePosition];
+ }
+
+ public void setDeviceActiveTime(long[] stats, long durationMillis) {
+ stats[mDeviceActiveTimePosition] = durationMillis;
+ }
+
+ public long getDeviceActiveTime(long[] stats) {
+ return stats[mDeviceActiveTimePosition];
+ }
+
+ public void setUidRxBytes(long[] stats, long count) {
+ stats[mUidRxBytesPosition] = count;
+ }
+
+ public long getUidRxBytes(long[] stats) {
+ return stats[mUidRxBytesPosition];
+ }
+
+ public void setUidTxBytes(long[] stats, long count) {
+ stats[mUidTxBytesPosition] = count;
+ }
+
+ public long getUidTxBytes(long[] stats) {
+ return stats[mUidTxBytesPosition];
+ }
+
+ public void setUidRxPackets(long[] stats, long count) {
+ stats[mUidRxPacketsPosition] = count;
+ }
+
+ public long getUidRxPackets(long[] stats) {
+ return stats[mUidRxPacketsPosition];
+ }
+
+ public void setUidTxPackets(long[] stats, long count) {
+ stats[mUidTxPacketsPosition] = count;
+ }
+
+ public long getUidTxPackets(long[] stats) {
+ return stats[mUidTxPacketsPosition];
+ }
+
+ public void setUidScanTime(long[] stats, long count) {
+ stats[mUidScanTimePosition] = count;
+ }
+
+ public long getUidScanTime(long[] stats) {
+ return stats[mUidScanTimePosition];
+ }
+
+ public void setUidBatchScanTime(long[] stats, long count) {
+ stats[mUidBatchScanTimePosition] = count;
+ }
+
+ public long getUidBatchedScanTime(long[] stats) {
+ return stats[mUidBatchScanTimePosition];
+ }
+
+ /**
+ * Copies the elements of the stats array layout into <code>extras</code>
+ */
+ public void toExtras(PersistableBundle extras) {
+ super.toExtras(extras);
+ extras.putBoolean(EXTRA_POWER_REPORTING_SUPPORTED, mPowerReportingSupported);
+ extras.putInt(EXTRA_DEVICE_RX_TIME_POSITION, mDeviceRxTimePosition);
+ extras.putInt(EXTRA_DEVICE_TX_TIME_POSITION, mDeviceTxTimePosition);
+ extras.putInt(EXTRA_DEVICE_SCAN_TIME_POSITION, mDeviceScanTimePosition);
+ extras.putInt(EXTRA_DEVICE_BASIC_SCAN_TIME_POSITION, mDeviceBasicScanTimePosition);
+ extras.putInt(EXTRA_DEVICE_BATCHED_SCAN_TIME_POSITION, mDeviceBatchedScanTimePosition);
+ extras.putInt(EXTRA_DEVICE_IDLE_TIME_POSITION, mDeviceIdleTimePosition);
+ extras.putInt(EXTRA_DEVICE_ACTIVE_TIME_POSITION, mDeviceActiveTimePosition);
+ extras.putInt(EXTRA_UID_RX_BYTES_POSITION, mUidRxBytesPosition);
+ extras.putInt(EXTRA_UID_TX_BYTES_POSITION, mUidTxBytesPosition);
+ extras.putInt(EXTRA_UID_RX_PACKETS_POSITION, mUidRxPacketsPosition);
+ extras.putInt(EXTRA_UID_TX_PACKETS_POSITION, mUidTxPacketsPosition);
+ extras.putInt(EXTRA_UID_SCAN_TIME_POSITION, mUidScanTimePosition);
+ extras.putInt(EXTRA_UID_BATCH_SCAN_TIME_POSITION, mUidBatchScanTimePosition);
+ }
+
+ /**
+ * Retrieves elements of the stats array layout from <code>extras</code>
+ */
+ public void fromExtras(PersistableBundle extras) {
+ super.fromExtras(extras);
+ mPowerReportingSupported = extras.getBoolean(EXTRA_POWER_REPORTING_SUPPORTED);
+ mDeviceRxTimePosition = extras.getInt(EXTRA_DEVICE_RX_TIME_POSITION);
+ mDeviceTxTimePosition = extras.getInt(EXTRA_DEVICE_TX_TIME_POSITION);
+ mDeviceScanTimePosition = extras.getInt(EXTRA_DEVICE_SCAN_TIME_POSITION);
+ mDeviceBasicScanTimePosition = extras.getInt(EXTRA_DEVICE_BASIC_SCAN_TIME_POSITION);
+ mDeviceBatchedScanTimePosition = extras.getInt(EXTRA_DEVICE_BATCHED_SCAN_TIME_POSITION);
+ mDeviceIdleTimePosition = extras.getInt(EXTRA_DEVICE_IDLE_TIME_POSITION);
+ mDeviceActiveTimePosition = extras.getInt(EXTRA_DEVICE_ACTIVE_TIME_POSITION);
+ mUidRxBytesPosition = extras.getInt(EXTRA_UID_RX_BYTES_POSITION);
+ mUidTxBytesPosition = extras.getInt(EXTRA_UID_TX_BYTES_POSITION);
+ mUidRxPacketsPosition = extras.getInt(EXTRA_UID_RX_PACKETS_POSITION);
+ mUidTxPacketsPosition = extras.getInt(EXTRA_UID_TX_PACKETS_POSITION);
+ mUidScanTimePosition = extras.getInt(EXTRA_UID_SCAN_TIME_POSITION);
+ mUidBatchScanTimePosition = extras.getInt(EXTRA_UID_BATCH_SCAN_TIME_POSITION);
+ }
+}
diff --git a/services/core/java/com/android/server/power/stats/WifiPowerStatsProcessor.java b/services/core/java/com/android/server/power/stats/WifiPowerStatsProcessor.java
new file mode 100644
index 0000000..5e9cc40
--- /dev/null
+++ b/services/core/java/com/android/server/power/stats/WifiPowerStatsProcessor.java
@@ -0,0 +1,425 @@
+/*
+ * 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.power.stats;
+
+import android.util.Slog;
+
+import com.android.internal.os.PowerProfile;
+import com.android.internal.os.PowerStats;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class WifiPowerStatsProcessor extends PowerStatsProcessor {
+ private static final String TAG = "WifiPowerStatsProcessor";
+ private static final boolean DEBUG = false;
+
+ private final UsageBasedPowerEstimator mRxPowerEstimator;
+ private final UsageBasedPowerEstimator mTxPowerEstimator;
+ private final UsageBasedPowerEstimator mIdlePowerEstimator;
+
+ private final UsageBasedPowerEstimator mActivePowerEstimator;
+ private final UsageBasedPowerEstimator mScanPowerEstimator;
+ private final UsageBasedPowerEstimator mBatchedScanPowerEstimator;
+
+ private PowerStats.Descriptor mLastUsedDescriptor;
+ private WifiPowerStatsLayout mStatsLayout;
+ // Sequence of steps for power estimation and intermediate results.
+ private PowerEstimationPlan mPlan;
+
+ private long[] mTmpDeviceStatsArray;
+ private long[] mTmpUidStatsArray;
+ private boolean mHasWifiPowerController;
+
+ public WifiPowerStatsProcessor(PowerProfile powerProfile) {
+ mRxPowerEstimator = new UsageBasedPowerEstimator(
+ powerProfile.getAveragePower(PowerProfile.POWER_WIFI_CONTROLLER_RX));
+ mTxPowerEstimator = new UsageBasedPowerEstimator(
+ powerProfile.getAveragePower(PowerProfile.POWER_WIFI_CONTROLLER_TX));
+ mIdlePowerEstimator = new UsageBasedPowerEstimator(
+ powerProfile.getAveragePower(PowerProfile.POWER_WIFI_CONTROLLER_IDLE));
+ mActivePowerEstimator = new UsageBasedPowerEstimator(
+ powerProfile.getAveragePower(PowerProfile.POWER_WIFI_ACTIVE));
+ mScanPowerEstimator = new UsageBasedPowerEstimator(
+ powerProfile.getAveragePower(PowerProfile.POWER_WIFI_SCAN));
+ mBatchedScanPowerEstimator = new UsageBasedPowerEstimator(
+ powerProfile.getAveragePower(PowerProfile.POWER_WIFI_BATCHED_SCAN));
+ }
+
+ private static class Intermediates {
+ /**
+ * Estimated power for the RX state.
+ */
+ public double rxPower;
+ /**
+ * Estimated power for the TX state.
+ */
+ public double txPower;
+ /**
+ * Estimated power in the SCAN state
+ */
+ public double scanPower;
+ /**
+ * Estimated power for IDLE, SCAN states.
+ */
+ public double idlePower;
+ /**
+ * Number of received packets
+ */
+ public long rxPackets;
+ /**
+ * Number of transmitted packets
+ */
+ public long txPackets;
+ /**
+ * Total duration of unbatched scans across all UIDs.
+ */
+ public long basicScanDuration;
+ /**
+ * Estimated power in the unbatched SCAN state
+ */
+ public double basicScanPower;
+ /**
+ * Total duration of batched scans across all UIDs.
+ */
+ public long batchedScanDuration;
+ /**
+ * Estimated power in the BATCHED SCAN state
+ */
+ public double batchedScanPower;
+ /**
+ * Estimated total power when active; used only in the absence of WiFiManager power
+ * reporting.
+ */
+ public double activePower;
+ /**
+ * Measured consumed energy from power monitoring hardware (micro-coulombs)
+ */
+ public long consumedEnergy;
+ }
+
+ @Override
+ void finish(PowerComponentAggregatedPowerStats stats) {
+ if (stats.getPowerStatsDescriptor() == null) {
+ return;
+ }
+
+ unpackPowerStatsDescriptor(stats.getPowerStatsDescriptor());
+
+ if (mPlan == null) {
+ mPlan = new PowerEstimationPlan(stats.getConfig());
+ }
+
+ for (int i = mPlan.deviceStateEstimations.size() - 1; i >= 0; i--) {
+ DeviceStateEstimation estimation = mPlan.deviceStateEstimations.get(i);
+ Intermediates intermediates = new Intermediates();
+ estimation.intermediates = intermediates;
+ computeDevicePowerEstimates(stats, estimation.stateValues, intermediates);
+ }
+
+ double ratio = 1.0;
+ if (mStatsLayout.getEnergyConsumerCount() != 0) {
+ ratio = computeEstimateAdjustmentRatioUsingConsumedEnergy();
+ if (ratio != 1) {
+ for (int i = mPlan.deviceStateEstimations.size() - 1; i >= 0; i--) {
+ DeviceStateEstimation estimation = mPlan.deviceStateEstimations.get(i);
+ adjustDevicePowerEstimates(stats, estimation.stateValues,
+ (Intermediates) estimation.intermediates, ratio);
+ }
+ }
+ }
+
+ combineDeviceStateEstimates();
+
+ ArrayList<Integer> uids = new ArrayList<>();
+ stats.collectUids(uids);
+ if (!uids.isEmpty()) {
+ for (int uid : uids) {
+ for (int i = 0; i < mPlan.uidStateEstimates.size(); i++) {
+ computeUidActivityTotals(stats, uid, mPlan.uidStateEstimates.get(i));
+ }
+ }
+
+ for (int uid : uids) {
+ for (int i = 0; i < mPlan.uidStateEstimates.size(); i++) {
+ computeUidPowerEstimates(stats, uid, mPlan.uidStateEstimates.get(i));
+ }
+ }
+ }
+ mPlan.resetIntermediates();
+ }
+
+ private void unpackPowerStatsDescriptor(PowerStats.Descriptor descriptor) {
+ if (descriptor.equals(mLastUsedDescriptor)) {
+ return;
+ }
+
+ mLastUsedDescriptor = descriptor;
+ mStatsLayout = new WifiPowerStatsLayout(descriptor);
+ mTmpDeviceStatsArray = new long[descriptor.statsArrayLength];
+ mTmpUidStatsArray = new long[descriptor.uidStatsArrayLength];
+ mHasWifiPowerController = mStatsLayout.isPowerReportingSupported();
+ }
+
+ /**
+ * Compute power estimates using the power profile.
+ */
+ private void computeDevicePowerEstimates(PowerComponentAggregatedPowerStats stats,
+ int[] deviceStates, Intermediates intermediates) {
+ if (!stats.getDeviceStats(mTmpDeviceStatsArray, deviceStates)) {
+ return;
+ }
+
+ for (int i = mStatsLayout.getEnergyConsumerCount() - 1; i >= 0; i--) {
+ intermediates.consumedEnergy += mStatsLayout.getConsumedEnergy(mTmpDeviceStatsArray, i);
+ }
+
+ intermediates.basicScanDuration =
+ mStatsLayout.getDeviceBasicScanTime(mTmpDeviceStatsArray);
+ intermediates.batchedScanDuration =
+ mStatsLayout.getDeviceBatchedScanTime(mTmpDeviceStatsArray);
+ if (mHasWifiPowerController) {
+ intermediates.rxPower = mRxPowerEstimator.calculatePower(
+ mStatsLayout.getDeviceRxTime(mTmpDeviceStatsArray));
+ intermediates.txPower = mTxPowerEstimator.calculatePower(
+ mStatsLayout.getDeviceTxTime(mTmpDeviceStatsArray));
+ intermediates.scanPower = mScanPowerEstimator.calculatePower(
+ mStatsLayout.getDeviceScanTime(mTmpDeviceStatsArray));
+ intermediates.idlePower = mIdlePowerEstimator.calculatePower(
+ mStatsLayout.getDeviceIdleTime(mTmpDeviceStatsArray));
+ mStatsLayout.setDevicePowerEstimate(mTmpDeviceStatsArray,
+ intermediates.rxPower + intermediates.txPower + intermediates.scanPower
+ + intermediates.idlePower);
+ } else {
+ intermediates.activePower = mActivePowerEstimator.calculatePower(
+ mStatsLayout.getDeviceActiveTime(mTmpDeviceStatsArray));
+ intermediates.basicScanPower =
+ mScanPowerEstimator.calculatePower(intermediates.basicScanDuration);
+ intermediates.batchedScanPower =
+ mBatchedScanPowerEstimator.calculatePower(intermediates.batchedScanDuration);
+ mStatsLayout.setDevicePowerEstimate(mTmpDeviceStatsArray,
+ intermediates.activePower + intermediates.basicScanPower
+ + intermediates.batchedScanPower);
+ }
+
+ stats.setDeviceStats(deviceStates, mTmpDeviceStatsArray);
+ }
+
+ /**
+ * Compute an adjustment ratio using the total power estimated using the power profile
+ * and the total power measured by hardware.
+ */
+ private double computeEstimateAdjustmentRatioUsingConsumedEnergy() {
+ long totalConsumedEnergy = 0;
+ double totalPower = 0;
+
+ for (int i = mPlan.deviceStateEstimations.size() - 1; i >= 0; i--) {
+ Intermediates intermediates =
+ (Intermediates) mPlan.deviceStateEstimations.get(i).intermediates;
+ if (mHasWifiPowerController) {
+ totalPower += intermediates.rxPower + intermediates.txPower
+ + intermediates.scanPower + intermediates.idlePower;
+ } else {
+ totalPower += intermediates.activePower + intermediates.basicScanPower
+ + intermediates.batchedScanPower;
+ }
+ totalConsumedEnergy += intermediates.consumedEnergy;
+ }
+
+ if (totalPower == 0) {
+ return 1;
+ }
+
+ return uCtoMah(totalConsumedEnergy) / totalPower;
+ }
+
+ /**
+ * Uniformly apply the same adjustment to all power estimates in order to ensure that the total
+ * estimated power matches the measured consumed power. We are not claiming that all
+ * averages captured in the power profile have to be off by the same percentage in reality.
+ */
+ private void adjustDevicePowerEstimates(PowerComponentAggregatedPowerStats stats,
+ int[] deviceStates, Intermediates intermediates, double ratio) {
+ double adjutedPower;
+ if (mHasWifiPowerController) {
+ intermediates.rxPower *= ratio;
+ intermediates.txPower *= ratio;
+ intermediates.scanPower *= ratio;
+ intermediates.idlePower *= ratio;
+ adjutedPower = intermediates.rxPower + intermediates.txPower + intermediates.scanPower
+ + intermediates.idlePower;
+ } else {
+ intermediates.activePower *= ratio;
+ intermediates.basicScanPower *= ratio;
+ intermediates.batchedScanPower *= ratio;
+ adjutedPower = intermediates.activePower + intermediates.basicScanPower
+ + intermediates.batchedScanPower;
+ }
+
+ if (!stats.getDeviceStats(mTmpDeviceStatsArray, deviceStates)) {
+ return;
+ }
+
+ mStatsLayout.setDevicePowerEstimate(mTmpDeviceStatsArray, adjutedPower);
+ stats.setDeviceStats(deviceStates, mTmpDeviceStatsArray);
+ }
+
+ /**
+ * Combine power estimates before distributing them proportionally to UIDs.
+ */
+ private void combineDeviceStateEstimates() {
+ for (int i = mPlan.combinedDeviceStateEstimations.size() - 1; i >= 0; i--) {
+ CombinedDeviceStateEstimate cdse = mPlan.combinedDeviceStateEstimations.get(i);
+ Intermediates
+ cdseIntermediates = new Intermediates();
+ cdse.intermediates = cdseIntermediates;
+ List<DeviceStateEstimation> deviceStateEstimations = cdse.deviceStateEstimations;
+ for (int j = deviceStateEstimations.size() - 1; j >= 0; j--) {
+ DeviceStateEstimation dse = deviceStateEstimations.get(j);
+ Intermediates intermediates = (Intermediates) dse.intermediates;
+ if (mHasWifiPowerController) {
+ cdseIntermediates.rxPower += intermediates.rxPower;
+ cdseIntermediates.txPower += intermediates.txPower;
+ cdseIntermediates.scanPower += intermediates.scanPower;
+ cdseIntermediates.idlePower += intermediates.idlePower;
+ } else {
+ cdseIntermediates.activePower += intermediates.activePower;
+ cdseIntermediates.basicScanPower += intermediates.basicScanPower;
+ cdseIntermediates.batchedScanPower += intermediates.batchedScanPower;
+ }
+ cdseIntermediates.basicScanDuration += intermediates.basicScanDuration;
+ cdseIntermediates.batchedScanDuration += intermediates.batchedScanDuration;
+ cdseIntermediates.consumedEnergy += intermediates.consumedEnergy;
+ }
+ }
+ }
+
+ private void computeUidActivityTotals(PowerComponentAggregatedPowerStats stats, int uid,
+ UidStateEstimate uidStateEstimate) {
+ Intermediates intermediates =
+ (Intermediates) uidStateEstimate.combinedDeviceStateEstimate.intermediates;
+ for (UidStateProportionalEstimate proportionalEstimate :
+ uidStateEstimate.proportionalEstimates) {
+ if (!stats.getUidStats(mTmpUidStatsArray, uid, proportionalEstimate.stateValues)) {
+ continue;
+ }
+
+ intermediates.rxPackets += mStatsLayout.getUidRxPackets(mTmpUidStatsArray);
+ intermediates.txPackets += mStatsLayout.getUidTxPackets(mTmpUidStatsArray);
+ }
+ }
+
+ private void computeUidPowerEstimates(PowerComponentAggregatedPowerStats stats, int uid,
+ UidStateEstimate uidStateEstimate) {
+ Intermediates intermediates =
+ (Intermediates) uidStateEstimate.combinedDeviceStateEstimate.intermediates;
+ for (UidStateProportionalEstimate proportionalEstimate :
+ uidStateEstimate.proportionalEstimates) {
+ if (!stats.getUidStats(mTmpUidStatsArray, uid, proportionalEstimate.stateValues)) {
+ continue;
+ }
+
+ double power = 0;
+ if (mHasWifiPowerController) {
+ if (intermediates.rxPackets != 0) {
+ power += intermediates.rxPower * mStatsLayout.getUidRxPackets(mTmpUidStatsArray)
+ / intermediates.rxPackets;
+ }
+ if (intermediates.txPackets != 0) {
+ power += intermediates.txPower * mStatsLayout.getUidTxPackets(mTmpUidStatsArray)
+ / intermediates.txPackets;
+ }
+ long totalScanDuration =
+ intermediates.basicScanDuration + intermediates.batchedScanDuration;
+ if (totalScanDuration != 0) {
+ long scanDuration = mStatsLayout.getUidScanTime(mTmpUidStatsArray)
+ + mStatsLayout.getUidBatchedScanTime(mTmpUidStatsArray);
+ power += intermediates.scanPower * scanDuration / totalScanDuration;
+ }
+ } else {
+ long totalPackets = intermediates.rxPackets + intermediates.txPackets;
+ if (totalPackets != 0) {
+ long packets = mStatsLayout.getUidRxPackets(mTmpUidStatsArray)
+ + mStatsLayout.getUidTxPackets(mTmpUidStatsArray);
+ power += intermediates.activePower * packets / totalPackets;
+ }
+
+ if (intermediates.basicScanDuration != 0) {
+ long scanDuration = mStatsLayout.getUidScanTime(mTmpUidStatsArray);
+ power += intermediates.basicScanPower * scanDuration
+ / intermediates.basicScanDuration;
+ }
+
+ if (intermediates.batchedScanDuration != 0) {
+ long batchedScanDuration = mStatsLayout.getUidBatchedScanTime(
+ mTmpUidStatsArray);
+ power += intermediates.batchedScanPower * batchedScanDuration
+ / intermediates.batchedScanDuration;
+ }
+ }
+ mStatsLayout.setUidPowerEstimate(mTmpUidStatsArray, power);
+ stats.setUidStats(uid, proportionalEstimate.stateValues, mTmpUidStatsArray);
+
+ if (DEBUG) {
+ Slog.d(TAG, "UID: " + uid
+ + " states: " + Arrays.toString(proportionalEstimate.stateValues)
+ + " stats: " + Arrays.toString(mTmpUidStatsArray)
+ + " rx: " + mStatsLayout.getUidRxPackets(mTmpUidStatsArray)
+ + " rx-power: " + intermediates.rxPower
+ + " rx-packets: " + intermediates.rxPackets
+ + " tx: " + mStatsLayout.getUidTxPackets(mTmpUidStatsArray)
+ + " tx-power: " + intermediates.txPower
+ + " tx-packets: " + intermediates.txPackets
+ + " power: " + power);
+ }
+ }
+ }
+
+ @Override
+ String deviceStatsToString(PowerStats.Descriptor descriptor, long[] stats) {
+ unpackPowerStatsDescriptor(descriptor);
+ if (mHasWifiPowerController) {
+ return "rx: " + mStatsLayout.getDeviceRxTime(stats)
+ + " tx: " + mStatsLayout.getDeviceTxTime(stats)
+ + " scan: " + mStatsLayout.getDeviceScanTime(stats)
+ + " idle: " + mStatsLayout.getDeviceIdleTime(stats)
+ + " power: " + mStatsLayout.getDevicePowerEstimate(stats);
+ } else {
+ return "active: " + mStatsLayout.getDeviceActiveTime(stats)
+ + " scan: " + mStatsLayout.getDeviceBasicScanTime(stats)
+ + " batched-scan: " + mStatsLayout.getDeviceBatchedScanTime(stats)
+ + " power: " + mStatsLayout.getDevicePowerEstimate(stats);
+ }
+ }
+
+ @Override
+ String stateStatsToString(PowerStats.Descriptor descriptor, int key, long[] stats) {
+ // Unsupported for this power component
+ return null;
+ }
+
+ @Override
+ String uidStatsToString(PowerStats.Descriptor descriptor, long[] stats) {
+ unpackPowerStatsDescriptor(descriptor);
+ return "rx: " + mStatsLayout.getUidRxPackets(stats)
+ + " tx: " + mStatsLayout.getUidTxPackets(stats)
+ + " scan: " + mStatsLayout.getUidScanTime(stats)
+ + " batched-scan: " + mStatsLayout.getUidBatchedScanTime(stats)
+ + " power: " + mStatsLayout.getUidPowerEstimate(stats);
+ }
+}
diff --git a/services/core/java/com/android/server/vcn/Vcn.java b/services/core/java/com/android/server/vcn/Vcn.java
index 37f0450..5a5f7ef 100644
--- a/services/core/java/com/android/server/vcn/Vcn.java
+++ b/services/core/java/com/android/server/vcn/Vcn.java
@@ -626,8 +626,12 @@
* Dumps the state of this Vcn for logging and debugging purposes.
*
* <p>PII and credentials MUST NEVER be dumped here.
+ *
+ * <p>This method is not thread safe and MUST run on the VCN thread.
*/
public void dump(IndentingPrintWriter pw) {
+ mVcnContext.ensureRunningOnLooperThread();
+
pw.println("Vcn (" + mSubscriptionGroup + "):");
pw.increaseIndent();
diff --git a/services/core/java/com/android/server/vcn/VcnGatewayConnection.java b/services/core/java/com/android/server/vcn/VcnGatewayConnection.java
index 3094b18..8d378a0 100644
--- a/services/core/java/com/android/server/vcn/VcnGatewayConnection.java
+++ b/services/core/java/com/android/server/vcn/VcnGatewayConnection.java
@@ -2580,8 +2580,12 @@
* Dumps the state of this VcnGatewayConnection for logging and debugging purposes.
*
* <p>PII and credentials MUST NEVER be dumped here.
+ *
+ * <p>This method is not thread safe and MUST run on the VCN thread.
*/
public void dump(IndentingPrintWriter pw) {
+ mVcnContext.ensureRunningOnLooperThread();
+
pw.println("VcnGatewayConnection (" + mConnectionConfig.getGatewayConnectionName() + "):");
pw.increaseIndent();
@@ -2602,6 +2606,19 @@
mUnderlyingNetworkController.dump(pw);
pw.println();
+ if (mIkeSession == null) {
+ pw.println("mIkeSession: null");
+ } else {
+ pw.println("mIkeSession:");
+
+ // Add a try catch block in case IkeSession#dump is not thread-safe
+ try {
+ mIkeSession.dump(pw);
+ } catch (Exception e) {
+ Slog.wtf(TAG, "Failed to dump IkeSession: " + e);
+ }
+ }
+
pw.decreaseIndent();
}
@@ -2905,6 +2922,11 @@
public void setNetwork(@NonNull Network network) {
mImpl.setNetwork(network);
}
+
+ /** Dumps the state of the IkeSession */
+ public void dump(@NonNull IndentingPrintWriter pw) {
+ mImpl.dump(pw);
+ }
}
/** Proxy Implementation of WakeLock, used for testing. */
diff --git a/services/core/java/com/android/server/webkit/flags.aconfig b/services/core/java/com/android/server/webkit/flags.aconfig
index 2afbcd6..84dc1d7 100644
--- a/services/core/java/com/android/server/webkit/flags.aconfig
+++ b/services/core/java/com/android/server/webkit/flags.aconfig
@@ -1,4 +1,5 @@
package: "android.webkit"
+container: "system"
flag {
name: "update_service_v2"
diff --git a/services/core/java/com/android/server/wm/ActivityMetricsLogger.java b/services/core/java/com/android/server/wm/ActivityMetricsLogger.java
index 19f3449..6ec557a 100644
--- a/services/core/java/com/android/server/wm/ActivityMetricsLogger.java
+++ b/services/core/java/com/android/server/wm/ActivityMetricsLogger.java
@@ -4,10 +4,10 @@
import static android.app.ActivityManager.START_SUCCESS;
import static android.app.ActivityManager.START_TASK_TO_FRONT;
import static android.app.ActivityManager.processStateAmToProto;
-import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_DISMISSED;
-import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN;
-import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED;
-import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED;
+import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_DISMISSED;
+import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN;
+import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED;
+import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED;
import static android.app.WaitResult.INVALID_DELAY;
import static android.app.WaitResult.LAUNCH_STATE_COLD;
import static android.app.WaitResult.LAUNCH_STATE_HOT;
@@ -88,7 +88,7 @@
import android.annotation.Nullable;
import android.app.ActivityOptions;
import android.app.ActivityOptions.SourceInfo;
-import android.app.AppCompatTaskInfo.CameraCompatControlState;
+import android.app.CameraCompatTaskInfo.CameraCompatControlState;
import android.app.WaitResult;
import android.app.WindowConfiguration.WindowingMode;
import android.content.ComponentName;
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index 54e932a..236a746 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -31,12 +31,13 @@
import static android.app.ActivityOptions.ANIM_THUMBNAIL_SCALE_UP;
import static android.app.ActivityOptions.ANIM_UNDEFINED;
import static android.app.ActivityTaskManager.INVALID_TASK_ID;
-import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_DISMISSED;
-import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN;
-import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED;
-import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED;
import static android.app.AppOpsManager.MODE_ALLOWED;
import static android.app.AppOpsManager.OP_PICTURE_IN_PICTURE;
+import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_DISMISSED;
+import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN;
+import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED;
+import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED;
+import static android.app.CameraCompatTaskInfo.cameraCompatControlStateToString;
import static android.app.WaitResult.INVALID_DELAY;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_ASSISTANT;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_DREAM;
@@ -76,6 +77,7 @@
import static android.content.pm.ActivityInfo.FLAG_SHOW_FOR_ALL_USERS;
import static android.content.pm.ActivityInfo.FLAG_STATE_NOT_NEEDED;
import static android.content.pm.ActivityInfo.FLAG_TURN_SCREEN_ON;
+import static android.content.pm.ActivityInfo.OVERRIDE_ENABLE_INSETS_DECOUPLED_CONFIGURATION;
import static android.content.pm.ActivityInfo.INSETS_DECOUPLED_CONFIGURATION_ENFORCED;
import static android.content.pm.ActivityInfo.LAUNCH_MULTIPLE;
import static android.content.pm.ActivityInfo.LAUNCH_SINGLE_INSTANCE;
@@ -274,8 +276,7 @@
import android.app.Activity;
import android.app.ActivityManager.TaskDescription;
import android.app.ActivityOptions;
-import android.app.AppCompatTaskInfo;
-import android.app.AppCompatTaskInfo.CameraCompatControlState;
+import android.app.CameraCompatTaskInfo.CameraCompatControlState;
import android.app.ICompatCameraControlCallback;
import android.app.IScreenCaptureObserver;
import android.app.PendingIntent;
@@ -1357,7 +1358,7 @@
mLetterboxUiController.dump(pw, prefix);
pw.println(prefix + "mCameraCompatControlState="
- + AppCompatTaskInfo.cameraCompatControlStateToString(mCameraCompatControlState));
+ + cameraCompatControlStateToString(mCameraCompatControlState));
pw.println(prefix + "mCameraCompatControlEnabled=" + mCameraCompatControlEnabled);
}
@@ -2119,9 +2120,19 @@
mCameraCompatControlEnabled = mWmService.mContext.getResources()
.getBoolean(R.bool.config_isCameraCompatControlForStretchedIssuesEnabled);
mResolveConfigHint = new TaskFragment.ConfigOverrideHint();
- mResolveConfigHint.mUseLegacyInsetsForStableBounds =
- mWmService.mFlags.mInsetsDecoupledConfiguration
- && !info.isChangeEnabled(INSETS_DECOUPLED_CONFIGURATION_ENFORCED);
+ if (mWmService.mFlags.mInsetsDecoupledConfiguration) {
+ // When the stable configuration is the default behavior, override for the legacy apps
+ // without forward override flag.
+ mResolveConfigHint.mUseOverrideInsetsForStableBounds =
+ !info.isChangeEnabled(INSETS_DECOUPLED_CONFIGURATION_ENFORCED)
+ && !info.isChangeEnabled(
+ OVERRIDE_ENABLE_INSETS_DECOUPLED_CONFIGURATION);
+ } else {
+ // When the stable configuration is not the default behavior, forward overriding the
+ // listed apps.
+ mResolveConfigHint.mUseOverrideInsetsForStableBounds =
+ info.isChangeEnabled(OVERRIDE_ENABLE_INSETS_DECOUPLED_CONFIGURATION);
+ }
mTargetSdk = info.applicationInfo.targetSdkVersion;
@@ -4658,6 +4669,12 @@
// at #postWindowRemoveCleanupLocked
return false;
}
+ // Do not transfer if the orientation doesn't match, redraw starting window while it is
+ // on top will cause flicker.
+ if (fromActivity.getRequestedConfigurationOrientation()
+ != getRequestedConfigurationOrientation()) {
+ return false;
+ }
// In this case, the starting icon has already been displayed, so start
// letting windows get shown immediately without any more transitions.
if (fromActivity.mVisible) {
@@ -8363,7 +8380,7 @@
* aspect ratio.
*/
boolean shouldCreateCompatDisplayInsets() {
- if (mLetterboxUiController.shouldApplyUserFullscreenOverride()) {
+ if (mLetterboxUiController.hasFullscreenOverride()) {
// If the user has forced the applications aspect ratio to be fullscreen, don't use size
// compatibility mode in any situation. The user has been warned and therefore accepts
// the risk of the application misbehaving.
@@ -8378,7 +8395,11 @@
default:
// Fall through
}
- if (inMultiWindowMode() || getWindowConfiguration().hasWindowDecorCaption()) {
+ // Use root activity's info for tasks in multi-window mode, or fullscreen tasks in freeform
+ // task display areas, to ensure visual consistency across activity launches and exits in
+ // the same task.
+ final TaskDisplayArea tda = getTaskDisplayArea();
+ if (inMultiWindowMode() || (tda != null && tda.inFreeformWindowingMode())) {
final ActivityRecord root = task != null ? task.getRootActivity() : null;
if (root != null && root != this && !root.shouldCreateCompatDisplayInsets()) {
// If the root activity doesn't use size compatibility mode, the activities above
@@ -8456,7 +8477,7 @@
mCompatDisplayInsets =
new CompatDisplayInsets(
mDisplayContent, this, letterboxedContainerBounds,
- mResolveConfigHint.mUseLegacyInsetsForStableBounds);
+ mResolveConfigHint.mUseOverrideInsetsForStableBounds);
}
private void clearSizeCompatModeAttributes() {
@@ -8660,7 +8681,7 @@
if (rotation == ROTATION_UNDEFINED && !isFixedRotationTransforming()) {
rotation = mDisplayContent.getRotation();
}
- if (!mResolveConfigHint.mUseLegacyInsetsForStableBounds
+ if (!mResolveConfigHint.mUseOverrideInsetsForStableBounds
|| getCompatDisplayInsets() != null
|| isFloating(parentWindowingMode) || parentAppBounds == null
|| parentAppBounds.isEmpty() || rotation == ROTATION_UNDEFINED) {
@@ -8977,7 +8998,7 @@
if (mDisplayContent == null) {
return true;
}
- if (!mResolveConfigHint.mUseLegacyInsetsForStableBounds) {
+ if (!mResolveConfigHint.mUseOverrideInsetsForStableBounds) {
// No insets should be considered any more.
return true;
}
@@ -8996,7 +9017,7 @@
final Task task = getTask();
task.calculateInsetFrames(outNonDecorBounds /* outNonDecorBounds */,
outStableBounds /* outStableBounds */, parentBounds /* bounds */, di,
- mResolveConfigHint.mUseLegacyInsetsForStableBounds);
+ mResolveConfigHint.mUseOverrideInsetsForStableBounds);
final int orientationWithInsets = outStableBounds.height() >= outStableBounds.width()
? ORIENTATION_PORTRAIT : ORIENTATION_LANDSCAPE;
// If orientation does not match the orientation with insets applied, then a
@@ -9053,7 +9074,7 @@
getResolvedOverrideConfiguration().windowConfiguration.getBounds();
final int stableBoundsOrientation = stableBounds.width() > stableBounds.height()
? ORIENTATION_LANDSCAPE : ORIENTATION_PORTRAIT;
- final int parentOrientation = mResolveConfigHint.mUseLegacyInsetsForStableBounds
+ final int parentOrientation = mResolveConfigHint.mUseOverrideInsetsForStableBounds
? stableBoundsOrientation : newParentConfig.orientation;
// If the activity requires a different orientation (either by override or activityInfo),
@@ -9078,7 +9099,7 @@
return;
}
- final Rect parentAppBounds = mResolveConfigHint.mUseLegacyInsetsForStableBounds
+ final Rect parentAppBounds = mResolveConfigHint.mUseOverrideInsetsForStableBounds
? outNonDecorBounds : newParentConfig.windowConfiguration.getAppBounds();
// TODO(b/182268157): Explore using only one type of parentBoundsWithInsets, either app
// bounds or stable bounds to unify aspect ratio logic.
diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java
index 08baf3b..3303367 100644
--- a/services/core/java/com/android/server/wm/ActivityStarter.java
+++ b/services/core/java/com/android/server/wm/ActivityStarter.java
@@ -1728,7 +1728,7 @@
// Get top task at beginning because the order may be changed when reusing existing task.
final Task prevTopRootTask = mPreferredTaskDisplayArea.getFocusedRootTask();
final Task prevTopTask = prevTopRootTask != null ? prevTopRootTask.getTopLeafTask() : null;
- final Task reusedTask = getReusableTask();
+ final Task reusedTask = resolveReusableTask();
// If requested, freeze the task list
if (mOptions != null && mOptions.freezeRecentTasksReordering()
@@ -2729,7 +2729,7 @@
* Decide whether the new activity should be inserted into an existing task. Returns null
* if not or an ActivityRecord with the task into which the new activity should be added.
*/
- private Task getReusableTask() {
+ private Task resolveReusableTask() {
// If a target task is specified, try to reuse that one
if (mOptions != null && mOptions.getLaunchTaskId() != INVALID_TASK_ID) {
Task launchTask = mRootWindowContainer.anyTaskForId(mOptions.getLaunchTaskId());
@@ -2757,7 +2757,14 @@
// There can be one and only one instance of single instance activity in the
// history, and it is always in its own unique task, so we do a special search.
intentActivity = mRootWindowContainer.findActivity(mIntent, mStartActivity.info,
- mStartActivity.isActivityTypeHome());
+ false /* compareIntentFilters */);
+ // Removes the existing singleInstance Activity if we're starting it as home
+ // activity, while the existing one is not.
+ if (intentActivity != null && mStartActivity.isActivityTypeHome()
+ && !intentActivity.isActivityTypeHome()) {
+ intentActivity.destroyIfPossible("Removes redundant singleInstance");
+ intentActivity = null;
+ }
} else if ((mLaunchFlags & FLAG_ACTIVITY_LAUNCH_ADJACENT) != 0) {
// For the launch adjacent case we only want to put the activity in an existing
// task if the activity already exists in the history.
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
index a739e57..b3c43bc 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
@@ -3736,6 +3736,14 @@
return false;
}
+ // If the app is using auto-enter, and it explicitly requests entering PiP while pausing,
+ // return false immediately since auto-enter should take in place instead.
+ if (fromClient && r.isState(PAUSING) && params.isAutoEnterEnabled()) {
+ Slog.w(TAG, "Skip client enterPictureInPictureMode request while pausing,"
+ + " auto-enter-pip is enabled");
+ return false;
+ }
+
if (isPip2ExperimentEnabled()) {
// If PiP2 flag is on and request to enter PiP comes in,
// we request a direct transition TRANSIT_PIP from Shell to get the right entry bounds.
diff --git a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
index 430232c..c74284e 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java
@@ -2311,8 +2311,12 @@
mService.setLastResumedActivityUncheckLocked(mTopResumedActivity, reason);
}
scheduleTopResumedActivityStateIfNeeded();
-
- mService.updateTopApp(mTopResumedActivity);
+ // If the device is not sleeping and there is no top resumed, do not update top app because
+ // it may be an intermediate state while moving a task to front. The actual top will be set
+ // when TaskFragment#setResumedActivity is called.
+ if (mTopResumedActivity != null || mService.isSleepingLocked()) {
+ mService.updateTopApp(mTopResumedActivity);
+ }
return mTopResumedActivity;
}
diff --git a/services/core/java/com/android/server/wm/ConfigurationContainer.java b/services/core/java/com/android/server/wm/ConfigurationContainer.java
index be7c18c..31754bf 100644
--- a/services/core/java/com/android/server/wm/ConfigurationContainer.java
+++ b/services/core/java/com/android/server/wm/ConfigurationContainer.java
@@ -467,13 +467,6 @@
onRequestedOverrideConfigurationChanged(mRequestsTmpConfig);
}
- /** Sets the windowing mode for the configuration container. */
- void setDisplayWindowingMode(int windowingMode) {
- mRequestsTmpConfig.setTo(getRequestedOverrideConfiguration());
- mRequestsTmpConfig.windowConfiguration.setDisplayWindowingMode(windowingMode);
- onRequestedOverrideConfigurationChanged(mRequestsTmpConfig);
- }
-
/**
* Returns true if this container is currently in multi-window mode. I.e. sharing the screen
* with another activity.
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index 00d42e0..95ec75c 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -246,6 +246,7 @@
import android.window.DisplayWindowPolicyController;
import android.window.IDisplayAreaOrganizer;
import android.window.ScreenCapture;
+import android.window.ScreenCapture.LayerCaptureArgs;
import android.window.SystemPerformanceHinter;
import android.window.TransitionRequestInfo;
@@ -2456,7 +2457,6 @@
config.windowConfiguration.setBounds(mTmpRect);
config.windowConfiguration.setMaxBounds(mTmpRect);
config.windowConfiguration.setWindowingMode(getWindowingMode());
- config.windowConfiguration.setDisplayWindowingMode(getWindowingMode());
computeScreenAppConfiguration(config, dw, dh, displayInfo.rotation);
@@ -2834,11 +2834,6 @@
}
}
- @Override
- void setDisplayWindowingMode(int windowingMode) {
- setWindowingMode(windowingMode);
- }
-
/**
* See {@code WindowState#applyImeWindowsIfNeeded} for the details that we won't traverse the
* IME window in some cases.
@@ -2956,7 +2951,6 @@
void onDisplayChanged(DisplayContent dc) {
super.onDisplayChanged(dc);
updateSystemGestureExclusionLimit();
- updateKeepClearAreas();
}
void updateSystemGestureExclusionLimit() {
@@ -4035,7 +4029,6 @@
}
adjustForImeIfNeeded();
- updateKeepClearAreas();
// We may need to schedule some toast windows to be removed. The toasts for an app that
// does not have input focus are removed within a timeout to prevent apps to redress
@@ -5232,7 +5225,7 @@
/**
* Creates a LayerCaptureArgs object to represent the entire DisplayContent
*/
- ScreenCapture.LayerCaptureArgs getLayerCaptureArgs() {
+ LayerCaptureArgs getLayerCaptureArgs(Set<Integer> windowTypesToExclude) {
if (!mWmService.mPolicy.isScreenOn()) {
if (DEBUG_SCREENSHOT) {
Slog.i(TAG_WM, "Attempted to take screenshot while display was off.");
@@ -5242,8 +5235,23 @@
getBounds(mTmpRect);
mTmpRect.offsetTo(0, 0);
- return new ScreenCapture.LayerCaptureArgs.Builder(getSurfaceControl())
- .setSourceCrop(mTmpRect).build();
+ LayerCaptureArgs.Builder builder = new LayerCaptureArgs.Builder(getSurfaceControl())
+ .setSourceCrop(mTmpRect);
+
+ if (!windowTypesToExclude.isEmpty()) {
+ ArrayList<SurfaceControl> surfaceControls = new ArrayList<>();
+ forAllWindows(
+ window -> {
+ if (windowTypesToExclude.contains(window.getWindowType())) {
+ surfaceControls.add(window.mSurfaceControl);
+ }
+ }, true
+ );
+ if (!surfaceControls.isEmpty()) {
+ builder.setExcludeLayers(surfaceControls.toArray(new SurfaceControl[0]));
+ }
+ }
+ return builder.build();
}
@Override
@@ -6156,6 +6164,7 @@
Region touchableRegion = Region.obtain();
w.getEffectiveTouchableRegion(touchableRegion);
RegionUtils.forEachRect(touchableRegion, rect -> outUnrestricted.add(rect));
+ touchableRegion.recycle();
}
}
diff --git a/services/core/java/com/android/server/wm/DisplayRotation.java b/services/core/java/com/android/server/wm/DisplayRotation.java
index 4a97128..afcf364 100644
--- a/services/core/java/com/android/server/wm/DisplayRotation.java
+++ b/services/core/java/com/android/server/wm/DisplayRotation.java
@@ -21,6 +21,7 @@
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
import static android.view.Display.TYPE_EXTERNAL;
import static android.view.Display.TYPE_OVERLAY;
+import static android.view.Display.TYPE_VIRTUAL;
import static android.view.WindowManager.LayoutParams.ROTATION_ANIMATION_CROSSFADE;
import static android.view.WindowManager.LayoutParams.ROTATION_ANIMATION_JUMPCUT;
import static android.view.WindowManager.LayoutParams.ROTATION_ANIMATION_ROTATE;
@@ -1794,20 +1795,36 @@
}
}
+ @VisibleForTesting
+ int getDemoUserRotationOverride() {
+ return SystemProperties.getInt("persist.demo.userrotation", Surface.ROTATION_0);
+ }
+
+ @VisibleForTesting
+ @NonNull
+ String getDemoUserRotationPackage() {
+ return SystemProperties.get("persist.demo.userrotation.package_name");
+ }
+
@Surface.Rotation
private int getUserRotationOverride() {
- final int userRotationOverride = SystemProperties.getInt("persist.demo.userrotation",
- Surface.ROTATION_0);
+ final int userRotationOverride = getDemoUserRotationOverride();
if (userRotationOverride == Surface.ROTATION_0) {
return userRotationOverride;
}
- final var display = mDisplayContent.mDisplay;
+ final var display = mDisplayContent.getDisplay();
if (display.getType() == TYPE_EXTERNAL || display.getType() == TYPE_OVERLAY) {
- // TODO b/329442350 add chromecast virtual displays here
return userRotationOverride;
}
+ if (display.getType() == TYPE_VIRTUAL) {
+ final var packageName = getDemoUserRotationPackage();
+ if (!packageName.isEmpty() && packageName.equals(display.getOwnerPackageName())) {
+ return userRotationOverride;
+ }
+ }
+
return Surface.ROTATION_0;
}
diff --git a/services/core/java/com/android/server/wm/ImeInsetsSourceProvider.java b/services/core/java/com/android/server/wm/ImeInsetsSourceProvider.java
index 2dbb370..092ff3d 100644
--- a/services/core/java/com/android/server/wm/ImeInsetsSourceProvider.java
+++ b/services/core/java/com/android/server/wm/ImeInsetsSourceProvider.java
@@ -181,8 +181,10 @@
}
WindowToken imeToken = mWindowContainer.asWindowState() != null
? mWindowContainer.asWindowState().mToken : null;
- if (mDisplayContent.getAsyncRotationController() != null
- && mDisplayContent.getAsyncRotationController().isTargetToken(imeToken)) {
+ final var rotationController = mDisplayContent.getAsyncRotationController();
+ if ((rotationController != null && rotationController.isTargetToken(imeToken))
+ || (imeToken != null && imeToken.isSelfAnimating(
+ 0 /* flags */, SurfaceAnimator.ANIMATION_TYPE_TOKEN_TRANSFORM))) {
// Skip reporting IME drawn state when the control target is in fixed
// rotation, AsyncRotationController will report after the animation finished.
return;
diff --git a/services/core/java/com/android/server/wm/InsetsStateController.java b/services/core/java/com/android/server/wm/InsetsStateController.java
index 3a04bcd..dfee164 100644
--- a/services/core/java/com/android/server/wm/InsetsStateController.java
+++ b/services/core/java/com/android/server/wm/InsetsStateController.java
@@ -224,7 +224,6 @@
if (changed) {
notifyInsetsChanged();
mDisplayContent.updateSystemGestureExclusion();
- mDisplayContent.updateKeepClearAreas();
mDisplayContent.getDisplayPolicy().updateSystemBarAttributes();
}
}
diff --git a/services/core/java/com/android/server/wm/LetterboxUiController.java b/services/core/java/com/android/server/wm/LetterboxUiController.java
index cb5ad91..da1581e 100644
--- a/services/core/java/com/android/server/wm/LetterboxUiController.java
+++ b/services/core/java/com/android/server/wm/LetterboxUiController.java
@@ -905,13 +905,11 @@
// Note that we check the task rather than the parent as with ActivityEmbedding the parent might
// be a TaskFragment, and its windowing mode is always MULTI_WINDOW, even if the task is
// actually fullscreen.
- private boolean isDisplayFullScreenAndInPosture(DeviceStateController.DeviceState state,
- boolean isTabletop) {
+ private boolean isDisplayFullScreenAndInPosture(boolean isTabletop) {
Task task = mActivityRecord.getTask();
- return mActivityRecord.mDisplayContent != null
- && mActivityRecord.mDisplayContent.getDisplayRotation().isDeviceInPosture(state,
- isTabletop)
- && task != null
+ return mActivityRecord.mDisplayContent != null && task != null
+ && mActivityRecord.mDisplayContent.getDisplayRotation().isDeviceInPosture(
+ DeviceStateController.DeviceState.HALF_FOLDED, isTabletop)
&& task.getWindowingMode() == WINDOWING_MODE_FULLSCREEN;
}
@@ -939,16 +937,14 @@
}
private boolean isFullScreenAndBookModeEnabled() {
- return isDisplayFullScreenAndInPosture(
- DeviceStateController.DeviceState.HALF_FOLDED, false /* isTabletop */)
+ return isDisplayFullScreenAndInPosture(/* isTabletop */ false)
&& mLetterboxConfiguration.getIsAutomaticReachabilityInBookModeEnabled();
}
float getVerticalPositionMultiplier(Configuration parentConfiguration) {
// Don't check resolved configuration because it may not be updated yet during
// configuration change.
- boolean tabletopMode = isDisplayFullScreenAndInPosture(
- DeviceStateController.DeviceState.HALF_FOLDED, true /* isTabletop */);
+ boolean tabletopMode = isDisplayFullScreenAndInPosture(/* isTabletop */ true);
return isVerticalReachabilityEnabled(parentConfiguration)
// Using the last global dynamic position to avoid "jumps" when moving
// between apps or activities.
@@ -981,16 +977,15 @@
}
private boolean shouldUseSplitScreenAspectRatio(@NonNull Configuration parentConfiguration) {
- final boolean isBookMode = isDisplayFullScreenAndInPosture(
- DeviceStateController.DeviceState.HALF_FOLDED,
- /* isTabletop */ false);
+ final boolean isBookMode = isDisplayFullScreenAndInPosture(/* isTabletop */ false);
final boolean isNotCenteredHorizontally = getHorizontalPositionMultiplier(
parentConfiguration) != LETTERBOX_POSITION_MULTIPLIER_CENTER;
- final boolean isTabletopMode = isDisplayFullScreenAndInPosture(
- DeviceStateController.DeviceState.HALF_FOLDED,
- /* isTabletop */ true);
+ final boolean isTabletopMode = isDisplayFullScreenAndInPosture(/* isTabletop */ true);
+ final boolean isLandscape = isFixedOrientationLandscape(
+ mActivityRecord.getOverrideOrientation());
+
// Don't resize to split screen size when in book mode if letterbox position is centered
- return ((isBookMode && isNotCenteredHorizontally) || isTabletopMode)
+ return (isBookMode && isNotCenteredHorizontally || isTabletopMode && isLandscape)
|| isCameraCompatSplitScreenAspectRatioAllowed()
&& isCameraCompatTreatmentActive();
}
@@ -1647,17 +1642,13 @@
if (isHorizontalReachabilityEnabled()) {
int letterboxPositionForHorizontalReachability = getLetterboxConfiguration()
.getLetterboxPositionForHorizontalReachability(
- isDisplayFullScreenAndInPosture(
- DeviceStateController.DeviceState.HALF_FOLDED,
- false /* isTabletop */));
+ isDisplayFullScreenAndInPosture(/* isTabletop */ false));
positionToLog = letterboxHorizontalReachabilityPositionToLetterboxPosition(
letterboxPositionForHorizontalReachability);
} else if (isVerticalReachabilityEnabled()) {
int letterboxPositionForVerticalReachability = getLetterboxConfiguration()
.getLetterboxPositionForVerticalReachability(
- isDisplayFullScreenAndInPosture(
- DeviceStateController.DeviceState.HALF_FOLDED,
- true /* isTabletop */));
+ isDisplayFullScreenAndInPosture(/* isTabletop */ true));
positionToLog = letterboxVerticalReachabilityPositionToLetterboxPosition(
letterboxPositionForVerticalReachability);
}
diff --git a/services/core/java/com/android/server/wm/OWNERS b/services/core/java/com/android/server/wm/OWNERS
index 79eb0dc..ce47f5c 100644
--- a/services/core/java/com/android/server/wm/OWNERS
+++ b/services/core/java/com/android/server/wm/OWNERS
@@ -26,3 +26,6 @@
# File related to activity callers
per-file ActivityCallerState.java = file:/core/java/android/app/COMPONENT_CALLER_OWNERS
+
+# Files related to tracing
+per-file *TransitionTracer.java = file:platform/development:/tools/winscope/OWNERS
diff --git a/services/core/java/com/android/server/wm/PerfettoTransitionTracer.java b/services/core/java/com/android/server/wm/PerfettoTransitionTracer.java
index d08f043..883d27f 100644
--- a/services/core/java/com/android/server/wm/PerfettoTransitionTracer.java
+++ b/services/core/java/com/android/server/wm/PerfettoTransitionTracer.java
@@ -17,7 +17,8 @@
package com.android.server.wm;
import android.annotation.NonNull;
-import android.internal.perfetto.protos.PerfettoTrace;
+import android.internal.perfetto.protos.ShellTransitionOuterClass.ShellTransition;
+import android.internal.perfetto.protos.TracePacketOuterClass.TracePacket;
import android.os.SystemClock;
import android.os.Trace;
import android.tracing.perfetto.DataSourceParams;
@@ -71,18 +72,18 @@
mDataSource.trace((ctx) -> {
final ProtoOutputStream os = ctx.newTracePacket();
- final long token = os.start(PerfettoTrace.TracePacket.SHELL_TRANSITION);
+ final long token = os.start(TracePacket.SHELL_TRANSITION);
- os.write(PerfettoTrace.ShellTransition.ID, transition.getSyncId());
- os.write(PerfettoTrace.ShellTransition.CREATE_TIME_NS,
+ os.write(ShellTransition.ID, transition.getSyncId());
+ os.write(ShellTransition.CREATE_TIME_NS,
transition.mLogger.mCreateTimeNs);
- os.write(PerfettoTrace.ShellTransition.SEND_TIME_NS, transition.mLogger.mSendTimeNs);
- os.write(PerfettoTrace.ShellTransition.START_TRANSACTION_ID,
+ os.write(ShellTransition.SEND_TIME_NS, transition.mLogger.mSendTimeNs);
+ os.write(ShellTransition.START_TRANSACTION_ID,
transition.getStartTransaction().getId());
- os.write(PerfettoTrace.ShellTransition.FINISH_TRANSACTION_ID,
+ os.write(ShellTransition.FINISH_TRANSACTION_ID,
transition.getFinishTransaction().getId());
- os.write(PerfettoTrace.ShellTransition.TYPE, transition.mType);
- os.write(PerfettoTrace.ShellTransition.FLAGS, transition.getFlags());
+ os.write(ShellTransition.TYPE, transition.mType);
+ os.write(ShellTransition.FLAGS, transition.getFlags());
addTransitionTargetsToProto(os, targets);
@@ -114,9 +115,9 @@
mDataSource.trace((ctx) -> {
final ProtoOutputStream os = ctx.newTracePacket();
- final long token = os.start(PerfettoTrace.TracePacket.SHELL_TRANSITION);
- os.write(PerfettoTrace.ShellTransition.ID, transition.getSyncId());
- os.write(PerfettoTrace.ShellTransition.FINISH_TIME_NS,
+ final long token = os.start(TracePacket.SHELL_TRANSITION);
+ os.write(ShellTransition.ID, transition.getSyncId());
+ os.write(ShellTransition.FINISH_TIME_NS,
transition.mLogger.mFinishTimeNs);
os.end(token);
});
@@ -146,9 +147,9 @@
mDataSource.trace((ctx) -> {
final ProtoOutputStream os = ctx.newTracePacket();
- final long token = os.start(PerfettoTrace.TracePacket.SHELL_TRANSITION);
- os.write(PerfettoTrace.ShellTransition.ID, transition.getSyncId());
- os.write(PerfettoTrace.ShellTransition.WM_ABORT_TIME_NS,
+ final long token = os.start(TracePacket.SHELL_TRANSITION);
+ os.write(ShellTransition.ID, transition.getSyncId());
+ os.write(ShellTransition.WM_ABORT_TIME_NS,
transition.mLogger.mAbortTimeNs);
os.end(token);
});
@@ -172,9 +173,9 @@
mDataSource.trace((ctx) -> {
final ProtoOutputStream os = ctx.newTracePacket();
- final long token = os.start(PerfettoTrace.TracePacket.SHELL_TRANSITION);
- os.write(PerfettoTrace.ShellTransition.ID, startingData.mTransitionId);
- os.write(PerfettoTrace.ShellTransition.STARTING_WINDOW_REMOVE_TIME_NS,
+ final long token = os.start(TracePacket.SHELL_TRANSITION);
+ os.write(ShellTransition.ID, startingData.mTransitionId);
+ os.write(ShellTransition.STARTING_WINDOW_REMOVE_TIME_NS,
SystemClock.elapsedRealtimeNanos());
os.end(token);
});
@@ -215,11 +216,11 @@
}
final int windowId = System.identityHashCode(target.mContainer);
- final long token = os.start(PerfettoTrace.ShellTransition.TARGETS);
- os.write(PerfettoTrace.ShellTransition.Target.MODE, target.mReadyMode);
- os.write(PerfettoTrace.ShellTransition.Target.FLAGS, target.mReadyFlags);
- os.write(PerfettoTrace.ShellTransition.Target.LAYER_ID, layerId);
- os.write(PerfettoTrace.ShellTransition.Target.WINDOW_ID, windowId);
+ final long token = os.start(ShellTransition.TARGETS);
+ os.write(ShellTransition.Target.MODE, target.mReadyMode);
+ os.write(ShellTransition.Target.FLAGS, target.mReadyFlags);
+ os.write(ShellTransition.Target.LAYER_ID, layerId);
+ os.write(ShellTransition.Target.WINDOW_ID, windowId);
os.end(token);
}
}
diff --git a/services/core/java/com/android/server/wm/RecentsAnimation.java b/services/core/java/com/android/server/wm/RecentsAnimation.java
index 7a3124d..469cc64 100644
--- a/services/core/java/com/android/server/wm/RecentsAnimation.java
+++ b/services/core/java/com/android/server/wm/RecentsAnimation.java
@@ -112,11 +112,11 @@
mTargetActivityType);
ActivityRecord targetActivity = getTargetActivity(targetRootTask);
if (targetActivity != null) {
- if (targetActivity.isVisibleRequested() || targetActivity.isTopRunningActivity()) {
- // The activity is ready.
- return;
- }
if (targetActivity.attachedToProcess()) {
+ if (targetActivity.isVisibleRequested() || targetActivity.isTopRunningActivity()) {
+ // The activity is ready.
+ return;
+ }
if (targetActivity.app.getCurrentProcState() >= PROCESS_STATE_CACHED_ACTIVITY) {
Slog.v(TAG, "Skip preload recents for cached proc " + targetActivity.app);
// The process may be frozen that cannot receive binder call.
diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java
index 1e88fe4..622a809 100644
--- a/services/core/java/com/android/server/wm/RootWindowContainer.java
+++ b/services/core/java/com/android/server/wm/RootWindowContainer.java
@@ -174,6 +174,7 @@
private static final int SET_SCREEN_BRIGHTNESS_OVERRIDE = 1;
private static final int SET_USER_ACTIVITY_TIMEOUT = 2;
private static final int MSG_SEND_SLEEP_TRANSITION = 3;
+ private static final int PINNED_TASK_ABORT_TIMEOUT = 1000;
static final String TAG_TASKS = TAG + POSTFIX_TASKS;
static final String TAG_STATES = TAG + POSTFIX_STATES;
@@ -295,6 +296,9 @@
};
+ // TODO: b/335866033 Remove the abort PiP on timeout once PiP2 flag is on.
+ @Nullable private Runnable mMaybeAbortPipEnterRunnable = null;
+
private final FindTaskResult mTmpFindTaskResult = new FindTaskResult();
static class FindTaskResult implements Predicate<Task> {
@@ -2272,8 +2276,67 @@
resumeFocusedTasksTopActivities();
notifyActivityPipModeChanged(r.getTask(), r);
+
+ if (!isPip2ExperimentEnabled()) {
+ // TODO: b/335866033 Remove the abort PiP on timeout once PiP2 flag is on.
+ // Set up a timeout callback to potentially abort PiP enter if in an inconsistent state.
+ scheduleTimeoutAbortPipEnter(rootTask);
+ }
}
+ private void scheduleTimeoutAbortPipEnter(Task rootTask) {
+ if (mMaybeAbortPipEnterRunnable != null) {
+ // If there is an abort enter PiP check pending already remove it and abort
+ // immediately since we are trying to enter PiP in an inconsistent state
+ mHandler.removeCallbacks(mMaybeAbortPipEnterRunnable);
+ mMaybeAbortPipEnterRunnable.run();
+ }
+ // Snapshot a throwable early on to display the callstack upon abort later on timeout.
+ final Throwable enterPipThrowable = new Throwable();
+ // Set up a timeout to potentially roll back the task change to PINNED mode
+ // by aborting PiP.
+ mMaybeAbortPipEnterRunnable = new Runnable() {
+ @Override
+ public void run() {
+ synchronized (mService.mGlobalLock) {
+ if (mTransitionController.inTransition()) {
+ // If this task is a part an active transition aborting PiP might break
+ // it; so run the timeout callback directly once idle.
+
+ final Runnable expectedMaybeAbortAtTimeout = mMaybeAbortPipEnterRunnable;
+ mTransitionController.mStateValidators.add(() -> {
+ // If a second PiP transition comes in, it runs the abort runnable for
+ // the first transition pre-emptively, so we need to avoid calling
+ // the same runnable twice when validating states.
+ if (expectedMaybeAbortAtTimeout != mMaybeAbortPipEnterRunnable) return;
+ mMaybeAbortPipEnterRunnable = null;
+ run();
+ });
+ return;
+ } else {
+ mMaybeAbortPipEnterRunnable = null;
+ }
+ mService.deferWindowLayout();
+ final ActivityRecord top = rootTask.getTopMostActivity();
+ final ActivityManager.RunningTaskInfo beforeTaskInfo =
+ rootTask.getTaskInfo();
+ if (top != null && !top.inPinnedWindowingMode()
+ && rootTask.abortPipEnter(top)) {
+ Slog.wtf(TAG, "Enter PiP was aborted via a scheduled timeout"
+ + "task_state_before=" + beforeTaskInfo
+ + "task_state_after=" + rootTask.getTaskInfo(),
+ enterPipThrowable);
+ }
+ mService.continueWindowLayout();
+ }
+ }
+ };
+ mHandler.postDelayed(mMaybeAbortPipEnterRunnable, PINNED_TASK_ABORT_TIMEOUT);
+ Slog.d(TAG, "a delayed check for potentially aborting PiP if "
+ + "in a wrong state is scheduled.");
+ }
+
+
/**
* Notifies when an activity enters or leaves PIP mode.
*
@@ -2403,14 +2466,6 @@
return false;
}
- return resumeFocusedTasksTopActivitiesUnchecked(targetRootTask, target, targetOptions,
- deferPause);
- }
-
- @VisibleForTesting
- boolean resumeFocusedTasksTopActivitiesUnchecked(
- Task targetRootTask, ActivityRecord target, ActivityOptions targetOptions,
- boolean deferPause) {
boolean result = false;
if (targetRootTask != null && (targetRootTask.isTopRootTaskInDisplayArea()
|| getTopDisplayFocusedRootTask() == targetRootTask)) {
@@ -2900,6 +2955,14 @@
mService.mH.post(mDestroyAllActivitiesRunnable);
}
+ void removeAllMaybeAbortPipEnterRunnable() {
+ if (mMaybeAbortPipEnterRunnable == null) {
+ return;
+ }
+ mHandler.removeCallbacks(mMaybeAbortPipEnterRunnable);
+ mMaybeAbortPipEnterRunnable = null;
+ }
+
// Tries to put all activity tasks to sleep. Returns true if all tasks were
// successfully put to sleep.
boolean putTasksToSleep(boolean allowDelay, boolean shuttingDown) {
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java
index 390a7cf..f23a440 100644
--- a/services/core/java/com/android/server/wm/Task.java
+++ b/services/core/java/com/android/server/wm/Task.java
@@ -137,6 +137,7 @@
import android.app.ActivityTaskManager;
import android.app.AppCompatTaskInfo;
import android.app.AppGlobals;
+import android.app.CameraCompatTaskInfo;
import android.app.IActivityController;
import android.app.PictureInPictureParams;
import android.app.TaskInfo;
@@ -3537,9 +3538,9 @@
appCompatTaskInfo.topActivityEligibleForLetterboxEducation = isTopActivityResumed
&& top.isEligibleForLetterboxEducation();
// Whether the direct top activity requested showing camera compat control.
- appCompatTaskInfo.cameraCompatControlState = isTopActivityResumed
+ appCompatTaskInfo.cameraCompatTaskInfo.cameraCompatControlState = isTopActivityResumed
? top.getCameraCompatControlState()
- : AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN;
+ : CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN;
final Task parentTask = getParent() != null ? getParent().asTask() : null;
info.parentTaskId = parentTask != null && parentTask.mCreatedByOrganizer
@@ -4851,11 +4852,13 @@
/**
* Abort an incomplete pip-entry. If left in this state, it will cover everything but remain
* paused. If this is needed, there is a bug -- this should only be used for recovery.
+ *
+ * @return true if there is an inconsistency in the task and activity state.
*/
- void abortPipEnter(ActivityRecord top) {
+ boolean abortPipEnter(ActivityRecord top) {
// an incomplete state has the task PINNED but the activity not.
if (!inPinnedWindowingMode() || top.inPinnedWindowingMode() || !canMoveTaskToBack(this)) {
- return;
+ return false;
}
final Transition transition = new Transition(TRANSIT_TO_BACK, 0 /* flags */,
mTransitionController, mWmService.mSyncEngine);
@@ -4877,6 +4880,7 @@
top.setWindowingMode(WINDOWING_MODE_UNDEFINED);
top.mWaitForEnteringPinnedMode = false;
}
+ return true;
}
void resumeNextFocusAfterReparent() {
diff --git a/services/core/java/com/android/server/wm/TaskDisplayArea.java b/services/core/java/com/android/server/wm/TaskDisplayArea.java
index 90a3b253..2c27b98 100644
--- a/services/core/java/com/android/server/wm/TaskDisplayArea.java
+++ b/services/core/java/com/android/server/wm/TaskDisplayArea.java
@@ -1880,7 +1880,6 @@
mTempConfiguration.setTo(getRequestedOverrideConfiguration());
WindowConfiguration tempRequestWindowConfiguration = mTempConfiguration.windowConfiguration;
tempRequestWindowConfiguration.setWindowingMode(windowingMode);
- tempRequestWindowConfiguration.setDisplayWindowingMode(windowingMode);
onRequestedOverrideConfigurationChanged(mTempConfiguration);
}
diff --git a/services/core/java/com/android/server/wm/TaskFragment.java b/services/core/java/com/android/server/wm/TaskFragment.java
index fc85af5..2b631f7 100644
--- a/services/core/java/com/android/server/wm/TaskFragment.java
+++ b/services/core/java/com/android/server/wm/TaskFragment.java
@@ -1971,6 +1971,15 @@
return SCREEN_ORIENTATION_UNSET;
}
+ @ActivityInfo.ScreenOrientation
+ @Override
+ protected int getOverrideOrientation() {
+ if (isEmbedded() && !isVisibleRequested()) {
+ return SCREEN_ORIENTATION_UNSPECIFIED;
+ }
+ return super.getOverrideOrientation();
+ }
+
/**
* Whether or not to allow this container to specify an app requested orientation.
*
@@ -2195,7 +2204,7 @@
static class ConfigOverrideHint {
@Nullable DisplayInfo mTmpOverrideDisplayInfo;
@Nullable ActivityRecord.CompatDisplayInsets mTmpCompatInsets;
- boolean mUseLegacyInsetsForStableBounds;
+ boolean mUseOverrideInsetsForStableBounds;
}
void computeConfigResourceOverrides(@NonNull Configuration inOutConfig,
@@ -2228,11 +2237,11 @@
@NonNull Configuration parentConfig, @Nullable ConfigOverrideHint overrideHint) {
DisplayInfo overrideDisplayInfo = null;
ActivityRecord.CompatDisplayInsets compatInsets = null;
- boolean useLegacyInsetsForStableBounds = false;
+ boolean useOverrideInsetsForStableBounds = false;
if (overrideHint != null) {
overrideDisplayInfo = overrideHint.mTmpOverrideDisplayInfo;
compatInsets = overrideHint.mTmpCompatInsets;
- useLegacyInsetsForStableBounds = overrideHint.mUseLegacyInsetsForStableBounds;
+ useOverrideInsetsForStableBounds = overrideHint.mUseOverrideInsetsForStableBounds;
if (overrideDisplayInfo != null) {
// Make sure the screen related configs can be computed by the provided
// display info.
@@ -2312,7 +2321,7 @@
// The non decor inset are areas that could never be removed in Honeycomb. See
// {@link WindowManagerPolicy#getNonDecorInsetsLw}.
calculateInsetFrames(mTmpNonDecorBounds, mTmpStableBounds, mTmpFullBounds, di,
- useLegacyInsetsForStableBounds);
+ useOverrideInsetsForStableBounds);
} else {
// Apply the given non-decor and stable insets to calculate the corresponding bounds
// for screen size of configuration.
diff --git a/services/core/java/com/android/server/wm/TaskOrganizerController.java b/services/core/java/com/android/server/wm/TaskOrganizerController.java
index 74dad91..b24d53b 100644
--- a/services/core/java/com/android/server/wm/TaskOrganizerController.java
+++ b/services/core/java/com/android/server/wm/TaskOrganizerController.java
@@ -17,7 +17,7 @@
package com.android.server.wm;
import static android.app.ActivityTaskManager.INVALID_TASK_ID;
-import static android.app.AppCompatTaskInfo.cameraCompatControlStateToString;
+import static android.app.CameraCompatTaskInfo.cameraCompatControlStateToString;
import static android.window.StartingWindowRemovalInfo.DEFER_MODE_NONE;
import static android.window.StartingWindowRemovalInfo.DEFER_MODE_NORMAL;
import static android.window.StartingWindowRemovalInfo.DEFER_MODE_ROTATION;
diff --git a/services/core/java/com/android/server/wm/Transition.java b/services/core/java/com/android/server/wm/Transition.java
index 1b380aa..1543263 100644
--- a/services/core/java/com/android/server/wm/Transition.java
+++ b/services/core/java/com/android/server/wm/Transition.java
@@ -112,7 +112,6 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
-import java.util.concurrent.Executor;
import java.util.function.Predicate;
/**
@@ -1430,20 +1429,17 @@
}
}
if (mTransientLaunches != null) {
- InsetsControlTarget prevImeTarget = dc.getImeTarget(
- DisplayContent.IME_TARGET_CONTROL);
- InsetsControlTarget newImeTarget = null;
TaskDisplayArea transientTDA = null;
- // Transient-launch activities cannot be IME target (WindowState#canBeImeTarget),
- // so re-compute in case the IME target is changed after transition.
for (int t = 0; t < mTransientLaunches.size(); ++t) {
if (mTransientLaunches.keyAt(t).getDisplayContent() == dc) {
- newImeTarget = dc.computeImeTarget(true /* updateImeTarget */);
+ if (hasVisibleTransientLaunch) {
+ updateImeForVisibleTransientLaunch(dc);
+ }
transientTDA = mTransientLaunches.keyAt(i).getTaskDisplayArea();
break;
}
}
- if (mRecentsDisplayId != INVALID_DISPLAY && prevImeTarget == newImeTarget) {
+ if (!hasVisibleTransientLaunch && mRecentsDisplayId == dc.mDisplayId) {
// Restore IME icon only when moving the original app task to front from
// recents, in case IME icon may missing if the moving task has already been
// the current focused task.
@@ -1541,6 +1537,35 @@
return null;
}
+ /**
+ * Transient-launch activities cannot be IME target (see {@link WindowState#canBeImeTarget}),
+ * so re-compute in case the IME target is changed after transition.
+ */
+ private void updateImeForVisibleTransientLaunch(@NonNull DisplayContent dc) {
+ final WindowState imeTarget = dc.computeImeTarget(true /* updateImeTarget */);
+ final WindowState imeWindow = dc.mInputMethodWindow;
+ if (imeWindow == null || imeTarget == null
+ || !mController.hasCollectingRotationChange(dc, dc.getRotation())) {
+ return;
+ }
+ // Drop the insets leash if it is still controlled by previous (invisible) app. This avoids
+ // showing IME with old rotation on an app with new rotation if IME parent is updated
+ // but insets leash hasn't been refreshed, i.e. DisplayContent#updateImeParent is called
+ // but InsetsStateController#notifyControlTargetChanged still waits for IME to redraw.
+ final InsetsSourceProvider sourceProvider = imeWindow.getControllableInsetProvider();
+ if (sourceProvider == null || sourceProvider.mControl == null
+ || !sourceProvider.isClientVisible()
+ || imeTarget == sourceProvider.getControlTarget()) {
+ return;
+ }
+ final SurfaceControl imeInsetsLeash = sourceProvider.mControl.getLeash();
+ final InsetsControlTarget controlTarget = sourceProvider.getControlTarget();
+ if (imeInsetsLeash != null && controlTarget != null && controlTarget.getWindow() != null
+ && !controlTarget.getWindow().mToken.isVisible()) {
+ dc.getSyncTransaction().reparent(imeInsetsLeash, null);
+ }
+ }
+
void abort() {
// This calls back into itself via controller.abort, so just early return here.
if (mState == STATE_ABORT) return;
@@ -3254,9 +3279,15 @@
// Whether this is in a Task with embedded activity.
flags |= FLAG_IN_TASK_WITH_EMBEDDED_ACTIVITY;
}
- if (parentTask.forAllActivities(ActivityRecord::hasStartingWindow)) {
- // The starting window should cover all windows inside the leaf Task.
- flags |= FLAG_IS_BEHIND_STARTING_WINDOW;
+ final ActivityRecord starting = parentTask.topActivityContainsStartingWindow();
+ if (starting != null) {
+ if (starting == record || (starting.mStartingData != null
+ && starting.mStartingData.mAssociatedTask != null)) {
+ flags |= FLAG_IS_BEHIND_STARTING_WINDOW;
+ } else if (record != null && parentTask.mChildren.indexOf(record)
+ < parentTask.mChildren.indexOf(starting)) {
+ flags |= FLAG_IS_BEHIND_STARTING_WINDOW;
+ }
}
if (isWindowFillingTask(wc, parentTask)) {
// Whether the container fills its parent Task bounds.
diff --git a/services/core/java/com/android/server/wm/WindowManagerInternal.java b/services/core/java/com/android/server/wm/WindowManagerInternal.java
index 7e2ffd4..eeedec3 100644
--- a/services/core/java/com/android/server/wm/WindowManagerInternal.java
+++ b/services/core/java/com/android/server/wm/WindowManagerInternal.java
@@ -50,6 +50,7 @@
import android.view.WindowManager.DisplayImePolicy;
import android.view.inputmethod.ImeTracker;
import android.window.ScreenCapture;
+import android.window.ScreenCapture.ScreenshotHardwareBuffer;
import com.android.internal.policy.KeyInterceptionInfo;
import com.android.server.input.InputManagerService;
@@ -1043,6 +1044,13 @@
int[] fromOrientations, int[] toOrientations);
/**
+ * Set current screen capture session id that will be used during sensitive content protections.
+ *
+ * @param sessionId Session id for this screen capture protection
+ */
+ public abstract void setBlockScreenCaptureForAppsSessionId(long sessionId);
+
+ /**
* Set whether screen capture should be disabled for all windows of a specific app windows based
* on sensitive content protections.
*
@@ -1073,8 +1081,9 @@
public abstract boolean moveFocusToAdjacentEmbeddedActivityIfNeeded();
/**
- * Returns an instance of {@link ScreenCapture.ScreenshotHardwareBuffer} containing the current
+ * Returns an instance of {@link ScreenshotHardwareBuffer} containing the current
* screenshot.
*/
- public abstract ScreenCapture.ScreenshotHardwareBuffer takeAssistScreenshot();
+ public abstract ScreenshotHardwareBuffer takeAssistScreenshot(
+ Set<Integer> windowTypesToExclude);
}
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 1496ae0..de7c0eb 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -44,6 +44,7 @@
import static android.os.Process.myUid;
import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER;
import static android.permission.flags.Flags.sensitiveContentImprovements;
+import static android.permission.flags.Flags.sensitiveContentMetricsBugfix;
import static android.provider.Settings.Global.DEVELOPMENT_ENABLE_FREEFORM_WINDOWS_SUPPORT;
import static android.provider.Settings.Global.DEVELOPMENT_ENABLE_NON_RESIZABLE_MULTI_WINDOW;
import static android.provider.Settings.Global.DEVELOPMENT_FORCE_DESKTOP_MODE_ON_EXTERNAL_DISPLAYS;
@@ -113,6 +114,7 @@
import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_WINDOW_MOVEMENT;
import static com.android.internal.protolog.ProtoLogGroup.WM_ERROR;
import static com.android.internal.protolog.ProtoLogGroup.WM_SHOW_TRANSACTIONS;
+import static com.android.internal.util.FrameworkStatsLog.SENSITIVE_NOTIFICATION_APP_PROTECTION_APPLIED;
import static com.android.internal.util.LatencyTracker.ACTION_ROTATE_SCREEN;
import static com.android.server.LockGuard.INDEX_WINDOW;
import static com.android.server.LockGuard.installLock;
@@ -320,6 +322,7 @@
import android.window.ITrustedPresentationListener;
import android.window.InputTransferToken;
import android.window.ScreenCapture;
+import android.window.ScreenCapture.ScreenshotHardwareBuffer;
import android.window.SystemPerformanceHinter;
import android.window.TaskSnapshot;
import android.window.TrustedPresentationThresholds;
@@ -339,6 +342,7 @@
import com.android.internal.protolog.common.ProtoLog;
import com.android.internal.util.DumpUtils;
import com.android.internal.util.FastPrintWriter;
+import com.android.internal.util.FrameworkStatsLog;
import com.android.internal.util.LatencyTracker;
import com.android.internal.view.WindowManagerPolicyThread;
import com.android.server.AnimationThread;
@@ -384,6 +388,7 @@
import java.util.NoSuchElementException;
import java.util.Objects;
import java.util.Optional;
+import java.util.Set;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
@@ -1108,6 +1113,9 @@
SystemPerformanceHinter mSystemPerformanceHinter;
@GuardedBy("mGlobalLock")
+ private long mSensitiveContentProtectionSessionId = 0;
+
+ @GuardedBy("mGlobalLock")
final SensitiveContentPackages mSensitiveContentPackages = new SensitiveContentPackages();
/**
* UIDs for which a Toast has been shown to indicate
@@ -4172,7 +4180,7 @@
}
@Nullable
- private ScreenCapture.ScreenshotHardwareBuffer takeAssistScreenshot() {
+ private ScreenshotHardwareBuffer takeAssistScreenshot(Set<Integer> windowTypesToExclude) {
if (!checkCallingPermission(READ_FRAME_BUFFER, "requestAssistScreenshot()")) {
throw new SecurityException("Requires READ_FRAME_BUFFER permission");
}
@@ -4187,11 +4195,11 @@
}
captureArgs = null;
} else {
- captureArgs = displayContent.getLayerCaptureArgs();
+ captureArgs = displayContent.getLayerCaptureArgs(windowTypesToExclude);
}
}
- final ScreenCapture.ScreenshotHardwareBuffer screenshotBuffer;
+ final ScreenshotHardwareBuffer screenshotBuffer;
if (captureArgs != null) {
ScreenCapture.SynchronousScreenCaptureListener syncScreenCapture =
ScreenCapture.createSyncCaptureListener();
@@ -4217,7 +4225,8 @@
*/
@Override
public boolean requestAssistScreenshot(final IAssistDataReceiver receiver) {
- final ScreenCapture.ScreenshotHardwareBuffer shb = takeAssistScreenshot();
+ final ScreenshotHardwareBuffer shb =
+ takeAssistScreenshot(/* windowTypesToExclude= */ Set.of());
final Bitmap bm = shb != null ? shb.asBitmap() : null;
FgThread.getHandler().post(() -> {
try {
@@ -4272,7 +4281,7 @@
mTmpRect.offsetTo(0, 0);
final SurfaceControl sc = task.getSurfaceControl();
- final ScreenCapture.ScreenshotHardwareBuffer buffer = ScreenCapture.captureLayers(
+ final ScreenshotHardwareBuffer buffer = ScreenCapture.captureLayers(
layerCaptureArgsBuilder.setLayer(sc).setSourceCrop(mTmpRect).build());
if (buffer == null) {
Slog.w(TAG, "Could not get screenshot buffer for taskId: " + taskId);
@@ -4516,7 +4525,8 @@
}
}
- int getDisplayUserRotation(int displayId) {
+ @Override
+ public int getDisplayUserRotation(int displayId) {
synchronized (mGlobalLock) {
final DisplayContent display = mRoot.getDisplayContent(displayId);
if (display == null) {
@@ -8736,6 +8746,16 @@
}
@Override
+ public void setBlockScreenCaptureForAppsSessionId(long sessionId) {
+ synchronized (mGlobalLock) {
+ if (sensitiveContentMetricsBugfix()
+ && mSensitiveContentProtectionSessionId != sessionId) {
+ mSensitiveContentProtectionSessionId = sessionId;
+ }
+ }
+ }
+
+ @Override
public void addBlockScreenCaptureForApps(ArraySet<PackageInfo> packageInfos) {
synchronized (mGlobalLock) {
boolean modified =
@@ -8807,9 +8827,9 @@
}
@Override
- public ScreenCapture.ScreenshotHardwareBuffer takeAssistScreenshot() {
+ public ScreenshotHardwareBuffer takeAssistScreenshot(Set<Integer> windowTypesToExclude) {
// WMS.takeAssistScreenshot takes care of the locking.
- return WindowManagerService.this.takeAssistScreenshot();
+ return WindowManagerService.this.takeAssistScreenshot(windowTypesToExclude);
}
}
@@ -10199,6 +10219,15 @@
Toast.LENGTH_SHORT)
.show();
});
+ // If blocked due to notification protection (null window token) log protection applied
+ if (sensitiveContentMetricsBugfix()
+ && mSensitiveContentPackages
+ .shouldBlockScreenCaptureForApp(w.getOwningPackage(), uid, null)) {
+ FrameworkStatsLog.write(
+ SENSITIVE_NOTIFICATION_APP_PROTECTION_APPLIED,
+ mSensitiveContentProtectionSessionId,
+ uid);
+ }
}
}
}
diff --git a/services/core/java/com/android/server/wm/WindowOrganizerController.java b/services/core/java/com/android/server/wm/WindowOrganizerController.java
index 4180475..1573d09 100644
--- a/services/core/java/com/android/server/wm/WindowOrganizerController.java
+++ b/services/core/java/com/android/server/wm/WindowOrganizerController.java
@@ -19,6 +19,7 @@
import static android.Manifest.permission.START_TASKS_FROM_RECENTS;
import static android.app.ActivityManager.isStartResultSuccessful;
import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
+import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
import static android.app.WindowConfiguration.WINDOW_CONFIG_BOUNDS;
import static android.view.Display.DEFAULT_DISPLAY;
import static android.window.TaskFragmentOperation.OP_TYPE_CLEAR_ADJACENT_TASK_FRAGMENTS;
@@ -69,7 +70,6 @@
import static com.android.server.wm.ActivityRecord.State.PAUSING;
import static com.android.server.wm.ActivityRecord.State.RESUMED;
import static com.android.server.wm.ActivityTaskManagerService.enforceTaskPermission;
-import static com.android.server.wm.ActivityTaskManagerService.isPip2ExperimentEnabled;
import static com.android.server.wm.ActivityTaskSupervisor.REMOVE_FROM_RECENTS;
import static com.android.server.wm.Task.FLAG_FORCE_HIDDEN_FOR_PINNED_TASK;
import static com.android.server.wm.Task.FLAG_FORCE_HIDDEN_FOR_TASK_ORG;
@@ -838,8 +838,6 @@
}
private int applyTaskChanges(Task tr, WindowContainerTransaction.Change c) {
- final boolean wasPrevFocusableAndVisible = tr.isFocusableAndVisible();
-
int effects = applyChanges(tr, c);
final SurfaceControl.Transaction t = c.getBoundsChangeTransaction();
@@ -860,6 +858,17 @@
}
final int childWindowingMode = c.getActivityWindowingMode();
+ if (!ActivityTaskManagerService.isPip2ExperimentEnabled()
+ && tr.getWindowingMode() == WINDOWING_MODE_PINNED
+ && (childWindowingMode == WINDOWING_MODE_PINNED
+ || childWindowingMode == WINDOWING_MODE_UNDEFINED)) {
+ // If setActivityWindowingMode requested to match its pinned task's windowing mode,
+ // remove any inconsistency checking timeout callbacks for PiP.
+ Slog.d(TAG, "Task and activity windowing modes match, so remove any timeout "
+ + "abort PiP callbacks scheduled if needed; task_win_mode="
+ + tr.getWindowingMode() + ", activity_win_mode=" + childWindowingMode);
+ mService.mRootWindowContainer.removeAllMaybeAbortPipEnterRunnable();
+ }
if (childWindowingMode > -1) {
tr.forAllActivities(a -> { a.setWindowingMode(childWindowingMode); });
}
@@ -885,17 +894,8 @@
boolean canEnterPip = activity.checkEnterPictureInPictureState(
"applyTaskChanges", true /* beforeStopping */);
if (canEnterPip) {
- mService.mTaskSupervisor.beginDeferResume();
- try {
- canEnterPip = mService.mActivityClientController
- .requestPictureInPictureMode(activity);
- } finally {
- mService.mTaskSupervisor.endDeferResume();
- if (canEnterPip && !isPip2ExperimentEnabled()) {
- // Wait until the transaction is applied to only resume once.
- effects |= TRANSACT_EFFECTS_LIFECYCLE;
- }
- }
+ canEnterPip = mService.mActivityClientController
+ .requestPictureInPictureMode(activity);
}
if (!canEnterPip) {
// Restore the flag to its previous state when the activity cannot enter PIP.
@@ -904,11 +904,6 @@
}
}
- // Activity in this Task may resume/pause when enter/exit pip.
- if (wasPrevFocusableAndVisible != tr.isFocusableAndVisible()) {
- effects |= TRANSACT_EFFECTS_LIFECYCLE;
- }
-
return effects;
}
@@ -1025,7 +1020,9 @@
break;
}
final Task task = wc.asTask();
-
+ if (task.isVisibleRequested() || task.isVisible()) {
+ effects |= TRANSACT_EFFECTS_LIFECYCLE;
+ }
if (task.isLeafTask()) {
mService.mTaskSupervisor
.removeTask(task, true, REMOVE_FROM_RECENTS, "remove-task"
@@ -1559,7 +1556,7 @@
break;
}
case OP_TYPE_SET_ISOLATED_NAVIGATION: {
- final boolean isolatedNav = operation.isIsolatedNav();
+ final boolean isolatedNav = operation.getBooleanValue();
taskFragment.setIsolatedNav(isolatedNav);
break;
}
@@ -1604,14 +1601,13 @@
break;
}
case OP_TYPE_SET_DIM_ON_TASK: {
- final boolean dimOnTask = operation.isDimOnTask();
+ final boolean dimOnTask = operation.getBooleanValue();
taskFragment.setEmbeddedDimArea(dimOnTask ? EMBEDDED_DIM_AREA_PARENT_TASK
: EMBEDDED_DIM_AREA_TASK_FRAGMENT);
break;
}
case OP_TYPE_SET_MOVE_TO_BOTTOM_IF_CLEAR_WHEN_LAUNCH: {
- taskFragment.setMoveToBottomIfClearWhenLaunch(
- operation.isMoveToBottomIfClearWhenLaunch());
+ taskFragment.setMoveToBottomIfClearWhenLaunch(operation.getBooleanValue());
break;
}
case OP_TYPE_SET_DECOR_SURFACE_BOOSTED: {
diff --git a/services/core/java/com/android/server/wm/WindowProcessController.java b/services/core/java/com/android/server/wm/WindowProcessController.java
index 9d8246d..d91a211 100644
--- a/services/core/java/com/android/server/wm/WindowProcessController.java
+++ b/services/core/java/com/android/server/wm/WindowProcessController.java
@@ -631,6 +631,11 @@
return;
}
+ final WindowProcessController caller = mAtm.mProcessMap.getProcess(r.launchedFromPid);
+ if (caller != null && caller.mInstrumenting) {
+ return;
+ }
+
final long diff = launchTime - lastLaunchTime;
if (diff < RAPID_ACTIVITY_LAUNCH_MS) {
mRapidActivityLaunchCount++;
diff --git a/services/core/jni/com_android_server_hint_HintManagerService.cpp b/services/core/jni/com_android_server_hint_HintManagerService.cpp
index 5b8ef19..be18835 100644
--- a/services/core/jni/com_android_server_hint_HintManagerService.cpp
+++ b/services/core/jni/com_android_server_hint_HintManagerService.cpp
@@ -34,13 +34,13 @@
#include "jni.h"
+using aidl::android::hardware::power::SessionConfig;
using aidl::android::hardware::power::SessionHint;
using aidl::android::hardware::power::SessionMode;
+using aidl::android::hardware::power::SessionTag;
using aidl::android::hardware::power::WorkDuration;
using android::power::PowerHintSessionWrapper;
-using android::base::StringPrintf;
-
namespace android {
static struct {
@@ -66,6 +66,15 @@
return rate;
}
+void throwUnsupported(JNIEnv* env, const char* msg) {
+ env->ThrowNew(env->FindClass("java/lang/UnsupportedOperationException"), msg);
+}
+
+void throwFailed(JNIEnv* env, const char* msg) {
+ // We throw IllegalStateException for all errors other than the "unsupported" ones
+ env->ThrowNew(env->FindClass("java/lang/IllegalStateException"), msg);
+}
+
static jlong createHintSession(JNIEnv* env, int32_t tgid, int32_t uid,
std::vector<int32_t>& threadIds, int64_t durationNanos) {
auto result = gPowerHalController.createHintSession(tgid, uid, threadIds, durationNanos);
@@ -76,10 +85,38 @@
return res.second ? session_ptr : 0;
} else if (result.isFailed()) {
ALOGW("createHintSession failed with message: %s", result.errorMessage());
+ throwFailed(env, result.errorMessage());
+ } else if (result.isUnsupported()) {
+ throwUnsupported(env, result.errorMessage());
+ return -1;
}
return 0;
}
+static jlong createHintSessionWithConfig(JNIEnv* env, int32_t tgid, int32_t uid,
+ std::vector<int32_t> threadIds, int64_t durationNanos,
+ int32_t sessionTag, SessionConfig& config) {
+ auto result =
+ gPowerHalController.createHintSessionWithConfig(tgid, uid, threadIds, durationNanos,
+ static_cast<SessionTag>(sessionTag),
+ &config);
+ if (result.isOk()) {
+ jlong session_ptr = reinterpret_cast<jlong>(result.value().get());
+ std::scoped_lock sessionLock(gSessionMapLock);
+ auto res = gSessionMap.insert({session_ptr, result.value()});
+ if (!res.second) {
+ throwFailed(env, "PowerHAL provided an invalid session");
+ return 0;
+ }
+ return session_ptr;
+ } else if (result.isUnsupported()) {
+ throwUnsupported(env, result.errorMessage());
+ return -1;
+ }
+ throwFailed(env, result.errorMessage());
+ return 0;
+}
+
static void pauseHintSession(JNIEnv* env, int64_t session_ptr) {
auto appSession = reinterpret_cast<PowerHintSessionWrapper*>(session_ptr);
appSession->pause();
@@ -136,13 +173,34 @@
jintArray tids, jlong durationNanos) {
ScopedIntArrayRO tidArray(env, tids);
if (nullptr == tidArray.get() || tidArray.size() == 0) {
- ALOGW("GetIntArrayElements returns nullptr.");
+ ALOGW("nativeCreateHintSession: GetIntArrayElements returns nullptr.");
return 0;
}
std::vector<int32_t> threadIds(tidArray.get(), tidArray.get() + tidArray.size());
return createHintSession(env, tgid, uid, threadIds, durationNanos);
}
+static jlong nativeCreateHintSessionWithConfig(JNIEnv* env, jclass /* clazz */, jint tgid, jint uid,
+ jintArray tids, jlong durationNanos, jint sessionTag,
+ jobject sessionConfig) {
+ ScopedIntArrayRO tidArray(env, tids);
+ if (nullptr == tidArray.get() || tidArray.size() == 0) {
+ ALOGW("nativeCreateHintSessionWithConfig: GetIntArrayElements returns nullptr.");
+ return 0;
+ }
+ std::vector<int32_t> threadIds(tidArray.get(), tidArray.get() + tidArray.size());
+ SessionConfig config;
+ jlong out = createHintSessionWithConfig(env, tgid, uid, std::move(threadIds), durationNanos,
+ sessionTag, config);
+ if (out <= 0) {
+ return out;
+ }
+ static jclass configClass = env->FindClass("android/hardware/power/SessionConfig");
+ static jfieldID fid = env->GetFieldID(configClass, "id", "J");
+ env->SetLongField(sessionConfig, fid, config.id);
+ return out;
+}
+
static void nativePauseHintSession(JNIEnv* env, jclass /* clazz */, jlong session_ptr) {
pauseHintSession(env, session_ptr);
}
@@ -215,6 +273,8 @@
{"nativeInit", "()V", (void*)nativeInit},
{"nativeGetHintSessionPreferredRate", "()J", (void*)nativeGetHintSessionPreferredRate},
{"nativeCreateHintSession", "(II[IJ)J", (void*)nativeCreateHintSession},
+ {"nativeCreateHintSessionWithConfig", "(II[IJILandroid/hardware/power/SessionConfig;)J",
+ (void*)nativeCreateHintSessionWithConfig},
{"nativePauseHintSession", "(J)V", (void*)nativePauseHintSession},
{"nativeResumeHintSession", "(J)V", (void*)nativeResumeHintSession},
{"nativeCloseHintSession", "(J)V", (void*)nativeCloseHintSession},
diff --git a/services/core/jni/com_android_server_input_InputManagerService.cpp b/services/core/jni/com_android_server_input_InputManagerService.cpp
index 2f880ba..88c47f3 100644
--- a/services/core/jni/com_android_server_input_InputManagerService.cpp
+++ b/services/core/jni/com_android_server_input_InputManagerService.cpp
@@ -128,8 +128,7 @@
jmethodID getVirtualKeyQuietTimeMillis;
jmethodID getExcludedDeviceNames;
jmethodID getInputPortAssociations;
- jmethodID getInputUniqueIdAssociationsByPort;
- jmethodID getInputUniqueIdAssociationsByDescriptor;
+ jmethodID getInputUniqueIdAssociations;
jmethodID getDeviceTypeAssociations;
jmethodID getKeyboardLayoutAssociations;
jmethodID getHoverTapTimeout;
@@ -635,13 +634,10 @@
env->DeleteLocalRef(portAssociations);
}
- outConfig->uniqueIdAssociationsByPort = readMapFromInterleavedJavaArray<
- std::string>(gServiceClassInfo.getInputUniqueIdAssociationsByPort,
- "getInputUniqueIdAssociationsByPort");
-
- outConfig->uniqueIdAssociationsByDescriptor = readMapFromInterleavedJavaArray<
- std::string>(gServiceClassInfo.getInputUniqueIdAssociationsByDescriptor,
- "getInputUniqueIdAssociationsByDescriptor");
+ outConfig->uniqueIdAssociations =
+ readMapFromInterleavedJavaArray<std::string>(gServiceClassInfo
+ .getInputUniqueIdAssociations,
+ "getInputUniqueIdAssociations");
outConfig->deviceTypeAssociations =
readMapFromInterleavedJavaArray<std::string>(gServiceClassInfo
@@ -3094,11 +3090,8 @@
GET_METHOD_ID(gServiceClassInfo.getInputPortAssociations, clazz,
"getInputPortAssociations", "()[Ljava/lang/String;");
- GET_METHOD_ID(gServiceClassInfo.getInputUniqueIdAssociationsByPort, clazz,
- "getInputUniqueIdAssociationsByPort", "()[Ljava/lang/String;");
-
- GET_METHOD_ID(gServiceClassInfo.getInputUniqueIdAssociationsByDescriptor, clazz,
- "getInputUniqueIdAssociationsByDescriptor", "()[Ljava/lang/String;");
+ GET_METHOD_ID(gServiceClassInfo.getInputUniqueIdAssociations, clazz,
+ "getInputUniqueIdAssociations", "()[Ljava/lang/String;");
GET_METHOD_ID(gServiceClassInfo.getDeviceTypeAssociations, clazz, "getDeviceTypeAssociations",
"()[Ljava/lang/String;");
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyCacheImpl.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyCacheImpl.java
index c4e2dc8..b76279b 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyCacheImpl.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyCacheImpl.java
@@ -32,7 +32,6 @@
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
-import java.util.concurrent.atomic.AtomicBoolean;
/**
* Implementation of {@link DevicePolicyCache}, to which {@link DevicePolicyManagerService} pushes
@@ -48,18 +47,11 @@
private final Object mLock = new Object();
/**
- * Indicates which user is screen capture disallowed on. Can be {@link UserHandle#USER_NULL},
- * {@link UserHandle#USER_ALL} or a concrete user ID.
- */
- @GuardedBy("mLock")
- private int mScreenCaptureDisallowedUser = UserHandle.USER_NULL;
-
- /**
* Indicates if screen capture is disallowed on a specific user or all users if
* it contains {@link UserHandle#USER_ALL}.
*/
@GuardedBy("mLock")
- private Set<Integer> mScreenCaptureDisallowedUsers = new HashSet<>();
+ private final Set<Integer> mScreenCaptureDisallowedUsers = new HashSet<>();
@GuardedBy("mLock")
private final SparseIntArray mPasswordQuality = new SparseIntArray();
@@ -70,9 +62,8 @@
@GuardedBy("mLock")
private ArrayMap<String, String> mLauncherShortcutOverrides = new ArrayMap<>();
-
/** Maps to {@code ActiveAdmin.mAdminCanGrantSensorsPermissions}. */
- private final AtomicBoolean mCanGrantSensorsPermissions = new AtomicBoolean(false);
+ private volatile boolean mCanGrantSensorsPermissions = false;
@GuardedBy("mLock")
private final SparseIntArray mContentProtectionPolicy = new SparseIntArray();
@@ -87,10 +78,6 @@
@Override
public boolean isScreenCaptureAllowed(int userHandle) {
- return isScreenCaptureAllowedInPolicyEngine(userHandle);
- }
-
- private boolean isScreenCaptureAllowedInPolicyEngine(int userHandle) {
// This won't work if resolution mechanism is not strictest applies, but it's ok for now.
synchronized (mLock) {
return !mScreenCaptureDisallowedUsers.contains(userHandle)
@@ -98,18 +85,6 @@
}
}
- public int getScreenCaptureDisallowedUser() {
- synchronized (mLock) {
- return mScreenCaptureDisallowedUser;
- }
- }
-
- public void setScreenCaptureDisallowedUser(int userHandle) {
- synchronized (mLock) {
- mScreenCaptureDisallowedUser = userHandle;
- }
- }
-
public void setScreenCaptureDisallowedUser(int userHandle, boolean disallowed) {
synchronized (mLock) {
if (disallowed) {
@@ -170,12 +145,12 @@
@Override
public boolean canAdminGrantSensorsPermissions() {
- return mCanGrantSensorsPermissions.get();
+ return mCanGrantSensorsPermissions;
}
/** Sets admin control over permission grants. */
public void setAdminCanGrantSensorsPermissions(boolean canGrant) {
- mCanGrantSensorsPermissions.set(canGrant);
+ mCanGrantSensorsPermissions = canGrant;
}
@Override
@@ -205,7 +180,7 @@
pw.println("Password quality: " + mPasswordQuality);
pw.println("Permission policy: " + mPermissionPolicy);
pw.println("Content protection policy: " + mContentProtectionPolicy);
- pw.println("Admin can grant sensors permission: " + mCanGrantSensorsPermissions.get());
+ pw.println("Admin can grant sensors permission: " + mCanGrantSensorsPermissions);
pw.print("Shortcuts overrides: ");
pw.println(mLauncherShortcutOverrides);
pw.decreaseIndent();
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyEngine.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyEngine.java
index 065c14e..d114337 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyEngine.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyEngine.java
@@ -1636,15 +1636,14 @@
* active policies for that admin.
*/
private <V> void decreasePolicySizeForAdmin(PolicyState<V> policyState, EnforcingAdmin admin) {
- if (policyState.getPoliciesSetByAdmins().containsKey(admin)) {
- mAdminPolicySize.get(admin.getUserId()).put(admin,
- mAdminPolicySize.get(admin.getUserId()).get(admin) - sizeOf(
- policyState.getPoliciesSetByAdmins().get(admin)));
- }
- if (!mAdminPolicySize.contains(admin.getUserId())
+ if (!policyState.getPoliciesSetByAdmins().containsKey(admin)
+ || !mAdminPolicySize.contains(admin.getUserId())
|| !mAdminPolicySize.get(admin.getUserId()).containsKey(admin)) {
return;
}
+ mAdminPolicySize.get(admin.getUserId()).put(admin,
+ mAdminPolicySize.get(admin.getUserId()).get(admin) - sizeOf(
+ policyState.getPoliciesSetByAdmins().get(admin)));
if (mAdminPolicySize.get(admin.getUserId()).get(admin) <= 0) {
mAdminPolicySize.get(admin.getUserId()).remove(admin);
}
@@ -1704,6 +1703,25 @@
pw.println();
}
pw.decreaseIndent();
+ if (Flags.devicePolicySizeTrackingInternalBugFixEnabled()) {
+ pw.println();
+
+ pw.println("Default admin policy size limit: " + DEFAULT_POLICY_SIZE_LIMIT);
+ pw.println("Current admin policy size limit: " + mPolicySizeLimit);
+ pw.println("Admin Policies size: ");
+ for (int i = 0; i < mAdminPolicySize.size(); i++) {
+ int userId = mAdminPolicySize.keyAt(i);
+ pw.printf("User %d:\n", userId);
+ pw.increaseIndent();
+ for (EnforcingAdmin admin : mAdminPolicySize.get(userId).keySet()) {
+ pw.printf("Admin : " + admin + " : " + mAdminPolicySize.get(userId).get(
+ admin));
+ pw.println();
+ }
+ pw.decreaseIndent();
+ }
+ pw.decreaseIndent();
+ }
}
}
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index be235b3b..6458eac 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -76,6 +76,7 @@
import static android.Manifest.permission.MANAGE_DEVICE_POLICY_SECURITY_LOGGING;
import static android.Manifest.permission.MANAGE_DEVICE_POLICY_SMS;
import static android.Manifest.permission.MANAGE_DEVICE_POLICY_STATUS_BAR;
+import static android.Manifest.permission.MANAGE_DEVICE_POLICY_STORAGE_LIMIT;
import static android.Manifest.permission.MANAGE_DEVICE_POLICY_SUPPORT_MESSAGE;
import static android.Manifest.permission.MANAGE_DEVICE_POLICY_SYSTEM_DIALOGS;
import static android.Manifest.permission.MANAGE_DEVICE_POLICY_SYSTEM_UPDATES;
@@ -88,7 +89,6 @@
import static android.Manifest.permission.MANAGE_DEVICE_POLICY_WIFI;
import static android.Manifest.permission.MANAGE_DEVICE_POLICY_WINDOWS;
import static android.Manifest.permission.MANAGE_DEVICE_POLICY_WIPE_DATA;
-import static android.Manifest.permission.MANAGE_DEVICE_POLICY_STORAGE_LIMIT;
import static android.Manifest.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS;
import static android.Manifest.permission.MASTER_CLEAR;
import static android.Manifest.permission.NOTIFY_PENDING_SYSTEM_UPDATE;
@@ -116,7 +116,6 @@
import static android.app.admin.DeviceAdminInfo.USES_POLICY_WIPE_DATA;
import static android.app.admin.DeviceAdminReceiver.ACTION_COMPLIANCE_ACKNOWLEDGEMENT_REQUIRED;
import static android.app.admin.DeviceAdminReceiver.EXTRA_TRANSFER_OWNERSHIP_ADMIN_EXTRAS_BUNDLE;
-import static android.app.admin.DevicePolicyIdentifiers.AUTO_TIMEZONE_POLICY;
import static android.app.admin.DevicePolicyManager.ACTION_CHECK_POLICY_COMPLIANCE;
import static android.app.admin.DevicePolicyManager.ACTION_DEVICE_FINANCING_STATE_CHANGED;
import static android.app.admin.DevicePolicyManager.ACTION_DEVICE_POLICY_RESOURCE_UPDATED;
@@ -407,7 +406,6 @@
import android.location.Location;
import android.location.LocationManager;
import android.media.AudioManager;
-import android.media.IAudioService;
import android.net.ConnectivityManager;
import android.net.ConnectivitySettingsManager;
import android.net.IIpConnectivityMetrics;
@@ -1770,10 +1768,6 @@
ServiceManager.getService(Context.BACKUP_SERVICE));
}
- IAudioService getIAudioService() {
- return IAudioService.Stub.asInterface(ServiceManager.getService(Context.AUDIO_SERVICE));
- }
-
PersistentDataBlockManagerInternal getPersistentDataBlockManagerInternal() {
return LocalServices.getService(PersistentDataBlockManagerInternal.class);
}
@@ -1946,10 +1940,6 @@
name, value, userHandle);
}
- void settingsSecurePutInt(String name, int value) {
- Settings.Secure.putInt(mContext.getContentResolver(), name, value);
- }
-
int settingsGlobalGetInt(String name, int def) {
return Settings.Global.getInt(mContext.getContentResolver(), name, def);
}
@@ -1963,10 +1953,6 @@
Settings.Global.putInt(mContext.getContentResolver(), name, value);
}
- void settingsSecurePutString(String name, String value) {
- Settings.Secure.putString(mContext.getContentResolver(), name, value);
- }
-
void settingsGlobalPutString(String name, String value) {
Settings.Global.putString(mContext.getContentResolver(), name, value);
}
@@ -2907,16 +2893,6 @@
return poAdmin;
}
- @NonNull ActiveAdmin getOrganizationOwnedProfileOwnerLocked(final CallerIdentity caller) {
- Preconditions.checkCallAuthorization(
- mOwners.isProfileOwnerOfOrganizationOwnedDevice(caller.getUserId()),
- "Caller %s is not an admin of an org-owned device",
- caller.getComponentName());
- final ActiveAdmin profileOwner = getProfileOwnerLocked(caller.getUserId());
-
- return profileOwner;
- }
-
ActiveAdmin getProfileOwnerOrDeviceOwnerLocked(@UserIdInt int userId) {
ensureLocked();
// Try to find an admin which can use reqPolicy
@@ -2929,18 +2905,6 @@
return getDeviceOwnerLocked(userId);
}
- ActiveAdmin getProfileOwnerOrDefaultDeviceOwnerLocked(@UserIdInt int userId) {
- ensureLocked();
- // Try to find an admin which can use reqPolicy
- final ComponentName poAdminComponent = mOwners.getProfileOwnerComponent(userId);
-
- if (poAdminComponent != null) {
- return getProfileOwnerLocked(userId);
- }
-
- return getDefaultDeviceOwnerLocked(userId);
- }
-
@NonNull ActiveAdmin getParentOfAdminIfRequired(ActiveAdmin admin, boolean parent) {
Objects.requireNonNull(admin);
return parent ? admin.getParentActiveAdmin() : admin;
@@ -4453,25 +4417,6 @@
* <ul>
* <li>The active admins associated with the userHandle itself</li>
* <li>The parent active admins for each managed profile associated with the userHandle</li>
- * </ul>
- *
- * @param userHandle the affected user for whom to get the active admins
- * @return the list of active admins for the affected user
- */
- @GuardedBy("getLockObject()")
- private List<ActiveAdmin> getActiveAdminsForAffectedUserLocked(int userHandle) {
- if (isManagedProfile(userHandle)) {
- return getUserDataUnchecked(userHandle).mAdminList;
- }
- return getActiveAdminsForUserAndItsManagedProfilesLocked(userHandle,
- /* shouldIncludeProfileAdmins */ (user) -> false);
- }
-
- /**
- * Get the list of active admins for an affected user:
- * <ul>
- * <li>The active admins associated with the userHandle itself</li>
- * <li>The parent active admins for each managed profile associated with the userHandle</li>
* <li>The permission based admin associated with the userHandle itself</li>
* </ul>
*
@@ -8688,17 +8633,6 @@
.write();
}
- // Set the latest screen capture policy, overriding any existing ones.
- // userHandle can be one of USER_ALL, USER_NULL or a concrete userId.
- private void setScreenCaptureDisabled(int userHandle) {
- int current = mPolicyCache.getScreenCaptureDisallowedUser();
- if (userHandle == current) {
- return;
- }
- mPolicyCache.setScreenCaptureDisallowedUser(userHandle);
- updateScreenCaptureDisabled();
- }
-
/**
* Returns whether or not screen capture is disabled for any active admin.
*/
@@ -9915,16 +9849,6 @@
return doOrPo;
}
- ActiveAdmin getDeviceOwnerOrProfileOwnerOfOrganizationOwnedDeviceParentLocked(int userId) {
- ensureLocked();
- ActiveAdmin admin = getDeviceOwnerAdminLocked();
- if (admin != null) {
- return admin;
- }
- admin = getProfileOwnerOfOrganizationOwnedDeviceLocked(userId);
- return admin != null ? admin.getParentActiveAdmin() : null;
- }
-
@Override
public void clearDeviceOwner(String packageName) {
Objects.requireNonNull(packageName, "packageName is null");
@@ -10253,13 +10177,6 @@
return mInjector.hasUserSetupCompleted(getUserData(userHandle));
}
- private boolean hasPaired(int userHandle) {
- if (!mHasFeature) {
- return true;
- }
- return getUserData(userHandle).mPaired;
- }
-
@Override
public int getUserProvisioningState(int userHandle) {
if (!mHasFeature) {
@@ -11054,16 +10971,6 @@
return enforcingAdmin;
}
- private void enforceCanCallLockTaskLocked(CallerIdentity caller) {
- Preconditions.checkCallAuthorization(isProfileOwner(caller)
- || isDefaultDeviceOwner(caller) || isFinancedDeviceOwner(caller));
-
- final int userId = caller.getUserId();
- if (!canDPCManagedUserUseLockTaskLocked(userId)) {
- throw new SecurityException("User " + userId + " is not allowed to use lock task");
- }
- }
-
private boolean isSystemUid(CallerIdentity caller) {
return UserHandle.isSameApp(caller.getUid(), Process.SYSTEM_UID);
}
@@ -12413,7 +12320,8 @@
if (Flags.headlessDeviceOwnerSingleUserEnabled()) {
// Block this method if the device is in headless main user mode
Preconditions.checkCallAuthorization(
- getHeadlessDeviceOwnerModeForDeviceOwner()
+ !mInjector.userManagerIsHeadlessSystemUserMode()
+ || getHeadlessDeviceOwnerModeForDeviceOwner()
!= HEADLESS_DEVICE_OWNER_MODE_SINGLE_USER,
"createAndManageUser was called while in headless single user mode");
}
@@ -14595,15 +14503,6 @@
}
}
- private void setLockTaskPackagesLocked(int userHandle, List<String> packages) {
- DevicePolicyData policy = getUserData(userHandle);
- policy.mLockTaskPackages = packages;
-
- // Store the settings persistently.
- saveSettingsLocked(userHandle);
- updateLockTaskPackagesLocked(mContext, packages, userHandle);
- }
-
@Override
public String[] getLockTaskPackages(ComponentName who, String callerPackageName) {
CallerIdentity caller = getCallerIdentity(who, callerPackageName);
@@ -14653,7 +14552,6 @@
"Cannot use LOCK_TASK_FEATURE_NOTIFICATIONS without LOCK_TASK_FEATURE_HOME");
CallerIdentity caller = getCallerIdentity(who, callerPackageName);
- final int userHandle = caller.getUserId();
synchronized (getLockObject()) {
checkCanExecuteOrThrowUnsafe(DevicePolicyManager.OPERATION_SET_LOCK_TASK_FEATURES);
}
@@ -14689,13 +14587,6 @@
}
}
- private void setLockTaskFeaturesLocked(int userHandle, int flags) {
- DevicePolicyData policy = getUserData(userHandle);
- policy.mLockTaskFeatures = flags;
- saveSettingsLocked(userHandle);
- updateLockTaskFeaturesLocked(flags, userHandle);
- }
-
@Override
public int getLockTaskFeatures(ComponentName who, String callerPackageName) {
CallerIdentity caller = getCallerIdentity(who, callerPackageName);
@@ -16171,29 +16062,6 @@
}
}
-
- /**
- * Excludes restrictions imposed by UserManager.
- */
- private List<UserManager.EnforcingUser> getDevicePolicySources(
- List<UserManager.EnforcingUser> sources) {
- int sizeBefore = sources.size();
- List<UserManager.EnforcingUser> realSources = new ArrayList<>(sizeBefore);
- for (int i = 0; i < sizeBefore; i++) {
- UserManager.EnforcingUser source = sources.get(i);
- int type = source.getUserRestrictionSource();
- if (type != UserManager.RESTRICTION_SOURCE_PROFILE_OWNER
- && type != UserManager.RESTRICTION_SOURCE_DEVICE_OWNER) {
- // TODO(b/128928355): add unit test
- Slogf.d(LOG_TAG, "excluding source of type %s at index %d",
- userRestrictionSourceToString(type), i);
- continue;
- }
- realSources.add(source);
- }
- return realSources;
- }
-
private static String userRestrictionSourceToString(@UserRestrictionSource int source) {
return DebugUtils.flagsToString(UserManager.class, "RESTRICTION_", source);
}
@@ -20870,17 +20738,6 @@
}
}
- private void suspendPersonalAppsInPackageManager(int userId) {
- mInjector.binderWithCleanCallingIdentity(() -> {
- final String[] appsToSuspend = mInjector.getPersonalAppsForSuspension(userId);
- final String[] failedApps = mInjector.getPackageManagerInternal()
- .setPackagesSuspendedByAdmin(userId, appsToSuspend, true);
- if (!ArrayUtils.isEmpty(failedApps)) {
- Slogf.wtf(LOG_TAG, "Failed to suspend apps: " + String.join(",", failedApps));
- }
- });
- }
-
private void notifyIfManagedSubscriptionsAreUnavailable(
UserHandle managedProfile, boolean managedProfileAvailable) {
if (!isManagedProfile(managedProfile.getIdentifier())) {
@@ -23329,14 +23186,6 @@
return getEnforcingAdminForCaller(admin, callerPackageName);
}
- private static final HashMap<String, String> POLICY_IDENTIFIER_TO_PERMISSION = new HashMap<>();
- {
- POLICY_IDENTIFIER_TO_PERMISSION.put(AUTO_TIMEZONE_POLICY, SET_TIME_ZONE);
- }
-
- private static final HashMap<String, Integer> POLICY_IDENTIFIER_TO_ACTIVE_ADMIN_POLICY =
- new HashMap<>();
-
/**
* Checks if the calling process has been granted permission to apply a device policy.
*
@@ -23355,7 +23204,6 @@
}
}
-
/**
* Checks if the calling process has been granted permission to apply a device policy on a
* specific user. Only one permission provided in the list needs to be granted to pass this
@@ -23472,10 +23320,12 @@
}
private boolean hasAdminPolicy(int adminPolicy, String callerPackageName) {
- CallerIdentity caller = getCallerIdentity(callerPackageName);
- ActiveAdmin deviceAdmin = getActiveAdminWithPolicyForUidLocked(
- null, adminPolicy, caller.getUid());
- return deviceAdmin != null;
+ synchronized (getLockObject()) {
+ CallerIdentity caller = getCallerIdentity(callerPackageName);
+ ActiveAdmin deviceAdmin = getActiveAdminWithPolicyForUidLocked(
+ null, adminPolicy, caller.getUid());
+ return deviceAdmin != null;
+ }
}
/**
@@ -24455,52 +24305,6 @@
}
}
- // We need to add a mapping of policyId to permission in POLICY_IDENTIFIER_TO_PERMISSION
- // for each migrated permission.
- private List<ActiveAdmin> getNonDPCActiveAdminsForPolicyLocked(String policyIdentifier) {
- Integer activeAdminPolicy = POLICY_IDENTIFIER_TO_ACTIVE_ADMIN_POLICY.get(policyIdentifier);
- if (activeAdminPolicy == null) {
- Slogf.e(LOG_TAG,
- "Can't find a active admin policy for %s in POLICY_IDENTIFIER_TO_PERMISSION",
- policyIdentifier);
- return new ArrayList<>();
- }
-
- List<ActiveAdmin> admins = new ArrayList<>();
- for (UserInfo userInfo : mUserManager.getUsers()) {
- List<ComponentName> activeAdmins = getActiveAdmins(userInfo.id);
- for (ComponentName admin : activeAdmins) {
- if (isDeviceOwner(admin, userInfo.id) || isProfileOwner(admin, userInfo.id)) {
- continue;
- }
- DevicePolicyData policy = getUserDataUnchecked(userInfo.id);
- if (isActiveAdminWithPolicyForUserLocked(
- policy.mAdminMap.get(admin), activeAdminPolicy,
- userInfo.id)) {
- admins.add(policy.mAdminMap.get(admin));
- }
- }
- }
- return admins;
- }
-
- // TODO: this can actually accept an EnforcingAdmin that gets created in the permission
- // check method.
- private boolean isCallerActiveAdminOrDelegate(
- CallerIdentity caller, @Nullable String delegateScope) {
- return mInjector.binderWithCleanCallingIdentity(() -> {
- List<ComponentName> activeAdmins = getActiveAdmins(caller.getUserId());
- if (activeAdmins != null) {
- for (ComponentName admin : activeAdmins) {
- if (admin.getPackageName().equals(caller.getPackageName())) {
- return true;
- }
- }
- }
- return delegateScope != null && isCallerDelegate(caller, delegateScope);
- });
- }
-
private ActiveAdmin getActiveAdminForCaller(@Nullable ComponentName who,
CallerIdentity caller) {
synchronized (getLockObject()) {
diff --git a/services/foldables/devicestateprovider/src/com/android/server/policy/BookStyleDeviceStatePolicy.java b/services/foldables/devicestateprovider/src/com/android/server/policy/BookStyleDeviceStatePolicy.java
index 95c4407..cc5573b 100644
--- a/services/foldables/devicestateprovider/src/com/android/server/policy/BookStyleDeviceStatePolicy.java
+++ b/services/foldables/devicestateprovider/src/com/android/server/policy/BookStyleDeviceStatePolicy.java
@@ -103,6 +103,12 @@
final DisplayManager displayManager = mContext.getSystemService(DisplayManager.class);
mEnablePostureBasedClosedState = featureFlags.enableFoldablesPostureBasedClosedState();
+ if (mEnablePostureBasedClosedState) {
+ // This configuration doesn't require listening to hall sensor, it solely relies
+ // on the fused hinge angle sensor
+ hallSensor = null;
+ }
+
mIsDualDisplayBlockingEnabled = featureFlags.enableDualDisplayBlocking();
final DeviceStatePredicateWrapper[] configuration = createConfiguration(
diff --git a/services/foldables/devicestateprovider/src/com/android/server/policy/BookStyleStateTransitions.java b/services/foldables/devicestateprovider/src/com/android/server/policy/BookStyleStateTransitions.java
index 16daacb..aa7532a 100644
--- a/services/foldables/devicestateprovider/src/com/android/server/policy/BookStyleStateTransitions.java
+++ b/services/foldables/devicestateprovider/src/com/android/server/policy/BookStyleStateTransitions.java
@@ -412,7 +412,7 @@
/* stickyKeepInnerUntil45Degrees */ true,
PreferredScreen.INNER,
/* setStickyKeepOuterUntil90Degrees */ null,
- /* setStickyKeepInnerUntil45Degrees */ false
+ /* setStickyKeepInnerUntil45Degrees */ null
));
DEFAULT_STATE_TRANSITIONS.add(new StateTransition(
HingeAngle.ANGLE_45_TO_90,
@@ -492,7 +492,7 @@
/* stickyKeepInnerUntil45Degrees */ true,
PreferredScreen.INNER,
/* setStickyKeepOuterUntil90Degrees */ null,
- /* setStickyKeepInnerUntil45Degrees */ false
+ /* setStickyKeepInnerUntil45Degrees */ null
));
DEFAULT_STATE_TRANSITIONS.add(new StateTransition(
HingeAngle.ANGLE_45_TO_90,
diff --git a/services/foldables/devicestateprovider/src/com/android/server/policy/FoldableDeviceStateProvider.java b/services/foldables/devicestateprovider/src/com/android/server/policy/FoldableDeviceStateProvider.java
index bc8643f..daeaa98 100644
--- a/services/foldables/devicestateprovider/src/com/android/server/policy/FoldableDeviceStateProvider.java
+++ b/services/foldables/devicestateprovider/src/com/android/server/policy/FoldableDeviceStateProvider.java
@@ -95,6 +95,7 @@
private final Sensor mHingeAngleSensor;
private final DisplayManager mDisplayManager;
+ @Nullable
private final Sensor mHallSensor;
private static final Predicate<FoldableDeviceStateProvider> ALLOWED = p -> true;
@@ -122,7 +123,7 @@
@NonNull Context context,
@NonNull SensorManager sensorManager,
@NonNull Sensor hingeAngleSensor,
- @NonNull Sensor hallSensor,
+ @Nullable Sensor hallSensor,
@NonNull DisplayManager displayManager,
@NonNull DeviceStatePredicateWrapper[] deviceStatePredicateWrappers) {
this(new FeatureFlagsImpl(), context, sensorManager, hingeAngleSensor, hallSensor,
@@ -135,7 +136,7 @@
@NonNull Context context,
@NonNull SensorManager sensorManager,
@NonNull Sensor hingeAngleSensor,
- @NonNull Sensor hallSensor,
+ @Nullable Sensor hallSensor,
@NonNull DisplayManager displayManager,
@NonNull DeviceStatePredicateWrapper[] deviceStatePredicateWrappers) {
@@ -149,7 +150,9 @@
mIsDualDisplayBlockingEnabled = featureFlags.enableDualDisplayBlocking();
sensorManager.registerListener(this, mHingeAngleSensor, SENSOR_DELAY_FASTEST);
- sensorManager.registerListener(this, mHallSensor, SENSOR_DELAY_FASTEST);
+ if (hallSensor != null) {
+ sensorManager.registerListener(this, mHallSensor, SENSOR_DELAY_FASTEST);
+ }
mOrderedStates = new DeviceState[deviceStatePredicateWrappers.length];
for (int i = 0; i < deviceStatePredicateWrappers.length; i++) {
@@ -324,7 +327,7 @@
@Override
public void onSensorChanged(SensorEvent event) {
synchronized (mLock) {
- if (event.sensor == mHallSensor) {
+ if (mHallSensor != null && event.sensor == mHallSensor) {
mLastHallSensorEvent = event;
} else if (event.sensor == mHingeAngleSensor) {
mLastHingeAngleSensorEvent = event;
@@ -359,11 +362,11 @@
}
@GuardedBy("mLock")
- private void dumpSensorValues(Sensor sensor, @Nullable SensorEvent event) {
+ private void dumpSensorValues(@Nullable Sensor sensor, @Nullable SensorEvent event) {
Slog.i(TAG, toSensorValueString(sensor, event));
}
- private String toSensorValueString(Sensor sensor, @Nullable SensorEvent event) {
+ private String toSensorValueString(@Nullable Sensor sensor, @Nullable SensorEvent event) {
String sensorString = sensor == null ? "null" : sensor.getName();
String eventValues = event == null ? "null" : Arrays.toString(event.values);
return sensorString + " : " + eventValues;
diff --git a/services/foldables/devicestateprovider/tests/src/com/android/server/policy/BookStyleDeviceStatePolicyTest.java b/services/foldables/devicestateprovider/tests/src/com/android/server/policy/BookStyleDeviceStatePolicyTest.java
index 901f24d..2d725d1 100644
--- a/services/foldables/devicestateprovider/tests/src/com/android/server/policy/BookStyleDeviceStatePolicyTest.java
+++ b/services/foldables/devicestateprovider/tests/src/com/android/server/policy/BookStyleDeviceStatePolicyTest.java
@@ -219,6 +219,26 @@
}
@Test
+ public void test_postureBasedClosedState_createPolicy_doesNotRegisterHallSensor() {
+ mFakeFeatureFlags.setFlag(Flags.FLAG_ENABLE_FOLDABLES_POSTURE_BASED_CLOSED_STATE, true);
+ clearInvocations(mSensorManager);
+
+ mInstrumentation.runOnMainSync(() -> mProvider = createProvider());
+
+ verify(mSensorManager, never()).registerListener(any(), eq(mHallSensor), anyInt());
+ }
+
+ @Test
+ public void test_postureBasedClosedStateDisabled_createPolicy_registersHallSensor() {
+ mFakeFeatureFlags.setFlag(Flags.FLAG_ENABLE_FOLDABLES_POSTURE_BASED_CLOSED_STATE, false);
+ clearInvocations(mSensorManager);
+
+ mInstrumentation.runOnMainSync(() -> mProvider = createProvider());
+
+ verify(mSensorManager).registerListener(any(), eq(mHallSensor), anyInt());
+ }
+
+ @Test
public void test_noSensorEventsYet_reportOpenedState() {
mProvider.setListener(mListener);
verify(mListener).onStateChanged(mDeviceStateCaptor.capture());
@@ -491,7 +511,7 @@
}
@Test
- public void test_unfoldTo60Degrees_andFoldTo10_switchesToClosedState() {
+ public void test_unfoldTo60Degrees_andFoldTo10_doesNotSwitchToClosedState() {
sendHingeAngle(0f);
sendRightSideFlatSensorEvent(false);
mProvider.setListener(mListener);
@@ -502,6 +522,36 @@
sendHingeAngle(10f);
+ verify(mListener, never()).onStateChanged(anyInt());
+ }
+
+ @Test
+ public void test_unfoldTo100Degrees_andFoldTo10_switchesToClosedState() {
+ sendHingeAngle(0f);
+ sendRightSideFlatSensorEvent(false);
+ mProvider.setListener(mListener);
+ assertLatestReportedState(DEVICE_STATE_CLOSED);
+ sendHingeAngle(100f);
+ assertLatestReportedState(DEVICE_STATE_HALF_OPENED);
+ clearInvocations(mListener);
+
+ sendHingeAngle(10f);
+
+ verify(mListener).onStateChanged(DEVICE_STATE_CLOSED);
+ }
+
+ @Test
+ public void test_unfoldTo10Degrees_andFoldTo0_switchesToClosedState() {
+ sendHingeAngle(0f);
+ sendRightSideFlatSensorEvent(false);
+ mProvider.setListener(mListener);
+ assertLatestReportedState(DEVICE_STATE_CLOSED);
+ sendHingeAngle(10f);
+ assertLatestReportedState(DEVICE_STATE_HALF_OPENED);
+ clearInvocations(mListener);
+
+ sendHingeAngle(0f);
+
verify(mListener).onStateChanged(DEVICE_STATE_CLOSED);
}
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index 648b810..8caf5ae 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -91,6 +91,7 @@
import android.util.Dumpable;
import android.util.EventLog;
import android.util.IndentingPrintWriter;
+import android.util.Log;
import android.util.Pair;
import android.util.Slog;
import android.util.TimeUtils;
@@ -2005,9 +2006,11 @@
mSystemServiceManager.startService(new FontManagerService.Lifecycle(context, safeMode));
t.traceEnd();
- t.traceBegin("StartTextServicesManager");
- mSystemServiceManager.startService(TextServicesManagerService.Lifecycle.class);
- t.traceEnd();
+ if (!isWatch || !android.server.Flags.removeTextService()) {
+ t.traceBegin("StartTextServicesManager");
+ mSystemServiceManager.startService(TextServicesManagerService.Lifecycle.class);
+ t.traceEnd();
+ }
if (!disableSystemTextClassifier) {
t.traceBegin("StartTextClassificationManagerService");
diff --git a/services/java/com/android/server/flags.aconfig b/services/java/com/android/server/flags.aconfig
index 4b578af..38354e8 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"
@@ -7,3 +8,10 @@
is_fixed_read_only: true
bug: "324153471"
}
+
+flag {
+ name: "remove_text_service"
+ namespace: "wear_frameworks"
+ description: "Remove TextServiceManagerService on Wear"
+ bug: "323720705"
+}
\ No newline at end of file
diff --git a/services/permission/java/com/android/server/permission/access/appop/AppOpService.kt b/services/permission/java/com/android/server/permission/access/appop/AppOpService.kt
index c0d988d..b0c7073 100644
--- a/services/permission/java/com/android/server/permission/access/appop/AppOpService.kt
+++ b/services/permission/java/com/android/server/permission/access/appop/AppOpService.kt
@@ -20,6 +20,7 @@
import android.companion.virtual.VirtualDeviceManager
import android.os.Handler
import android.os.UserHandle
+import android.permission.PermissionManager
import android.permission.flags.Flags
import android.util.ArrayMap
import android.util.ArraySet
@@ -142,7 +143,7 @@
}
}
- override fun getNonDefaultUidModes(uid: Int, persistentDeviceId: String): SparseIntArray {
+ override fun getNonDefaultUidModes(uid: Int, deviceId: String): SparseIntArray {
val appId = UserHandle.getAppId(uid)
val userId = UserHandle.getUserId(uid)
service.getState {
@@ -150,7 +151,8 @@
with(appIdPolicy) { opNameMapToOpSparseArray(getAppOpModes(appId, userId)?.map) }
if (Flags.runtimePermissionAppopsMappingEnabled()) {
runtimePermissionNameToAppOp.forEachIndexed { _, permissionName, appOpCode ->
- val mode = getUidModeFromPermissionState(appId, userId, permissionName)
+ val mode =
+ getUidModeFromPermissionState(appId, userId, permissionName, deviceId)
if (mode != AppOpsManager.opToDefaultMode(appOpCode)) {
modes[appOpCode] = mode
}
@@ -165,7 +167,7 @@
return opNameMapToOpSparseArray(getPackageModes(packageName, userId))
}
- override fun getUidMode(uid: Int, persistentDeviceId: String, op: Int): Int {
+ override fun getUidMode(uid: Int, deviceId: String, op: Int): Int {
val appId = UserHandle.getAppId(uid)
val userId = UserHandle.getUserId(uid)
val opName = AppOpsManager.opToPublicName(op)
@@ -174,7 +176,9 @@
return if (!Flags.runtimePermissionAppopsMappingEnabled() || permissionName == null) {
service.getState { with(appIdPolicy) { getAppOpMode(appId, userId, opName) } }
} else {
- service.getState { getUidModeFromPermissionState(appId, userId, permissionName) }
+ service.getState {
+ getUidModeFromPermissionState(appId, userId, permissionName, deviceId)
+ }
}
}
@@ -187,15 +191,31 @@
private fun GetStateScope.getUidModeFromPermissionState(
appId: Int,
userId: Int,
- permissionName: String
+ permissionName: String,
+ deviceId: String
): Int {
+ val checkDevicePermissionFlags =
+ deviceId != VirtualDeviceManager.PERSISTENT_DEVICE_ID_DEFAULT &&
+ permissionName in PermissionManager.DEVICE_AWARE_PERMISSIONS
val permissionFlags =
- with(permissionPolicy) { getPermissionFlags(appId, userId, permissionName) }
+ if (checkDevicePermissionFlags) {
+ with(devicePermissionPolicy) {
+ getPermissionFlags(appId, deviceId, userId, permissionName)
+ }
+ } else {
+ with(permissionPolicy) { getPermissionFlags(appId, userId, permissionName) }
+ }
val backgroundPermissionName = foregroundToBackgroundPermissionName[permissionName]
val backgroundPermissionFlags =
if (backgroundPermissionName != null) {
- with(permissionPolicy) {
- getPermissionFlags(appId, userId, backgroundPermissionName)
+ if (checkDevicePermissionFlags) {
+ with(devicePermissionPolicy) {
+ getPermissionFlags(appId, deviceId, userId, backgroundPermissionName)
+ }
+ } else {
+ with(permissionPolicy) {
+ getPermissionFlags(appId, userId, backgroundPermissionName)
+ }
}
} else {
PermissionFlags.RUNTIME_GRANTED
@@ -207,7 +227,7 @@
val fullerPermissionName =
PermissionService.getFullerPermission(permissionName) ?: return result
- return getUidModeFromPermissionState(appId, userId, fullerPermissionName)
+ return getUidModeFromPermissionState(appId, userId, fullerPermissionName, deviceId)
}
private fun evaluateModeFromPermissionFlags(
@@ -224,7 +244,7 @@
MODE_IGNORED
}
- override fun setUidMode(uid: Int, persistentDeviceId: String, code: Int, mode: Int): Boolean {
+ override fun setUidMode(uid: Int, deviceId: String, code: Int, mode: Int): Boolean {
if (
Flags.runtimePermissionAppopsMappingEnabled() && code in runtimeAppOpToPermissionNames
) {
@@ -308,7 +328,7 @@
// and we have our own persistence.
}
- override fun getForegroundOps(uid: Int, persistentDeviceId: String): SparseBooleanArray {
+ override fun getForegroundOps(uid: Int, deviceId: String): SparseBooleanArray {
return SparseBooleanArray().apply {
getUidModes(uid)?.forEachIndexed { _, op, mode ->
if (mode == AppOpsManager.MODE_FOREGROUND) {
@@ -317,7 +337,7 @@
}
if (Flags.runtimePermissionAppopsMappingEnabled()) {
foregroundableOps.forEachIndexed { _, op, _ ->
- if (getUidMode(uid, persistentDeviceId, op) == AppOpsManager.MODE_FOREGROUND) {
+ if (getUidMode(uid, deviceId, op) == AppOpsManager.MODE_FOREGROUND) {
this[op] = true
}
}
@@ -501,7 +521,7 @@
)
}
}
- ?: runtimePermissionNameToAppOp[permissionName]?.let { appOpCode ->
+ ?: runtimePermissionNameToAppOp[permissionName]?.let { appOpCode ->
addPendingChangedModeIfNeeded(
appId,
userId,
diff --git a/services/tests/InputMethodSystemServerTests/src/com/android/inputmethodservice/InputMethodServiceTest.java b/services/tests/InputMethodSystemServerTests/src/com/android/inputmethodservice/InputMethodServiceTest.java
index 2134278..1535298 100644
--- a/services/tests/InputMethodSystemServerTests/src/com/android/inputmethodservice/InputMethodServiceTest.java
+++ b/services/tests/InputMethodSystemServerTests/src/com/android/inputmethodservice/InputMethodServiceTest.java
@@ -38,7 +38,6 @@
import android.support.test.uiautomator.UiObject2;
import android.support.test.uiautomator.Until;
import android.util.Log;
-import android.view.KeyEvent;
import android.view.WindowManagerGlobal;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
@@ -601,28 +600,6 @@
false /* orientationPortrait */);
}
- @Test
- public void switchesKeyboardLayout_withShortcut_onlyIfImeVisible() throws Exception {
- setShowImeWithHardKeyboard(true /* enabled */);
-
- assertThat(mInputMethodService.isInputViewShown()).isFalse();
- assertThat(mInputMethodService.onKeyDown(KeyEvent.KEYCODE_SPACE,
- new KeyEvent(0 /* downTime */, 0 /* eventTime */, KeyEvent.ACTION_DOWN,
- KeyEvent.KEYCODE_SPACE, 0 /* repeat */,
- KeyEvent.META_CTRL_LEFT_ON | KeyEvent.META_CTRL_ON))).isFalse();
-
- verifyInputViewStatusOnMainSync(
- () -> assertThat(mActivity.showImeWithInputMethodManager(0 /* flags */)).isTrue(),
- true /* expected */,
- true /* inputViewStarted */);
-
- assertThat(mInputMethodService.isInputViewShown()).isTrue();
- assertThat(mInputMethodService.onKeyDown(KeyEvent.KEYCODE_SPACE,
- new KeyEvent(0 /* downTime */, 0 /* eventTime */, KeyEvent.ACTION_DOWN,
- KeyEvent.KEYCODE_SPACE, 0 /* repeat */,
- KeyEvent.META_CTRL_LEFT_ON | KeyEvent.META_CTRL_ON))).isTrue();
- }
-
/**
* This checks that when the system navigation bar is not created (e.g. emulator),
* then the IME caption bar is also not created.
diff --git a/services/tests/displayservicetests/src/com/android/server/display/DisplayBrightnessStateTest.java b/services/tests/displayservicetests/src/com/android/server/display/DisplayBrightnessStateTest.java
index 6d89e80..8db896b 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/DisplayBrightnessStateTest.java
+++ b/services/tests/displayservicetests/src/com/android/server/display/DisplayBrightnessStateTest.java
@@ -47,6 +47,7 @@
float sdrBrightness = 0.2f;
boolean shouldUseAutoBrightness = true;
boolean shouldUpdateScreenBrightnessSetting = true;
+ int brightnessAdjustmentFlag = 2;
BrightnessReason brightnessReason = new BrightnessReason();
brightnessReason.setReason(BrightnessReason.REASON_AUTOMATIC);
brightnessReason.setModifier(BrightnessReason.MODIFIER_DIMMED);
@@ -56,6 +57,7 @@
.setBrightnessReason(brightnessReason)
.setShouldUseAutoBrightness(shouldUseAutoBrightness)
.setShouldUpdateScreenBrightnessSetting(shouldUpdateScreenBrightnessSetting)
+ .setBrightnessAdjustmentFlag(brightnessAdjustmentFlag)
.build();
assertEquals(displayBrightnessState.getBrightness(), brightness, FLOAT_DELTA);
@@ -105,7 +107,9 @@
.append("\n shouldUpdateScreenBrightnessSetting:")
.append(displayBrightnessState.shouldUpdateScreenBrightnessSetting())
.append("\n mBrightnessEvent:")
- .append(Objects.toString(displayBrightnessState.getBrightnessEvent(), "null"));
+ .append(Objects.toString(displayBrightnessState.getBrightnessEvent(), "null"))
+ .append("\n mBrightnessAdjustmentFlag:")
+ .append(displayBrightnessState.getBrightnessAdjustmentFlag());
return sb.toString();
}
}
diff --git a/services/tests/displayservicetests/src/com/android/server/display/DisplayDeviceConfigTest.java b/services/tests/displayservicetests/src/com/android/server/display/DisplayDeviceConfigTest.java
index 0877146..a0a611f 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/DisplayDeviceConfigTest.java
+++ b/services/tests/displayservicetests/src/com/android/server/display/DisplayDeviceConfigTest.java
@@ -57,6 +57,7 @@
import com.android.server.display.config.HdrBrightnessData;
import com.android.server.display.config.HysteresisLevels;
import com.android.server.display.config.IdleScreenRefreshRateTimeoutLuxThresholdPoint;
+import com.android.server.display.config.RefreshRateData;
import com.android.server.display.config.ThermalStatus;
import com.android.server.display.feature.DisplayManagerFlags;
import com.android.server.display.feature.flags.Flags;
@@ -222,17 +223,18 @@
assertArrayEquals(new float[]{0.23f, 0.24f, 0.25f},
ambientIdleHysteresis.getDarkeningThresholdsPercentages(), ZERO_DELTA);
+ RefreshRateData refreshRateData = mDisplayDeviceConfig.getRefreshRateData();
assertEquals(75, mDisplayDeviceConfig.getDefaultLowBlockingZoneRefreshRate());
assertEquals(90, mDisplayDeviceConfig.getDefaultHighBlockingZoneRefreshRate());
- assertEquals(85, mDisplayDeviceConfig.getDefaultPeakRefreshRate());
- assertEquals(45, mDisplayDeviceConfig.getDefaultRefreshRate());
+ assertEquals(85, refreshRateData.defaultPeakRefreshRate);
+ assertEquals(45, refreshRateData.defaultRefreshRate);
assertEquals(2, mDisplayDeviceConfig.getRefreshRangeProfiles().size());
assertEquals(60, mDisplayDeviceConfig.getRefreshRange("test1").min, SMALL_DELTA);
assertEquals(60, mDisplayDeviceConfig.getRefreshRange("test1").max, SMALL_DELTA);
assertEquals(80, mDisplayDeviceConfig.getRefreshRange("test2").min, SMALL_DELTA);
assertEquals(90, mDisplayDeviceConfig.getRefreshRange("test2").max, SMALL_DELTA);
- assertEquals(82, mDisplayDeviceConfig.getDefaultRefreshRateInHbmHdr());
- assertEquals(83, mDisplayDeviceConfig.getDefaultRefreshRateInHbmSunlight());
+ assertEquals(82, refreshRateData.defaultRefreshRateInHbmHdr);
+ assertEquals(83, refreshRateData.defaultRefreshRateInHbmSunlight);
assertNotNull(mDisplayDeviceConfig.getHostUsiVersion());
assertEquals(mDisplayDeviceConfig.getHostUsiVersion().getMajorVersion(), 2);
@@ -697,6 +699,7 @@
HysteresisLevels screenHysteresis = mDisplayDeviceConfig.getScreenBrightnessHysteresis();
HysteresisLevels screenIdleHysteresis =
mDisplayDeviceConfig.getScreenBrightnessIdleHysteresis();
+
// Test thresholds
assertEquals(0, ambientHysteresis.getMinBrightening(), ZERO_DELTA);
assertEquals(0, ambientIdleHysteresis.getMinBrightening(), ZERO_DELTA);
@@ -737,6 +740,8 @@
assertArrayEquals(new float[]{0.37f, 0.38f, 0.39f},
screenIdleHysteresis.getDarkeningThresholdsPercentages(), ZERO_DELTA);
+ RefreshRateData refreshRateData = mDisplayDeviceConfig.getRefreshRateData();
+
assertArrayEquals(new float[]{0, 30, 31},
ambientIdleHysteresis.getBrighteningThresholdLevels(), ZERO_DELTA);
assertArrayEquals(new float[]{0.27f, 0.28f, 0.29f},
@@ -749,13 +754,12 @@
DEFAULT_LOW_BLOCKING_ZONE_REFRESH_RATE);
assertEquals(mDisplayDeviceConfig.getDefaultHighBlockingZoneRefreshRate(),
DEFAULT_HIGH_BLOCKING_ZONE_REFRESH_RATE);
- assertEquals(mDisplayDeviceConfig.getDefaultPeakRefreshRate(), DEFAULT_PEAK_REFRESH_RATE);
- assertEquals(mDisplayDeviceConfig.getDefaultRefreshRate(), DEFAULT_REFRESH_RATE);
+ assertEquals(refreshRateData.defaultPeakRefreshRate, DEFAULT_PEAK_REFRESH_RATE);
+ assertEquals(refreshRateData.defaultRefreshRate, DEFAULT_REFRESH_RATE);
assertEquals(0, mDisplayDeviceConfig.getRefreshRangeProfiles().size());
- assertEquals(mDisplayDeviceConfig.getDefaultRefreshRateInHbmSunlight(),
+ assertEquals(refreshRateData.defaultRefreshRateInHbmSunlight,
DEFAULT_REFRESH_RATE_IN_HBM_SUNLIGHT);
- assertEquals(mDisplayDeviceConfig.getDefaultRefreshRateInHbmHdr(),
- DEFAULT_REFRESH_RATE_IN_HBM_HDR);
+ assertEquals(refreshRateData.defaultRefreshRateInHbmHdr, DEFAULT_REFRESH_RATE_IN_HBM_HDR);
assertEquals("test_light_sensor", mDisplayDeviceConfig.getAmbientLightSensor().type);
assertEquals("", mDisplayDeviceConfig.getAmbientLightSensor().name);
diff --git a/services/tests/displayservicetests/src/com/android/server/display/brightness/DisplayBrightnessControllerTest.java b/services/tests/displayservicetests/src/com/android/server/display/brightness/DisplayBrightnessControllerTest.java
index 1ae4099..13a1445 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/brightness/DisplayBrightnessControllerTest.java
+++ b/services/tests/displayservicetests/src/com/android/server/display/brightness/DisplayBrightnessControllerTest.java
@@ -20,6 +20,7 @@
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
@@ -113,7 +114,8 @@
when(mDisplayBrightnessStrategySelector.selectStrategy(
any(StrategySelectionRequest.class))).thenReturn(displayBrightnessStrategy);
mDisplayBrightnessController.updateBrightness(displayPowerRequest, targetDisplayState);
- verify(displayBrightnessStrategy).updateBrightness(displayPowerRequest);
+ verify(displayBrightnessStrategy).updateBrightness(
+ eq(new StrategyExecutionRequest(displayPowerRequest, DEFAULT_BRIGHTNESS)));
assertEquals(mDisplayBrightnessController.getCurrentDisplayBrightnessStrategy(),
displayBrightnessStrategy);
}
diff --git a/services/tests/displayservicetests/src/com/android/server/display/brightness/DisplayBrightnessStrategySelectorTest.java b/services/tests/displayservicetests/src/com/android/server/display/brightness/DisplayBrightnessStrategySelectorTest.java
index b8858cc..f270650 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/brightness/DisplayBrightnessStrategySelectorTest.java
+++ b/services/tests/displayservicetests/src/com/android/server/display/brightness/DisplayBrightnessStrategySelectorTest.java
@@ -142,7 +142,8 @@
}
@Override
- OffloadBrightnessStrategy getOffloadBrightnessStrategy() {
+ OffloadBrightnessStrategy getOffloadBrightnessStrategy(
+ DisplayManagerFlags displayManagerFlags) {
return mOffloadBrightnessStrategy;
}
};
diff --git a/services/tests/displayservicetests/src/com/android/server/display/brightness/strategy/AutomaticBrightnessStrategyTest.java b/services/tests/displayservicetests/src/com/android/server/display/brightness/strategy/AutomaticBrightnessStrategyTest.java
index 6e163ca..54f2268 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/brightness/strategy/AutomaticBrightnessStrategyTest.java
+++ b/services/tests/displayservicetests/src/com/android/server/display/brightness/strategy/AutomaticBrightnessStrategyTest.java
@@ -41,8 +41,10 @@
import com.android.internal.util.test.FakeSettingsProvider;
import com.android.internal.util.test.FakeSettingsProviderRule;
import com.android.server.display.AutomaticBrightnessController;
+import com.android.server.display.DisplayBrightnessState;
import com.android.server.display.brightness.BrightnessEvent;
import com.android.server.display.brightness.BrightnessReason;
+import com.android.server.display.brightness.StrategyExecutionRequest;
import org.junit.After;
import org.junit.Before;
@@ -295,15 +297,11 @@
mContext.getContentResolver(),
Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ,
UserHandle.USER_CURRENT), 0.0f);
- assertEquals(BrightnessReason.ADJUSTMENT_AUTO,
- mAutomaticBrightnessStrategy.getAutoBrightnessAdjustmentReasonsFlags());
float invalidBrightness = -0.5f;
mAutomaticBrightnessStrategy
.adjustAutomaticBrightnessStateIfValid(invalidBrightness);
assertEquals(autoBrightnessAdjustment,
mAutomaticBrightnessStrategy.getAutoBrightnessAdjustment(), 0.0f);
- assertEquals(0,
- mAutomaticBrightnessStrategy.getAutoBrightnessAdjustmentReasonsFlags());
}
@Test
@@ -426,6 +424,80 @@
assertTrue(mAutomaticBrightnessStrategy.isAutoBrightnessValid());
}
+ @Test
+ public void
+ updateBrightness_constructsDisplayBrightnessState_withAdjustmentAutoAdjustmentFlag() {
+ BrightnessEvent brightnessEvent = new BrightnessEvent(DISPLAY_ID);
+ mAutomaticBrightnessStrategy = new AutomaticBrightnessStrategy(
+ mContext, DISPLAY_ID, displayId -> brightnessEvent);
+ new AutomaticBrightnessStrategy(mContext, DISPLAY_ID);
+ mAutomaticBrightnessStrategy.setAutomaticBrightnessController(
+ mAutomaticBrightnessController);
+ float brightness = 0.4f;
+ BrightnessReason brightnessReason = new BrightnessReason();
+ brightnessReason.setReason(BrightnessReason.REASON_AUTOMATIC);
+ when(mAutomaticBrightnessController.getAutomaticScreenBrightness(brightnessEvent))
+ .thenReturn(brightness);
+
+ DisplayManagerInternal.DisplayPowerRequest displayPowerRequest =
+ mock(DisplayManagerInternal.DisplayPowerRequest.class);
+ DisplayBrightnessState expectedDisplayBrightnessState = new DisplayBrightnessState.Builder()
+ .setBrightness(brightness)
+ .setSdrBrightness(brightness)
+ .setBrightnessReason(brightnessReason)
+ .setDisplayBrightnessStrategyName(mAutomaticBrightnessStrategy.getName())
+ .setIsSlowChange(false)
+ .setBrightnessEvent(brightnessEvent)
+ .setBrightnessAdjustmentFlag(BrightnessReason.ADJUSTMENT_AUTO)
+ .setShouldUpdateScreenBrightnessSetting(true)
+ .build();
+ DisplayBrightnessState actualDisplayBrightnessState = mAutomaticBrightnessStrategy
+ .updateBrightness(new StrategyExecutionRequest(displayPowerRequest, 0.6f));
+ assertEquals(expectedDisplayBrightnessState, actualDisplayBrightnessState);
+ }
+
+ @Test
+ public void
+ updateBrightness_constructsDisplayBrightnessState_withAdjustmentTempAdjustmentFlag() {
+ BrightnessEvent brightnessEvent = new BrightnessEvent(DISPLAY_ID);
+ mAutomaticBrightnessStrategy = new AutomaticBrightnessStrategy(
+ mContext, DISPLAY_ID, displayId -> brightnessEvent);
+ new AutomaticBrightnessStrategy(mContext, DISPLAY_ID);
+ mAutomaticBrightnessStrategy.setAutomaticBrightnessController(
+ mAutomaticBrightnessController);
+ float brightness = 0.4f;
+ BrightnessReason brightnessReason = new BrightnessReason();
+ brightnessReason.setReason(BrightnessReason.REASON_AUTOMATIC);
+ when(mAutomaticBrightnessController.getAutomaticScreenBrightness(brightnessEvent))
+ .thenReturn(brightness);
+
+ DisplayManagerInternal.DisplayPowerRequest displayPowerRequest =
+ mock(DisplayManagerInternal.DisplayPowerRequest.class);
+ float temporaryBrightness = 0.3f;
+ float autoBrightnessAdjustment = 0.1f;
+ mAutomaticBrightnessStrategy.setTemporaryAutoBrightnessAdjustment(temporaryBrightness);
+ mAutomaticBrightnessStrategy.accommodateUserBrightnessChanges(true,
+ brightness, DisplayManagerInternal.DisplayPowerRequest.POLICY_BRIGHT,
+ Display.STATE_ON, mock(BrightnessConfiguration.class),
+ AutomaticBrightnessController.AUTO_BRIGHTNESS_ENABLED);
+ when(mAutomaticBrightnessController.getAutomaticScreenBrightnessAdjustment()).thenReturn(
+ autoBrightnessAdjustment);
+
+ DisplayBrightnessState expectedDisplayBrightnessState = new DisplayBrightnessState.Builder()
+ .setBrightness(brightness)
+ .setSdrBrightness(brightness)
+ .setBrightnessReason(brightnessReason)
+ .setDisplayBrightnessStrategyName(mAutomaticBrightnessStrategy.getName())
+ .setIsSlowChange(false)
+ .setBrightnessEvent(brightnessEvent)
+ .setBrightnessAdjustmentFlag(BrightnessReason.ADJUSTMENT_AUTO_TEMP)
+ .setShouldUpdateScreenBrightnessSetting(true)
+ .build();
+ DisplayBrightnessState actualDisplayBrightnessState = mAutomaticBrightnessStrategy
+ .updateBrightness(new StrategyExecutionRequest(displayPowerRequest, 0.6f));
+ assertEquals(expectedDisplayBrightnessState, actualDisplayBrightnessState);
+ }
+
private void setPendingAutoBrightnessAdjustment(float pendingAutoBrightnessAdjustment) {
Settings.System.putFloat(mContext.getContentResolver(),
Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ, pendingAutoBrightnessAdjustment);
diff --git a/services/tests/displayservicetests/src/com/android/server/display/brightness/strategy/BoostBrightnessStrategyTest.java b/services/tests/displayservicetests/src/com/android/server/display/brightness/strategy/BoostBrightnessStrategyTest.java
index c434631..47f1746 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/brightness/strategy/BoostBrightnessStrategyTest.java
+++ b/services/tests/displayservicetests/src/com/android/server/display/brightness/strategy/BoostBrightnessStrategyTest.java
@@ -27,6 +27,7 @@
import com.android.server.display.DisplayBrightnessState;
import com.android.server.display.brightness.BrightnessReason;
+import com.android.server.display.brightness.StrategyExecutionRequest;
import org.junit.Before;
import org.junit.Test;
@@ -58,7 +59,8 @@
.setDisplayBrightnessStrategyName(mBoostBrightnessStrategy.getName())
.build();
DisplayBrightnessState updatedDisplayBrightnessState =
- mBoostBrightnessStrategy.updateBrightness(displayPowerRequest);
+ mBoostBrightnessStrategy.updateBrightness(
+ new StrategyExecutionRequest(displayPowerRequest, 0.2f));
assertEquals(updatedDisplayBrightnessState, expectedDisplayBrightnessState);
}
diff --git a/services/tests/displayservicetests/src/com/android/server/display/brightness/strategy/DozeBrightnessStrategyTest.java b/services/tests/displayservicetests/src/com/android/server/display/brightness/strategy/DozeBrightnessStrategyTest.java
index d60caf6..9246780 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/brightness/strategy/DozeBrightnessStrategyTest.java
+++ b/services/tests/displayservicetests/src/com/android/server/display/brightness/strategy/DozeBrightnessStrategyTest.java
@@ -25,6 +25,7 @@
import com.android.server.display.DisplayBrightnessState;
import com.android.server.display.brightness.BrightnessReason;
+import com.android.server.display.brightness.StrategyExecutionRequest;
import org.junit.Before;
import org.junit.Test;
@@ -55,7 +56,8 @@
.setDisplayBrightnessStrategyName(mDozeBrightnessModeStrategy.getName())
.build();
DisplayBrightnessState updatedDisplayBrightnessState =
- mDozeBrightnessModeStrategy.updateBrightness(displayPowerRequest);
+ mDozeBrightnessModeStrategy.updateBrightness(
+ new StrategyExecutionRequest(displayPowerRequest, 0.2f));
assertEquals(updatedDisplayBrightnessState, expectedDisplayBrightnessState);
}
}
diff --git a/services/tests/displayservicetests/src/com/android/server/display/brightness/strategy/FollowerBrightnessStrategyTest.java b/services/tests/displayservicetests/src/com/android/server/display/brightness/strategy/FollowerBrightnessStrategyTest.java
index d8569f7..682c9cc 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/brightness/strategy/FollowerBrightnessStrategyTest.java
+++ b/services/tests/displayservicetests/src/com/android/server/display/brightness/strategy/FollowerBrightnessStrategyTest.java
@@ -26,6 +26,7 @@
import com.android.server.display.DisplayBrightnessState;
import com.android.server.display.brightness.BrightnessReason;
+import com.android.server.display.brightness.StrategyExecutionRequest;
import org.junit.Before;
import org.junit.Test;
@@ -59,7 +60,8 @@
.setIsSlowChange(slowChange)
.build();
DisplayBrightnessState updatedDisplayBrightnessState =
- mFollowerBrightnessStrategy.updateBrightness(displayPowerRequest);
+ mFollowerBrightnessStrategy.updateBrightness(
+ new StrategyExecutionRequest(displayPowerRequest, 0.2f));
assertEquals(expectedDisplayBrightnessState, updatedDisplayBrightnessState);
}
diff --git a/services/tests/displayservicetests/src/com/android/server/display/brightness/strategy/OffloadBrightnessStrategyTest.java b/services/tests/displayservicetests/src/com/android/server/display/brightness/strategy/OffloadBrightnessStrategyTest.java
index 36719af..ccf6309 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/brightness/strategy/OffloadBrightnessStrategyTest.java
+++ b/services/tests/displayservicetests/src/com/android/server/display/brightness/strategy/OffloadBrightnessStrategyTest.java
@@ -17,32 +17,45 @@
package com.android.server.display.brightness.strategy;
import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
import android.hardware.display.DisplayManagerInternal;
+import android.os.PowerManager;
import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4;
import com.android.server.display.DisplayBrightnessState;
import com.android.server.display.brightness.BrightnessReason;
+import com.android.server.display.brightness.StrategyExecutionRequest;
+import com.android.server.display.brightness.StrategySelectionNotifyRequest;
+import com.android.server.display.feature.DisplayManagerFlags;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
@SmallTest
@RunWith(AndroidJUnit4.class)
public class OffloadBrightnessStrategyTest {
+ @Mock
+ private DisplayManagerFlags mDisplayManagerFlags;
+
private OffloadBrightnessStrategy mOffloadBrightnessStrategy;
@Before
public void before() {
- mOffloadBrightnessStrategy = new OffloadBrightnessStrategy();
+ MockitoAnnotations.initMocks(this);
+ mOffloadBrightnessStrategy = new OffloadBrightnessStrategy(mDisplayManagerFlags);
}
@Test
public void testUpdateBrightnessWhenOffloadBrightnessIsSet() {
+ when(mDisplayManagerFlags.isRefactorDisplayPowerControllerEnabled()).thenReturn(true);
DisplayManagerInternal.DisplayPowerRequest
displayPowerRequest = new DisplayManagerInternal.DisplayPowerRequest();
float brightness = 0.2f;
@@ -58,7 +71,44 @@
.setShouldUpdateScreenBrightnessSetting(true)
.build();
DisplayBrightnessState updatedDisplayBrightnessState =
- mOffloadBrightnessStrategy.updateBrightness(displayPowerRequest);
+ mOffloadBrightnessStrategy.updateBrightness(
+ new StrategyExecutionRequest(displayPowerRequest, 0.2f));
assertEquals(updatedDisplayBrightnessState, expectedDisplayBrightnessState);
+ assertEquals(PowerManager.BRIGHTNESS_INVALID_FLOAT, mOffloadBrightnessStrategy
+ .getOffloadScreenBrightness(), 0.0f);
+ }
+
+ @Test
+ public void strategySelectionPostProcessor_resetsOffloadBrightness() {
+ StrategySelectionNotifyRequest strategySelectionNotifyRequest =
+ mock(StrategySelectionNotifyRequest.class);
+ DisplayBrightnessStrategy displayBrightnessStrategy = mock(DisplayBrightnessStrategy.class);
+ when(strategySelectionNotifyRequest.getSelectedDisplayBrightnessStrategy())
+ .thenReturn(displayBrightnessStrategy);
+
+ float offloadBrightness = 0.3f;
+ mOffloadBrightnessStrategy.setOffloadScreenBrightness(offloadBrightness);
+
+ // Brightness is not reset if offload strategy is selected
+ when(displayBrightnessStrategy.getName())
+ .thenReturn(mOffloadBrightnessStrategy.getName());
+ mOffloadBrightnessStrategy.strategySelectionPostProcessor(strategySelectionNotifyRequest);
+ assertEquals(offloadBrightness,
+ mOffloadBrightnessStrategy.getOffloadScreenBrightness(), 0.0f);
+
+ // Brightness is not reset if invalid strategy is selected
+ when(displayBrightnessStrategy.getName())
+ .thenReturn(DisplayBrightnessStrategyConstants.INVALID_BRIGHTNESS_STRATEGY_NAME);
+ mOffloadBrightnessStrategy.strategySelectionPostProcessor(strategySelectionNotifyRequest);
+ assertEquals(offloadBrightness,
+ mOffloadBrightnessStrategy.getOffloadScreenBrightness(), 0.0f);
+
+
+ // Brightness is reset if neither of invalid or offload strategy is selected
+ when(displayBrightnessStrategy.getName())
+ .thenReturn("DisplayBrightnessStrategy");
+ mOffloadBrightnessStrategy.strategySelectionPostProcessor(strategySelectionNotifyRequest);
+ assertEquals(PowerManager.BRIGHTNESS_INVALID_FLOAT,
+ mOffloadBrightnessStrategy.getOffloadScreenBrightness(), 0.0f);
}
}
diff --git a/services/tests/displayservicetests/src/com/android/server/display/brightness/strategy/OverrideBrightnessStrategyTest.java b/services/tests/displayservicetests/src/com/android/server/display/brightness/strategy/OverrideBrightnessStrategyTest.java
index 530245d..8e7b463 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/brightness/strategy/OverrideBrightnessStrategyTest.java
+++ b/services/tests/displayservicetests/src/com/android/server/display/brightness/strategy/OverrideBrightnessStrategyTest.java
@@ -26,6 +26,7 @@
import com.android.server.display.DisplayBrightnessState;
import com.android.server.display.brightness.BrightnessReason;
+import com.android.server.display.brightness.StrategyExecutionRequest;
import org.junit.Before;
import org.junit.Test;
@@ -58,7 +59,8 @@
.setDisplayBrightnessStrategyName(mOverrideBrightnessStrategy.getName())
.build();
DisplayBrightnessState updatedDisplayBrightnessState =
- mOverrideBrightnessStrategy.updateBrightness(displayPowerRequest);
+ mOverrideBrightnessStrategy.updateBrightness(
+ new StrategyExecutionRequest(displayPowerRequest, 0.2f));
assertEquals(updatedDisplayBrightnessState, expectedDisplayBrightnessState);
}
diff --git a/services/tests/displayservicetests/src/com/android/server/display/brightness/strategy/ScreenOffBrightnessStrategyTest.java b/services/tests/displayservicetests/src/com/android/server/display/brightness/strategy/ScreenOffBrightnessStrategyTest.java
index 7147aa8..e799d0e 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/brightness/strategy/ScreenOffBrightnessStrategyTest.java
+++ b/services/tests/displayservicetests/src/com/android/server/display/brightness/strategy/ScreenOffBrightnessStrategyTest.java
@@ -26,6 +26,7 @@
import com.android.server.display.DisplayBrightnessState;
import com.android.server.display.brightness.BrightnessReason;
+import com.android.server.display.brightness.StrategyExecutionRequest;
import org.junit.Before;
import org.junit.Test;
@@ -56,7 +57,8 @@
.getName())
.build();
DisplayBrightnessState updatedDisplayBrightnessState =
- mScreenOffBrightnessModeStrategy.updateBrightness(displayPowerRequest);
+ mScreenOffBrightnessModeStrategy.updateBrightness(
+ new StrategyExecutionRequest(displayPowerRequest, 0.2f));
assertEquals(updatedDisplayBrightnessState, expectedDisplayBrightnessState);
}
}
diff --git a/services/tests/displayservicetests/src/com/android/server/display/brightness/strategy/TemporaryBrightnessStrategyTest.java b/services/tests/displayservicetests/src/com/android/server/display/brightness/strategy/TemporaryBrightnessStrategyTest.java
index 9830edb..aaada41 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/brightness/strategy/TemporaryBrightnessStrategyTest.java
+++ b/services/tests/displayservicetests/src/com/android/server/display/brightness/strategy/TemporaryBrightnessStrategyTest.java
@@ -26,6 +26,7 @@
import com.android.server.display.DisplayBrightnessState;
import com.android.server.display.brightness.BrightnessReason;
+import com.android.server.display.brightness.StrategyExecutionRequest;
import org.junit.Before;
import org.junit.Test;
@@ -58,7 +59,8 @@
.setDisplayBrightnessStrategyName(mTemporaryBrightnessStrategy.getName())
.build();
DisplayBrightnessState updatedDisplayBrightnessState =
- mTemporaryBrightnessStrategy.updateBrightness(displayPowerRequest);
+ mTemporaryBrightnessStrategy.updateBrightness(
+ new StrategyExecutionRequest(displayPowerRequest, 0.2f));
assertEquals(updatedDisplayBrightnessState, expectedDisplayBrightnessState);
}
diff --git a/services/tests/displayservicetests/src/com/android/server/display/mode/DisplayModeDirectorTest.java b/services/tests/displayservicetests/src/com/android/server/display/mode/DisplayModeDirectorTest.java
index 4591d91..a2a4773 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/mode/DisplayModeDirectorTest.java
+++ b/services/tests/displayservicetests/src/com/android/server/display/mode/DisplayModeDirectorTest.java
@@ -94,6 +94,7 @@
import com.android.server.display.DisplayDeviceConfig;
import com.android.server.display.TestUtils;
import com.android.server.display.config.IdleScreenRefreshRateTimeoutLuxThresholdPoint;
+import com.android.server.display.config.RefreshRateData;
import com.android.server.display.feature.DisplayManagerFlags;
import com.android.server.display.mode.DisplayModeDirector.BrightnessObserver;
import com.android.server.display.mode.DisplayModeDirector.DesiredDisplayModeSpecs;
@@ -128,6 +129,12 @@
@SmallTest
@RunWith(JUnitParamsRunner.class)
public class DisplayModeDirectorTest {
+ private static final RefreshRateData EMPTY_REFRESH_RATE_DATA = new RefreshRateData(
+ /* defaultRefreshRate= */ 0,
+ /* defaultPeakRefreshRate= */ 0,
+ /* defaultRefreshRateInHbmHdr= */ 0,
+ /* defaultRefreshRateInHbmSunlight= */ 0);
+
public static Collection<Object[]> getAppRequestedSizeTestCases() {
var appRequestedSizeTestCases = Arrays.asList(new Object[][] {
{/*expectedBaseModeId*/ DEFAULT_MODE_75.getModeId(),
@@ -1545,6 +1552,7 @@
// Set the DisplayDeviceConfig
DisplayDeviceConfig ddcMock = mock(DisplayDeviceConfig.class);
+ when(ddcMock.getRefreshRateData()).thenReturn(EMPTY_REFRESH_RATE_DATA);
when(ddcMock.getDefaultHighBlockingZoneRefreshRate()).thenReturn(90);
when(ddcMock.getHighDisplayBrightnessThresholds()).thenReturn(new float[] { 200 });
when(ddcMock.getHighAmbientBrightnessThresholds()).thenReturn(new float[] { 8000 });
@@ -1625,6 +1633,7 @@
// Set the thresholds for High Zone
DisplayDeviceConfig ddcMock = mock(DisplayDeviceConfig.class);
+ when(ddcMock.getRefreshRateData()).thenReturn(EMPTY_REFRESH_RATE_DATA);
when(ddcMock.getDefaultHighBlockingZoneRefreshRate()).thenReturn(90);
when(ddcMock.getHighDisplayBrightnessThresholds()).thenReturn(new float[] { 200 });
when(ddcMock.getHighAmbientBrightnessThresholds()).thenReturn(new float[] { 8000 });
@@ -1724,6 +1733,7 @@
// Set the thresholds for Low Zone
DisplayDeviceConfig ddcMock = mock(DisplayDeviceConfig.class);
+ when(ddcMock.getRefreshRateData()).thenReturn(EMPTY_REFRESH_RATE_DATA);
when(ddcMock.getDefaultLowBlockingZoneRefreshRate()).thenReturn(90);
when(ddcMock.getHighDisplayBrightnessThresholds()).thenReturn(new float[] { 200 });
when(ddcMock.getHighAmbientBrightnessThresholds()).thenReturn(new float[] { 8000 });
@@ -3367,10 +3377,14 @@
// Notify that the default display is updated, such that DisplayDeviceConfig has new values
DisplayDeviceConfig displayDeviceConfig = mock(DisplayDeviceConfig.class);
+ RefreshRateData refreshRateData = new RefreshRateData(
+ /* defaultRefreshRate= */ 60,
+ /* defaultPeakRefreshRate= */ 65,
+ /* defaultRefreshRateInHbmHdr= */ 65,
+ /* defaultRefreshRateInHbmSunlight= */ 75);
+ when(displayDeviceConfig.getRefreshRateData()).thenReturn(refreshRateData);
when(displayDeviceConfig.getDefaultLowBlockingZoneRefreshRate()).thenReturn(50);
when(displayDeviceConfig.getDefaultHighBlockingZoneRefreshRate()).thenReturn(55);
- when(displayDeviceConfig.getDefaultRefreshRate()).thenReturn(60);
- when(displayDeviceConfig.getDefaultPeakRefreshRate()).thenReturn(65);
when(displayDeviceConfig.getLowDisplayBrightnessThresholds())
.thenReturn(new float[]{0.025f});
when(displayDeviceConfig.getLowAmbientBrightnessThresholds())
@@ -3379,8 +3393,6 @@
.thenReturn(new float[]{0.21f});
when(displayDeviceConfig.getHighAmbientBrightnessThresholds())
.thenReturn(new float[]{2100});
- when(displayDeviceConfig.getDefaultRefreshRateInHbmHdr()).thenReturn(65);
- when(displayDeviceConfig.getDefaultRefreshRateInHbmSunlight()).thenReturn(75);
director.defaultDisplayDeviceUpdated(displayDeviceConfig);
// Verify the new values are from the freshly loaded DisplayDeviceConfig.
@@ -3490,6 +3502,7 @@
any(Handler.class));
DisplayDeviceConfig ddcMock = mock(DisplayDeviceConfig.class);
+ when(ddcMock.getRefreshRateData()).thenReturn(EMPTY_REFRESH_RATE_DATA);
when(ddcMock.getDefaultLowBlockingZoneRefreshRate()).thenReturn(50);
when(ddcMock.getDefaultHighBlockingZoneRefreshRate()).thenReturn(55);
when(ddcMock.getLowDisplayBrightnessThresholds()).thenReturn(new float[]{0.025f});
diff --git a/services/tests/dreamservicetests/src/com/android/server/dreams/DreamAccessibilityTest.java b/services/tests/dreamservicetests/src/com/android/server/dreams/DreamAccessibilityTest.java
new file mode 100644
index 0000000..99968d5
--- /dev/null
+++ b/services/tests/dreamservicetests/src/com/android/server/dreams/DreamAccessibilityTest.java
@@ -0,0 +1,163 @@
+/*
+ * 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.dreams;
+
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.argThat;
+import static org.mockito.Mockito.clearInvocations;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.service.dreams.utils.DreamAccessibility;
+import android.text.TextUtils;
+import android.view.View;
+import android.view.accessibility.AccessibilityNodeInfo;
+
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
+import com.android.internal.R;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Captor;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.util.ArrayList;
+import java.util.Collections;
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class DreamAccessibilityTest {
+
+ @Mock
+ private View mView;
+
+ @Mock
+ private Context mContext;
+
+ @Mock
+ private Resources mResources;
+
+ @Mock
+ private AccessibilityNodeInfo mAccessibilityNodeInfo;
+
+ @Captor
+ private ArgumentCaptor<View.AccessibilityDelegate> mAccessibilityDelegateArgumentCaptor;
+
+ private DreamAccessibility mDreamAccessibility;
+ private static final String CUSTOM_ACTION = "Custom Action";
+ private static final String EXISTING_ACTION = "Existing Action";
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ mDreamAccessibility = new DreamAccessibility(mContext, mView);
+
+ when(mContext.getResources()).thenReturn(mResources);
+ when(mResources.getString(R.string.dream_accessibility_action_click))
+ .thenReturn(CUSTOM_ACTION);
+ }
+ /**
+ * Test to verify the configuration of accessibility actions within a view delegate.
+ */
+ @Test
+ public void testConfigureAccessibilityActions() {
+ when(mAccessibilityNodeInfo.getActionList()).thenReturn(new ArrayList<>());
+
+ mDreamAccessibility.updateAccessibilityConfiguration(false);
+
+ verify(mView).setAccessibilityDelegate(mAccessibilityDelegateArgumentCaptor.capture());
+ View.AccessibilityDelegate capturedDelegate =
+ mAccessibilityDelegateArgumentCaptor.getValue();
+
+ capturedDelegate.onInitializeAccessibilityNodeInfo(mView, mAccessibilityNodeInfo);
+
+ verify(mAccessibilityNodeInfo).addAction(argThat(action ->
+ action.getId() == AccessibilityNodeInfo.ACTION_CLICK
+ && TextUtils.equals(action.getLabel(), CUSTOM_ACTION)));
+ }
+
+ /**
+ * Test to verify the configuration of accessibility actions within a view delegate,
+ * specifically checking the removal of an existing click action and addition
+ * of a new custom action.
+ */
+ @Test
+ public void testConfigureAccessibilityActions_RemovesExistingClickAction() {
+ AccessibilityNodeInfo.AccessibilityAction existingAction =
+ new AccessibilityNodeInfo.AccessibilityAction(AccessibilityNodeInfo.ACTION_CLICK,
+ EXISTING_ACTION);
+ when(mAccessibilityNodeInfo.getActionList())
+ .thenReturn(Collections.singletonList(existingAction));
+
+ mDreamAccessibility.updateAccessibilityConfiguration(false);
+
+ verify(mView).setAccessibilityDelegate(mAccessibilityDelegateArgumentCaptor.capture());
+ View.AccessibilityDelegate capturedDelegate =
+ mAccessibilityDelegateArgumentCaptor.getValue();
+
+ capturedDelegate.onInitializeAccessibilityNodeInfo(mView, mAccessibilityNodeInfo);
+
+ verify(mAccessibilityNodeInfo).removeAction(existingAction);
+ verify(mAccessibilityNodeInfo).addAction(argThat(action ->
+ action.getId() == AccessibilityNodeInfo.ACTION_CLICK
+ && TextUtils.equals(action.getLabel(), CUSTOM_ACTION)));
+
+ }
+
+ /**
+ * Test to verify the removal of a custom accessibility action within a view delegate.
+ */
+ @Test
+ public void testRemoveCustomAccessibilityAction() {
+
+ AccessibilityNodeInfo.AccessibilityAction existingAction =
+ new AccessibilityNodeInfo.AccessibilityAction(AccessibilityNodeInfo.ACTION_CLICK,
+ EXISTING_ACTION);
+ when(mAccessibilityNodeInfo.getActionList())
+ .thenReturn(Collections.singletonList(existingAction));
+
+ mDreamAccessibility.updateAccessibilityConfiguration(false);
+ verify(mView).setAccessibilityDelegate(mAccessibilityDelegateArgumentCaptor.capture());
+ View.AccessibilityDelegate capturedDelegate =
+ mAccessibilityDelegateArgumentCaptor.getValue();
+ when(mView.getAccessibilityDelegate()).thenReturn(capturedDelegate);
+ clearInvocations(mView);
+
+ mDreamAccessibility.updateAccessibilityConfiguration(true);
+ verify(mView).setAccessibilityDelegate(null);
+ }
+
+ /**
+ * Test to verify the removal of custom accessibility action is not called if delegate is not
+ * set by the dreamService.
+ */
+ @Test
+ public void testRemoveCustomAccessibility_DoesNotRemoveDelegateNotSetByDreamAccessibility() {
+ mDreamAccessibility.updateAccessibilityConfiguration(true);
+ verify(mView, never()).setAccessibilityDelegate(any());
+ }
+}
+
diff --git a/services/tests/dreamservicetests/src/com/android/server/dreams/DreamControllerTest.java b/services/tests/dreamservicetests/src/com/android/server/dreams/DreamControllerTest.java
index db70434..88ab871 100644
--- a/services/tests/dreamservicetests/src/com/android/server/dreams/DreamControllerTest.java
+++ b/services/tests/dreamservicetests/src/com/android/server/dreams/DreamControllerTest.java
@@ -19,6 +19,8 @@
import static android.os.PowerManager.USER_ACTIVITY_EVENT_OTHER;
import static android.os.PowerManager.USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.anyString;
@@ -270,6 +272,31 @@
eq(USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS));
}
+ @Test
+ public void setDreamHasFocus_true_dreamHasFocus() {
+ mDreamController.startDream(mToken, mDreamName, false /*isPreview*/, false /*doze*/,
+ 0 /*userId*/, null /*wakeLock*/, mOverlayName, "test" /*reason*/);
+
+ mDreamController.setDreamHasFocus(true);
+ assertTrue(mDreamController.dreamHasFocus());
+ }
+
+ @Test
+ public void setDreamHasFocus_false_dreamDoesNotHaveFocus() {
+ mDreamController.startDream(mToken, mDreamName, false /*isPreview*/, false /*doze*/,
+ 0 /*userId*/, null /*wakeLock*/, mOverlayName, "test" /*reason*/);
+
+ mDreamController.setDreamHasFocus(false);
+ assertFalse(mDreamController.dreamHasFocus());
+ }
+
+ @Test
+ public void setDreamHasFocus_notDreaming_dreamDoesNotHaveFocus() {
+ mDreamController.setDreamHasFocus(true);
+ // Dream still doesn't have focus because it was never started.
+ assertFalse(mDreamController.dreamHasFocus());
+ }
+
private ServiceConnection captureServiceConnection() {
verify(mContext).bindServiceAsUser(any(), mServiceConnectionACaptor.capture(), anyInt(),
any());
diff --git a/services/tests/mockingservicestests/src/com/android/server/SensitiveContentProtectionManagerServiceNotificationTest.java b/services/tests/mockingservicestests/src/com/android/server/SensitiveContentProtectionManagerServiceNotificationTest.java
index 124ae20..a20d935 100644
--- a/services/tests/mockingservicestests/src/com/android/server/SensitiveContentProtectionManagerServiceNotificationTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/SensitiveContentProtectionManagerServiceNotificationTest.java
@@ -16,15 +16,18 @@
package com.android.server;
+import static android.permission.flags.Flags.FLAG_SENSITIVE_CONTENT_METRICS_BUGFIX;
import static android.permission.flags.Flags.FLAG_SENSITIVE_NOTIFICATION_APP_PROTECTION;
import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doCallRealMethod;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyZeroInteractions;
@@ -34,6 +37,7 @@
import android.media.projection.MediaProjectionInfo;
import android.media.projection.MediaProjectionManager;
import android.os.Process;
+import android.platform.test.annotations.RequiresFlagsDisabled;
import android.platform.test.annotations.RequiresFlagsEnabled;
import android.platform.test.flag.junit.CheckFlagsRule;
import android.platform.test.flag.junit.DeviceFlagsValueProvider;
@@ -309,6 +313,26 @@
}
@Test
+ @RequiresFlagsDisabled(FLAG_SENSITIVE_CONTENT_METRICS_BUGFIX)
+ public void mediaProjectionOnStart_flagDisabled_neverSetBlockScreenCaptureForAppsSessionId() {
+ setupSensitiveNotification();
+
+ mMediaProjectionCallbackCaptor.getValue().onStart(createMediaProjectionInfo());
+
+ verify(mWindowManager, never()).setBlockScreenCaptureForAppsSessionId(anyLong());
+ }
+
+ @Test
+ @RequiresFlagsEnabled(FLAG_SENSITIVE_CONTENT_METRICS_BUGFIX)
+ public void mediaProjectionOnStart_setBlockScreenCaptureForAppsSessionId() {
+ setupSensitiveNotification();
+
+ mMediaProjectionCallbackCaptor.getValue().onStart(createMediaProjectionInfo());
+
+ verify(mWindowManager).setBlockScreenCaptureForAppsSessionId(anyLong());
+ }
+
+ @Test
public void mediaProjectionOnStart_onProjectionStart_setWmBlockedPackages() {
ArraySet<PackageInfo> expectedBlockedPackages = setupSensitiveNotification();
@@ -323,7 +347,7 @@
mMediaProjectionCallbackCaptor.getValue().onStart(createMediaProjectionInfo());
- verifyZeroInteractions(mWindowManager);
+ verify(mWindowManager, never()).addBlockScreenCaptureForApps(any());
}
@Test
@@ -332,7 +356,7 @@
mMediaProjectionCallbackCaptor.getValue().onStart(createMediaProjectionInfo());
- verifyZeroInteractions(mWindowManager);
+ verify(mWindowManager, never()).addBlockScreenCaptureForApps(any());
}
@Test
@@ -400,7 +424,7 @@
mMediaProjectionCallbackCaptor.getValue().onStart(createMediaProjectionInfo());
- verifyZeroInteractions(mWindowManager);
+ verify(mWindowManager, never()).addBlockScreenCaptureForApps(any());
}
@Test
@@ -411,7 +435,7 @@
mMediaProjectionCallbackCaptor.getValue().onStart(createMediaProjectionInfo());
- verifyZeroInteractions(mWindowManager);
+ verify(mWindowManager, never()).addBlockScreenCaptureForApps(any());
}
@Test
@@ -422,7 +446,7 @@
mMediaProjectionCallbackCaptor.getValue().onStart(createMediaProjectionInfo());
- verifyZeroInteractions(mWindowManager);
+ verify(mWindowManager, never()).addBlockScreenCaptureForApps(any());
}
@Test
@@ -435,7 +459,7 @@
mMediaProjectionCallbackCaptor.getValue().onStart(createMediaProjectionInfo());
- verifyZeroInteractions(mWindowManager);
+ verify(mWindowManager, never()).addBlockScreenCaptureForApps(any());
}
@Test
diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/WifiPowerStatsCollectorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/WifiPowerStatsCollectorTest.java
new file mode 100644
index 0000000..8b1d423
--- /dev/null
+++ b/services/tests/powerstatstests/src/com/android/server/power/stats/WifiPowerStatsCollectorTest.java
@@ -0,0 +1,416 @@
+/*
+ * 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.power.stats;
+
+import static android.net.NetworkStats.DEFAULT_NETWORK_NO;
+import static android.net.NetworkStats.METERED_NO;
+import static android.net.NetworkStats.ROAMING_NO;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.reset;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.hardware.power.stats.EnergyConsumerType;
+import android.net.NetworkStats;
+import android.net.wifi.WifiManager;
+import android.os.BatteryConsumer;
+import android.os.BatteryStatsManager;
+import android.os.Handler;
+import android.os.WorkSource;
+import android.os.connectivity.WifiActivityEnergyInfo;
+import android.platform.test.ravenwood.RavenwoodRule;
+import android.util.IndentingPrintWriter;
+import android.util.SparseArray;
+
+import com.android.internal.os.Clock;
+import com.android.internal.os.PowerStats;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.IntSupplier;
+import java.util.function.Supplier;
+
+public class WifiPowerStatsCollectorTest {
+ private static final int APP_UID1 = 42;
+ private static final int APP_UID2 = 24;
+ private static final int APP_UID3 = 44;
+ private static final int ISOLATED_UID = 99123;
+
+ @Rule(order = 0)
+ public final RavenwoodRule mRavenwood = new RavenwoodRule.Builder()
+ .setProvideMainThread(true)
+ .build();
+
+ @Rule(order = 1)
+ public final BatteryUsageStatsRule mStatsRule = new BatteryUsageStatsRule()
+ .setPowerStatsThrottlePeriodMillis(BatteryConsumer.POWER_COMPONENT_WIFI, 1000);
+
+ private MockBatteryStatsImpl mBatteryStats;
+
+ private final MockClock mClock = mStatsRule.getMockClock();
+
+ @Mock
+ private Context mContext;
+ @Mock
+ private PackageManager mPackageManager;
+ @Mock
+ private WifiManager mWifiManager;
+ @Mock
+ private PowerStatsCollector.ConsumedEnergyRetriever mConsumedEnergyRetriever;
+ @Mock
+ private Supplier<NetworkStats> mNetworkStatsSupplier;
+ @Mock
+ private PowerStatsUidResolver mPowerStatsUidResolver;
+
+ private NetworkStats mNetworkStats;
+ private List<NetworkStats.Entry> mNetworkStatsEntries;
+
+ private static class ScanTimes {
+ public long scanTimeMs;
+ public long batchScanTimeMs;
+ }
+
+ private final SparseArray<ScanTimes> mScanTimes = new SparseArray<>();
+ private long mWifiActiveDuration;
+
+ private final WifiPowerStatsCollector.WifiStatsRetriever mWifiStatsRetriever =
+ new WifiPowerStatsCollector.WifiStatsRetriever() {
+ @Override
+ public void retrieveWifiScanTimes(Callback callback) {
+ for (int i = 0; i < mScanTimes.size(); i++) {
+ int uid = mScanTimes.keyAt(i);
+ ScanTimes scanTimes = mScanTimes.valueAt(i);
+ callback.onWifiScanTime(uid, scanTimes.scanTimeMs, scanTimes.batchScanTimeMs);
+ }
+ }
+
+ @Override
+ public long getWifiActiveDuration() {
+ return mWifiActiveDuration;
+ }
+ };
+
+ private final List<PowerStats> mRecordedPowerStats = new ArrayList<>();
+
+ private WifiPowerStatsCollector.Injector mInjector = new WifiPowerStatsCollector.Injector() {
+ @Override
+ public Handler getHandler() {
+ return mStatsRule.getHandler();
+ }
+
+ @Override
+ public Clock getClock() {
+ return mStatsRule.getMockClock();
+ }
+
+ @Override
+ public PowerStatsUidResolver getUidResolver() {
+ return mPowerStatsUidResolver;
+ }
+
+ @Override
+ public PackageManager getPackageManager() {
+ return mPackageManager;
+ }
+
+ @Override
+ public PowerStatsCollector.ConsumedEnergyRetriever getConsumedEnergyRetriever() {
+ return mConsumedEnergyRetriever;
+ }
+
+ @Override
+ public IntSupplier getVoltageSupplier() {
+ return () -> 3500;
+ }
+
+ @Override
+ public Supplier<NetworkStats> getWifiNetworkStatsSupplier() {
+ return mNetworkStatsSupplier;
+ }
+
+ @Override
+ public WifiPowerStatsCollector.WifiStatsRetriever getWifiStatsRetriever() {
+ return mWifiStatsRetriever;
+ }
+
+ @Override
+ public WifiManager getWifiManager() {
+ return mWifiManager;
+ }
+ };
+
+ @Before
+ public void setup() {
+ MockitoAnnotations.initMocks(this);
+ when(mContext.getPackageManager()).thenReturn(mPackageManager);
+ when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_WIFI)).thenReturn(true);
+ when(mPowerStatsUidResolver.mapUid(anyInt())).thenAnswer(invocation -> {
+ int uid = invocation.getArgument(0);
+ if (uid == ISOLATED_UID) {
+ return APP_UID2;
+ } else {
+ return uid;
+ }
+ });
+ mBatteryStats = mStatsRule.getBatteryStats();
+ }
+
+ @SuppressWarnings("GuardedBy")
+ @Test
+ public void triggering() throws Throwable {
+ PowerStatsCollector collector = mBatteryStats.getPowerStatsCollector(
+ BatteryConsumer.POWER_COMPONENT_WIFI);
+ collector.addConsumer(mRecordedPowerStats::add);
+
+ mBatteryStats.setPowerStatsCollectorEnabled(BatteryConsumer.POWER_COMPONENT_WIFI, true);
+
+ mockWifiActivityInfo(1000, 2000, 3000, 600, 100);
+
+ // This should trigger a sample collection to establish a baseline
+ mBatteryStats.onSystemReady(mContext);
+
+ mStatsRule.waitForBackgroundThread();
+ assertThat(mRecordedPowerStats).hasSize(1);
+
+ mRecordedPowerStats.clear();
+ mStatsRule.setTime(20000, 20000);
+ mBatteryStats.noteWifiOnLocked(mClock.realtime, mClock.uptime);
+ mStatsRule.waitForBackgroundThread();
+ assertThat(mRecordedPowerStats).hasSize(1);
+
+ mRecordedPowerStats.clear();
+ mStatsRule.setTime(40000, 40000);
+ mBatteryStats.noteWifiOffLocked(mClock.realtime, mClock.uptime);
+ mStatsRule.waitForBackgroundThread();
+ assertThat(mRecordedPowerStats).hasSize(1);
+
+ mRecordedPowerStats.clear();
+ mStatsRule.setTime(50000, 50000);
+ mBatteryStats.noteWifiRunningLocked(new WorkSource(APP_UID1), mClock.realtime,
+ mClock.uptime);
+ mStatsRule.waitForBackgroundThread();
+ assertThat(mRecordedPowerStats).hasSize(1);
+
+ mRecordedPowerStats.clear();
+ mStatsRule.setTime(60000, 60000);
+ mBatteryStats.noteWifiStoppedLocked(new WorkSource(APP_UID1), mClock.realtime,
+ mClock.uptime);
+ mStatsRule.waitForBackgroundThread();
+ assertThat(mRecordedPowerStats).hasSize(1);
+
+ mRecordedPowerStats.clear();
+ mStatsRule.setTime(70000, 70000);
+ mBatteryStats.noteWifiStateLocked(BatteryStatsManager.WIFI_STATE_ON_CONNECTED_STA,
+ "mywyfy", mClock.realtime);
+ mStatsRule.waitForBackgroundThread();
+ assertThat(mRecordedPowerStats).hasSize(1);
+ }
+
+ @Test
+ public void collectStats_powerReportingSupported() throws Throwable {
+ PowerStats powerStats = collectPowerStats(true);
+ assertThat(powerStats.durationMs).isEqualTo(7500);
+
+ PowerStats.Descriptor descriptor = powerStats.descriptor;
+ WifiPowerStatsLayout layout = new WifiPowerStatsLayout(descriptor);
+ assertThat(layout.isPowerReportingSupported()).isTrue();
+ assertThat(layout.getDeviceRxTime(powerStats.stats)).isEqualTo(6000);
+ assertThat(layout.getDeviceTxTime(powerStats.stats)).isEqualTo(1000);
+ assertThat(layout.getDeviceScanTime(powerStats.stats)).isEqualTo(200);
+ assertThat(layout.getDeviceIdleTime(powerStats.stats)).isEqualTo(300);
+ assertThat(layout.getConsumedEnergy(powerStats.stats, 0))
+ .isEqualTo((64321 - 10000) * 1000 / 3500);
+
+ verifyUidStats(powerStats);
+ }
+
+ @Test
+ public void collectStats_powerReportingUnsupported() {
+ PowerStats powerStats = collectPowerStats(false);
+ assertThat(powerStats.durationMs).isEqualTo(13200);
+
+ PowerStats.Descriptor descriptor = powerStats.descriptor;
+ WifiPowerStatsLayout layout = new WifiPowerStatsLayout(descriptor);
+ assertThat(layout.isPowerReportingSupported()).isFalse();
+ assertThat(layout.getDeviceActiveTime(powerStats.stats)).isEqualTo(7500);
+ assertThat(layout.getDeviceBasicScanTime(powerStats.stats)).isEqualTo(234 + 100 + 300);
+ assertThat(layout.getDeviceBatchedScanTime(powerStats.stats)).isEqualTo(345 + 200 + 400);
+ assertThat(layout.getConsumedEnergy(powerStats.stats, 0))
+ .isEqualTo((64321 - 10000) * 1000 / 3500);
+
+ verifyUidStats(powerStats);
+ }
+
+ private void verifyUidStats(PowerStats powerStats) {
+ WifiPowerStatsLayout layout = new WifiPowerStatsLayout(powerStats.descriptor);
+ assertThat(powerStats.uidStats.size()).isEqualTo(2);
+ long[] actual1 = powerStats.uidStats.get(APP_UID1);
+ assertThat(layout.getUidRxBytes(actual1)).isEqualTo(1000);
+ assertThat(layout.getUidTxBytes(actual1)).isEqualTo(2000);
+ assertThat(layout.getUidRxPackets(actual1)).isEqualTo(100);
+ assertThat(layout.getUidTxPackets(actual1)).isEqualTo(200);
+ assertThat(layout.getUidScanTime(actual1)).isEqualTo(234);
+ assertThat(layout.getUidBatchedScanTime(actual1)).isEqualTo(345);
+
+ // Combines APP_UID2 and ISOLATED_UID
+ long[] actual2 = powerStats.uidStats.get(APP_UID2);
+ assertThat(layout.getUidRxBytes(actual2)).isEqualTo(6000);
+ assertThat(layout.getUidTxBytes(actual2)).isEqualTo(3000);
+ assertThat(layout.getUidRxPackets(actual2)).isEqualTo(60);
+ assertThat(layout.getUidTxPackets(actual2)).isEqualTo(30);
+ assertThat(layout.getUidScanTime(actual2)).isEqualTo(100 + 300);
+ assertThat(layout.getUidBatchedScanTime(actual2)).isEqualTo(200 + 400);
+
+ assertThat(powerStats.uidStats.get(ISOLATED_UID)).isNull();
+ assertThat(powerStats.uidStats.get(APP_UID3)).isNull();
+ }
+
+ @Test
+ public void dump() throws Throwable {
+ PowerStats powerStats = collectPowerStats(true);
+ StringWriter sw = new StringWriter();
+ IndentingPrintWriter pw = new IndentingPrintWriter(sw);
+ powerStats.dump(pw);
+ pw.flush();
+ String dump = sw.toString();
+ assertThat(dump).contains("duration=7500");
+ assertThat(dump).contains(
+ "stats=[6000, 1000, 300, 200, 634, 945, " + ((64321 - 10000) * 1000 / 3500)
+ + ", 0, 0]");
+ assertThat(dump).contains("UID 24: [6000, 3000, 60, 30, 400, 600, 0]");
+ assertThat(dump).contains("UID 42: [1000, 2000, 100, 200, 234, 345, 0]");
+ }
+
+ private PowerStats collectPowerStats(boolean hasPowerReporting) {
+ when(mWifiManager.isEnhancedPowerReportingSupported()).thenReturn(hasPowerReporting);
+
+ WifiPowerStatsCollector collector = new WifiPowerStatsCollector(mInjector, 0);
+ collector.setEnabled(true);
+
+ when(mConsumedEnergyRetriever.getEnergyConsumerIds(EnergyConsumerType.WIFI))
+ .thenReturn(new int[]{777});
+
+ if (hasPowerReporting) {
+ mockWifiActivityInfo(1000, 600, 100, 2000, 3000);
+ } else {
+ mWifiActiveDuration = 5700;
+ }
+ mockNetworkStats(1000);
+ mockNetworkStatsEntry(APP_UID1, 4321, 321, 1234, 23);
+ mockNetworkStatsEntry(APP_UID2, 4000, 40, 2000, 20);
+ mockNetworkStatsEntry(ISOLATED_UID, 2000, 20, 1000, 10);
+ mockNetworkStatsEntry(APP_UID3, 314, 281, 314, 281);
+ mockWifiScanTimes(APP_UID1, 1000, 2000);
+ mockWifiScanTimes(APP_UID2, 3000, 4000);
+ mockWifiScanTimes(ISOLATED_UID, 5000, 6000);
+
+ when(mConsumedEnergyRetriever.getConsumedEnergyUws(eq(new int[]{777})))
+ .thenReturn(new long[]{10000});
+
+ collector.collectStats();
+
+ if (hasPowerReporting) {
+ mockWifiActivityInfo(1100, 6600, 1100, 2200, 3300);
+ } else {
+ mWifiActiveDuration = 13200;
+ }
+ mockNetworkStats(1100);
+ mockNetworkStatsEntry(APP_UID1, 5321, 421, 3234, 223);
+ mockNetworkStatsEntry(APP_UID2, 8000, 80, 4000, 40);
+ mockNetworkStatsEntry(ISOLATED_UID, 4000, 40, 2000, 20);
+ mockNetworkStatsEntry(APP_UID3, 314, 281, 314, 281); // Unchanged
+ mockWifiScanTimes(APP_UID1, 1234, 2345);
+ mockWifiScanTimes(APP_UID2, 3100, 4200);
+ mockWifiScanTimes(ISOLATED_UID, 5300, 6400);
+
+ when(mConsumedEnergyRetriever.getConsumedEnergyUws(eq(new int[]{777})))
+ .thenReturn(new long[]{64321});
+
+ mStatsRule.setTime(20000, 20000);
+ return collector.collectStats();
+ }
+
+ private void mockWifiActivityInfo(long timestamp, long rxTimeMs, long txTimeMs, int scanTimeMs,
+ int idleTimeMs) {
+ int stackState = 0;
+ WifiActivityEnergyInfo info = new WifiActivityEnergyInfo(timestamp, stackState, txTimeMs,
+ rxTimeMs, scanTimeMs, idleTimeMs);
+ doAnswer(invocation -> {
+ WifiManager.OnWifiActivityEnergyInfoListener listener = invocation.getArgument(1);
+ listener.onWifiActivityEnergyInfo(info);
+ return null;
+ }).when(mWifiManager).getWifiActivityEnergyInfoAsync(any(), any());
+ }
+
+ private void mockNetworkStats(long elapsedRealtime) {
+ if (RavenwoodRule.isOnRavenwood()) {
+ mNetworkStats = mock(NetworkStats.class);
+ ArrayList<NetworkStats.Entry> networkStatsEntries = new ArrayList<>();
+ when(mNetworkStats.iterator()).thenAnswer(inv -> networkStatsEntries.iterator());
+ mNetworkStatsEntries = networkStatsEntries;
+ } else {
+ mNetworkStats = new NetworkStats(elapsedRealtime, 1);
+ }
+ when(mNetworkStatsSupplier.get()).thenReturn(mNetworkStats);
+ }
+
+ private void mockNetworkStatsEntry(int uid, long rxBytes, long rxPackets, long txBytes,
+ long txPackets) {
+ if (RavenwoodRule.isOnRavenwood()) {
+ NetworkStats.Entry entry = mock(NetworkStats.Entry.class);
+ when(entry.getUid()).thenReturn(uid);
+ when(entry.getMetered()).thenReturn(METERED_NO);
+ when(entry.getRoaming()).thenReturn(ROAMING_NO);
+ when(entry.getDefaultNetwork()).thenReturn(DEFAULT_NETWORK_NO);
+ when(entry.getRxBytes()).thenReturn(rxBytes);
+ when(entry.getRxPackets()).thenReturn(rxPackets);
+ when(entry.getTxBytes()).thenReturn(txBytes);
+ when(entry.getTxPackets()).thenReturn(txPackets);
+ when(entry.getOperations()).thenReturn(100L);
+ mNetworkStatsEntries.add(entry);
+ } else {
+ mNetworkStats = mNetworkStats
+ .addEntry(new NetworkStats.Entry("wifi", uid, 0, 0,
+ METERED_NO, ROAMING_NO, DEFAULT_NETWORK_NO, rxBytes, rxPackets,
+ txBytes, txPackets, 100));
+ reset(mNetworkStatsSupplier);
+ when(mNetworkStatsSupplier.get()).thenReturn(mNetworkStats);
+ }
+ }
+
+ private void mockWifiScanTimes(int uid, long scanTimeMs, long batchScanTimeMs) {
+ ScanTimes scanTimes = new ScanTimes();
+ scanTimes.scanTimeMs = scanTimeMs;
+ scanTimes.batchScanTimeMs = batchScanTimeMs;
+ mScanTimes.put(uid, scanTimes);
+ }
+}
diff --git a/services/tests/powerstatstests/src/com/android/server/power/stats/WifiPowerStatsProcessorTest.java b/services/tests/powerstatstests/src/com/android/server/power/stats/WifiPowerStatsProcessorTest.java
new file mode 100644
index 0000000..257a1a6
--- /dev/null
+++ b/services/tests/powerstatstests/src/com/android/server/power/stats/WifiPowerStatsProcessorTest.java
@@ -0,0 +1,592 @@
+/*
+ * 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.power.stats;
+
+import static android.net.NetworkStats.DEFAULT_NETWORK_NO;
+import static android.net.NetworkStats.METERED_NO;
+import static android.net.NetworkStats.ROAMING_NO;
+import static android.os.BatteryConsumer.PROCESS_STATE_BACKGROUND;
+import static android.os.BatteryConsumer.PROCESS_STATE_CACHED;
+import static android.os.BatteryConsumer.PROCESS_STATE_FOREGROUND;
+import static android.os.BatteryConsumer.PROCESS_STATE_FOREGROUND_SERVICE;
+
+import static com.android.server.power.stats.AggregatedPowerStatsConfig.POWER_STATE_OTHER;
+import static com.android.server.power.stats.AggregatedPowerStatsConfig.SCREEN_STATE_ON;
+import static com.android.server.power.stats.AggregatedPowerStatsConfig.SCREEN_STATE_OTHER;
+import static com.android.server.power.stats.AggregatedPowerStatsConfig.STATE_POWER;
+import static com.android.server.power.stats.AggregatedPowerStatsConfig.STATE_PROCESS_STATE;
+import static com.android.server.power.stats.AggregatedPowerStatsConfig.STATE_SCREEN;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import android.annotation.Nullable;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.hardware.power.stats.EnergyConsumerType;
+import android.net.NetworkStats;
+import android.net.wifi.WifiManager;
+import android.os.BatteryConsumer;
+import android.os.Handler;
+import android.os.Process;
+import android.os.connectivity.WifiActivityEnergyInfo;
+import android.platform.test.ravenwood.RavenwoodRule;
+import android.util.SparseArray;
+
+import com.android.internal.os.Clock;
+import com.android.internal.os.PowerProfile;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.util.List;
+import java.util.function.IntSupplier;
+import java.util.function.Supplier;
+
+public class WifiPowerStatsProcessorTest {
+ @Rule(order = 0)
+ public final RavenwoodRule mRavenwood = new RavenwoodRule.Builder()
+ .setProvideMainThread(true)
+ .build();
+
+ private static final double PRECISION = 0.00001;
+ private static final int APP_UID1 = Process.FIRST_APPLICATION_UID + 42;
+ private static final int APP_UID2 = Process.FIRST_APPLICATION_UID + 101;
+ private static final int WIFI_ENERGY_CONSUMER_ID = 1;
+ private static final int VOLTAGE_MV = 3500;
+
+ @Rule(order = 1)
+ public final BatteryUsageStatsRule mStatsRule = new BatteryUsageStatsRule()
+ .setAveragePower(PowerProfile.POWER_WIFI_CONTROLLER_IDLE, 360.0)
+ .setAveragePower(PowerProfile.POWER_WIFI_CONTROLLER_RX, 480.0)
+ .setAveragePower(PowerProfile.POWER_WIFI_CONTROLLER_TX, 720.0)
+ .setAveragePower(PowerProfile.POWER_WIFI_ACTIVE, 360.0)
+ .setAveragePower(PowerProfile.POWER_WIFI_SCAN, 480.0)
+ .setAveragePower(PowerProfile.POWER_WIFI_BATCHED_SCAN, 720.0)
+ .initMeasuredEnergyStatsLocked();
+
+ @Mock
+ private Context mContext;
+ @Mock
+ private PowerStatsUidResolver mPowerStatsUidResolver;
+ @Mock
+ private PackageManager mPackageManager;
+ @Mock
+ private PowerStatsCollector.ConsumedEnergyRetriever mConsumedEnergyRetriever;
+ @Mock
+ private Supplier<NetworkStats> mNetworkStatsSupplier;
+ @Mock
+ private WifiManager mWifiManager;
+
+ private static class ScanTimes {
+ public long scanTimeMs;
+ public long batchScanTimeMs;
+ }
+
+ private final SparseArray<ScanTimes> mScanTimes = new SparseArray<>();
+ private long mWifiActiveDuration;
+
+ private final WifiPowerStatsCollector.WifiStatsRetriever mWifiStatsRetriever =
+ new WifiPowerStatsCollector.WifiStatsRetriever() {
+ @Override
+ public void retrieveWifiScanTimes(Callback callback) {
+ for (int i = 0; i < mScanTimes.size(); i++) {
+ int uid = mScanTimes.keyAt(i);
+ ScanTimes scanTimes = mScanTimes.valueAt(i);
+ callback.onWifiScanTime(uid, scanTimes.scanTimeMs, scanTimes.batchScanTimeMs);
+ }
+ }
+
+ @Override
+ public long getWifiActiveDuration() {
+ return mWifiActiveDuration;
+ }
+ };
+
+ private final WifiPowerStatsCollector.Injector mInjector =
+ new WifiPowerStatsCollector.Injector() {
+ @Override
+ public Handler getHandler() {
+ return mStatsRule.getHandler();
+ }
+
+ @Override
+ public Clock getClock() {
+ return mStatsRule.getMockClock();
+ }
+
+ @Override
+ public PowerStatsUidResolver getUidResolver() {
+ return mPowerStatsUidResolver;
+ }
+
+ @Override
+ public PackageManager getPackageManager() {
+ return mPackageManager;
+ }
+
+ @Override
+ public PowerStatsCollector.ConsumedEnergyRetriever getConsumedEnergyRetriever() {
+ return mConsumedEnergyRetriever;
+ }
+
+ @Override
+ public IntSupplier getVoltageSupplier() {
+ return () -> VOLTAGE_MV;
+ }
+
+ @Override
+ public Supplier<NetworkStats> getWifiNetworkStatsSupplier() {
+ return mNetworkStatsSupplier;
+ }
+
+ @Override
+ public WifiManager getWifiManager() {
+ return mWifiManager;
+ }
+
+ @Override
+ public WifiPowerStatsCollector.WifiStatsRetriever getWifiStatsRetriever() {
+ return mWifiStatsRetriever;
+ }
+ };
+
+ @Before
+ public void setup() {
+ MockitoAnnotations.initMocks(this);
+
+ when(mContext.getPackageManager()).thenReturn(mPackageManager);
+ when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_WIFI)).thenReturn(true);
+ when(mPowerStatsUidResolver.mapUid(anyInt()))
+ .thenAnswer(invocation -> invocation.getArgument(0));
+ }
+
+ @Test
+ public void powerProfileModel_powerController() {
+ when(mWifiManager.isEnhancedPowerReportingSupported()).thenReturn(true);
+
+ // No power monitoring hardware
+ when(mConsumedEnergyRetriever.getEnergyConsumerIds(EnergyConsumerType.WIFI))
+ .thenReturn(new int[0]);
+
+ WifiPowerStatsProcessor processor =
+ new WifiPowerStatsProcessor(mStatsRule.getPowerProfile());
+
+ PowerComponentAggregatedPowerStats aggregatedStats = createAggregatedPowerStats(processor);
+
+ WifiPowerStatsCollector collector = new WifiPowerStatsCollector(mInjector, 0);
+ collector.setEnabled(true);
+
+ // Initial empty WifiActivityEnergyInfo.
+ mockWifiActivityEnergyInfo(new WifiActivityEnergyInfo(0L,
+ WifiActivityEnergyInfo.STACK_STATE_INVALID, 0L, 0L, 0L, 0L));
+
+ // Establish a baseline
+ aggregatedStats.addPowerStats(collector.collectStats(), 0);
+
+ // Turn the screen off after 2.5 seconds
+ aggregatedStats.setState(STATE_SCREEN, SCREEN_STATE_OTHER, 2500);
+ aggregatedStats.setUidState(APP_UID1, STATE_PROCESS_STATE, PROCESS_STATE_BACKGROUND, 2500);
+ aggregatedStats.setUidState(APP_UID1, STATE_PROCESS_STATE, PROCESS_STATE_FOREGROUND_SERVICE,
+ 5000);
+
+ // Note application network activity
+ NetworkStats networkStats = mockNetworkStats(10000, 1,
+ mockNetworkStatsEntry("wifi", APP_UID1, 0, 0,
+ METERED_NO, ROAMING_NO, DEFAULT_NETWORK_NO, 10000, 1500, 20000, 300, 100),
+ mockNetworkStatsEntry("wifi", APP_UID2, 0, 0,
+ METERED_NO, ROAMING_NO, DEFAULT_NETWORK_NO, 5000, 500, 3000, 100, 111));
+ when(mNetworkStatsSupplier.get()).thenReturn(networkStats);
+
+ mockWifiScanTimes(APP_UID1, 300, 400);
+ mockWifiScanTimes(APP_UID2, 100, 200);
+
+ mockWifiActivityEnergyInfo(new WifiActivityEnergyInfo(10000,
+ WifiActivityEnergyInfo.STACK_STATE_STATE_ACTIVE, 2000, 3000, 100, 600));
+
+ mStatsRule.setTime(10_000, 10_000);
+
+ aggregatedStats.addPowerStats(collector.collectStats(), 10_000);
+
+ processor.finish(aggregatedStats);
+
+ WifiPowerStatsLayout statsLayout =
+ new WifiPowerStatsLayout(aggregatedStats.getPowerStatsDescriptor());
+
+ // RX power = 'rx-duration * PowerProfile[wifi.controller.rx]`
+ // RX power = 3000 * 480 = 1440000 mA-ms = 0.4 mAh
+ // TX power = 'tx-duration * PowerProfile[wifi.controller.tx]`
+ // TX power = 2000 * 720 = 1440000 mA-ms = 0.4 mAh
+ // Scan power = 'scan-duration * PowerProfile[wifi.scan]`
+ // Scan power = 100 * 480 = 48000 mA-ms = 0.013333 mAh
+ // Idle power = 'idle-duration * PowerProfile[wifi.idle]`
+ // Idle power = 600 * 360 = 216000 mA-ms = 0.06 mAh
+ // Total power = RX + TX + Scan + Idle = 0.873333
+ // Screen-on - 25%
+ // Screen-off - 75%
+ double expectedPower = 0.873333;
+ long[] deviceStats = new long[aggregatedStats.getPowerStatsDescriptor().statsArrayLength];
+ aggregatedStats.getDeviceStats(deviceStats, states(POWER_STATE_OTHER, SCREEN_STATE_ON));
+ assertThat(statsLayout.getDevicePowerEstimate(deviceStats))
+ .isWithin(PRECISION).of(expectedPower * 0.25);
+
+ aggregatedStats.getDeviceStats(deviceStats, states(POWER_STATE_OTHER, SCREEN_STATE_OTHER));
+ assertThat(statsLayout.getDevicePowerEstimate(deviceStats))
+ .isWithin(PRECISION).of(expectedPower * 0.75);
+
+ // UID1 =
+ // (1500 / 2000) * 0.4 // rx
+ // + (300 / 400) * 0.4 // tx
+ // + (700 / 1000) * 0.013333 // scan (basic + batched)
+ // = 0.609333 mAh
+ double expectedPower1 = 0.609333;
+ long[] uidStats = new long[aggregatedStats.getPowerStatsDescriptor().uidStatsArrayLength];
+ aggregatedStats.getUidStats(uidStats, APP_UID1,
+ states(POWER_STATE_OTHER, SCREEN_STATE_ON, PROCESS_STATE_FOREGROUND));
+ assertThat(statsLayout.getUidPowerEstimate(uidStats))
+ .isWithin(PRECISION).of(expectedPower1 * 0.25);
+
+ aggregatedStats.getUidStats(uidStats, APP_UID1,
+ states(POWER_STATE_OTHER, SCREEN_STATE_OTHER, PROCESS_STATE_BACKGROUND));
+ assertThat(statsLayout.getUidPowerEstimate(uidStats))
+ .isWithin(PRECISION).of(expectedPower1 * 0.25);
+
+ aggregatedStats.getUidStats(uidStats, APP_UID1,
+ states(POWER_STATE_OTHER, SCREEN_STATE_OTHER, PROCESS_STATE_FOREGROUND_SERVICE));
+ assertThat(statsLayout.getUidPowerEstimate(uidStats))
+ .isWithin(PRECISION).of(expectedPower1 * 0.5);
+
+ // UID2 =
+ // (500 / 2000) * 0.4 // rx
+ // + (100 / 400) * 0.4 // tx
+ // + (300 / 1000) * 0.013333 // scan (basic + batched)
+ // = 0.204 mAh
+ double expectedPower2 = 0.204;
+ aggregatedStats.getUidStats(uidStats, APP_UID2,
+ states(POWER_STATE_OTHER, SCREEN_STATE_ON, PROCESS_STATE_CACHED));
+ assertThat(statsLayout.getUidPowerEstimate(uidStats))
+ .isWithin(PRECISION).of(expectedPower2 * 0.25);
+
+ aggregatedStats.getUidStats(uidStats, APP_UID2,
+ states(POWER_STATE_OTHER, SCREEN_STATE_OTHER, PROCESS_STATE_CACHED));
+ assertThat(statsLayout.getUidPowerEstimate(uidStats))
+ .isWithin(PRECISION).of(expectedPower2 * 0.75);
+ }
+
+ @Test
+ public void consumedEnergyModel_powerController() {
+ when(mWifiManager.isEnhancedPowerReportingSupported()).thenReturn(true);
+
+ // PowerStats hardware is available
+ when(mConsumedEnergyRetriever.getEnergyConsumerIds(EnergyConsumerType.WIFI))
+ .thenReturn(new int[] {WIFI_ENERGY_CONSUMER_ID});
+
+ WifiPowerStatsProcessor processor =
+ new WifiPowerStatsProcessor(mStatsRule.getPowerProfile());
+
+ PowerComponentAggregatedPowerStats aggregatedStats = createAggregatedPowerStats(processor);
+
+ WifiPowerStatsCollector collector = new WifiPowerStatsCollector(mInjector, 0);
+ collector.setEnabled(true);
+
+ // Initial empty WifiActivityEnergyInfo.
+ mockWifiActivityEnergyInfo(new WifiActivityEnergyInfo(0L,
+ WifiActivityEnergyInfo.STACK_STATE_INVALID, 0L, 0L, 0L, 0L));
+
+ when(mConsumedEnergyRetriever.getConsumedEnergyUws(
+ new int[]{WIFI_ENERGY_CONSUMER_ID}))
+ .thenReturn(new long[]{0});
+
+ // Establish a baseline
+ aggregatedStats.addPowerStats(collector.collectStats(), 0);
+
+ // Turn the screen off after 2.5 seconds
+ aggregatedStats.setState(STATE_SCREEN, SCREEN_STATE_OTHER, 2500);
+ aggregatedStats.setUidState(APP_UID1, STATE_PROCESS_STATE, PROCESS_STATE_BACKGROUND, 2500);
+ aggregatedStats.setUidState(APP_UID1, STATE_PROCESS_STATE, PROCESS_STATE_FOREGROUND_SERVICE,
+ 5000);
+
+ // Note application network activity
+ NetworkStats networkStats = mockNetworkStats(10000, 1,
+ mockNetworkStatsEntry("wifi", APP_UID1, 0, 0,
+ METERED_NO, ROAMING_NO, DEFAULT_NETWORK_NO, 10000, 1500, 20000, 300, 100),
+ mockNetworkStatsEntry("wifi", APP_UID2, 0, 0,
+ METERED_NO, ROAMING_NO, DEFAULT_NETWORK_NO, 5000, 500, 3000, 100, 111));
+ when(mNetworkStatsSupplier.get()).thenReturn(networkStats);
+
+ mockWifiScanTimes(APP_UID1, 300, 400);
+ mockWifiScanTimes(APP_UID2, 100, 200);
+
+ mockWifiActivityEnergyInfo(new WifiActivityEnergyInfo(10000,
+ WifiActivityEnergyInfo.STACK_STATE_STATE_ACTIVE, 2000, 3000, 100, 600));
+
+ mStatsRule.setTime(10_000, 10_000);
+
+ // 10 mAh represented as microWattSeconds
+ long energyUws = 10 * 3600 * VOLTAGE_MV;
+ when(mConsumedEnergyRetriever.getConsumedEnergyUws(
+ new int[]{WIFI_ENERGY_CONSUMER_ID})).thenReturn(new long[]{energyUws});
+
+ aggregatedStats.addPowerStats(collector.collectStats(), 10_000);
+
+ processor.finish(aggregatedStats);
+
+ WifiPowerStatsLayout statsLayout =
+ new WifiPowerStatsLayout(aggregatedStats.getPowerStatsDescriptor());
+
+ // All estimates are computed as in the #powerProfileModel_powerController test,
+ // except they are all scaled by the same ratio to ensure that the total estimated
+ // energy is equal to the measured energy
+ double expectedPower = 10;
+ long[] deviceStats = new long[aggregatedStats.getPowerStatsDescriptor().statsArrayLength];
+ aggregatedStats.getDeviceStats(deviceStats, states(POWER_STATE_OTHER, SCREEN_STATE_ON));
+ assertThat(statsLayout.getDevicePowerEstimate(deviceStats))
+ .isWithin(PRECISION).of(expectedPower * 0.25);
+
+ aggregatedStats.getDeviceStats(deviceStats, states(POWER_STATE_OTHER, SCREEN_STATE_OTHER));
+ assertThat(statsLayout.getDevicePowerEstimate(deviceStats))
+ .isWithin(PRECISION).of(expectedPower * 0.75);
+
+ // UID1
+ // 0.609333 // power profile model estimate
+ // 0.873333 // power profile model estimate for total power
+ // 10 // total consumed energy
+ // = 0.609333 * (10 / 0.873333) = 6.9771
+ double expectedPower1 = 6.9771;
+ long[] uidStats = new long[aggregatedStats.getPowerStatsDescriptor().uidStatsArrayLength];
+ aggregatedStats.getUidStats(uidStats, APP_UID1,
+ states(POWER_STATE_OTHER, SCREEN_STATE_ON, PROCESS_STATE_FOREGROUND));
+ assertThat(statsLayout.getUidPowerEstimate(uidStats))
+ .isWithin(PRECISION).of(expectedPower1 * 0.25);
+
+ aggregatedStats.getUidStats(uidStats, APP_UID1,
+ states(POWER_STATE_OTHER, SCREEN_STATE_OTHER, PROCESS_STATE_BACKGROUND));
+ assertThat(statsLayout.getUidPowerEstimate(uidStats))
+ .isWithin(PRECISION).of(expectedPower1 * 0.25);
+
+ aggregatedStats.getUidStats(uidStats, APP_UID1,
+ states(POWER_STATE_OTHER, SCREEN_STATE_OTHER, PROCESS_STATE_FOREGROUND_SERVICE));
+ assertThat(statsLayout.getUidPowerEstimate(uidStats))
+ .isWithin(PRECISION).of(expectedPower1 * 0.5);
+
+ // UID2
+ // 0.204 // power profile model estimate
+ // 0.873333 // power profile model estimate for total power
+ // 10 // total consumed energy
+ // = 0.204 * (10 / 0.873333) = 2.33588
+ double expectedPower2 = 2.33588;
+ aggregatedStats.getUidStats(uidStats, APP_UID2,
+ states(POWER_STATE_OTHER, SCREEN_STATE_ON, PROCESS_STATE_CACHED));
+ assertThat(statsLayout.getUidPowerEstimate(uidStats))
+ .isWithin(PRECISION).of(expectedPower2 * 0.25);
+
+ aggregatedStats.getUidStats(uidStats, APP_UID2,
+ states(POWER_STATE_OTHER, SCREEN_STATE_OTHER, PROCESS_STATE_CACHED));
+ assertThat(statsLayout.getUidPowerEstimate(uidStats))
+ .isWithin(PRECISION).of(expectedPower2 * 0.75);
+ }
+
+ @Test
+ public void powerProfileModel_noPowerController() {
+ when(mWifiManager.isEnhancedPowerReportingSupported()).thenReturn(false);
+
+ // No power monitoring hardware
+ when(mConsumedEnergyRetriever.getEnergyConsumerIds(EnergyConsumerType.WIFI))
+ .thenReturn(new int[0]);
+
+ WifiPowerStatsProcessor processor =
+ new WifiPowerStatsProcessor(mStatsRule.getPowerProfile());
+
+ PowerComponentAggregatedPowerStats aggregatedStats = createAggregatedPowerStats(processor);
+
+ WifiPowerStatsCollector collector = new WifiPowerStatsCollector(mInjector, 0);
+ collector.setEnabled(true);
+
+ // Establish a baseline
+ aggregatedStats.addPowerStats(collector.collectStats(), 0);
+
+ // Turn the screen off after 2.5 seconds
+ aggregatedStats.setState(STATE_SCREEN, SCREEN_STATE_OTHER, 2500);
+ aggregatedStats.setUidState(APP_UID1, STATE_PROCESS_STATE, PROCESS_STATE_BACKGROUND, 2500);
+ aggregatedStats.setUidState(APP_UID1, STATE_PROCESS_STATE, PROCESS_STATE_FOREGROUND_SERVICE,
+ 5000);
+
+ // Note application network activity
+ NetworkStats networkStats = mockNetworkStats(10000, 1,
+ mockNetworkStatsEntry("wifi", APP_UID1, 0, 0,
+ METERED_NO, ROAMING_NO, DEFAULT_NETWORK_NO, 10000, 1500, 20000, 300, 100),
+ mockNetworkStatsEntry("wifi", APP_UID2, 0, 0,
+ METERED_NO, ROAMING_NO, DEFAULT_NETWORK_NO, 5000, 500, 3000, 100, 111));
+ when(mNetworkStatsSupplier.get()).thenReturn(networkStats);
+
+ mScanTimes.clear();
+ mWifiActiveDuration = 8000;
+ mockWifiScanTimes(APP_UID1, 300, 400);
+ mockWifiScanTimes(APP_UID2, 100, 200);
+
+ mStatsRule.setTime(10_000, 10_000);
+
+ aggregatedStats.addPowerStats(collector.collectStats(), 10_000);
+
+ processor.finish(aggregatedStats);
+
+ WifiPowerStatsLayout statsLayout =
+ new WifiPowerStatsLayout(aggregatedStats.getPowerStatsDescriptor());
+
+ // Total active power = 'active-duration * PowerProfile[wifi.on]`
+ // active = 8000 * 360 = 2880000 mA-ms = 0.8 mAh
+ // UID1 rxPackets + txPackets = 1800
+ // UID2 rxPackets + txPackets = 600
+ // Total rx+tx packets = 2400
+ // Total scan power = `scan-duration * PowerProfile[wifi.scan]`
+ // scan = (100 + 300) * 480 = 192000 mA-ms = 0.05333 mAh
+ // Total batch scan power = `(200 + 400) * PowerProfile[wifi.batchedscan]`
+ // bscan = (200 + 400) * 720 = 432000 mA-ms = 0.12 mAh
+ //
+ // Expected power = active + scan + bscan = 0.97333
+ double expectedPower = 0.97333;
+ long[] deviceStats = new long[aggregatedStats.getPowerStatsDescriptor().statsArrayLength];
+ aggregatedStats.getDeviceStats(deviceStats, states(POWER_STATE_OTHER, SCREEN_STATE_ON));
+ assertThat(statsLayout.getDevicePowerEstimate(deviceStats))
+ .isWithin(PRECISION).of(expectedPower * 0.25);
+
+ aggregatedStats.getDeviceStats(deviceStats, states(POWER_STATE_OTHER, SCREEN_STATE_OTHER));
+ assertThat(statsLayout.getDevicePowerEstimate(deviceStats))
+ .isWithin(PRECISION).of(expectedPower * 0.75);
+
+ // UID1 =
+ // (1800 / 2400) * 0.8 // active
+ // + (300 / 400) * 0.05333 // scan
+ // + (400 / 600) * 0.12 // batched scan
+ // = 0.72 mAh
+ double expectedPower1 = 0.72;
+ long[] uidStats = new long[aggregatedStats.getPowerStatsDescriptor().uidStatsArrayLength];
+ aggregatedStats.getUidStats(uidStats, APP_UID1,
+ states(POWER_STATE_OTHER, SCREEN_STATE_ON, PROCESS_STATE_FOREGROUND));
+ assertThat(statsLayout.getUidPowerEstimate(uidStats))
+ .isWithin(PRECISION).of(expectedPower1 * 0.25);
+
+ aggregatedStats.getUidStats(uidStats, APP_UID1,
+ states(POWER_STATE_OTHER, SCREEN_STATE_OTHER, PROCESS_STATE_BACKGROUND));
+ assertThat(statsLayout.getUidPowerEstimate(uidStats))
+ .isWithin(PRECISION).of(expectedPower1 * 0.25);
+
+ aggregatedStats.getUidStats(uidStats, APP_UID1,
+ states(POWER_STATE_OTHER, SCREEN_STATE_OTHER, PROCESS_STATE_FOREGROUND_SERVICE));
+ assertThat(statsLayout.getUidPowerEstimate(uidStats))
+ .isWithin(PRECISION).of(expectedPower1 * 0.5);
+
+ // UID2 =
+ // (600 / 2400) * 0.8 // active
+ // + (100 / 400) * 0.05333 // scan
+ // + (200 / 600) * 0.12 // batched scan
+ // = 0.253333 mAh
+ double expectedPower2 = 0.25333;
+ aggregatedStats.getUidStats(uidStats, APP_UID2,
+ states(POWER_STATE_OTHER, SCREEN_STATE_ON, PROCESS_STATE_CACHED));
+ assertThat(statsLayout.getUidPowerEstimate(uidStats))
+ .isWithin(PRECISION).of(expectedPower2 * 0.25);
+
+ aggregatedStats.getUidStats(uidStats, APP_UID2,
+ states(POWER_STATE_OTHER, SCREEN_STATE_OTHER, PROCESS_STATE_CACHED));
+ assertThat(statsLayout.getUidPowerEstimate(uidStats))
+ .isWithin(PRECISION).of(expectedPower2 * 0.75);
+ }
+
+ private static PowerComponentAggregatedPowerStats createAggregatedPowerStats(
+ WifiPowerStatsProcessor processor) {
+ AggregatedPowerStatsConfig.PowerComponent config =
+ new AggregatedPowerStatsConfig.PowerComponent(BatteryConsumer.POWER_COMPONENT_WIFI)
+ .trackDeviceStates(STATE_POWER, STATE_SCREEN)
+ .trackUidStates(STATE_POWER, STATE_SCREEN, STATE_PROCESS_STATE)
+ .setProcessor(processor);
+
+ PowerComponentAggregatedPowerStats aggregatedStats =
+ new PowerComponentAggregatedPowerStats(
+ new AggregatedPowerStats(mock(AggregatedPowerStatsConfig.class)), config);
+
+ aggregatedStats.setState(STATE_POWER, POWER_STATE_OTHER, 0);
+ aggregatedStats.setState(STATE_SCREEN, SCREEN_STATE_ON, 0);
+ aggregatedStats.setUidState(APP_UID1, STATE_PROCESS_STATE, PROCESS_STATE_FOREGROUND, 0);
+ aggregatedStats.setUidState(APP_UID2, STATE_PROCESS_STATE, PROCESS_STATE_CACHED, 0);
+
+ return aggregatedStats;
+ }
+
+ private int[] states(int... states) {
+ return states;
+ }
+
+ private void mockWifiActivityEnergyInfo(WifiActivityEnergyInfo waei) {
+ doAnswer(invocation -> {
+ WifiManager.OnWifiActivityEnergyInfoListener
+ listener = invocation.getArgument(1);
+ listener.onWifiActivityEnergyInfo(waei);
+ return null;
+ }).when(mWifiManager).getWifiActivityEnergyInfoAsync(any(), any());
+ }
+
+ private NetworkStats mockNetworkStats(int elapsedTime, int initialSize,
+ NetworkStats.Entry... entries) {
+ NetworkStats stats;
+ if (RavenwoodRule.isOnRavenwood()) {
+ stats = mock(NetworkStats.class);
+ when(stats.iterator()).thenAnswer(inv -> List.of(entries).iterator());
+ } else {
+ stats = new NetworkStats(elapsedTime, initialSize);
+ for (NetworkStats.Entry entry : entries) {
+ stats = stats.addEntry(entry);
+ }
+ }
+ return stats;
+ }
+
+ private static NetworkStats.Entry mockNetworkStatsEntry(@Nullable String iface, int uid,
+ int set, int tag, int metered, int roaming, int defaultNetwork, long rxBytes,
+ long rxPackets, long txBytes, long txPackets, long operations) {
+ if (RavenwoodRule.isOnRavenwood()) {
+ NetworkStats.Entry entry = mock(NetworkStats.Entry.class);
+ when(entry.getUid()).thenReturn(uid);
+ when(entry.getMetered()).thenReturn(metered);
+ when(entry.getRoaming()).thenReturn(roaming);
+ when(entry.getDefaultNetwork()).thenReturn(defaultNetwork);
+ when(entry.getRxBytes()).thenReturn(rxBytes);
+ when(entry.getRxPackets()).thenReturn(rxPackets);
+ when(entry.getTxBytes()).thenReturn(txBytes);
+ when(entry.getTxPackets()).thenReturn(txPackets);
+ when(entry.getOperations()).thenReturn(operations);
+ return entry;
+ } else {
+ return new NetworkStats.Entry(iface, uid, set, tag, metered,
+ roaming, defaultNetwork, rxBytes, rxPackets, txBytes, txPackets, operations);
+ }
+ }
+
+ private void mockWifiScanTimes(int uid, long scanTimeMs, long batchScanTimeMs) {
+ ScanTimes scanTimes = new ScanTimes();
+ scanTimes.scanTimeMs = scanTimeMs;
+ scanTimes.batchScanTimeMs = batchScanTimeMs;
+ mScanTimes.put(uid, scanTimes);
+ }
+}
diff --git a/services/tests/servicestests/src/com/android/server/adaptiveauth/AdaptiveAuthServiceTest.java b/services/tests/servicestests/src/com/android/server/adaptiveauth/AdaptiveAuthServiceTest.java
index 1acb8ac..d180688 100644
--- a/services/tests/servicestests/src/com/android/server/adaptiveauth/AdaptiveAuthServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/adaptiveauth/AdaptiveAuthServiceTest.java
@@ -36,6 +36,9 @@
import android.content.pm.PackageManager;
import android.hardware.biometrics.AuthenticationStateListener;
import android.hardware.biometrics.BiometricManager;
+import android.hardware.biometrics.BiometricSourceType;
+import android.hardware.biometrics.events.AuthenticationFailedInfo;
+import android.hardware.biometrics.events.AuthenticationSucceededInfo;
import android.os.RemoteException;
import android.platform.test.annotations.Presubmit;
import android.platform.test.flag.junit.SetFlagsRule;
@@ -194,8 +197,8 @@
@Test
public void testReportAuthAttempt_biometricAuthSucceeded()
throws RemoteException {
- mAuthenticationStateListenerCaptor.getValue()
- .onAuthenticationSucceeded(REASON_UNKNOWN, PRIMARY_USER_ID);
+ mAuthenticationStateListenerCaptor.getValue().onAuthenticationSucceeded(
+ authSuccessInfo(PRIMARY_USER_ID));
waitForAuthCompletion();
verifyNotLockDevice(DEFAULT_COUNT_FAILED_AUTH_ATTEMPTS /* expectedCntFailedAttempts */,
@@ -205,8 +208,8 @@
@Test
public void testReportAuthAttempt_biometricAuthFailed_once()
throws RemoteException {
- mAuthenticationStateListenerCaptor.getValue()
- .onAuthenticationFailed(REASON_UNKNOWN, PRIMARY_USER_ID);
+ mAuthenticationStateListenerCaptor.getValue().onAuthenticationFailed(
+ authFailedInfo(PRIMARY_USER_ID));
waitForAuthCompletion();
verifyNotLockDevice(1 /* expectedCntFailedAttempts */, PRIMARY_USER_ID);
@@ -220,8 +223,8 @@
when(mKeyguardManager.isKeyguardLocked()).thenReturn(true);
for (int i = 0; i < MAX_ALLOWED_FAILED_AUTH_ATTEMPTS; i++) {
- mAuthenticationStateListenerCaptor.getValue()
- .onAuthenticationFailed(REASON_UNKNOWN, PRIMARY_USER_ID);
+ mAuthenticationStateListenerCaptor.getValue().onAuthenticationFailed(
+ authFailedInfo(PRIMARY_USER_ID));
}
waitForAuthCompletion();
@@ -237,8 +240,8 @@
when(mKeyguardManager.isKeyguardLocked()).thenReturn(false);
for (int i = 0; i < MAX_ALLOWED_FAILED_AUTH_ATTEMPTS; i++) {
- mAuthenticationStateListenerCaptor.getValue()
- .onAuthenticationFailed(REASON_UNKNOWN, PRIMARY_USER_ID);
+ mAuthenticationStateListenerCaptor.getValue().onAuthenticationFailed(
+ authFailedInfo(PRIMARY_USER_ID));
}
waitForAuthCompletion();
@@ -250,8 +253,8 @@
throws RemoteException {
// Three failed biometric auth attempts
for (int i = 0; i < 3; i++) {
- mAuthenticationStateListenerCaptor.getValue()
- .onAuthenticationFailed(REASON_UNKNOWN, PRIMARY_USER_ID);
+ mAuthenticationStateListenerCaptor.getValue().onAuthenticationFailed(
+ authFailedInfo(PRIMARY_USER_ID));
}
// One successful primary auth attempt
mLockSettingsStateListenerCaptor.getValue().onAuthenticationSucceeded(PRIMARY_USER_ID);
@@ -269,8 +272,8 @@
mLockSettingsStateListenerCaptor.getValue().onAuthenticationFailed(PRIMARY_USER_ID);
}
// One successful biometric auth attempt
- mAuthenticationStateListenerCaptor.getValue()
- .onAuthenticationSucceeded(REASON_UNKNOWN, PRIMARY_USER_ID);
+ mAuthenticationStateListenerCaptor.getValue().onAuthenticationSucceeded(
+ authSuccessInfo(PRIMARY_USER_ID));
waitForAuthCompletion();
verifyNotLockDevice(DEFAULT_COUNT_FAILED_AUTH_ATTEMPTS /* expectedCntFailedAttempts */,
@@ -286,8 +289,8 @@
}
// Two failed biometric auth attempts
for (int i = 0; i < 2; i++) {
- mAuthenticationStateListenerCaptor.getValue()
- .onAuthenticationFailed(REASON_UNKNOWN, PRIMARY_USER_ID);
+ mAuthenticationStateListenerCaptor.getValue().onAuthenticationFailed(
+ authFailedInfo(PRIMARY_USER_ID));
}
waitForAuthCompletion();
@@ -304,8 +307,8 @@
}
// Two failed biometric auth attempts
for (int i = 0; i < 2; i++) {
- mAuthenticationStateListenerCaptor.getValue()
- .onAuthenticationFailed(REASON_UNKNOWN, MANAGED_PROFILE_USER_ID);
+ mAuthenticationStateListenerCaptor.getValue().onAuthenticationFailed(
+ authFailedInfo(MANAGED_PROFILE_USER_ID));
}
waitForAuthCompletion();
@@ -338,4 +341,16 @@
private static void waitForAuthCompletion() {
InstrumentationRegistry.getInstrumentation().waitForIdleSync();
}
+
+ private AuthenticationSucceededInfo authSuccessInfo(int userId) {
+ return new AuthenticationSucceededInfo.Builder(BiometricSourceType.FINGERPRINT,
+ REASON_UNKNOWN, true, userId).build();
+ }
+
+
+ private AuthenticationFailedInfo authFailedInfo(int userId) {
+ return new AuthenticationFailedInfo.Builder(BiometricSourceType.FINGERPRINT, REASON_UNKNOWN,
+ userId).build();
+ }
+
}
diff --git a/services/tests/servicestests/src/com/android/server/appop/AppOpsActiveWatcherTest.java b/services/tests/servicestests/src/com/android/server/appop/AppOpsActiveWatcherTest.java
index b487dc6..c970a3e 100644
--- a/services/tests/servicestests/src/com/android/server/appop/AppOpsActiveWatcherTest.java
+++ b/services/tests/servicestests/src/com/android/server/appop/AppOpsActiveWatcherTest.java
@@ -16,7 +16,8 @@
package com.android.server.appop;
-import static com.android.compatibility.common.util.SystemUtil.runWithShellPermissionIdentity;
+import static android.companion.virtual.VirtualDeviceParams.DEVICE_POLICY_CUSTOM;
+import static android.companion.virtual.VirtualDeviceParams.POLICY_TYPE_CAMERA;
import static com.google.common.truth.Truth.assertThat;
@@ -31,6 +32,7 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
+import android.Manifest;
import android.app.AppOpsManager;
import android.app.AppOpsManager.OnOpActiveChangedListener;
import android.companion.virtual.VirtualDeviceManager;
@@ -38,7 +40,8 @@
import android.content.AttributionSource;
import android.content.Context;
import android.os.Process;
-import android.virtualdevice.cts.common.FakeAssociationRule;
+import android.permission.PermissionManager;
+import android.virtualdevice.cts.common.VirtualDeviceRule;
import androidx.test.InstrumentationRegistry;
import androidx.test.filters.SmallTest;
@@ -49,7 +52,6 @@
import org.junit.runner.RunWith;
import java.util.List;
-import java.util.concurrent.atomic.AtomicInteger;
/**
* Tests app ops version upgrades
@@ -59,7 +61,13 @@
public class AppOpsActiveWatcherTest {
@Rule
- public FakeAssociationRule mFakeAssociationRule = new FakeAssociationRule();
+ public VirtualDeviceRule virtualDeviceRule =
+ VirtualDeviceRule.withAdditionalPermissions(
+ Manifest.permission.GRANT_RUNTIME_PERMISSIONS,
+ Manifest.permission.REVOKE_RUNTIME_PERMISSIONS,
+ Manifest.permission.CREATE_VIRTUAL_DEVICE,
+ Manifest.permission.GET_APP_OPS_STATS
+ );
private static final long NOTIFICATION_TIMEOUT_MILLIS = 5000;
@Test
@@ -145,20 +153,28 @@
@Test
public void testWatchActiveOpsForExternalDevice() {
- final VirtualDeviceManager virtualDeviceManager = getContext().getSystemService(
- VirtualDeviceManager.class);
- AtomicInteger virtualDeviceId = new AtomicInteger();
- runWithShellPermissionIdentity(() -> {
- final VirtualDeviceManager.VirtualDevice virtualDevice =
- virtualDeviceManager.createVirtualDevice(
- mFakeAssociationRule.getAssociationInfo().getId(),
- new VirtualDeviceParams.Builder().setName("virtual_device").build());
- virtualDeviceId.set(virtualDevice.getDeviceId());
- });
+ VirtualDeviceManager.VirtualDevice virtualDevice =
+ virtualDeviceRule.createManagedVirtualDevice(
+ new VirtualDeviceParams.Builder()
+ .setDevicePolicy(POLICY_TYPE_CAMERA, DEVICE_POLICY_CUSTOM)
+ .build()
+ );
+
+ PermissionManager permissionManager =
+ getContext().getSystemService(PermissionManager.class);
+
+ // Unlike runtime permission being automatically granted to the default device, we need to
+ // grant camera permission to the external device first before we can start op.
+ permissionManager.grantRuntimePermission(
+ getContext().getOpPackageName(),
+ Manifest.permission.CAMERA,
+ virtualDevice.getPersistentDeviceId()
+ );
+
final OnOpActiveChangedListener listener = mock(OnOpActiveChangedListener.class);
AttributionSource attributionSource = new AttributionSource(Process.myUid(),
getContext().getOpPackageName(), getContext().getAttributionTag(),
- virtualDeviceId.get());
+ virtualDevice.getDeviceId());
final AppOpsManager appOpsManager = getContext().getSystemService(AppOpsManager.class);
appOpsManager.startWatchingActive(new String[]{AppOpsManager.OPSTR_CAMERA,
@@ -171,7 +187,7 @@
verify(listener, timeout(NOTIFICATION_TIMEOUT_MILLIS)
.times(1)).onOpActiveChanged(eq(AppOpsManager.OPSTR_CAMERA),
eq(Process.myUid()), eq(getContext().getOpPackageName()),
- eq(getContext().getAttributionTag()), eq(virtualDeviceId.get()), eq(true),
+ eq(getContext().getAttributionTag()), eq(virtualDevice.getDeviceId()), eq(true),
eq(AppOpsManager.ATTRIBUTION_FLAGS_NONE),
eq(AppOpsManager.ATTRIBUTION_CHAIN_ID_NONE));
verifyNoMoreInteractions(listener);
@@ -182,7 +198,7 @@
verify(listener, timeout(NOTIFICATION_TIMEOUT_MILLIS)
.times(1)).onOpActiveChanged(eq(AppOpsManager.OPSTR_CAMERA),
eq(Process.myUid()), eq(getContext().getOpPackageName()),
- eq(getContext().getAttributionTag()), eq(virtualDeviceId.get()), eq(false),
+ eq(getContext().getAttributionTag()), eq(virtualDevice.getDeviceId()), eq(false),
eq(AppOpsManager.ATTRIBUTION_FLAGS_NONE),
eq(AppOpsManager.ATTRIBUTION_CHAIN_ID_NONE));
verifyNoMoreInteractions(listener);
diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClientTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClientTest.java
index a556f52..9873805 100644
--- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClientTest.java
+++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/aidl/FaceAuthenticationClientTest.java
@@ -18,6 +18,8 @@
import static android.adaptiveauth.Flags.FLAG_REPORT_BIOMETRIC_AUTH_ATTEMPTS;
import static android.hardware.biometrics.BiometricConstants.BIOMETRIC_ERROR_CANCELED;
+import static android.hardware.biometrics.BiometricFaceConstants.FACE_ACQUIRED_START;
+import static android.hardware.biometrics.BiometricFaceConstants.FACE_ACQUIRED_TOO_DARK;
import static android.hardware.biometrics.BiometricFaceConstants.FACE_ERROR_LOCKOUT;
import static android.hardware.biometrics.BiometricFaceConstants.FACE_ERROR_LOCKOUT_PERMANENT;
@@ -38,11 +40,21 @@
import android.app.ActivityTaskManager;
import android.content.ComponentName;
import android.hardware.biometrics.BiometricConstants;
+import android.hardware.biometrics.BiometricFaceConstants;
import android.hardware.biometrics.BiometricManager;
+import android.hardware.biometrics.BiometricRequestConstants;
+import android.hardware.biometrics.BiometricSourceType;
import android.hardware.biometrics.common.AuthenticateReason;
import android.hardware.biometrics.common.ICancellationSignal;
import android.hardware.biometrics.common.OperationContext;
import android.hardware.biometrics.common.WakeReason;
+import android.hardware.biometrics.events.AuthenticationAcquiredInfo;
+import android.hardware.biometrics.events.AuthenticationErrorInfo;
+import android.hardware.biometrics.events.AuthenticationFailedInfo;
+import android.hardware.biometrics.events.AuthenticationHelpInfo;
+import android.hardware.biometrics.events.AuthenticationStartedInfo;
+import android.hardware.biometrics.events.AuthenticationStoppedInfo;
+import android.hardware.biometrics.events.AuthenticationSucceededInfo;
import android.hardware.biometrics.face.ISession;
import android.hardware.face.Face;
import android.hardware.face.FaceAuthenticateOptions;
@@ -58,6 +70,7 @@
import androidx.test.filters.SmallTest;
import androidx.test.platform.app.InstrumentationRegistry;
+import com.android.internal.R;
import com.android.server.biometrics.log.BiometricContext;
import com.android.server.biometrics.log.BiometricLogger;
import com.android.server.biometrics.log.OperationContextExt;
@@ -136,6 +149,20 @@
private ArgumentCaptor<Consumer<OperationContext>> mStartHalConsumerCaptor;
@Captor
private ArgumentCaptor<FaceAuthenticateOptions> mFaceAuthenticateOptionsCaptor;
+ @Captor
+ private ArgumentCaptor<AuthenticationAcquiredInfo> mAuthenticationAcquiredCaptor;
+ @Captor
+ private ArgumentCaptor<AuthenticationErrorInfo> mAuthenticationErrorCaptor;
+ @Captor
+ private ArgumentCaptor<AuthenticationFailedInfo> mAuthenticationFailedCaptor;
+ @Captor
+ private ArgumentCaptor<AuthenticationHelpInfo> mAuthenticationHelpCaptor;
+ @Captor
+ private ArgumentCaptor<AuthenticationStartedInfo> mAuthenticationStartedCaptor;
+ @Captor
+ private ArgumentCaptor<AuthenticationStoppedInfo> mAuthenticationStoppedCaptor;
+ @Captor
+ private ArgumentCaptor<AuthenticationSucceededInfo> mAuthenticationSucceededCaptor;
@Rule
public final MockitoRule mockito = MockitoJUnit.rule();
@@ -143,6 +170,10 @@
@Before
public void setup() {
mContext.addMockSystemService(BiometricManager.class, mBiometricManager);
+ mContext.getOrCreateTestableResources().addOverride(R.string.face_error_hw_not_available,
+ "hw not available");
+ mContext.getOrCreateTestableResources().addOverride(R.string.face_acquired_too_dark,
+ "too dark");
when(mBiometricContext.updateContext(any(), anyBoolean())).thenAnswer(
i -> i.getArgument(0));
when(mBiometricContext.getAuthSessionCoordinator()).thenReturn(mAuthSessionCoordinator);
@@ -294,6 +325,90 @@
}
@Test
+ public void testAuthenticationStateListeners_onAuthenticationStartedAndStopped()
+ throws RemoteException {
+ final FaceAuthenticationClient client = createClient();
+ client.start(mCallback);
+ verify(mAuthenticationStateListeners).onAuthenticationStarted(
+ mAuthenticationStartedCaptor.capture());
+
+ assertThat(mAuthenticationStartedCaptor.getValue()).isEqualTo(
+ new AuthenticationStartedInfo.Builder(BiometricSourceType.FACE,
+ BiometricRequestConstants.REASON_AUTH_BP).build()
+ );
+ client.stopHalOperation();
+
+ verify(mAuthenticationStateListeners).onAuthenticationStopped(
+ mAuthenticationStoppedCaptor.capture());
+
+ assertThat(mAuthenticationStoppedCaptor.getValue()).isEqualTo(
+ new AuthenticationStoppedInfo.Builder(BiometricSourceType.FACE,
+ BiometricRequestConstants.REASON_AUTH_BP).build()
+ );
+ }
+
+ @Test
+ public void testAuthenticationStateListeners_onAuthenticationAcquired_onAuthenticationHelp()
+ throws RemoteException {
+ final FaceAuthenticationClient client = createClient();
+ client.start(mCallback);
+ client.onAcquired(FACE_ACQUIRED_START, 0);
+
+ InOrder inOrder = inOrder(mAuthenticationStateListeners);
+ inOrder.verify(mAuthenticationStateListeners).onAuthenticationAcquired(
+ mAuthenticationAcquiredCaptor.capture());
+ assertThat(mAuthenticationAcquiredCaptor.getValue()).isEqualTo(
+ new AuthenticationAcquiredInfo.Builder(BiometricSourceType.FACE,
+ BiometricRequestConstants.REASON_AUTH_BP, FACE_ACQUIRED_START)
+ .build()
+ );
+
+ client.onAcquired(FACE_ACQUIRED_TOO_DARK, 0);
+ inOrder.verify(mAuthenticationStateListeners).onAuthenticationAcquired(
+ mAuthenticationAcquiredCaptor.capture());
+ inOrder.verify(mAuthenticationStateListeners).onAuthenticationHelp(
+ mAuthenticationHelpCaptor.capture());
+
+ assertThat(mAuthenticationAcquiredCaptor.getValue()).isEqualTo(
+ new AuthenticationAcquiredInfo.Builder(BiometricSourceType.FACE,
+ BiometricRequestConstants.REASON_AUTH_BP, FACE_ACQUIRED_TOO_DARK)
+ .build()
+ );
+ assertThat(mAuthenticationHelpCaptor.getValue()).isEqualTo(
+ new AuthenticationHelpInfo.Builder(BiometricSourceType.FACE,
+ BiometricRequestConstants.REASON_AUTH_BP,
+ mContext.getString(R.string.face_acquired_too_dark),
+ FACE_ACQUIRED_TOO_DARK)
+ .build()
+ );
+ }
+
+ @Test
+ public void testAuthenticationStateListeners_onAuthenticationError()
+ throws RemoteException {
+ final FaceAuthenticationClient client = createClient();
+ client.start(mCallback);
+ client.onError(BiometricFaceConstants.FACE_ERROR_HW_UNAVAILABLE, 0);
+
+ InOrder inOrder = inOrder(mAuthenticationStateListeners);
+ inOrder.verify(mAuthenticationStateListeners).onAuthenticationError(
+ mAuthenticationErrorCaptor.capture());
+ inOrder.verify(mAuthenticationStateListeners).onAuthenticationStopped(
+ mAuthenticationStoppedCaptor.capture());
+
+ assertThat(mAuthenticationErrorCaptor.getValue()).isEqualTo(
+ new AuthenticationErrorInfo.Builder(BiometricSourceType.FACE,
+ BiometricRequestConstants.REASON_AUTH_BP,
+ mContext.getString(R.string.face_error_hw_not_available),
+ BiometricFaceConstants.FACE_ERROR_HW_UNAVAILABLE).build()
+ );
+ assertThat(mAuthenticationStoppedCaptor.getValue()).isEqualTo(
+ new AuthenticationStoppedInfo.Builder(BiometricSourceType.FACE,
+ BiometricRequestConstants.REASON_AUTH_BP).build()
+ );
+ }
+
+ @Test
public void testAuthenticationStateListeners_onAuthenticationSucceeded()
throws RemoteException {
mSetFlagsRule.enableFlags(FLAG_REPORT_BIOMETRIC_AUTH_ATTEMPTS);
@@ -302,7 +417,14 @@
client.onAuthenticated(new Face("friendly", 1 /* faceId */, 2 /* deviceId */),
true /* authenticated */, new ArrayList<>());
- verify(mAuthenticationStateListeners).onAuthenticationSucceeded(anyInt(), anyInt());
+ verify(mAuthenticationStateListeners).onAuthenticationSucceeded(
+ mAuthenticationSucceededCaptor.capture());
+
+ assertThat(mAuthenticationSucceededCaptor.getValue()).isEqualTo(
+ new AuthenticationSucceededInfo.Builder(BiometricSourceType.FACE,
+ BiometricRequestConstants.REASON_AUTH_BP, true, USER_ID)
+ .build()
+ );
}
@Test
@@ -313,7 +435,14 @@
client.onAuthenticated(new Face("friendly", 1 /* faceId */, 2 /* deviceId */),
false /* authenticated */, new ArrayList<>());
- verify(mAuthenticationStateListeners).onAuthenticationFailed(anyInt(), anyInt());
+ verify(mAuthenticationStateListeners).onAuthenticationFailed(
+ mAuthenticationFailedCaptor.capture());
+
+ assertThat(mAuthenticationFailedCaptor.getValue()).isEqualTo(
+ new AuthenticationFailedInfo.Builder(BiometricSourceType.FACE,
+ BiometricRequestConstants.REASON_AUTH_BP, USER_ID)
+ .build()
+ );
}
private FaceAuthenticationClient createClient() throws RemoteException {
diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/aidl/FaceDetectClientTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/aidl/FaceDetectClientTest.java
index fd3f054..7a77033 100644
--- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/aidl/FaceDetectClientTest.java
+++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/aidl/FaceDetectClientTest.java
@@ -20,15 +20,22 @@
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.same;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.when;
+import android.hardware.biometrics.BiometricFaceConstants;
+import android.hardware.biometrics.BiometricRequestConstants;
+import android.hardware.biometrics.BiometricSourceType;
import android.hardware.biometrics.common.AuthenticateReason;
import android.hardware.biometrics.common.OperationContext;
import android.hardware.biometrics.common.WakeReason;
+import android.hardware.biometrics.events.AuthenticationErrorInfo;
+import android.hardware.biometrics.events.AuthenticationStartedInfo;
+import android.hardware.biometrics.events.AuthenticationStoppedInfo;
import android.hardware.biometrics.face.ISession;
import android.hardware.face.FaceAuthenticateOptions;
import android.os.IBinder;
@@ -43,9 +50,11 @@
import androidx.test.filters.SmallTest;
import androidx.test.platform.app.InstrumentationRegistry;
+import com.android.internal.R;
import com.android.server.biometrics.log.BiometricContext;
import com.android.server.biometrics.log.BiometricLogger;
import com.android.server.biometrics.log.OperationContextExt;
+import com.android.server.biometrics.sensors.AuthenticationStateListeners;
import com.android.server.biometrics.sensors.ClientMonitorCallback;
import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter;
@@ -54,6 +63,7 @@
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
+import org.mockito.InOrder;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
@@ -91,12 +101,20 @@
private ClientMonitorCallback mCallback;
@Mock
private AidlResponseHandler mAidlResponseHandler;
+ @Mock
+ private AuthenticationStateListeners mAuthenticationStateListeners;
@Captor
private ArgumentCaptor<OperationContextExt> mOperationContextCaptor;
@Captor
private ArgumentCaptor<Consumer<OperationContext>> mStartHalCaptor;
@Captor
private ArgumentCaptor<Consumer<OperationContext>> mContextInjector;
+ @Captor
+ private ArgumentCaptor<AuthenticationErrorInfo> mAuthenticationErrorCaptor;
+ @Captor
+ private ArgumentCaptor<AuthenticationStartedInfo> mAuthenticationStartedCaptor;
+ @Captor
+ private ArgumentCaptor<AuthenticationStoppedInfo> mAuthenticationStoppedCaptor;
@Rule
public final MockitoRule mockito = MockitoJUnit.rule();
@@ -104,7 +122,8 @@
@Before
public void setup() {
mContext.addMockSystemService(Vibrator.class, mVibrator);
-
+ mContext.getOrCreateTestableResources().addOverride(R.string.face_error_hw_not_available,
+ "hw not available");
when(mBiometricContext.updateContext(any(), anyBoolean())).thenAnswer(
i -> i.getArgument(0));
}
@@ -174,7 +193,55 @@
.setAuthenticateReason(
FaceAuthenticateOptions.AUTHENTICATE_REASON_OCCLUDING_APP_REQUESTED)
.build(),
- mBiometricLogger, mBiometricContext,
+ mBiometricLogger, mBiometricContext, mAuthenticationStateListeners,
false /* isStrongBiometric */, null /* sensorPrivacyManager */);
}
+
+ @Test
+ public void testAuthenticationStateListeners_onDetectionStartedAndStopped()
+ throws RemoteException {
+ final FaceDetectClient client = createClient();
+ client.start(mCallback);
+ verify(mAuthenticationStateListeners).onAuthenticationStarted(
+ mAuthenticationStartedCaptor.capture());
+
+ assertThat(mAuthenticationStartedCaptor.getValue()).isEqualTo(
+ new AuthenticationStartedInfo.Builder(BiometricSourceType.FACE,
+ BiometricRequestConstants.REASON_AUTH_KEYGUARD).build()
+ );
+ client.stopHalOperation();
+
+ verify(mAuthenticationStateListeners).onAuthenticationStopped(
+ mAuthenticationStoppedCaptor.capture());
+
+ assertThat(mAuthenticationStoppedCaptor.getValue()).isEqualTo(
+ new AuthenticationStoppedInfo.Builder(BiometricSourceType.FACE,
+ BiometricRequestConstants.REASON_AUTH_KEYGUARD).build()
+ );
+ }
+
+ @Test
+ public void testAuthenticationStateListeners_onDetectionError()
+ throws RemoteException {
+ final FaceDetectClient client = createClient();
+ client.start(mCallback);
+ client.onError(BiometricFaceConstants.FACE_ERROR_HW_UNAVAILABLE, 0);
+
+ InOrder inOrder = inOrder(mAuthenticationStateListeners);
+ inOrder.verify(mAuthenticationStateListeners).onAuthenticationError(
+ mAuthenticationErrorCaptor.capture());
+ inOrder.verify(mAuthenticationStateListeners).onAuthenticationStopped(
+ mAuthenticationStoppedCaptor.capture());
+
+ assertThat(mAuthenticationErrorCaptor.getValue()).isEqualTo(
+ new AuthenticationErrorInfo.Builder(BiometricSourceType.FACE,
+ BiometricRequestConstants.REASON_AUTH_KEYGUARD,
+ mContext.getString(R.string.face_error_hw_not_available),
+ BiometricFaceConstants.FACE_ERROR_HW_UNAVAILABLE).build()
+ );
+ assertThat(mAuthenticationStoppedCaptor.getValue()).isEqualTo(
+ new AuthenticationStoppedInfo.Builder(BiometricSourceType.FACE,
+ BiometricRequestConstants.REASON_AUTH_KEYGUARD).build()
+ );
+ }
}
diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/aidl/FaceEnrollClientTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/aidl/FaceEnrollClientTest.java
index d6b5789..f477682 100644
--- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/aidl/FaceEnrollClientTest.java
+++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/aidl/FaceEnrollClientTest.java
@@ -16,6 +16,9 @@
package com.android.server.biometrics.sensors.face.aidl;
+import static android.hardware.biometrics.BiometricFaceConstants.FACE_ACQUIRED_START;
+import static android.hardware.biometrics.BiometricFaceConstants.FACE_ACQUIRED_TOO_DARK;
+
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
@@ -24,13 +27,21 @@
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.same;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import android.hardware.biometrics.BiometricFaceConstants;
+import android.hardware.biometrics.BiometricRequestConstants;
+import android.hardware.biometrics.BiometricSourceType;
import android.hardware.biometrics.BiometricsProtoEnums;
import android.hardware.biometrics.common.OperationContext;
+import android.hardware.biometrics.events.AuthenticationErrorInfo;
+import android.hardware.biometrics.events.AuthenticationHelpInfo;
+import android.hardware.biometrics.events.AuthenticationStartedInfo;
+import android.hardware.biometrics.events.AuthenticationStoppedInfo;
import android.hardware.biometrics.face.ISession;
import android.hardware.face.Face;
import android.hardware.face.FaceEnrollOptions;
@@ -44,9 +55,11 @@
import androidx.test.filters.SmallTest;
import androidx.test.platform.app.InstrumentationRegistry;
+import com.android.internal.R;
import com.android.server.biometrics.log.BiometricContext;
import com.android.server.biometrics.log.BiometricLogger;
import com.android.server.biometrics.log.OperationContextExt;
+import com.android.server.biometrics.sensors.AuthenticationStateListeners;
import com.android.server.biometrics.sensors.BiometricUtils;
import com.android.server.biometrics.sensors.ClientMonitorCallback;
import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter;
@@ -56,6 +69,7 @@
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
+import org.mockito.InOrder;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
@@ -93,18 +107,32 @@
private ClientMonitorCallback mCallback;
@Mock
private AidlResponseHandler mAidlResponseHandler;
+ @Mock
+ private AuthenticationStateListeners mAuthenticationStateListeners;
@Captor
private ArgumentCaptor<OperationContextExt> mOperationContextCaptor;
@Captor
private ArgumentCaptor<Consumer<OperationContext>> mContextInjector;
@Captor
private ArgumentCaptor<Consumer<OperationContext>> mStartHalConsumer;
+ @Captor
+ private ArgumentCaptor<AuthenticationErrorInfo> mAuthenticationErrorCaptor;
+ @Captor
+ private ArgumentCaptor<AuthenticationHelpInfo> mAuthenticationHelpCaptor;
+ @Captor
+ private ArgumentCaptor<AuthenticationStartedInfo> mAuthenticationStartedCaptor;
+ @Captor
+ private ArgumentCaptor<AuthenticationStoppedInfo> mAuthenticationStoppedCaptor;
@Rule
public final MockitoRule mockito = MockitoJUnit.rule();
@Before
public void setup() {
+ mContext.getOrCreateTestableResources().addOverride(R.string.face_error_hw_not_available,
+ "hw not available");
+ mContext.getOrCreateTestableResources().addOverride(R.string.face_acquired_too_dark,
+ "too dark");
when(mBiometricContext.updateContext(any(), anyBoolean())).thenAnswer(
i -> i.getArgument(0));
}
@@ -184,6 +212,85 @@
null /* previewSurface */, 8 /* sensorId */,
mBiometricLogger, mBiometricContext, 5 /* maxTemplatesPerUser */,
true /* debugConsent */,
- (new FaceEnrollOptions.Builder()).setEnrollReason(ENROLL_SOURCE).build());
+ (new FaceEnrollOptions.Builder()).setEnrollReason(ENROLL_SOURCE).build(),
+ mAuthenticationStateListeners);
}
+
+ @Test
+ public void testAuthenticationStateListeners_onEnrollmentStartedAndStopped()
+ throws RemoteException {
+ final FaceEnrollClient client = createClient();
+ client.start(mCallback);
+ verify(mAuthenticationStateListeners).onAuthenticationStarted(
+ mAuthenticationStartedCaptor.capture());
+
+ assertThat(mAuthenticationStartedCaptor.getValue()).isEqualTo(
+ new AuthenticationStartedInfo.Builder(BiometricSourceType.FACE,
+ BiometricRequestConstants.REASON_ENROLL_ENROLLING).build()
+ );
+ client.stopHalOperation();
+
+ verify(mAuthenticationStateListeners).onAuthenticationStopped(
+ mAuthenticationStoppedCaptor.capture());
+
+ assertThat(mAuthenticationStoppedCaptor.getValue()).isEqualTo(
+ new AuthenticationStoppedInfo.Builder(BiometricSourceType.FACE,
+ BiometricRequestConstants.REASON_ENROLL_ENROLLING).build()
+ );
+ }
+
+ @Test
+ public void testAuthenticationStateListeners_onEnrollmentError()
+ throws RemoteException {
+ final FaceEnrollClient client = createClient();
+ client.start(mCallback);
+ client.onError(BiometricFaceConstants.FACE_ERROR_HW_UNAVAILABLE, 0);
+
+ InOrder inOrder = inOrder(mAuthenticationStateListeners);
+ inOrder.verify(mAuthenticationStateListeners).onAuthenticationError(
+ mAuthenticationErrorCaptor.capture());
+ inOrder.verify(mAuthenticationStateListeners).onAuthenticationStopped(
+ mAuthenticationStoppedCaptor.capture());
+
+ assertThat(mAuthenticationErrorCaptor.getValue()).isEqualTo(
+ new AuthenticationErrorInfo.Builder(BiometricSourceType.FACE,
+ BiometricRequestConstants.REASON_ENROLL_ENROLLING,
+ mContext.getString(R.string.face_error_hw_not_available),
+ BiometricFaceConstants.FACE_ERROR_HW_UNAVAILABLE).build()
+ );
+ assertThat(mAuthenticationStoppedCaptor.getValue()).isEqualTo(
+ new AuthenticationStoppedInfo.Builder(BiometricSourceType.FACE,
+ BiometricRequestConstants.REASON_ENROLL_ENROLLING).build()
+ );
+ }
+
+ @Test
+ public void testAuthenticationStateListeners_onAuthenticationHelp()
+ throws RemoteException {
+ final FaceEnrollClient client = createClient();
+ client.start(mCallback);
+ client.onAcquired(FACE_ACQUIRED_START, 0);
+
+ InOrder inOrder = inOrder(mAuthenticationStateListeners);
+ inOrder.verify(mAuthenticationStateListeners).onAuthenticationHelp(
+ mAuthenticationHelpCaptor.capture());
+ assertThat(mAuthenticationHelpCaptor.getValue()).isEqualTo(
+ new AuthenticationHelpInfo.Builder(BiometricSourceType.FACE,
+ BiometricRequestConstants.REASON_ENROLL_ENROLLING,
+ null, FACE_ACQUIRED_START)
+ .build()
+ );
+
+ client.onAcquired(FACE_ACQUIRED_TOO_DARK, 0);
+ inOrder.verify(mAuthenticationStateListeners).onAuthenticationHelp(
+ mAuthenticationHelpCaptor.capture());
+ assertThat(mAuthenticationHelpCaptor.getValue()).isEqualTo(
+ new AuthenticationHelpInfo.Builder(BiometricSourceType.FACE,
+ BiometricRequestConstants.REASON_ENROLL_ENROLLING,
+ mContext.getString(R.string.face_acquired_too_dark),
+ FACE_ACQUIRED_TOO_DARK)
+ .build()
+ );
+ }
+
}
diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/hidl/HidlToAidlSensorAdapterTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/hidl/HidlToAidlSensorAdapterTest.java
index 7a778d5..4248e5e 100644
--- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/hidl/HidlToAidlSensorAdapterTest.java
+++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/face/hidl/HidlToAidlSensorAdapterTest.java
@@ -46,6 +46,7 @@
import com.android.server.biometrics.log.BiometricContext;
import com.android.server.biometrics.log.BiometricLogger;
import com.android.server.biometrics.sensors.AuthSessionCoordinator;
+import com.android.server.biometrics.sensors.AuthenticationStateListeners;
import com.android.server.biometrics.sensors.BiometricUtils;
import com.android.server.biometrics.sensors.LockoutResetDispatcher;
import com.android.server.biometrics.sensors.LockoutTracker;
@@ -91,6 +92,8 @@
private AidlResponseHandler.AidlResponseHandlerCallback mAidlResponseHandlerCallback;
@Mock
private BiometricUtils<Face> mBiometricUtils;
+ @Mock
+ private AuthenticationStateListeners mAuthenticationStateListeners;
private final TestLooper mLooper = new TestLooper();
private HidlToAidlSensorAdapter mHidlToAidlSensorAdapter;
@@ -202,7 +205,8 @@
USER_ID, HAT, TAG, 1 /* requestId */, mBiometricUtils,
new int[]{} /* disabledFeatures */, ENROLL_TIMEOUT_SEC, null /* previewSurface */,
SENSOR_ID, mLogger, mBiometricContext, 1 /* maxTemplatesPerUser */,
- false /* debugConsent */, (new FaceEnrollOptions.Builder()).build()));
+ false /* debugConsent */, (new FaceEnrollOptions.Builder()).build(),
+ mAuthenticationStateListeners));
mLooper.dispatchAll();
verify(mAidlResponseHandlerCallback).onEnrollSuccess();
diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClientTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClientTest.java
index db9fe7f..bd16813 100644
--- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClientTest.java
+++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintAuthenticationClientTest.java
@@ -19,6 +19,9 @@
import static android.adaptiveauth.Flags.FLAG_REPORT_BIOMETRIC_AUTH_ATTEMPTS;
import static android.hardware.biometrics.BiometricConstants.BIOMETRIC_ERROR_CANCELED;
import static android.hardware.biometrics.BiometricFingerprintConstants.FINGERPRINT_ACQUIRED_START;
+import static android.hardware.biometrics.BiometricFingerprintConstants.FINGERPRINT_ACQUIRED_TOO_FAST;
+import static android.hardware.biometrics.BiometricFingerprintConstants.FINGERPRINT_ERROR_HW_UNAVAILABLE;
+import static android.hardware.biometrics.BiometricFingerprintConstants.FINGERPRINT_ERROR_LOCKOUT_PERMANENT;
import static com.android.systemui.shared.Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR;
@@ -30,6 +33,7 @@
import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.anyLong;
import static org.mockito.Mockito.eq;
+import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.same;
@@ -41,8 +45,18 @@
import android.app.ActivityTaskManager;
import android.content.ComponentName;
import android.hardware.biometrics.BiometricManager;
+import android.hardware.biometrics.BiometricRequestConstants;
+import android.hardware.biometrics.BiometricSourceType;
import android.hardware.biometrics.common.ICancellationSignal;
import android.hardware.biometrics.common.OperationContext;
+import android.hardware.biometrics.common.OperationState;
+import android.hardware.biometrics.events.AuthenticationAcquiredInfo;
+import android.hardware.biometrics.events.AuthenticationErrorInfo;
+import android.hardware.biometrics.events.AuthenticationFailedInfo;
+import android.hardware.biometrics.events.AuthenticationHelpInfo;
+import android.hardware.biometrics.events.AuthenticationStartedInfo;
+import android.hardware.biometrics.events.AuthenticationStoppedInfo;
+import android.hardware.biometrics.events.AuthenticationSucceededInfo;
import android.hardware.biometrics.fingerprint.ISession;
import android.hardware.biometrics.fingerprint.PointerContext;
import android.hardware.fingerprint.Fingerprint;
@@ -62,6 +76,7 @@
import androidx.test.filters.SmallTest;
import androidx.test.platform.app.InstrumentationRegistry;
+import com.android.internal.R;
import com.android.server.biometrics.log.BiometricContext;
import com.android.server.biometrics.log.BiometricLogger;
import com.android.server.biometrics.log.CallbackWithProbe;
@@ -78,6 +93,7 @@
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
+import org.mockito.InOrder;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
@@ -155,6 +171,20 @@
private ArgumentCaptor<Consumer<OperationContext>> mContextInjector;
@Captor
private ArgumentCaptor<Consumer<OperationContext>> mStartHalConsumerCaptor;
+ @Captor
+ private ArgumentCaptor<AuthenticationAcquiredInfo> mAuthenticationAcquiredCaptor;
+ @Captor
+ private ArgumentCaptor<AuthenticationErrorInfo> mAuthenticationErrorCaptor;
+ @Captor
+ private ArgumentCaptor<AuthenticationFailedInfo> mAuthenticationFailedCaptor;
+ @Captor
+ private ArgumentCaptor<AuthenticationHelpInfo> mAuthenticationHelpCaptor;
+ @Captor
+ private ArgumentCaptor<AuthenticationStartedInfo> mAuthenticationStartedCaptor;
+ @Captor
+ private ArgumentCaptor<AuthenticationStoppedInfo> mAuthenticationStoppedCaptor;
+ @Captor
+ private ArgumentCaptor<AuthenticationSucceededInfo> mAuthenticationSucceededCaptor;
private final TestLooper mLooper = new TestLooper();
@@ -162,6 +192,12 @@
public void setup() {
mSetFlagsRule.disableFlags(FLAG_SIDEFPS_CONTROLLER_REFACTOR);
mContext.addMockSystemService(BiometricManager.class, mBiometricManager);
+ mContext.getOrCreateTestableResources().addOverride(
+ R.string.fingerprint_error_hw_not_available, "hw not available");
+ mContext.getOrCreateTestableResources().addOverride(
+ R.string.fingerprint_error_lockout_permanent, "lockout permanent");
+ mContext.getOrCreateTestableResources().addOverride(
+ R.string.fingerprint_acquired_too_fast, "too fast");
when(mBiometricContext.getAuthSessionCoordinator()).thenReturn(mAuthSessionCoordinator);
when(mBiometricLogger.getAmbientLightProbe(anyBoolean())).thenAnswer(i ->
new CallbackWithProbe<>(mLuxProbe, i.getArgument(0)));
@@ -356,8 +392,8 @@
verify(mBiometricContext).subscribe(mOperationContextCaptor.capture(),
mStartHalConsumerCaptor.capture(), mContextInjector.capture(), any());
- mStartHalConsumerCaptor.getValue().accept(mOperationContextCaptor
- .getValue().toAidlContext());
+ final OperationContextExt operationContext = mOperationContextCaptor.getValue();
+ mStartHalConsumerCaptor.getValue().accept(operationContext.toAidlContext());
final ArgumentCaptor<OperationContext> captor =
ArgumentCaptor.forClass(OperationContext.class);
@@ -365,16 +401,20 @@
OperationContext opContext = captor.getValue();
- assertThat(opContext).isSameInstanceAs(
- mOperationContextCaptor.getValue().toAidlContext());
+ assertThat(opContext).isSameInstanceAs(operationContext.toAidlContext());
+ opContext.operationState = new OperationState();
+ opContext.operationState.setFingerprintOperationState(
+ new OperationState.FingerprintOperationState());
mContextInjector.getValue().accept(opContext);
verify(mHal).onContextChanged(same(opContext));
+ verify(mHal, times(2)).setIgnoreDisplayTouches(
+ opContext.operationState.getFingerprintOperationState().isHardwareIgnoringTouches);
client.stopHalOperation();
- verify(mBiometricContext).unsubscribe(same(mOperationContextCaptor.getValue()));
+ verify(mBiometricContext).unsubscribe(same(operationContext));
}
@Test
@@ -455,22 +495,115 @@
client.start(mCallback);
verify(mUdfpsOverlayController).showUdfpsOverlay(eq(REQUEST_ID), anyInt(), anyInt(), any());
- verify(mAuthenticationStateListeners).onAuthenticationStarted(anyInt());
+ verify(mAuthenticationStateListeners).onAuthenticationStarted(
+ mAuthenticationStartedCaptor.capture());
+
+ assertThat(mAuthenticationStartedCaptor.getValue()).isEqualTo(
+ new AuthenticationStartedInfo.Builder(BiometricSourceType.FINGERPRINT,
+ BiometricRequestConstants.REASON_AUTH_BP).build()
+ );
+
block.accept(client);
verify(mUdfpsOverlayController).hideUdfpsOverlay(anyInt());
- verify(mAuthenticationStateListeners).onAuthenticationStopped();
+ verify(mAuthenticationStateListeners).onAuthenticationStopped(
+ mAuthenticationStoppedCaptor.capture());
+
+ assertThat(mAuthenticationStoppedCaptor.getValue()).isEqualTo(
+ new AuthenticationStoppedInfo.Builder(BiometricSourceType.FINGERPRINT,
+ BiometricRequestConstants.REASON_AUTH_BP).build()
+ );
}
@Test
- public void testAuthenticationStateListeners_onAuthenticationAcquired()
+ public void testAuthenticationStateListeners_onAuthenticationAcquired_onAuthenticationHelp()
throws RemoteException {
final FingerprintAuthenticationClient client = createClient();
client.start(mCallback);
client.onAcquired(FINGERPRINT_ACQUIRED_START, 0);
- verify(mAuthenticationStateListeners).onAuthenticationAcquired(any(), anyInt(), anyInt());
+ InOrder inOrder = inOrder(mAuthenticationStateListeners);
+ inOrder.verify(mAuthenticationStateListeners).onAuthenticationAcquired(
+ mAuthenticationAcquiredCaptor.capture());
+
+ assertThat(mAuthenticationAcquiredCaptor.getValue()).isEqualTo(
+ new AuthenticationAcquiredInfo.Builder(BiometricSourceType.FINGERPRINT,
+ BiometricRequestConstants.REASON_AUTH_BP, FINGERPRINT_ACQUIRED_START)
+ .build()
+ );
+
+ client.onAcquired(FINGERPRINT_ACQUIRED_TOO_FAST, 0);
+
+ inOrder.verify(mAuthenticationStateListeners).onAuthenticationAcquired(
+ mAuthenticationAcquiredCaptor.capture());
+ inOrder.verify(mAuthenticationStateListeners).onAuthenticationHelp(
+ mAuthenticationHelpCaptor.capture());
+
+ assertThat(mAuthenticationAcquiredCaptor.getValue()).isEqualTo(
+ new AuthenticationAcquiredInfo.Builder(BiometricSourceType.FINGERPRINT,
+ BiometricRequestConstants.REASON_AUTH_BP, FINGERPRINT_ACQUIRED_TOO_FAST)
+ .build()
+ );
+ assertThat(mAuthenticationHelpCaptor.getValue()).isEqualTo(
+ new AuthenticationHelpInfo.Builder(BiometricSourceType.FINGERPRINT,
+ BiometricRequestConstants.REASON_AUTH_BP,
+ mContext.getString(R.string.fingerprint_acquired_too_fast),
+ FINGERPRINT_ACQUIRED_TOO_FAST)
+ .build()
+ );
+ }
+
+ @Test
+ public void testAuthenticationStateListeners_onError()
+ throws RemoteException {
+ mSetFlagsRule.enableFlags(FLAG_SIDEFPS_CONTROLLER_REFACTOR);
+ final FingerprintAuthenticationClient client = createClient();
+ client.start(mCallback);
+ client.onError(FINGERPRINT_ERROR_HW_UNAVAILABLE, 0);
+
+ InOrder inOrder = inOrder(mAuthenticationStateListeners);
+ inOrder.verify(mAuthenticationStateListeners).onAuthenticationError(
+ mAuthenticationErrorCaptor.capture());
+ inOrder.verify(mAuthenticationStateListeners).onAuthenticationStopped(
+ mAuthenticationStoppedCaptor.capture());
+
+ assertThat(mAuthenticationErrorCaptor.getValue()).isEqualTo(
+ new AuthenticationErrorInfo.Builder(BiometricSourceType.FINGERPRINT,
+ BiometricRequestConstants.REASON_AUTH_BP,
+ mContext.getString(R.string.fingerprint_error_hw_not_available),
+ FINGERPRINT_ERROR_HW_UNAVAILABLE).build()
+ );
+ assertThat(mAuthenticationStoppedCaptor.getValue()).isEqualTo(
+ new AuthenticationStoppedInfo.Builder(BiometricSourceType.FINGERPRINT,
+ BiometricRequestConstants.REASON_AUTH_BP).build()
+ );
+ }
+
+ @Test
+ public void testAuthenticationStateListeners_onLockoutPermanent()
+ throws RemoteException {
+ mSetFlagsRule.enableFlags(FLAG_SIDEFPS_CONTROLLER_REFACTOR);
+ final FingerprintAuthenticationClient client = createClient();
+ client.start(mCallback);
+ client.onLockoutPermanent();
+
+ InOrder inOrder = inOrder(mAuthenticationStateListeners);
+ inOrder.verify(mAuthenticationStateListeners).onAuthenticationError(
+ mAuthenticationErrorCaptor.capture());
+ inOrder.verify(mAuthenticationStateListeners).onAuthenticationStopped(
+ mAuthenticationStoppedCaptor.capture());
+
+ assertThat(mAuthenticationErrorCaptor.getValue()).isEqualTo(
+ new AuthenticationErrorInfo.Builder(BiometricSourceType.FINGERPRINT,
+ BiometricRequestConstants.REASON_AUTH_BP,
+ mContext.getString(R.string.fingerprint_error_lockout_permanent),
+ FINGERPRINT_ERROR_LOCKOUT_PERMANENT).build()
+ );
+ assertThat(mAuthenticationStoppedCaptor.getValue()).isEqualTo(
+ new AuthenticationStoppedInfo.Builder(BiometricSourceType.FINGERPRINT,
+ BiometricRequestConstants.REASON_AUTH_BP).build()
+ );
}
@Test
@@ -482,7 +615,13 @@
client.onAuthenticated(new Fingerprint("friendly", 1 /* fingerId */,
2 /* deviceId */), true /* authenticated */, new ArrayList<>());
- verify(mAuthenticationStateListeners).onAuthenticationSucceeded(anyInt(), anyInt());
+ verify(mAuthenticationStateListeners).onAuthenticationSucceeded(
+ mAuthenticationSucceededCaptor.capture());
+ assertThat(mAuthenticationSucceededCaptor.getValue()).isEqualTo(
+ new AuthenticationSucceededInfo.Builder(BiometricSourceType.FINGERPRINT,
+ BiometricRequestConstants.REASON_AUTH_BP, true, USER_ID)
+ .build()
+ );
}
@Test
@@ -493,7 +632,12 @@
client.onAuthenticated(new Fingerprint("friendly", 1 /* fingerId */,
2 /* deviceId */), false /* authenticated */, new ArrayList<>());
- verify(mAuthenticationStateListeners).onAuthenticationFailed(anyInt(), anyInt());
+ verify(mAuthenticationStateListeners).onAuthenticationFailed(
+ mAuthenticationFailedCaptor.capture());
+ assertThat(mAuthenticationFailedCaptor.getValue()).isEqualTo(
+ new AuthenticationFailedInfo.Builder(BiometricSourceType.FINGERPRINT,
+ BiometricRequestConstants.REASON_AUTH_BP, USER_ID).build()
+ );
}
@Test
diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintDetectClientTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintDetectClientTest.java
index 6b8c3cd..6885342 100644
--- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintDetectClientTest.java
+++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintDetectClientTest.java
@@ -26,7 +26,11 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import android.hardware.biometrics.BiometricRequestConstants;
+import android.hardware.biometrics.BiometricSourceType;
import android.hardware.biometrics.common.OperationContext;
+import android.hardware.biometrics.events.AuthenticationStartedInfo;
+import android.hardware.biometrics.events.AuthenticationStoppedInfo;
import android.hardware.biometrics.fingerprint.ISession;
import android.hardware.fingerprint.FingerprintAuthenticateOptions;
import android.hardware.fingerprint.IUdfpsOverlayController;
@@ -43,6 +47,7 @@
import com.android.server.biometrics.log.BiometricContext;
import com.android.server.biometrics.log.BiometricLogger;
import com.android.server.biometrics.log.OperationContextExt;
+import com.android.server.biometrics.sensors.AuthenticationStateListeners;
import com.android.server.biometrics.sensors.ClientMonitorCallback;
import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter;
@@ -71,6 +76,8 @@
DeviceFlagsValueProvider.createCheckFlagsRule();
@Mock
+ private AuthenticationStateListeners mAuthenticationStateListeners;
+ @Mock
private ISession mHal;
@Mock
private IBinder mToken;
@@ -92,6 +99,10 @@
private ArgumentCaptor<Consumer<OperationContext>> mContextInjector;
@Captor
private ArgumentCaptor<Consumer<OperationContext>> mStartHalConsumerCaptor;
+ @Captor
+ private ArgumentCaptor<AuthenticationStartedInfo> mAuthenticationStartedCaptor;
+ @Captor
+ private ArgumentCaptor<AuthenticationStoppedInfo> mAuthenticationStoppedCaptor;
@Rule
public final MockitoRule mockito = MockitoJUnit.rule();
@@ -146,7 +157,7 @@
.setSensorId(1)
.setOpPackageName("a-test")
.build(),
- mBiometricLogger, mBiometricContext,
+ mBiometricLogger, mBiometricContext, mAuthenticationStateListeners,
mUdfpsOverlayController, true /* isStrongBiometric */);
client.start(mCallback);
client.onInteractionDetected();
@@ -169,7 +180,30 @@
.setSensorId(1)
.setOpPackageName("a-test")
.build(),
- mBiometricLogger, mBiometricContext,
+ mBiometricLogger, mBiometricContext, mAuthenticationStateListeners,
mUdfpsOverlayController, true /* isStrongBiometric */);
}
+
+ @Test
+ public void testAuthenticationStateListeners_onAuthenticationStartedAndStopped()
+ throws RemoteException {
+ final FingerprintDetectClient client = createClient();
+ client.start(mCallback);
+ verify(mAuthenticationStateListeners).onAuthenticationStarted(
+ mAuthenticationStartedCaptor.capture());
+
+ assertThat(mAuthenticationStartedCaptor.getValue()).isEqualTo(
+ new AuthenticationStartedInfo.Builder(BiometricSourceType.FINGERPRINT,
+ BiometricRequestConstants.REASON_AUTH_KEYGUARD).build()
+ );
+
+ client.stopHalOperation();
+ verify(mAuthenticationStateListeners).onAuthenticationStopped(
+ mAuthenticationStoppedCaptor.capture());
+
+ assertThat(mAuthenticationStoppedCaptor.getValue()).isEqualTo(
+ new AuthenticationStoppedInfo.Builder(BiometricSourceType.FINGERPRINT,
+ BiometricRequestConstants.REASON_AUTH_KEYGUARD).build()
+ );
+ }
}
diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClientTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClientTest.java
index d2e1c3c..b26f8c8 100644
--- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClientTest.java
+++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintEnrollClientTest.java
@@ -16,22 +16,36 @@
package com.android.server.biometrics.sensors.fingerprint.aidl;
+import static android.hardware.biometrics.BiometricFingerprintConstants.FINGERPRINT_ACQUIRED_START;
+import static android.hardware.biometrics.BiometricFingerprintConstants.FINGERPRINT_ACQUIRED_TOO_FAST;
+import static android.hardware.biometrics.BiometricFingerprintConstants.FINGERPRINT_ERROR_TIMEOUT;
+
import static com.android.systemui.shared.Flags.FLAG_SIDEFPS_CONTROLLER_REFACTOR;
+import static com.google.common.truth.Truth.assertThat;
+
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyFloat;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.same;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import android.hardware.biometrics.BiometricRequestConstants;
+import android.hardware.biometrics.BiometricSourceType;
import android.hardware.biometrics.BiometricsProtoEnums;
import android.hardware.biometrics.common.OperationContext;
+import android.hardware.biometrics.events.AuthenticationAcquiredInfo;
+import android.hardware.biometrics.events.AuthenticationErrorInfo;
+import android.hardware.biometrics.events.AuthenticationHelpInfo;
+import android.hardware.biometrics.events.AuthenticationStartedInfo;
+import android.hardware.biometrics.events.AuthenticationStoppedInfo;
import android.hardware.biometrics.fingerprint.ISession;
import android.hardware.biometrics.fingerprint.PointerContext;
import android.hardware.fingerprint.Fingerprint;
@@ -51,6 +65,7 @@
import androidx.test.filters.SmallTest;
import androidx.test.platform.app.InstrumentationRegistry;
+import com.android.internal.R;
import com.android.server.biometrics.log.BiometricContext;
import com.android.server.biometrics.log.BiometricLogger;
import com.android.server.biometrics.log.CallbackWithProbe;
@@ -66,6 +81,7 @@
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
+import org.mockito.InOrder;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
@@ -128,6 +144,16 @@
private ArgumentCaptor<Consumer<OperationContext>> mContextInjector;
@Captor
private ArgumentCaptor<Consumer<OperationContext>> mStartHalConsumerCaptor;
+ @Captor
+ private ArgumentCaptor<AuthenticationAcquiredInfo> mAuthenticationAcquiredCaptor;
+ @Captor
+ private ArgumentCaptor<AuthenticationErrorInfo> mAuthenticationErrorCaptor;
+ @Captor
+ private ArgumentCaptor<AuthenticationHelpInfo> mAuthenticationHelpCaptor;
+ @Captor
+ private ArgumentCaptor<AuthenticationStartedInfo> mAuthenticationStartedCaptor;
+ @Captor
+ private ArgumentCaptor<AuthenticationStoppedInfo> mAuthenticationStoppedCaptor;
@Rule
public final MockitoRule mockito = MockitoJUnit.rule();
@@ -138,6 +164,10 @@
new CallbackWithProbe<>(mLuxProbe, i.getArgument(0)));
when(mBiometricContext.updateContext(any(), anyBoolean())).thenAnswer(
i -> i.getArgument(0));
+ mContext.getOrCreateTestableResources().addOverride(
+ R.string.fingerprint_acquired_too_fast, "too fast");
+ mContext.getOrCreateTestableResources().addOverride(
+ R.string.fingerprint_error_timeout, "timeout");
}
@Test
@@ -333,12 +363,78 @@
client.start(mCallback);
verify(mUdfpsOverlayController).showUdfpsOverlay(eq(REQUEST_ID), anyInt(), anyInt(), any());
- verify(mAuthenticationStateListeners).onAuthenticationStarted(anyInt());
+ verify(mAuthenticationStateListeners).onAuthenticationStarted(
+ mAuthenticationStartedCaptor.capture());
+
+ assertThat(mAuthenticationStartedCaptor.getValue()).isEqualTo(
+ new AuthenticationStartedInfo.Builder(BiometricSourceType.FINGERPRINT,
+ BiometricRequestConstants.REASON_ENROLL_ENROLLING).build()
+ );
block.accept(client);
verify(mUdfpsOverlayController).hideUdfpsOverlay(anyInt());
- verify(mAuthenticationStateListeners).onAuthenticationStopped();
+ verify(mAuthenticationStateListeners).onAuthenticationStopped(
+ mAuthenticationStoppedCaptor.capture());
+
+ assertThat(mAuthenticationStoppedCaptor.getValue()).isEqualTo(
+ new AuthenticationStoppedInfo.Builder(BiometricSourceType.FINGERPRINT,
+ BiometricRequestConstants.REASON_ENROLL_ENROLLING).build()
+ );
+ }
+
+ @Test
+ public void testAuthenticationStateListeners_onAuthenticationAcquired_onAuthenticationHelp()
+ throws RemoteException {
+ final FingerprintEnrollClient client = createClient();
+ client.start(mCallback);
+ client.onAcquired(FINGERPRINT_ACQUIRED_START, 0);
+ client.onAcquired(FINGERPRINT_ACQUIRED_TOO_FAST, 0);
+
+ InOrder inOrder = inOrder(mAuthenticationStateListeners);
+ inOrder.verify(mAuthenticationStateListeners).onAuthenticationAcquired(
+ mAuthenticationAcquiredCaptor.capture());
+ inOrder.verify(mAuthenticationStateListeners).onAuthenticationHelp(
+ mAuthenticationHelpCaptor.capture());
+
+ assertThat(mAuthenticationAcquiredCaptor.getValue()).isEqualTo(
+ new AuthenticationAcquiredInfo.Builder(BiometricSourceType.FINGERPRINT,
+ BiometricRequestConstants.REASON_ENROLL_ENROLLING,
+ FINGERPRINT_ACQUIRED_TOO_FAST).build()
+ );
+ assertThat(mAuthenticationHelpCaptor.getValue()).isEqualTo(
+ new AuthenticationHelpInfo.Builder(BiometricSourceType.FINGERPRINT,
+ BiometricRequestConstants.REASON_ENROLL_ENROLLING,
+ mContext.getString(R.string.fingerprint_acquired_too_fast),
+ FINGERPRINT_ACQUIRED_TOO_FAST)
+ .build()
+ );
+ }
+
+ @Test
+ public void testAuthenticationStateListeners_onError()
+ throws RemoteException {
+ mSetFlagsRule.enableFlags(FLAG_SIDEFPS_CONTROLLER_REFACTOR);
+ final FingerprintEnrollClient client = createClient();
+ client.start(mCallback);
+ client.onError(FINGERPRINT_ERROR_TIMEOUT, 0);
+
+ InOrder inOrder = inOrder(mAuthenticationStateListeners);
+ inOrder.verify(mAuthenticationStateListeners).onAuthenticationError(
+ mAuthenticationErrorCaptor.capture());
+ inOrder.verify(mAuthenticationStateListeners).onAuthenticationStopped(
+ mAuthenticationStoppedCaptor.capture());
+
+ assertThat(mAuthenticationErrorCaptor.getValue()).isEqualTo(
+ new AuthenticationErrorInfo.Builder(BiometricSourceType.FINGERPRINT,
+ BiometricRequestConstants.REASON_ENROLL_ENROLLING,
+ mContext.getString(R.string.fingerprint_error_timeout),
+ FINGERPRINT_ERROR_TIMEOUT).build()
+ );
+ assertThat(mAuthenticationStoppedCaptor.getValue()).isEqualTo(
+ new AuthenticationStoppedInfo.Builder(BiometricSourceType.FINGERPRINT,
+ BiometricRequestConstants.REASON_ENROLL_ENROLLING).build()
+ );
}
private FingerprintEnrollClient createClient() throws RemoteException {
diff --git a/services/tests/servicestests/src/com/android/server/companion/virtual/InputManagerMockHelper.java b/services/tests/servicestests/src/com/android/server/companion/virtual/InputManagerMockHelper.java
index 00c8ed1..74e854e4 100644
--- a/services/tests/servicestests/src/com/android/server/companion/virtual/InputManagerMockHelper.java
+++ b/services/tests/servicestests/src/com/android/server/companion/virtual/InputManagerMockHelper.java
@@ -53,7 +53,7 @@
private IInputDevicesChangedListener mDevicesChangedListener;
private final Map<String /* uniqueId */, Integer /* displayId */> mDisplayIdMapping =
new HashMap<>();
- private final Map<String /* phys */, String /* uniqueId */> mUniqueIdAssociationByPort =
+ private final Map<String /* phys */, String /* uniqueId */> mUniqueIdAssociation =
new HashMap<>();
InputManagerMockHelper(TestableLooper testableLooper,
@@ -79,11 +79,10 @@
when(mIInputManagerMock.getInputDeviceIds()).thenReturn(new int[0]);
doAnswer(inv -> mDevices.get(inv.getArgument(0)))
.when(mIInputManagerMock).getInputDevice(anyInt());
- doAnswer(inv -> mUniqueIdAssociationByPort.put(inv.getArgument(0),
- inv.getArgument(1))).when(mIInputManagerMock).addUniqueIdAssociationByPort(
- anyString(), anyString());
- doAnswer(inv -> mUniqueIdAssociationByPort.remove(inv.getArgument(0))).when(
- mIInputManagerMock).removeUniqueIdAssociationByPort(anyString());
+ doAnswer(inv -> mUniqueIdAssociation.put(inv.getArgument(0), inv.getArgument(1))).when(
+ mIInputManagerMock).addUniqueIdAssociation(anyString(), anyString());
+ doAnswer(inv -> mUniqueIdAssociation.remove(inv.getArgument(0))).when(
+ mIInputManagerMock).removeUniqueIdAssociation(anyString());
// Set a new instance of InputManager for testing that uses the IInputManager mock as the
// interface to the server.
@@ -113,7 +112,7 @@
.setDescriptor(phys)
.setExternal(true)
.setAssociatedDisplayId(
- mDisplayIdMapping.getOrDefault(mUniqueIdAssociationByPort.get(phys),
+ mDisplayIdMapping.getOrDefault(mUniqueIdAssociation.get(phys),
Display.INVALID_DISPLAY))
.build();
diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceTestable.java b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceTestable.java
index de3cfbf..855c658 100644
--- a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceTestable.java
+++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceTestable.java
@@ -30,8 +30,6 @@
import android.content.pm.IPackageManager;
import android.content.pm.PackageManagerInternal;
import android.database.ContentObserver;
-import android.hardware.usb.UsbManager;
-import android.media.IAudioService;
import android.net.IIpConnectivityMetrics;
import android.net.Uri;
import android.os.Bundle;
@@ -216,11 +214,6 @@
}
@Override
- IAudioService getIAudioService() {
- return services.iaudioService;
- }
-
- @Override
PersistentDataBlockManagerInternal getPersistentDataBlockManagerInternal() {
return services.persistentDataBlockManagerInternal;
}
@@ -244,11 +237,6 @@
}
@Override
- UsbManager getUsbManager() {
- return services.usbManager;
- }
-
- @Override
boolean storageManagerIsFileBasedEncryptionEnabled() {
return services.storageManager.isFileBasedEncryptionEnabled();
}
@@ -380,21 +368,11 @@
}
@Override
- void settingsSecurePutInt(String name, int value) {
- services.settings.settingsSecurePutInt(name, value);
- }
-
- @Override
void settingsGlobalPutInt(String name, int value) {
services.settings.settingsGlobalPutInt(name, value);
}
@Override
- void settingsSecurePutString(String name, String value) {
- services.settings.settingsSecurePutString(name, value);
- }
-
- @Override
void settingsGlobalPutString(String name, String value) {
services.settings.settingsGlobalPutString(name, value);
}
diff --git a/services/tests/servicestests/src/com/android/server/power/hint/HintManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/power/hint/HintManagerServiceTest.java
index 510e7c4..5902caa 100644
--- a/services/tests/servicestests/src/com/android/server/power/hint/HintManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/power/hint/HintManagerServiceTest.java
@@ -22,6 +22,7 @@
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
@@ -41,6 +42,8 @@
import android.app.ActivityManager;
import android.app.ActivityManagerInternal;
import android.content.Context;
+import android.hardware.power.SessionConfig;
+import android.hardware.power.SessionTag;
import android.hardware.power.WorkDuration;
import android.os.Binder;
import android.os.IBinder;
@@ -63,6 +66,8 @@
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
import java.util.ArrayList;
import java.util.Arrays;
@@ -97,6 +102,7 @@
private static final long DEFAULT_HINT_PREFERRED_RATE = 16666666L;
private static final long DEFAULT_TARGET_DURATION = 16666666L;
+ private static final long DOUBLED_TARGET_DURATION = 33333333L;
private static final long CONCURRENCY_TEST_DURATION_SEC = 10;
private static final int UID = Process.myUid();
private static final int TID = Process.myPid();
@@ -106,6 +112,8 @@
private static final int[] SESSION_TIDS_C = new int[] {TID};
private static final long[] DURATIONS_THREE = new long[] {1L, 100L, 1000L};
private static final long[] TIMESTAMPS_THREE = new long[] {1L, 2L, 3L};
+ private static final long[] SESSION_PTRS = new long[] {11L, 22L, 33L};
+ private static final long[] SESSION_IDS = new long[] {1L, 11L, 111L};
private static final long[] DURATIONS_ZERO = new long[] {};
private static final long[] TIMESTAMPS_ZERO = new long[] {};
private static final long[] TIMESTAMPS_TWO = new long[] {1L, 2L};
@@ -129,21 +137,61 @@
private HintManagerService mService;
+ private static Answer<Long> fakeCreateWithConfig(Long ptr, Long sessionId) {
+ return new Answer<Long>() {
+ public Long answer(InvocationOnMock invocation) {
+ ((SessionConfig) invocation.getArguments()[5]).id = sessionId;
+ return ptr;
+ }
+ };
+ }
+
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
when(mNativeWrapperMock.halGetHintSessionPreferredRate())
.thenReturn(DEFAULT_HINT_PREFERRED_RATE);
when(mNativeWrapperMock.halCreateHintSession(eq(TGID), eq(UID), eq(SESSION_TIDS_A),
- eq(DEFAULT_TARGET_DURATION))).thenReturn(1L);
+ eq(DEFAULT_TARGET_DURATION))).thenReturn(SESSION_PTRS[0]);
when(mNativeWrapperMock.halCreateHintSession(eq(TGID), eq(UID), eq(SESSION_TIDS_B),
- eq(DEFAULT_TARGET_DURATION))).thenReturn(2L);
+ eq(DOUBLED_TARGET_DURATION))).thenReturn(SESSION_PTRS[1]);
when(mNativeWrapperMock.halCreateHintSession(eq(TGID), eq(UID), eq(SESSION_TIDS_C),
- eq(0L))).thenReturn(1L);
+ eq(0L))).thenReturn(SESSION_PTRS[2]);
+ when(mNativeWrapperMock.halCreateHintSessionWithConfig(eq(TGID), eq(UID),
+ eq(SESSION_TIDS_A), eq(DEFAULT_TARGET_DURATION), anyInt(),
+ any(SessionConfig.class))).thenAnswer(fakeCreateWithConfig(SESSION_PTRS[0],
+ SESSION_IDS[0]));
+ when(mNativeWrapperMock.halCreateHintSessionWithConfig(eq(TGID), eq(UID),
+ eq(SESSION_TIDS_B), eq(DOUBLED_TARGET_DURATION), anyInt(),
+ any(SessionConfig.class))).thenAnswer(fakeCreateWithConfig(SESSION_PTRS[1],
+ SESSION_IDS[1]));
+ when(mNativeWrapperMock.halCreateHintSessionWithConfig(eq(TGID), eq(UID),
+ eq(SESSION_TIDS_C), eq(0L), anyInt(),
+ any(SessionConfig.class))).thenAnswer(fakeCreateWithConfig(SESSION_PTRS[2],
+ SESSION_IDS[2]));
+
LocalServices.removeServiceForTest(ActivityManagerInternal.class);
LocalServices.addService(ActivityManagerInternal.class, mAmInternalMock);
}
+ /**
+ * Mocks the creation calls, but without support for new createHintSessionWithConfig method
+ */
+ public void makeConfigCreationUnsupported() {
+ reset(mNativeWrapperMock);
+ when(mNativeWrapperMock.halGetHintSessionPreferredRate())
+ .thenReturn(DEFAULT_HINT_PREFERRED_RATE);
+ when(mNativeWrapperMock.halCreateHintSession(eq(TGID), eq(UID), eq(SESSION_TIDS_A),
+ eq(DEFAULT_TARGET_DURATION))).thenReturn(SESSION_PTRS[0]);
+ when(mNativeWrapperMock.halCreateHintSession(eq(TGID), eq(UID), eq(SESSION_TIDS_B),
+ eq(DOUBLED_TARGET_DURATION))).thenReturn(SESSION_PTRS[1]);
+ when(mNativeWrapperMock.halCreateHintSession(eq(TGID), eq(UID), eq(SESSION_TIDS_C),
+ eq(0L))).thenReturn(SESSION_PTRS[2]);
+ when(mNativeWrapperMock.halCreateHintSessionWithConfig(anyInt(), anyInt(),
+ any(int[].class), anyLong(), anyInt(),
+ any(SessionConfig.class))).thenThrow(new UnsupportedOperationException());
+ }
+
static class NativeWrapperFake extends NativeWrapper {
@Override
public void halInit() {
@@ -160,6 +208,12 @@
}
@Override
+ public long halCreateHintSessionWithConfig(int tgid, int uid, int[] tids,
+ long durationNanos, int tag, SessionConfig config) {
+ return 1;
+ }
+
+ @Override
public void halPauseHintSession(long halPtr) {
}
@@ -224,27 +278,57 @@
IBinder token = new Binder();
// Make sure we throw exception when adding a TID doesn't belong to the processes
// In this case, we add `init` PID into the list.
+ SessionConfig config = new SessionConfig();
assertThrows(SecurityException.class,
- () -> service.getBinderServiceInstance().createHintSession(token,
- new int[]{TID, 1}, DEFAULT_TARGET_DURATION));
+ () -> service.getBinderServiceInstance().createHintSessionWithConfig(token,
+ new int[]{TID, 1}, DEFAULT_TARGET_DURATION, SessionTag.OTHER, config));
}
@Test
- public void testCreateHintSession() throws Exception {
+ public void testCreateHintSessionFallback() throws Exception {
+ HintManagerService service = createService();
+ IBinder token = new Binder();
+ makeConfigCreationUnsupported();
+
+ IHintSession a = service.getBinderServiceInstance().createHintSessionWithConfig(token,
+ SESSION_TIDS_A, DEFAULT_TARGET_DURATION, SessionTag.OTHER, new SessionConfig());
+ assertNotNull(a);
+
+ IHintSession b = service.getBinderServiceInstance().createHintSessionWithConfig(token,
+ SESSION_TIDS_B, DOUBLED_TARGET_DURATION, SessionTag.OTHER, new SessionConfig());
+ assertNotEquals(a, b);
+
+ IHintSession c = service.getBinderServiceInstance().createHintSessionWithConfig(token,
+ SESSION_TIDS_C, 0L, SessionTag.OTHER, new SessionConfig());
+ assertNotNull(c);
+ verify(mNativeWrapperMock, times(3)).halCreateHintSession(anyInt(), anyInt(),
+ any(int[].class), anyLong());
+ }
+
+ @Test
+ public void testCreateHintSessionWithConfig() throws Exception {
HintManagerService service = createService();
IBinder token = new Binder();
- IHintSession a = service.getBinderServiceInstance().createHintSession(token,
- SESSION_TIDS_A, DEFAULT_TARGET_DURATION);
+ SessionConfig config = new SessionConfig();
+ IHintSession a = service.getBinderServiceInstance().createHintSessionWithConfig(token,
+ SESSION_TIDS_A, DEFAULT_TARGET_DURATION, SessionTag.OTHER, config);
assertNotNull(a);
+ assertEquals(SESSION_IDS[0], config.id);
- IHintSession b = service.getBinderServiceInstance().createHintSession(token,
- SESSION_TIDS_B, DEFAULT_TARGET_DURATION);
+ SessionConfig config2 = new SessionConfig();
+ IHintSession b = service.getBinderServiceInstance().createHintSessionWithConfig(token,
+ SESSION_TIDS_B, DOUBLED_TARGET_DURATION, SessionTag.APP, config2);
assertNotEquals(a, b);
+ assertEquals(SESSION_IDS[1], config2.id);
- IHintSession c = service.getBinderServiceInstance().createHintSession(token,
- SESSION_TIDS_C, 0L);
+ SessionConfig config3 = new SessionConfig();
+ IHintSession c = service.getBinderServiceInstance().createHintSessionWithConfig(token,
+ SESSION_TIDS_C, 0L, SessionTag.GAME, config3);
assertNotNull(c);
+ assertEquals(SESSION_IDS[2], config3.id);
+ verify(mNativeWrapperMock, times(3)).halCreateHintSessionWithConfig(anyInt(), anyInt(),
+ any(int[].class), anyLong(), anyInt(), any(SessionConfig.class));
}
@Test
@@ -253,7 +337,8 @@
IBinder token = new Binder();
AppHintSession a = (AppHintSession) service.getBinderServiceInstance()
- .createHintSession(token, SESSION_TIDS_A, DEFAULT_TARGET_DURATION);
+ .createHintSessionWithConfig(token, SESSION_TIDS_A, DEFAULT_TARGET_DURATION,
+ SessionTag.OTHER, new SessionConfig());
// Set session to background and calling updateHintAllowed() would invoke pause();
service.mUidObserver.onUidStateChanged(
@@ -288,8 +373,8 @@
HintManagerService service = createService();
IBinder token = new Binder();
- IHintSession a = service.getBinderServiceInstance().createHintSession(token,
- SESSION_TIDS_A, DEFAULT_TARGET_DURATION);
+ IHintSession a = service.getBinderServiceInstance().createHintSessionWithConfig(token,
+ SESSION_TIDS_A, DEFAULT_TARGET_DURATION, SessionTag.OTHER, new SessionConfig());
a.close();
verify(mNativeWrapperMock, times(1)).halCloseHintSession(anyLong());
@@ -300,8 +385,8 @@
HintManagerService service = createService();
IBinder token = new Binder();
- IHintSession a = service.getBinderServiceInstance().createHintSession(token,
- SESSION_TIDS_A, DEFAULT_TARGET_DURATION);
+ IHintSession a = service.getBinderServiceInstance().createHintSessionWithConfig(token,
+ SESSION_TIDS_A, DEFAULT_TARGET_DURATION, SessionTag.OTHER, new SessionConfig());
assertThrows(IllegalArgumentException.class, () -> {
a.updateTargetWorkDuration(-1L);
@@ -321,7 +406,8 @@
IBinder token = new Binder();
AppHintSession a = (AppHintSession) service.getBinderServiceInstance()
- .createHintSession(token, SESSION_TIDS_A, DEFAULT_TARGET_DURATION);
+ .createHintSessionWithConfig(token, SESSION_TIDS_A, DEFAULT_TARGET_DURATION,
+ SessionTag.OTHER, new SessionConfig());
a.updateTargetWorkDuration(100L);
a.reportActualWorkDuration(DURATIONS_THREE, TIMESTAMPS_THREE);
@@ -363,7 +449,8 @@
IBinder token = new Binder();
AppHintSession a = (AppHintSession) service.getBinderServiceInstance()
- .createHintSession(token, SESSION_TIDS_A, DEFAULT_TARGET_DURATION);
+ .createHintSessionWithConfig(token, SESSION_TIDS_A, DEFAULT_TARGET_DURATION,
+ SessionTag.OTHER, new SessionConfig());
a.sendHint(PerformanceHintManager.Session.CPU_LOAD_RESET);
verify(mNativeWrapperMock, times(1)).halSendHint(anyLong(),
@@ -389,7 +476,8 @@
IBinder token = new Binder();
AppHintSession a = (AppHintSession) service.getBinderServiceInstance()
- .createHintSession(token, SESSION_TIDS_A, DEFAULT_TARGET_DURATION);
+ .createHintSessionWithConfig(token, SESSION_TIDS_A, DEFAULT_TARGET_DURATION,
+ SessionTag.OTHER, new SessionConfig());
service.mUidObserver.onUidStateChanged(
a.mUid, ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND, 0, 0);
@@ -410,7 +498,8 @@
IBinder token = new Binder();
AppHintSession a = (AppHintSession) service.getBinderServiceInstance()
- .createHintSession(token, SESSION_TIDS_A, DEFAULT_TARGET_DURATION);
+ .createHintSessionWithConfig(token, SESSION_TIDS_A, DEFAULT_TARGET_DURATION,
+ SessionTag.OTHER, new SessionConfig());
service.mUidObserver.onUidStateChanged(
a.mUid, ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND, 0, 0);
@@ -423,7 +512,8 @@
IBinder token = new Binder();
AppHintSession a = (AppHintSession) service.getBinderServiceInstance()
- .createHintSession(token, SESSION_TIDS_A, DEFAULT_TARGET_DURATION);
+ .createHintSessionWithConfig(token, SESSION_TIDS_A, DEFAULT_TARGET_DURATION,
+ SessionTag.OTHER, new SessionConfig());
a.updateTargetWorkDuration(100L);
@@ -454,10 +544,12 @@
int threadCount = 3;
int[] tids1 = createThreads(threadCount, stopLatch1);
long sessionPtr1 = 111;
- when(mNativeWrapperMock.halCreateHintSession(eq(TGID), eq(UID), eq(tids1),
- eq(DEFAULT_TARGET_DURATION))).thenReturn(sessionPtr1);
+ when(mNativeWrapperMock.halCreateHintSessionWithConfig(eq(TGID), eq(UID), eq(tids1),
+ eq(DEFAULT_TARGET_DURATION), anyInt(), any(SessionConfig.class)))
+ .thenReturn(sessionPtr1);
AppHintSession session1 = (AppHintSession) service.getBinderServiceInstance()
- .createHintSession(token, tids1, DEFAULT_TARGET_DURATION);
+ .createHintSessionWithConfig(token, tids1, DEFAULT_TARGET_DURATION,
+ SessionTag.OTHER, new SessionConfig());
assertNotNull(session1);
// for test only to avoid conflicting with any real thread that exists on device
@@ -473,10 +565,12 @@
tids2WithIsolated[threadCount] = isoProc1;
tids2WithIsolated[threadCount + 1] = isoProc2;
long sessionPtr2 = 222;
- when(mNativeWrapperMock.halCreateHintSession(eq(TGID), eq(UID), eq(tids2WithIsolated),
- eq(DEFAULT_TARGET_DURATION))).thenReturn(sessionPtr2);
+ when(mNativeWrapperMock.halCreateHintSessionWithConfig(eq(TGID), eq(UID),
+ eq(tids2WithIsolated), eq(DEFAULT_TARGET_DURATION), anyInt(),
+ any(SessionConfig.class))).thenReturn(sessionPtr2);
AppHintSession session2 = (AppHintSession) service.getBinderServiceInstance()
- .createHintSession(token, tids2WithIsolated, DEFAULT_TARGET_DURATION);
+ .createHintSessionWithConfig(token, tids2WithIsolated,
+ DEFAULT_TARGET_DURATION, SessionTag.OTHER, new SessionConfig());
assertNotNull(session2);
// trigger clean up through UID state change by making the process background
@@ -608,7 +702,8 @@
IBinder token = new Binder();
AppHintSession a = (AppHintSession) service.getBinderServiceInstance()
- .createHintSession(token, SESSION_TIDS_A, DEFAULT_TARGET_DURATION);
+ .createHintSessionWithConfig(token, SESSION_TIDS_A, DEFAULT_TARGET_DURATION,
+ SessionTag.OTHER, new SessionConfig());
a.setMode(0, true);
verify(mNativeWrapperMock, times(1)).halSetMode(anyLong(),
@@ -726,7 +821,8 @@
AtomicReference<Boolean> shouldRun) throws Exception {
IBinder token = new Binder();
AppHintSession a = (AppHintSession) service.getBinderServiceInstance()
- .createHintSession(token, SESSION_TIDS_A, DEFAULT_TARGET_DURATION);
+ .createHintSessionWithConfig(token, SESSION_TIDS_A, DEFAULT_TARGET_DURATION,
+ SessionTag.OTHER, new SessionConfig());
// we will start some threads and get their valid TIDs to update
int threadCount = 3;
// the list of TIDs
@@ -793,7 +889,8 @@
IBinder token = new Binder();
AppHintSession a = (AppHintSession) service.getBinderServiceInstance()
- .createHintSession(token, SESSION_TIDS_A, DEFAULT_TARGET_DURATION);
+ .createHintSessionWithConfig(token, SESSION_TIDS_A, DEFAULT_TARGET_DURATION,
+ SessionTag.OTHER, new SessionConfig());
a.updateTargetWorkDuration(100L);
a.reportActualWorkDuration2(WORK_DURATIONS_FIVE);
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationListenersTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationListenersTest.java
index ae36839..983e694 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationListenersTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationListenersTest.java
@@ -70,6 +70,7 @@
import android.os.UserHandle;
import android.platform.test.flag.junit.SetFlagsRule;
import android.service.notification.INotificationListener;
+import android.service.notification.IStatusBarNotificationHolder;
import android.service.notification.NotificationListenerFilter;
import android.service.notification.NotificationListenerService;
import android.service.notification.NotificationRankingUpdate;
@@ -90,6 +91,7 @@
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
+import org.mockito.ArgumentCaptor;
import org.mockito.ArgumentMatcher;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
@@ -154,6 +156,11 @@
.thenReturn(new ArrayList<>());
mNm.mHandler = mock(NotificationManagerService.WorkerHandler.class);
mNm.mAssistants = mock(NotificationManagerService.NotificationAssistants.class);
+ FieldSetter.setField(mNm,
+ NotificationManagerService.class.getDeclaredField("mListeners"),
+ mListeners);
+ doReturn(android.service.notification.NotificationListenerService.TRIM_FULL)
+ .when(mListeners).getOnNotificationPostedTrim(any());
}
@Test
@@ -827,6 +834,68 @@
verify(mListeners, never()).redactStatusBarNotification(eq(sbn));
}
+ @Test
+ public void testListenerPost_UpdateLifetimeExtended() throws Exception {
+ mSetFlagsRule.enableFlags(android.app.Flags.FLAG_LIFETIME_EXTENSION_REFACTOR);
+
+ // Create original notification, with FLAG_LIFETIME_EXTENDED_BY_DIRECT_REPLY.
+ String pkg = "pkg";
+ int uid = 9;
+ UserHandle userHandle = UserHandle.getUserHandleForUid(uid);
+ NotificationChannel channel = new NotificationChannel("id", "name",
+ NotificationManager.IMPORTANCE_HIGH);
+ Notification.Builder nb = new Notification.Builder(mContext, channel.getId())
+ .setContentTitle("foo")
+ .setSmallIcon(android.R.drawable.sym_def_app_icon)
+ .setFlag(Notification.FLAG_LIFETIME_EXTENDED_BY_DIRECT_REPLY, true);
+ StatusBarNotification sbn = new StatusBarNotification(pkg, pkg, 8, "tag", uid, 0,
+ nb.build(), userHandle, null, 0);
+ NotificationRecord old = new NotificationRecord(mContext, sbn, channel);
+
+ // Creates updated notification (without FLAG_LIFETIME_EXTENDED_BY_DIRECT_REPLY)
+ Notification.Builder nb2 = new Notification.Builder(mContext, channel.getId())
+ .setContentTitle("new title")
+ .setSmallIcon(android.R.drawable.sym_def_app_icon)
+ .setFlag(Notification.FLAG_LIFETIME_EXTENDED_BY_DIRECT_REPLY, false);
+ StatusBarNotification sbn2 = new StatusBarNotification(pkg, pkg, 8, "tag", uid, 0,
+ nb2.build(), userHandle, null, 0);
+ NotificationRecord toPost = new NotificationRecord(mContext, sbn2, channel);
+
+ // Create system ui-like service.
+ ManagedServices.ManagedServiceInfo info = mListeners.new ManagedServiceInfo(
+ null, new ComponentName("a", "a"), sbn2.getUserId(), false, null, 33, 33);
+ info.isSystemUi = true;
+ INotificationListener l1 = mock(INotificationListener.class);
+ info.service = l1;
+ List<ManagedServices.ManagedServiceInfo> services = ImmutableList.of(info);
+ when(mListeners.getServices()).thenReturn(services);
+
+ FieldSetter.setField(mNm,
+ NotificationManagerService.class.getDeclaredField("mHandler"),
+ mock(NotificationManagerService.WorkerHandler.class));
+ doReturn(true).when(mNm).isVisibleToListener(any(), anyInt(), any());
+ doReturn(mock(NotificationRankingUpdate.class)).when(mNm).makeRankingUpdateLocked(info);
+ doReturn(false).when(mNm).isInLockDownMode(anyInt());
+ doNothing().when(mNm).updateUriPermissions(any(), any(), any(), anyInt());
+ doReturn(sbn2).when(mListeners).redactStatusBarNotification(sbn2);
+ doReturn(sbn2).when(mListeners).redactStatusBarNotification(any());
+
+ // The notification change is posted to the service listener.
+ mListeners.notifyPostedLocked(toPost, old);
+
+ // Verify that the post occcurs with the updated notification value.
+ ArgumentCaptor<Runnable> runnableCaptor = ArgumentCaptor.forClass(Runnable.class);
+ verify(mNm.mHandler, times(1)).post(runnableCaptor.capture());
+ runnableCaptor.getValue().run();
+ ArgumentCaptor<IStatusBarNotificationHolder> sbnCaptor =
+ ArgumentCaptor.forClass(IStatusBarNotificationHolder.class);
+ verify(l1, times(1)).onNotificationPosted(sbnCaptor.capture(), any());
+ StatusBarNotification sbnResult = sbnCaptor.getValue().get();
+ assertThat(sbnResult.getNotification()
+ .extras.getCharSequence(Notification.EXTRA_TITLE).toString())
+ .isEqualTo("new title");
+ }
+
/**
* Helper method to test the thread safety of some operations.
*
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
index 011f2e3..ce7a0a0 100755
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
@@ -106,6 +106,7 @@
import static android.view.Display.DEFAULT_DISPLAY;
import static android.view.Display.INVALID_DISPLAY;
import static android.view.WindowManager.LayoutParams.TYPE_TOAST;
+
import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN;
import static com.android.server.am.PendingIntentRecord.FLAG_ACTIVITY_SENDER;
import static com.android.server.am.PendingIntentRecord.FLAG_BROADCAST_SENDER;
@@ -118,11 +119,11 @@
import static com.android.server.notification.NotificationRecordLogger.NotificationReportedEvent.NOTIFICATION_ADJUSTED;
import static com.android.server.notification.NotificationRecordLogger.NotificationReportedEvent.NOTIFICATION_POSTED;
import static com.android.server.notification.NotificationRecordLogger.NotificationReportedEvent.NOTIFICATION_UPDATED;
+
import static com.google.common.collect.Iterables.getOnlyElement;
import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertWithMessage;
-import static java.util.Collections.emptyList;
-import static java.util.Collections.singletonList;
+
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertNotNull;
@@ -131,6 +132,7 @@
import static junit.framework.Assert.assertSame;
import static junit.framework.Assert.assertTrue;
import static junit.framework.Assert.fail;
+
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertThrows;
import static org.mockito.ArgumentMatchers.isNull;
@@ -157,6 +159,9 @@
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;
+import static java.util.Collections.emptyList;
+import static java.util.Collections.singletonList;
+
import android.Manifest;
import android.annotation.Nullable;
import android.annotation.SuppressLint;
@@ -270,8 +275,10 @@
import android.util.Xml;
import android.view.accessibility.AccessibilityManager;
import android.widget.RemoteViews;
+
import androidx.test.InstrumentationRegistry;
import androidx.test.filters.SmallTest;
+
import com.android.internal.R;
import com.android.internal.config.sysui.SystemUiDeviceConfigFlags;
import com.android.internal.config.sysui.TestableFlagResolver;
@@ -303,10 +310,12 @@
import com.android.server.utils.quota.MultiRateLimiter;
import com.android.server.wm.ActivityTaskManagerInternal;
import com.android.server.wm.WindowManagerInternal;
+
import com.google.android.collect.Lists;
import com.google.common.collect.ImmutableList;
import libcore.junit.util.compat.CoreCompatChangeRule.DisableCompatChanges;
import libcore.junit.util.compat.CoreCompatChangeRule.EnableCompatChanges;
+
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
@@ -2607,7 +2616,30 @@
@Test
@EnableFlags(android.app.Flags.FLAG_LIFETIME_EXTENSION_REFACTOR)
- public void testCancelAllDoesNotCancelLifetimeExtended() throws Exception {
+ public void testCancelAllClearsLifetimeExtended() throws Exception {
+ final NotificationRecord notif = generateNotificationRecord(
+ mTestNotificationChannel, 1, "group", true);
+ notif.getNotification().flags |= Notification.FLAG_LIFETIME_EXTENDED_BY_DIRECT_REPLY;
+ mService.addNotification(notif);
+ StatusBarNotification[] notifs =
+ mBinderService.getActiveNotifications(notif.getSbn().getPackageName());
+ assertThat(notifs.length).isEqualTo(1);
+
+ // Simulate a "cancel all" received.
+ mService.mNotificationDelegate.onClearAll(mUid, Binder.getCallingPid(),
+ notif.getUserId());
+ waitForIdle();
+ notifs = mBinderService.getActiveNotifications(notif.getSbn().getPackageName());
+ assertThat(notifs.length).isEqualTo(0);
+
+ // Test that no update post is sent to System UI.
+ verify(mWorkerHandler, never())
+ .post(any(NotificationManagerService.EnqueueNotificationRunnable.class));
+ }
+
+ @Test
+ @EnableFlags(android.app.Flags.FLAG_LIFETIME_EXTENSION_REFACTOR)
+ public void testAppCancelAllDoesNotCancelLifetimeExtended() throws Exception {
// Adds a lifetime extended notification.
final NotificationRecord notif = generateNotificationRecord(mTestNotificationChannel, 1,
null, false);
@@ -5934,6 +5966,45 @@
}
@Test
+ @EnableFlags(android.app.Flags.FLAG_LIFETIME_EXTENSION_REFACTOR)
+ public void testUpdate_DirectReplyLifetimeExtendedUpdateSucceeds() throws Exception {
+ // Creates a lifetime extended notification.
+ NotificationRecord original = generateNotificationRecord(mTestNotificationChannel);
+ original.getSbn().getNotification().flags |= FLAG_LIFETIME_EXTENDED_BY_DIRECT_REPLY;
+ mService.addNotification(original);
+
+ // Post an update for that notification.
+ StatusBarNotification sbn = new StatusBarNotification(mPkg, mPkg, original.getSbn().getId(),
+ original.getSbn().getTag(), mUid, 0,
+ new Notification.Builder(mContext, mTestNotificationChannel.getId())
+ .setSmallIcon(android.R.drawable.sym_def_app_icon)
+ .setContentTitle("new title").build(),
+ UserHandle.getUserHandleForUid(mUid), null, 0);
+ NotificationRecord update = new NotificationRecord(mContext, sbn, mTestNotificationChannel);
+ mService.addEnqueuedNotification(update);
+
+ NotificationManagerService.PostNotificationRunnable runnable =
+ mService.new PostNotificationRunnable(update.getKey(),
+ update.getSbn().getPackageName(),
+ update.getUid(),
+ mPostNotificationTrackerFactory.newTracker(null));
+ runnable.run();
+ waitForIdle();
+
+ // Checks the update was sent, and that update contains the new title, and does not contain
+ // the lifetime extension flag.
+ ArgumentCaptor<NotificationRecord> captor =
+ ArgumentCaptor.forClass(NotificationRecord.class);
+ verify(mListeners, times(1)).prepareNotifyPostedLocked(captor.capture(), any(),
+ anyBoolean());
+ assertThat(captor.getValue().getNotification().flags
+ & FLAG_LIFETIME_EXTENDED_BY_DIRECT_REPLY).isEqualTo(0);
+ assertThat(captor.getValue()
+ .getNotification().extras.getCharSequence(Notification.EXTRA_TITLE).toString())
+ .isEqualTo("new title");
+ }
+
+ @Test
public void testStats_updatedOnUserExpansion() throws Exception {
NotificationRecord r = generateNotificationRecord(mTestNotificationChannel);
mService.addNotification(r);
@@ -8788,9 +8859,8 @@
}
@Test
+ @EnableFlags(android.app.Flags.FLAG_LIFETIME_EXTENSION_REFACTOR)
public void testActionClickLifetimeExtendedCancel_PreventByNoDismiss() throws Exception {
- mSetFlagsRule.enableFlags(android.app.Flags.FLAG_LIFETIME_EXTENSION_REFACTOR);
-
final Notification.Action action =
new Notification.Action.Builder(null, "text", PendingIntent.getActivity(
mContext, 0, new Intent(), PendingIntent.FLAG_IMMUTABLE)).build();
@@ -8831,9 +8901,8 @@
}
@Test
+ @EnableFlags(android.app.Flags.FLAG_LIFETIME_EXTENSION_REFACTOR)
public void testUpdateOnActionClickDropsLifetimeExtendedCancel() throws Exception {
- mSetFlagsRule.enableFlags(android.app.Flags.FLAG_LIFETIME_EXTENSION_REFACTOR);
-
final Notification.Action action =
new Notification.Action.Builder(null, "text", PendingIntent.getActivity(
mContext, 0, new Intent(), PendingIntent.FLAG_IMMUTABLE)).build();
@@ -12602,7 +12671,6 @@
// the notifyPostedLocked function is called twice.
verify(mWorkerHandler, times(2)).postDelayed(any(Runnable.class), anyLong());
- //verify(mListeners, times(2)).notifyPostedLocked(any(), any());
}
@Test
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationRecordTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationRecordTest.java
index 130a8ca..f572e7a 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationRecordTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationRecordTest.java
@@ -20,6 +20,7 @@
import static android.app.NotificationManager.IMPORTANCE_HIGH;
import static android.app.NotificationManager.IMPORTANCE_LOW;
import static android.app.NotificationManager.IMPORTANCE_UNSPECIFIED;
+import static android.media.AudioAttributes.USAGE_ALARM;
import static android.service.notification.Adjustment.KEY_IMPORTANCE;
import static android.service.notification.Adjustment.KEY_NOT_CONVERSATION;
import static android.service.notification.NotificationListenerService.FLAG_FILTER_TYPE_ALERTING;
@@ -68,6 +69,7 @@
import android.os.UserHandle;
import android.os.VibrationEffect;
import android.os.Vibrator;
+import android.platform.test.annotations.EnableFlags;
import android.platform.test.flag.junit.SetFlagsRule;
import android.provider.Settings;
import android.service.notification.Adjustment;
@@ -1565,4 +1567,31 @@
assertTrue(record.getPhoneNumbers().contains("16175552121"));
assertTrue(record.getPhoneNumbers().contains("16175553434"));
}
+
+ @Test
+ @EnableFlags(Flags.FLAG_RESTRICT_AUDIO_ATTRIBUTES_ALARM)
+ public void updateChannel_nullAudioAttributes() {
+ StatusBarNotification sbn = getStyledNotification(true, true, true,
+ new Notification.DecoratedCustomViewStyle());
+ NotificationRecord record = new NotificationRecord(mMockContext, sbn, channel);
+
+ record.updateNotificationChannel(new NotificationChannel("new", "new", 3));
+
+ assertThat(record.getAudioAttributes()).isNotNull();
+ }
+
+ @Test
+ @EnableFlags(Flags.FLAG_RESTRICT_AUDIO_ATTRIBUTES_ALARM)
+ public void updateChannel_nonNullAudioAttributes() {
+ StatusBarNotification sbn = getStyledNotification(true, true, true,
+ new Notification.DecoratedCustomViewStyle());
+ NotificationRecord record = new NotificationRecord(mMockContext, sbn, channel);
+
+ NotificationChannel update = new NotificationChannel("new", "new", 3);
+ update.setSound(Uri.EMPTY,
+ new AudioAttributes.Builder().setUsage(USAGE_ALARM).build());
+ record.updateNotificationChannel(update);
+
+ assertThat(record.getAudioAttributes().getUsage()).isEqualTo(USAGE_ALARM);
+ }
}
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ZenEnumTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ZenEnumTest.java
index f724510..8add2f9 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/ZenEnumTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/ZenEnumTest.java
@@ -21,8 +21,8 @@
import android.app.AutomaticZenRule;
import android.provider.Settings;
import android.service.notification.ZenPolicy;
-import android.test.suitebuilder.annotation.SmallTest;
+import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4;
import com.android.os.dnd.ActiveRuleType;
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java
index 5adfafb..9559a25 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java
@@ -4956,6 +4956,56 @@
}
@Test
+ @EnableFlags({Flags.FLAG_MODES_API, Flags.FLAG_MODES_UI})
+ public void updateAutomaticZenRule_ruleChangedByUser_doesNotDeactivateRule() {
+ assertThat(mZenModeHelper.getZenMode()).isEqualTo(ZEN_MODE_OFF);
+ AutomaticZenRule rule = new AutomaticZenRule.Builder("rule", CONDITION_ID)
+ .setConfigurationActivity(new ComponentName(mPkg, "cls"))
+ .setInterruptionFilter(INTERRUPTION_FILTER_PRIORITY)
+ .build();
+ String ruleId = mZenModeHelper.addAutomaticZenRule(mPkg, rule, UPDATE_ORIGIN_APP, "reason",
+ CUSTOM_PKG_UID);
+ mZenModeHelper.setAutomaticZenRuleState(ruleId, CONDITION_TRUE, UPDATE_ORIGIN_APP,
+ CUSTOM_PKG_UID);
+ assertThat(mZenModeHelper.getZenMode()).isEqualTo(ZEN_MODE_IMPORTANT_INTERRUPTIONS);
+
+ AutomaticZenRule updateWithDiff = new AutomaticZenRule.Builder(rule)
+ .setTriggerDescription("Whenever")
+ .build();
+ mZenModeHelper.updateAutomaticZenRule(ruleId, updateWithDiff, UPDATE_ORIGIN_USER, "reason",
+ CUSTOM_PKG_UID);
+
+ assertThat(mZenModeHelper.getZenMode()).isEqualTo(ZEN_MODE_IMPORTANT_INTERRUPTIONS);
+ assertThat(mZenModeHelper.mConfig.automaticRules.get(ruleId).condition).isEqualTo(
+ CONDITION_TRUE);
+ }
+
+ @Test
+ @EnableFlags({Flags.FLAG_MODES_API, Flags.FLAG_MODES_UI})
+ public void updateAutomaticZenRule_ruleDisabledByUser_doesNotReactivateOnReenable() {
+ assertThat(mZenModeHelper.getZenMode()).isEqualTo(ZEN_MODE_OFF);
+ AutomaticZenRule rule = new AutomaticZenRule.Builder("rule", CONDITION_ID)
+ .setConfigurationActivity(new ComponentName(mPkg, "cls"))
+ .setInterruptionFilter(INTERRUPTION_FILTER_PRIORITY)
+ .build();
+ String ruleId = mZenModeHelper.addAutomaticZenRule(mPkg, rule, UPDATE_ORIGIN_APP, "reason",
+ CUSTOM_PKG_UID);
+ mZenModeHelper.setAutomaticZenRuleState(ruleId, CONDITION_TRUE, UPDATE_ORIGIN_APP,
+ CUSTOM_PKG_UID);
+ assertThat(mZenModeHelper.getZenMode()).isEqualTo(ZEN_MODE_IMPORTANT_INTERRUPTIONS);
+
+ mZenModeHelper.updateAutomaticZenRule(ruleId,
+ new AutomaticZenRule.Builder(rule).setEnabled(false).build(), UPDATE_ORIGIN_USER,
+ "disable", CUSTOM_PKG_UID);
+ mZenModeHelper.updateAutomaticZenRule(ruleId,
+ new AutomaticZenRule.Builder(rule).setEnabled(true).build(), UPDATE_ORIGIN_USER,
+ "enable", CUSTOM_PKG_UID);
+
+ assertThat(mZenModeHelper.getZenMode()).isEqualTo(ZEN_MODE_OFF);
+ assertThat(mZenModeHelper.mConfig.automaticRules.get(ruleId).condition).isNull();
+ }
+
+ @Test
@EnableFlags(Flags.FLAG_MODES_API)
public void removeAutomaticZenRule_propagatesOriginToEffectsApplier() {
mZenModeHelper.setDeviceEffectsApplier(mDeviceEffectsApplier);
diff --git a/services/tests/wmtests/AndroidManifest.xml b/services/tests/wmtests/AndroidManifest.xml
index d6c5173..777f618 100644
--- a/services/tests/wmtests/AndroidManifest.xml
+++ b/services/tests/wmtests/AndroidManifest.xml
@@ -51,6 +51,7 @@
<uses-permission android:name="android.permission.MONITOR_INPUT"/>
<uses-permission android:name="android.permission.OBSERVE_ROLE_HOLDERS"/>
<uses-permission android:name="android.permission.MANAGE_DEFAULT_APPLICATIONS"/>
+ <uses-permission android:name="android.permission.DUMP"/>
<!-- TODO: Remove largeHeap hack when memory leak is fixed (b/123984854) -->
<application android:debuggable="true"
diff --git a/services/tests/wmtests/src/com/android/server/policy/ModifierShortcutTests.java b/services/tests/wmtests/src/com/android/server/policy/ModifierShortcutTests.java
index 3c02eee..0ed02dd 100644
--- a/services/tests/wmtests/src/com/android/server/policy/ModifierShortcutTests.java
+++ b/services/tests/wmtests/src/com/android/server/policy/ModifierShortcutTests.java
@@ -21,6 +21,7 @@
import static android.view.KeyEvent.KEYCODE_BRIGHTNESS_DOWN;
import static android.view.KeyEvent.KEYCODE_C;
import static android.view.KeyEvent.KEYCODE_CTRL_LEFT;
+import static android.view.KeyEvent.KEYCODE_DEL;
import static android.view.KeyEvent.KEYCODE_E;
import static android.view.KeyEvent.KEYCODE_ENTER;
import static android.view.KeyEvent.KEYCODE_H;
@@ -42,16 +43,25 @@
import android.content.Intent;
import android.os.RemoteException;
import android.platform.test.annotations.Presubmit;
+import android.platform.test.annotations.RequiresFlagsDisabled;
+import android.platform.test.annotations.RequiresFlagsEnabled;
+import android.platform.test.flag.junit.CheckFlagsRule;
+import android.platform.test.flag.junit.DeviceFlagsValueProvider;
import android.util.SparseArray;
import androidx.test.filters.SmallTest;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
@Presubmit
@SmallTest
public class ModifierShortcutTests extends ShortcutKeyTestBase {
+
+ @Rule
+ public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule();
+
private static final SparseArray<String> INTENT_SHORTCUTS = new SparseArray<>();
private static final SparseArray<String> ROLE_SHORTCUTS = new SparseArray<>();
static {
@@ -228,4 +238,25 @@
sendKeyCombination(new int[]{KEYCODE_SCREENSHOT}, 0);
mPhoneWindowManager.assertTakeScreenshotNotCalled();
}
+
+ /**
+ * META+CTRL+BACKSPACE for taking a bugreport when the flag is enabled.
+ */
+ @Test
+ @RequiresFlagsEnabled(com.android.server.flags.Flags.FLAG_NEW_BUGREPORT_KEYBOARD_SHORTCUT)
+ public void testTakeBugReport_flagEnabled() throws RemoteException {
+ sendKeyCombination(new int[]{KEYCODE_META_LEFT, KEYCODE_CTRL_LEFT, KEYCODE_DEL}, 0);
+ mPhoneWindowManager.assertTakeBugreport(true);
+ }
+
+ /**
+ * META+CTRL+BACKSPACE for taking a bugreport does nothing when the flag is disabledd.
+ */
+ @Test
+ @RequiresFlagsDisabled(com.android.server.flags.Flags.FLAG_NEW_BUGREPORT_KEYBOARD_SHORTCUT)
+ public void testTakeBugReport_flagDisabled() throws RemoteException {
+ sendKeyCombination(new int[]{KEYCODE_META_LEFT, KEYCODE_CTRL_LEFT, KEYCODE_DEL}, 0);
+ mPhoneWindowManager.assertTakeBugreport(false);
+ }
+
}
diff --git a/services/tests/wmtests/src/com/android/server/policy/ShortcutLoggingTests.java b/services/tests/wmtests/src/com/android/server/policy/ShortcutLoggingTests.java
index 60716cb..fd69217 100644
--- a/services/tests/wmtests/src/com/android/server/policy/ShortcutLoggingTests.java
+++ b/services/tests/wmtests/src/com/android/server/policy/ShortcutLoggingTests.java
@@ -23,6 +23,9 @@
import static com.android.server.policy.PhoneWindowManager.SHORT_PRESS_SETTINGS_NOTIFICATION_PANEL;
import android.platform.test.annotations.Presubmit;
+import android.platform.test.annotations.RequiresFlagsEnabled;
+import android.platform.test.flag.junit.CheckFlagsRule;
+import android.platform.test.flag.junit.DeviceFlagsValueProvider;
import android.view.KeyEvent;
import androidx.test.filters.MediumTest;
@@ -34,6 +37,7 @@
import junitparams.Parameters;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -42,6 +46,10 @@
@RunWith(JUnitParamsRunner.class)
public class ShortcutLoggingTests extends ShortcutKeyTestBase {
+ @Rule
+ public final CheckFlagsRule mCheckFlagsRule =
+ DeviceFlagsValueProvider.createCheckFlagsRule();
+
private static final int VENDOR_ID = 0x123;
private static final int PRODUCT_ID = 0x456;
private static final int DEVICE_BUS = 0x789;
@@ -153,8 +161,6 @@
new int[]{META_KEY, CTRL_KEY, KeyEvent.KEYCODE_DPAD_RIGHT},
KeyboardLogEvent.SPLIT_SCREEN_NAVIGATION, KeyEvent.KEYCODE_DPAD_RIGHT,
META_ON | CTRL_ON},
- {"Shift + Menu -> Trigger Bug Report", new int[]{SHIFT_KEY, KeyEvent.KEYCODE_MENU},
- KeyboardLogEvent.TRIGGER_BUG_REPORT, KeyEvent.KEYCODE_MENU, SHIFT_ON},
{"Meta + L -> Lock Homescreen", new int[]{META_KEY, KeyEvent.KEYCODE_L},
KeyboardLogEvent.LOCK_SCREEN, KeyEvent.KEYCODE_L, META_ON},
{"Meta + Ctrl + N -> Open Notes", new int[]{META_KEY, CTRL_KEY, KeyEvent.KEYCODE_N},
@@ -353,4 +359,13 @@
expectedKey, expectedModifierState, DEVICE_BUS,
"Failed while executing " + testName);
}
+
+ @Test
+ @RequiresFlagsEnabled(com.android.server.flags.Flags.FLAG_NEW_BUGREPORT_KEYBOARD_SHORTCUT)
+ public void testBugreportShortcutPress() {
+ sendKeyCombination(new int[]{META_KEY, CTRL_KEY, KeyEvent.KEYCODE_DEL}, 0);
+ mPhoneWindowManager.assertShortcutLogged(VENDOR_ID, PRODUCT_ID,
+ KeyboardLogEvent.TRIGGER_BUG_REPORT, KeyEvent.KEYCODE_DEL, META_ON | CTRL_ON,
+ DEVICE_BUS, "Failed to log bugreport shortcut.");
+ }
}
diff --git a/services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java b/services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java
index eac9929..dd9d05a 100644
--- a/services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java
+++ b/services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java
@@ -88,6 +88,7 @@
import android.view.Display;
import android.view.InputDevice;
import android.view.KeyEvent;
+import android.view.accessibility.AccessibilityManager;
import android.view.autofill.AutofillManagerInternal;
import com.android.dx.mockito.inline.extended.StaticMockitoSession;
@@ -155,6 +156,7 @@
@Mock private AudioManagerInternal mAudioManagerInternal;
@Mock private SearchManager mSearchManager;
@Mock private RoleManager mRoleManager;
+ @Mock private AccessibilityManager mAccessibilityManager;
@Mock private Display mDisplay;
@Mock private DisplayRotation mDisplayRotation;
@@ -305,6 +307,9 @@
eq(SensorPrivacyManager.class));
doReturn(mSearchManager).when(mContext).getSystemService(eq(SearchManager.class));
doReturn(mRoleManager).when(mContext).getSystemService(eq(RoleManager.class));
+ doReturn(mAccessibilityManager).when(mContext).getSystemService(
+ eq(AccessibilityManager.class));
+ doReturn(false).when(mAccessibilityManager).isEnabled();
doReturn(false).when(mPackageManager).hasSystemFeature(any());
try {
doThrow(new PackageManager.NameNotFoundException("test")).when(mPackageManager)
@@ -602,7 +607,7 @@
}
void overrideEnableBugReportTrigger(boolean enable) {
- mPhoneWindowManager.mEnableShiftMenuBugReports = enable;
+ mPhoneWindowManager.mEnableBugReportKeyboardShortcut = enable;
}
void overrideStartActivity() {
@@ -746,12 +751,14 @@
eq(displayId), eq(mImeTargetWindowToken));
}
- void assertTakeBugreport() {
+ void assertTakeBugreport(boolean wasCalled) throws RemoteException {
mTestLooper.dispatchAll();
- ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
- verify(mContext).sendOrderedBroadcastAsUser(intentCaptor.capture(), any(), any(), any(),
- any(), anyInt(), any(), any());
- Assert.assertTrue(intentCaptor.getValue().getAction() == Intent.ACTION_BUG_REPORT);
+ if (wasCalled) {
+ verify(mActivityManagerService).requestInteractiveBugReport();
+ } else {
+ verify(mActivityManagerService, never()).requestInteractiveBugReport();
+ }
+
}
void assertTogglePanel() throws RemoteException {
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java
index e42acba..30eb5ef 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java
@@ -18,10 +18,10 @@
import static android.app.AppOpsManager.MODE_ALLOWED;
import static android.app.AppOpsManager.OP_PICTURE_IN_PICTURE;
-import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_DISMISSED;
-import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN;
-import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED;
-import static android.app.AppCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED;
+import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_DISMISSED;
+import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN;
+import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED;
+import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityTaskManagerServiceTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityTaskManagerServiceTests.java
index 400f9bb..4f94704 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityTaskManagerServiceTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityTaskManagerServiceTests.java
@@ -317,6 +317,70 @@
}
@Test
+ public void testEnterPipModeWhenResumed_autoEnterEnabled_returnTrue() {
+ final Task stack = new TaskBuilder(mSupervisor).setCreateActivity(true).build();
+ final ActivityRecord activity = stack.getBottomMostTask().getTopNonFinishingActivity();
+ PictureInPictureParams params = mock(PictureInPictureParams.class);
+ activity.pictureInPictureArgs = params;
+
+ doReturn(true).when(activity).isState(RESUMED);
+ doReturn(false).when(activity).inPinnedWindowingMode();
+ doReturn(true).when(activity).checkEnterPictureInPictureState(anyString(), anyBoolean());
+ doReturn(true).when(params).isAutoEnterEnabled();
+
+ assertTrue(mAtm.enterPictureInPictureMode(activity, params,
+ true /* fromClient */, true /* isAutoEnter */));
+ }
+
+ @Test
+ public void testEnterPipModeWhenResumed_autoEnterDisabled_returnTrue() {
+ final Task stack = new TaskBuilder(mSupervisor).setCreateActivity(true).build();
+ final ActivityRecord activity = stack.getBottomMostTask().getTopNonFinishingActivity();
+ PictureInPictureParams params = mock(PictureInPictureParams.class);
+ activity.pictureInPictureArgs = params;
+
+ doReturn(true).when(activity).isState(RESUMED);
+ doReturn(false).when(activity).inPinnedWindowingMode();
+ doReturn(true).when(activity).checkEnterPictureInPictureState(anyString(), anyBoolean());
+ doReturn(false).when(params).isAutoEnterEnabled();
+
+ assertTrue(mAtm.enterPictureInPictureMode(activity, params,
+ true /* fromClient */, false /* isAutoEnter */));
+ }
+
+ @Test
+ public void testEnterPipModeWhenPausing_autoEnterEnabled_returnFalse() {
+ final Task stack = new TaskBuilder(mSupervisor).setCreateActivity(true).build();
+ final ActivityRecord activity = stack.getBottomMostTask().getTopNonFinishingActivity();
+ PictureInPictureParams params = mock(PictureInPictureParams.class);
+ activity.pictureInPictureArgs = params;
+
+ doReturn(true).when(activity).isState(PAUSING);
+ doReturn(false).when(activity).inPinnedWindowingMode();
+ doReturn(true).when(activity).checkEnterPictureInPictureState(anyString(), anyBoolean());
+ doReturn(true).when(params).isAutoEnterEnabled();
+
+ assertFalse(mAtm.enterPictureInPictureMode(activity, params,
+ true /* fromClient */, true /* isAutoEnter */));
+ }
+
+ @Test
+ public void testEnterPipModeWhenPausing_autoEnterDisabled_returnTrue() {
+ final Task stack = new TaskBuilder(mSupervisor).setCreateActivity(true).build();
+ final ActivityRecord activity = stack.getBottomMostTask().getTopNonFinishingActivity();
+ PictureInPictureParams params = mock(PictureInPictureParams.class);
+ activity.pictureInPictureArgs = params;
+
+ doReturn(true).when(activity).isState(PAUSING);
+ doReturn(false).when(activity).inPinnedWindowingMode();
+ doReturn(true).when(activity).checkEnterPictureInPictureState(anyString(), anyBoolean());
+ doReturn(false).when(params).isAutoEnterEnabled();
+
+ assertTrue(mAtm.enterPictureInPictureMode(activity, params,
+ true /* fromClient */, false /* isAutoEnter */));
+ }
+
+ @Test
public void testResumeNextActivityOnCrashedAppDied() {
mSupervisor.beginDeferResume();
final ActivityRecord homeActivity = new ActivityBuilder(mAtm)
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityTaskSupervisorTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityTaskSupervisorTests.java
index 6b614fa..27a4a2b 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityTaskSupervisorTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityTaskSupervisorTests.java
@@ -343,6 +343,20 @@
verify(mAtm).setLastResumedActivityUncheckLocked(any(), eq("test"));
}
+ @Test
+ public void testUpdateTopResumed_moveToFront() {
+ final ActivityRecord activity1 = new ActivityBuilder(mAtm).setCreateTask(true).build();
+ final ActivityRecord activity2 = new ActivityBuilder(mAtm).setCreateTask(true).build();
+ activity2.setState(ActivityRecord.State.RESUMED, "test");
+ assertEquals(activity2.app, mAtm.mTopApp);
+ activity1.getTask().moveToFront("test");
+ // If the device is not sleeping, the app should be only set with resumed state.
+ assertEquals(activity2.app, mAtm.mTopApp);
+ activity2.setState(ActivityRecord.State.PAUSED, "test");
+ activity1.setState(ActivityRecord.State.RESUMED, "test");
+ assertEquals(activity1.app, mAtm.mTopApp);
+ }
+
/**
* We need to launch home again after user unlocked for those displays that do not have
* encryption aware home app.
diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayRotationTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayRotationTests.java
index e14568d..e3a8542 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DisplayRotationTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DisplayRotationTests.java
@@ -38,6 +38,7 @@
import static com.android.dx.mockito.inline.extended.ExtendedMockito.mock;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.reset;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.same;
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.times;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.when;
@@ -66,6 +67,7 @@
import android.os.SystemClock;
import android.platform.test.annotations.Presubmit;
import android.provider.Settings;
+import android.view.Display;
import android.view.DisplayAddress;
import android.view.IRotationWatcher;
import android.view.Surface;
@@ -217,6 +219,79 @@
}
@Test
+ public void testUserRotationSystemProperty_NonDefault_InternalDisplay() throws Exception {
+ mBuilder.setIsDefaultDisplay(false).build();
+ when(mMockDisplayContent.getDisplay().getType()).thenReturn(Display.TYPE_INTERNAL);
+ spyOn(mTarget);
+ when(mTarget.getDemoUserRotationOverride()).thenReturn(Surface.ROTATION_90);
+
+ mTarget.restoreSettings(WindowManagerPolicy.USER_ROTATION_FREE, Surface.ROTATION_270,
+ /*fixedToUserRotation=*/ 0);
+
+ assertEquals(Surface.ROTATION_270, mTarget.getUserRotation());
+ assertEquals(WindowManagerPolicy.USER_ROTATION_FREE, mTarget.getUserRotationMode());
+ assertEquals(0, mTarget.getFixedToUserRotationMode());
+ }
+
+ @Test
+ public void testUserRotationSystemProperty_NonDefault_ExternalDisplay() throws Exception {
+ mBuilder.setIsDefaultDisplay(false).build();
+ when(mMockDisplayContent.getDisplay().getType()).thenReturn(Display.TYPE_EXTERNAL);
+ spyOn(mTarget);
+ when(mTarget.getDemoUserRotationOverride()).thenReturn(Surface.ROTATION_90);
+
+ mTarget.restoreSettings(WindowManagerPolicy.USER_ROTATION_FREE, Surface.ROTATION_270,
+ /*fixedToUserRotation=*/ 0);
+
+ assertEquals(WindowManagerPolicy.USER_ROTATION_LOCKED, mTarget.getUserRotationMode());
+ assertEquals(Surface.ROTATION_90, mTarget.getUserRotation());
+ assertEquals(0, mTarget.getFixedToUserRotationMode());
+ }
+
+ @Test
+ public void testUserRotationSystemProperty_NonDefault_OverlayDisplay() throws Exception {
+ mBuilder.setIsDefaultDisplay(false).build();
+ when(mMockDisplayContent.getDisplay().getType()).thenReturn(Display.TYPE_OVERLAY);
+ spyOn(mTarget);
+ when(mTarget.getDemoUserRotationOverride()).thenReturn(Surface.ROTATION_90);
+
+ mTarget.restoreSettings(WindowManagerPolicy.USER_ROTATION_FREE, Surface.ROTATION_270,
+ /*fixedToUserRotation=*/ 0);
+
+ assertEquals(WindowManagerPolicy.USER_ROTATION_LOCKED, mTarget.getUserRotationMode());
+ assertEquals(Surface.ROTATION_90, mTarget.getUserRotation());
+ assertEquals(0, mTarget.getFixedToUserRotationMode());
+ }
+
+ @Test
+ public void testUserRotationSystemProperty_NonDefault_VirtualDisplay() throws Exception {
+ mBuilder.setIsDefaultDisplay(false).build();
+ when(mMockDisplayContent.getDisplay().getType()).thenReturn(Display.TYPE_VIRTUAL);
+ final var packageName = "abc";
+ when(mMockDisplayContent.getDisplay().getOwnerPackageName()).thenReturn(packageName);
+ spyOn(mTarget);
+ when(mTarget.getDemoUserRotationOverride()).thenReturn(Surface.ROTATION_90);
+
+ // Without package name
+ when(mTarget.getDemoUserRotationPackage()).thenReturn("");
+ mTarget.restoreSettings(WindowManagerPolicy.USER_ROTATION_FREE, Surface.ROTATION_270,
+ /*fixedToUserRotation=*/ 0);
+
+ assertEquals(WindowManagerPolicy.USER_ROTATION_FREE, mTarget.getUserRotationMode());
+ assertEquals(Surface.ROTATION_270, mTarget.getUserRotation());
+ assertEquals(0, mTarget.getFixedToUserRotationMode());
+
+ // Use package name
+ when(mTarget.getDemoUserRotationPackage()).thenReturn(packageName);
+ mTarget.restoreSettings(WindowManagerPolicy.USER_ROTATION_FREE, Surface.ROTATION_270,
+ /*fixedToUserRotation=*/ 0);
+
+ assertEquals(WindowManagerPolicy.USER_ROTATION_LOCKED, mTarget.getUserRotation());
+ assertEquals(Surface.ROTATION_90, mTarget.getUserRotationMode());
+ assertEquals(0, mTarget.getFixedToUserRotationMode());
+ }
+
+ @Test
public void testPersistUserRotation_UnlockRotation_DefaultDisplay() throws Exception {
mBuilder.build();
@@ -1450,6 +1525,7 @@
mMockContext = mock(Context.class);
mMockDisplayContent = mock(DisplayContent.class);
+ when(mMockDisplayContent.getDisplay()).thenReturn(mock(Display.class));
mMockDisplayContent.isDefaultDisplay = mIsDefaultDisplay;
when(mMockDisplayContent.calculateDisplayCutoutForRotation(anyInt()))
.thenReturn(NO_CUTOUT);
diff --git a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
index 9697c65..ac1dc08 100644
--- a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
@@ -502,7 +502,6 @@
final WindowConfiguration translucentWinConf = requestedConfig.windowConfiguration;
translucentWinConf.setActivityType(ACTIVITY_TYPE_STANDARD);
translucentWinConf.setWindowingMode(WINDOWING_MODE_MULTI_WINDOW);
- translucentWinConf.setDisplayWindowingMode(WINDOWING_MODE_MULTI_WINDOW);
translucentWinConf.setAlwaysOnTop(true);
translucentActivity.onRequestedOverrideConfigurationChanged(requestedConfig);
@@ -511,7 +510,6 @@
// The original override of WindowConfiguration should keep.
assertEquals(ACTIVITY_TYPE_STANDARD, translucentActivity.getActivityType());
assertEquals(WINDOWING_MODE_MULTI_WINDOW, translucentWinConf.getWindowingMode());
- assertEquals(WINDOWING_MODE_MULTI_WINDOW, translucentWinConf.getDisplayWindowingMode());
assertTrue(translucentWinConf.isAlwaysOnTop());
// Unless display is going to be rotated, it should always inherit from parent.
assertEquals(ROTATION_UNDEFINED, translucentWinConf.getDisplayRotation());
@@ -1384,6 +1382,25 @@
}
@Test
+ @EnableCompatChanges({ActivityInfo.OVERRIDE_ANY_ORIENTATION_TO_USER})
+ public void testShouldNotCreateCompatDisplays_systemFullscreenOverride() {
+ setUpDisplaySizeWithApp(1000, 2500);
+
+ // Make the task root resizable.
+ mActivity.info.resizeMode = RESIZE_MODE_RESIZEABLE;
+
+ // Create an activity on the same task.
+ final ActivityRecord activity = buildActivityRecord(/* supportsSizeChanges= */false,
+ RESIZE_MODE_UNRESIZEABLE, ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
+
+ // Simulate the user selecting the fullscreen user aspect ratio override
+ spyOn(activity.mLetterboxUiController);
+ doReturn(true).when(activity.mLetterboxUiController)
+ .isSystemOverrideToFullscreenEnabled();
+ assertFalse(activity.shouldCreateCompatDisplayInsets());
+ }
+
+ @Test
@EnableCompatChanges({ActivityInfo.NEVER_SANDBOX_DISPLAY_APIS})
public void testNeverSandboxDisplayApis_configEnabled_sandboxingNotApplied() {
setUpDisplaySizeWithApp(1000, 1200);
@@ -4467,6 +4484,21 @@
}
@Test
+ public void testPortraitAppInTabletop_notSplitScreen() {
+ final int dw = 2400;
+ setUpDisplaySizeWithApp(dw, 2000);
+ prepareUnresizable(mActivity, SCREEN_ORIENTATION_PORTRAIT);
+
+ final int initialWidth = mActivity.getBounds().width();
+
+ setFoldablePosture(true /* isHalfFolded */, true /* isTabletop */);
+
+ final int finalWidth = mActivity.getBounds().width();
+ assertEquals(initialWidth, finalWidth);
+ assertNotEquals(finalWidth, getExpectedSplitSize(dw));
+ }
+
+ @Test
public void testUpdateResolvedBoundsHorizontalPosition_bookModeEnabled() {
// Set up a display in landscape with a fixed-orientation PORTRAIT app
setUpDisplaySizeWithApp(2800, 1400);
diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskFragmentOrganizerControllerTest.java b/services/tests/wmtests/src/com/android/server/wm/TaskFragmentOrganizerControllerTest.java
index 002a3d5..83e4151 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TaskFragmentOrganizerControllerTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TaskFragmentOrganizerControllerTest.java
@@ -881,7 +881,7 @@
mTransaction.addTaskFragmentOperation(mFragmentToken, operation);
final TaskFragmentOperation dimOperation = new TaskFragmentOperation.Builder(
OP_TYPE_SET_DIM_ON_TASK)
- .setDimOnTask(true)
+ .setBooleanValue(true)
.build();
mTransaction.addTaskFragmentOperation(mFragmentToken, dimOperation);
mOrganizer.applyTransaction(mTransaction, TASK_FRAGMENT_TRANSIT_CHANGE,
@@ -1050,6 +1050,8 @@
// TaskFragment override orientation should be set for a system organizer.
final TaskFragment taskFragment = mWindowOrganizerController.getTaskFragment(fragmentToken);
assertNotNull(taskFragment);
+
+ taskFragment.setVisibleRequested(true);
assertEquals(SCREEN_ORIENTATION_BEHIND, taskFragment.getOverrideOrientation());
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskFragmentTest.java b/services/tests/wmtests/src/com/android/server/wm/TaskFragmentTest.java
index 4837fcb..a90a158 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TaskFragmentTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TaskFragmentTest.java
@@ -757,6 +757,7 @@
final Task task = createTask(mDisplayContent);
final TaskFragment tf = createTaskFragmentWithActivity(task);
final ActivityRecord activity = tf.getTopMostActivity();
+ tf.setVisibleRequested(true);
tf.setOverrideOrientation(SCREEN_ORIENTATION_BEHIND);
// Should report the override orientation
@@ -768,6 +769,26 @@
}
@Test
+ public void testGetOrientation_reportOverrideOrientation_whenInvisible() {
+ final Task task = createTask(mDisplayContent);
+ final TaskFragment tf = createTaskFragmentWithActivity(task);
+ final ActivityRecord activity = tf.getTopMostActivity();
+ tf.setVisibleRequested(false);
+ tf.setOverrideOrientation(SCREEN_ORIENTATION_BEHIND);
+
+ // Should report SCREEN_ORIENTATION_UNSPECIFIED for the override orientation when invisible
+ assertEquals(SCREEN_ORIENTATION_UNSPECIFIED, tf.getOverrideOrientation());
+
+ // Should report SCREEN_ORIENTATION_UNSET for the orientation
+ assertEquals(SCREEN_ORIENTATION_UNSET, tf.getOrientation(SCREEN_ORIENTATION_UNSET));
+
+ // Should report SCREEN_ORIENTATION_UNSET even if the activity requests a different
+ // value
+ activity.setRequestedOrientation(SCREEN_ORIENTATION_LANDSCAPE);
+ assertEquals(SCREEN_ORIENTATION_UNSET, tf.getOrientation(SCREEN_ORIENTATION_UNSET));
+ }
+
+ @Test
public void testUpdateImeParentForActivityEmbedding() {
// Setup two activities in ActivityEmbedding.
final Task task = createTask(mDisplayContent);
diff --git a/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java b/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java
index 42fe3a7..3288788 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java
@@ -23,6 +23,7 @@
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_NOSENSOR;
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSET;
import static android.view.WindowManager.LayoutParams.ROTATION_ANIMATION_SEAMLESS;
+import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;
import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION;
import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD;
import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR;
@@ -1665,7 +1666,11 @@
final Task task = createTask(mDisplayContent);
final ActivityRecord activity0 = createActivityRecord(task);
final ActivityRecord activity1 = createActivityRecord(task);
- doReturn(true).when(activity1).hasStartingWindow();
+ final WindowManager.LayoutParams attrs =
+ new WindowManager.LayoutParams(TYPE_APPLICATION_STARTING);
+ final TestWindowState startingWindow = createWindowState(attrs, activity1);
+ activity1.mStartingData = mock(StartingData.class);
+ activity1.addWindow(startingWindow);
// Start states.
changes.put(activity0,
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowConfigurationTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowConfigurationTests.java
index 38aac7c..eca51ae 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowConfigurationTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowConfigurationTests.java
@@ -16,9 +16,7 @@
package com.android.server.wm;
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_ASSISTANT;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
-import static android.app.WindowConfiguration.ACTIVITY_TYPE_RECENTS;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
import static android.app.WindowConfiguration.ROTATION_UNDEFINED;
import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
@@ -208,43 +206,6 @@
/** Ensure the window always has a caption in Freeform window mode or display mode. */
@Test
- public void testCaptionShownForFreeformWindowingMode() {
- final WindowConfiguration config = new WindowConfiguration();
- config.setActivityType(ACTIVITY_TYPE_STANDARD);
- config.setWindowingMode(WINDOWING_MODE_FREEFORM);
- config.setDisplayWindowingMode(WINDOWING_MODE_FULLSCREEN);
- assertTrue(config.hasWindowDecorCaption());
-
- config.setDisplayWindowingMode(WINDOWING_MODE_FREEFORM);
- assertTrue(config.hasWindowDecorCaption());
-
- config.setWindowingMode(WINDOWING_MODE_FULLSCREEN);
- assertTrue(config.hasWindowDecorCaption());
-
- config.setDisplayWindowingMode(WINDOWING_MODE_FULLSCREEN);
- assertFalse(config.hasWindowDecorCaption());
- }
-
- /** Caption should not show for non-standard activity window. */
- @Test
- public void testCaptionNotShownForNonStandardActivityType() {
- final WindowConfiguration config = new WindowConfiguration();
- config.setActivityType(ACTIVITY_TYPE_HOME);
- config.setWindowingMode(WINDOWING_MODE_FREEFORM);
- config.setDisplayWindowingMode(WINDOWING_MODE_FREEFORM);
- assertFalse(config.hasWindowDecorCaption());
-
- config.setActivityType(ACTIVITY_TYPE_ASSISTANT);
- assertFalse(config.hasWindowDecorCaption());
-
- config.setActivityType(ACTIVITY_TYPE_RECENTS);
- assertFalse(config.hasWindowDecorCaption());
-
- config.setActivityType(ACTIVITY_TYPE_STANDARD);
- assertTrue(config.hasWindowDecorCaption());
- }
-
- @Test
public void testMaskedSetTo() {
final WindowConfiguration config = new WindowConfiguration();
final WindowConfiguration other = new WindowConfiguration();
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java
index 69b5c37..43b424f 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java
@@ -1681,8 +1681,7 @@
WindowContainerToken wct = rootTask.mRemoteToken.toWindowContainerToken();
t.setWindowingMode(wct, WINDOWING_MODE_PINNED);
mWm.mAtmService.mWindowOrganizerController.applyTransaction(t);
- verify(mWm.mAtmService.mRootWindowContainer).resumeFocusedTasksTopActivitiesUnchecked(any(),
- any(), any(), anyBoolean());
+ verify(mWm.mAtmService.mRootWindowContainer).resumeFocusedTasksTopActivities();
clearInvocations(mWm.mAtmService.mRootWindowContainer);
// The token for the PIP root task may have changed when the task entered PIP mode, so do
@@ -1691,8 +1690,7 @@
record.getRootTask().mRemoteToken.toWindowContainerToken();
t.setWindowingMode(newToken, WINDOWING_MODE_FULLSCREEN);
mWm.mAtmService.mWindowOrganizerController.applyTransaction(t);
- verify(mWm.mAtmService.mRootWindowContainer).resumeFocusedTasksTopActivitiesUnchecked(any(),
- any(), any(), anyBoolean());
+ verify(mWm.mAtmService.mRootWindowContainer).resumeFocusedTasksTopActivities();
}
@Test
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowProcessControllerTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowProcessControllerTests.java
index 400e4b6..059fed20 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowProcessControllerTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowProcessControllerTests.java
@@ -406,6 +406,7 @@
verify(tracker).onActivityResumedWhileVisible(mWpc);
assertTrue(tracker.hasResumedActivity(mWpc.mUid));
+ mAtm.mTopApp = null;
activity.makeFinishingLocked();
activity.setState(PAUSING, "test");
diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
index 9729c68..e5d7b40e 100644
--- a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
+++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
@@ -127,6 +127,7 @@
import java.util.List;
import java.util.Locale;
import java.util.Objects;
+import java.util.Set;
import java.util.concurrent.Executor;
/**
@@ -2739,7 +2740,7 @@
}
}
final ScreenCapture.ScreenshotHardwareBuffer shb =
- mWmInternal.takeAssistScreenshot();
+ mWmInternal.takeAssistScreenshot(/* windowTypesToExclude= */ Set.of());
final Bitmap bm = shb != null ? shb.asBitmap() : null;
// Now that everything is fetched, putting it in the launchIntent.
if (bm != null) {
diff --git a/telephony/java/android/telephony/satellite/SatelliteManager.java b/telephony/java/android/telephony/satellite/SatelliteManager.java
index 87bb0f0..b005715 100644
--- a/telephony/java/android/telephony/satellite/SatelliteManager.java
+++ b/telephony/java/android/telephony/satellite/SatelliteManager.java
@@ -954,6 +954,11 @@
@FlaggedApi(Flags.FLAG_OEM_ENABLED_SATELLITE_FLAG)
public static final int SATELLITE_MODEM_STATE_CONNECTED = 7;
/**
+ * The satellite modem is being powered on.
+ * @hide
+ */
+ public static final int SATELLITE_MODEM_STATE_ENABLING_SATELLITE = 8;
+ /**
* Satellite modem state is unknown. This generic modem state should be used only when the
* modem state cannot be mapped to other specific modem states.
*/
@@ -970,6 +975,7 @@
SATELLITE_MODEM_STATE_UNAVAILABLE,
SATELLITE_MODEM_STATE_NOT_CONNECTED,
SATELLITE_MODEM_STATE_CONNECTED,
+ SATELLITE_MODEM_STATE_ENABLING_SATELLITE,
SATELLITE_MODEM_STATE_UNKNOWN
})
@Retention(RetentionPolicy.SOURCE)
diff --git a/test-runner/tests/Android.bp b/test-runner/tests/Android.bp
index aad2bee..0c0c080 100644
--- a/test-runner/tests/Android.bp
+++ b/test-runner/tests/Android.bp
@@ -33,7 +33,10 @@
"android.test.base",
"android.test.mock",
],
- static_libs: ["junit"],
+ static_libs: [
+ "junit",
+ "androidx.test.rules",
+ ],
// Include all test java files.
srcs: ["src/**/*.java"],
diff --git a/test-runner/tests/src/android/test/AndroidTestRunnerTest.java b/test-runner/tests/src/android/test/AndroidTestRunnerTest.java
index bd6c04bc..9b7ea59 100644
--- a/test-runner/tests/src/android/test/AndroidTestRunnerTest.java
+++ b/test-runner/tests/src/android/test/AndroidTestRunnerTest.java
@@ -17,7 +17,8 @@
package android.test;
import android.test.mock.MockContext;
-import android.test.suitebuilder.annotation.SmallTest;
+
+import androidx.test.filters.SmallTest;
import junit.framework.AssertionFailedError;
import junit.framework.Test;
diff --git a/test-runner/tests/src/android/test/InstrumentationTestRunnerTest.java b/test-runner/tests/src/android/test/InstrumentationTestRunnerTest.java
index d98b217..0929e8b 100644
--- a/test-runner/tests/src/android/test/InstrumentationTestRunnerTest.java
+++ b/test-runner/tests/src/android/test/InstrumentationTestRunnerTest.java
@@ -22,7 +22,8 @@
import android.test.mock.MockContext;
import android.test.suitebuilder.ListTestCaseNames;
import android.test.suitebuilder.ListTestCaseNames.TestDescriptor;
-import android.test.suitebuilder.annotation.SmallTest;
+
+import androidx.test.filters.SmallTest;
import junit.framework.Test;
import junit.framework.TestCase;
diff --git a/test-runner/tests/src/android/test/suitebuilder/examples/suppress/PartiallySuppressedTest.java b/test-runner/tests/src/android/test/suitebuilder/examples/suppress/PartiallySuppressedTest.java
index 3ca0f70..f48443d 100644
--- a/test-runner/tests/src/android/test/suitebuilder/examples/suppress/PartiallySuppressedTest.java
+++ b/test-runner/tests/src/android/test/suitebuilder/examples/suppress/PartiallySuppressedTest.java
@@ -16,7 +16,7 @@
package android.test.suitebuilder.examples.suppress;
-import android.test.suitebuilder.annotation.Suppress;
+import androidx.test.filters.Suppress;
import junit.framework.TestCase;
diff --git a/test-runner/tests/src/android/test/suitebuilder/examples/suppress/SuppressedTest.java b/test-runner/tests/src/android/test/suitebuilder/examples/suppress/SuppressedTest.java
index c4e0e07..c85238c 100644
--- a/test-runner/tests/src/android/test/suitebuilder/examples/suppress/SuppressedTest.java
+++ b/test-runner/tests/src/android/test/suitebuilder/examples/suppress/SuppressedTest.java
@@ -16,7 +16,7 @@
package android.test.suitebuilder.examples.suppress;
-import android.test.suitebuilder.annotation.Suppress;
+import androidx.test.filters.Suppress;
import junit.framework.TestCase;
diff --git a/tests/ActivityManagerPerfTests/tests/src/com/android/frameworks/perftests/am/tests/OomAdjPerfTest.java b/tests/ActivityManagerPerfTests/tests/src/com/android/frameworks/perftests/am/tests/OomAdjPerfTest.java
index 5d6a4a3..1c78e5b 100644
--- a/tests/ActivityManagerPerfTests/tests/src/com/android/frameworks/perftests/am/tests/OomAdjPerfTest.java
+++ b/tests/ActivityManagerPerfTests/tests/src/com/android/frameworks/perftests/am/tests/OomAdjPerfTest.java
@@ -90,6 +90,9 @@
TargetPackageUtils.startStubPackage(mContext, STUB_PACKAGE1_NAME);
TargetPackageUtils.startStubPackage(mContext, STUB_PACKAGE2_NAME);
TargetPackageUtils.startStubPackage(mContext, STUB_PACKAGE3_NAME);
+
+ Utils.wakeUp();
+ Utils.runShellCommand("wm dismiss-keyguard");
}
@After
diff --git a/tests/ActivityManagerPerfTests/tests/src/com/android/frameworks/perftests/am/util/TargetPackageUtils.java b/tests/ActivityManagerPerfTests/tests/src/com/android/frameworks/perftests/am/util/TargetPackageUtils.java
index d7f4d9d..705fe29 100644
--- a/tests/ActivityManagerPerfTests/tests/src/com/android/frameworks/perftests/am/util/TargetPackageUtils.java
+++ b/tests/ActivityManagerPerfTests/tests/src/com/android/frameworks/perftests/am/util/TargetPackageUtils.java
@@ -175,6 +175,7 @@
context.startService(intent);
Assert.assertTrue("Timeout when waiting for starting package " + pkgName,
pair.second.await(AWAIT_SERVICE_CONNECT_MS, TimeUnit.MILLISECONDS));
+ Utils.runShellCommand("am unfreeze --sticky " + pkgName);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
diff --git a/tests/ActivityManagerPerfTests/utils/src/com/android/frameworks/perftests/am/util/Utils.java b/tests/ActivityManagerPerfTests/utils/src/com/android/frameworks/perftests/am/util/Utils.java
index 9bd94f2..421ae57d 100644
--- a/tests/ActivityManagerPerfTests/utils/src/com/android/frameworks/perftests/am/util/Utils.java
+++ b/tests/ActivityManagerPerfTests/utils/src/com/android/frameworks/perftests/am/util/Utils.java
@@ -66,4 +66,15 @@
ResultReceiver resultReceiver = intent.getParcelableExtra(Intent.EXTRA_RESULT_RECEIVER);
resultReceiver.send(0, null);
}
+
+ /**
+ * Wake up the device.
+ */
+ public static void wakeUp() {
+ try {
+ UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()).wakeUp();
+ } catch (RemoteException e) {
+ throw new RuntimeException(e);
+ }
+ }
}
diff --git a/tests/FlickerTests/test-apps/app-helpers/OWNERS b/tests/FlickerTests/test-apps/app-helpers/OWNERS
new file mode 100644
index 0000000..ab62532
--- /dev/null
+++ b/tests/FlickerTests/test-apps/app-helpers/OWNERS
@@ -0,0 +1,2 @@
+uysalorhan@google.com
+pragyabajoria@google.com
\ No newline at end of file
diff --git a/tests/FlickerTests/test-apps/app-helpers/src/com/android/server/wm/flicker/helpers/DesktopModeAppHelper.kt b/tests/FlickerTests/test-apps/app-helpers/src/com/android/server/wm/flicker/helpers/DesktopModeAppHelper.kt
new file mode 100644
index 0000000..461dfec
--- /dev/null
+++ b/tests/FlickerTests/test-apps/app-helpers/src/com/android/server/wm/flicker/helpers/DesktopModeAppHelper.kt
@@ -0,0 +1,124 @@
+/*
+ * 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.wm.flicker.helpers
+
+import android.tools.device.apphelpers.IStandardAppHelper
+import android.tools.helpers.SYSTEMUI_PACKAGE
+import android.tools.traces.parsers.WindowManagerStateHelper
+import android.tools.traces.wm.WindowingMode
+import androidx.test.uiautomator.By
+import androidx.test.uiautomator.BySelector
+import androidx.test.uiautomator.UiDevice
+import androidx.test.uiautomator.UiObject2
+import androidx.test.uiautomator.Until
+
+/**
+ * Wrapper class around App helper classes. This class adds functionality to the apps that the
+ * desktop apps would have.
+ */
+open class DesktopModeAppHelper(private val innerHelper: IStandardAppHelper) :
+ IStandardAppHelper by innerHelper {
+ private val TIMEOUT_MS = 3_000L
+ private val CAPTION = "desktop_mode_caption"
+ private val CAPTION_HANDLE = "caption_handle"
+ private val MAXIMIZE_BUTTON = "maximize_window"
+ private val MAXIMIZE_BUTTON_VIEW = "maximize_button_view"
+ private val CLOSE_BUTTON = "close_window"
+
+ private val caption: BySelector
+ get() = By.res(SYSTEMUI_PACKAGE, CAPTION)
+
+ /** Wait for an app moved to desktop to finish its transition. */
+ private fun waitForAppToMoveToDesktop(wmHelper: WindowManagerStateHelper) {
+ wmHelper
+ .StateSyncBuilder()
+ .withWindowSurfaceAppeared(innerHelper)
+ .withFreeformApp(innerHelper)
+ .withAppTransitionIdle()
+ .waitForAndVerify()
+ }
+
+ /** Move an app to Desktop by dragging the app handle at the top. */
+ fun enterDesktopWithDrag(
+ wmHelper: WindowManagerStateHelper,
+ device: UiDevice,
+ ) {
+ innerHelper.launchViaIntent(wmHelper)
+ dragToDesktop(wmHelper, device)
+ waitForAppToMoveToDesktop(wmHelper)
+ }
+
+ private fun dragToDesktop(wmHelper: WindowManagerStateHelper, device: UiDevice) {
+ val windowRect = wmHelper.getWindowRegion(innerHelper).bounds
+ val startX = windowRect.centerX()
+
+ // Start dragging a little under the top to prevent dragging the notification shade.
+ val startY = 10
+
+ val displayRect =
+ wmHelper.currentState.wmState.getDefaultDisplay()?.displayRect
+ ?: throw IllegalStateException("Default display is null")
+
+ // The position we want to drag to
+ val endY = displayRect.centerY() / 2
+
+ // drag the window to move to desktop
+ device.drag(startX, startY, startX, endY, 100)
+ }
+
+ /** Click maximise button on the app header for the given app. */
+ fun maximiseDesktopApp(wmHelper: WindowManagerStateHelper, device: UiDevice) {
+ val caption = getCaptionForTheApp(wmHelper, device)
+ val maximizeButton =
+ caption
+ ?.children
+ ?.find { it.resourceName.endsWith(MAXIMIZE_BUTTON_VIEW) }
+ ?.children
+ ?.get(0)
+ maximizeButton?.click()
+ wmHelper.StateSyncBuilder().withAppTransitionIdle().waitForAndVerify()
+ }
+ /** Click close button on the app header for the given app. */
+ fun closeDesktopApp(wmHelper: WindowManagerStateHelper, device: UiDevice) {
+ val caption = getCaptionForTheApp(wmHelper, device)
+ val closeButton = caption?.children?.find { it.resourceName.endsWith(CLOSE_BUTTON) }
+ closeButton?.click()
+ wmHelper
+ .StateSyncBuilder()
+ .withAppTransitionIdle()
+ .withWindowSurfaceDisappeared(innerHelper)
+ .waitForAndVerify()
+ }
+
+ private fun getCaptionForTheApp(
+ wmHelper: WindowManagerStateHelper,
+ device: UiDevice
+ ): UiObject2? {
+ if (
+ wmHelper.getWindow(innerHelper)?.windowingMode !=
+ WindowingMode.WINDOWING_MODE_FREEFORM.value
+ )
+ error("expected a freeform window with caption but window is not in freeform mode")
+ val captions =
+ device.wait(Until.findObjects(caption), TIMEOUT_MS)
+ ?: error("Unable to find view $caption\n")
+
+ return captions.find {
+ wmHelper.getWindowRegion(innerHelper).bounds.contains(it.visibleBounds)
+ }
+ }
+}
diff --git a/tests/FsVerityTest/FsVerityTestApp/src/com/android/fsverity/Helper.java b/tests/FsVerityTest/FsVerityTestApp/src/com/android/fsverity/Helper.java
index 2ed4fec..c52be7c 100644
--- a/tests/FsVerityTest/FsVerityTestApp/src/com/android/fsverity/Helper.java
+++ b/tests/FsVerityTest/FsVerityTestApp/src/com/android/fsverity/Helper.java
@@ -27,6 +27,9 @@
import androidx.test.core.app.ApplicationProvider;
import androidx.test.platform.app.InstrumentationRegistry;
+import com.android.compatibility.common.util.AdoptShellPermissionsRule;
+
+import org.junit.Rule;
import org.junit.Test;
import java.io.FileOutputStream;
@@ -46,6 +49,12 @@
private static final long BLOCK_SIZE = 4096;
+ @Rule
+ public final AdoptShellPermissionsRule mAdoptShellPermissionsRule =
+ new AdoptShellPermissionsRule(
+ InstrumentationRegistry.getInstrumentation().getUiAutomation(),
+ android.Manifest.permission.SETUP_FSVERITY);
+
@Test
public void prepareTest() throws Exception {
Context context = ApplicationProvider.getApplicationContext();
diff --git a/tests/Input/src/com/android/server/input/InputManagerServiceTests.kt b/tests/Input/src/com/android/server/input/InputManagerServiceTests.kt
index 8d2b927..f6f766a 100644
--- a/tests/Input/src/com/android/server/input/InputManagerServiceTests.kt
+++ b/tests/Input/src/com/android/server/input/InputManagerServiceTests.kt
@@ -19,26 +19,17 @@
import android.content.Context
import android.content.ContextWrapper
-import android.hardware.display.DisplayManager
import android.hardware.display.DisplayViewport
-import android.hardware.display.VirtualDisplay
import android.hardware.input.InputManager
import android.hardware.input.InputManagerGlobal
-import android.os.InputEventInjectionSync
-import android.os.SystemClock
import android.os.test.TestLooper
import android.platform.test.annotations.Presubmit
import android.platform.test.annotations.RequiresFlagsDisabled
import android.platform.test.flag.junit.DeviceFlagsValueProvider
import android.provider.Settings
-import android.view.View.OnKeyListener
-import android.view.Display
-import android.view.InputDevice
-import android.view.KeyEvent
-import android.view.PointerIcon
-import android.view.SurfaceHolder
-import android.view.SurfaceView
import android.test.mock.MockContentResolver
+import android.view.Display
+import android.view.PointerIcon
import androidx.test.platform.app.InstrumentationRegistry
import com.android.internal.util.test.FakeSettingsProvider
import com.google.common.truth.Truth.assertThat
@@ -57,7 +48,6 @@
import org.mockito.Mockito.`when`
import org.mockito.Mockito.clearInvocations
import org.mockito.Mockito.doAnswer
-import org.mockito.Mockito.mock
import org.mockito.Mockito.never
import org.mockito.Mockito.spy
import org.mockito.Mockito.times
@@ -422,174 +412,6 @@
verify(wmCallbacks).notifyPointerDisplayIdChanged(overrideDisplayId, 0f, 0f)
thread.join(100 /*millis*/)
}
-
- private fun createVirtualDisplays(count: Int): List<VirtualDisplay> {
- val displayManager: DisplayManager = context.getSystemService(
- DisplayManager::class.java
- ) as DisplayManager
- val virtualDisplays = mutableListOf<VirtualDisplay>()
- for (i in 0 until count) {
- virtualDisplays.add(displayManager.createVirtualDisplay(
- /* displayName= */ "testVirtualDisplay$i",
- /* width= */ 100,
- /* height= */ 100,
- /* densityDpi= */ 100,
- /* surface= */ null,
- /* flags= */ 0
- ))
- }
- return virtualDisplays
- }
-
- // Helper function that creates a KeyEvent with Keycode A with the given action
- private fun createKeycodeAEvent(inputDevice: InputDevice, action: Int): KeyEvent {
- val eventTime = SystemClock.uptimeMillis()
- return KeyEvent(
- /* downTime= */ eventTime,
- /* eventTime= */ eventTime,
- /* action= */ action,
- /* code= */ KeyEvent.KEYCODE_A,
- /* repeat= */ 0,
- /* metaState= */ 0,
- /* deviceId= */ inputDevice.id,
- /* scanCode= */ 0,
- /* flags= */ KeyEvent.FLAG_FROM_SYSTEM,
- /* source= */ InputDevice.SOURCE_KEYBOARD
- )
- }
-
- private fun createInputDevice(): InputDevice {
- return InputDevice.Builder()
- .setId(123)
- .setName("abc")
- .setDescriptor("def")
- .setSources(InputDevice.SOURCE_KEYBOARD)
- .build()
- }
-
- @Test
- fun addUniqueIdAssociationByDescriptor_verifyAssociations() {
- // Overall goal is to have 2 displays and verify that events from the InputDevice are
- // sent only to the view that is on the associated display.
- // So, associate the InputDevice with display 1, then send and verify KeyEvents.
- // Then remove associations, then associate the InputDevice with display 2, then send
- // and verify commands.
-
- // Make 2 virtual displays with some mock SurfaceViews
- val mockSurfaceView1 = mock(SurfaceView::class.java)
- val mockSurfaceView2 = mock(SurfaceView::class.java)
- val mockSurfaceHolder1 = mock(SurfaceHolder::class.java)
- `when`(mockSurfaceView1.holder).thenReturn(mockSurfaceHolder1)
- val mockSurfaceHolder2 = mock(SurfaceHolder::class.java)
- `when`(mockSurfaceView2.holder).thenReturn(mockSurfaceHolder2)
-
- val virtualDisplays = createVirtualDisplays(2)
-
- // Simulate an InputDevice
- val inputDevice = createInputDevice()
-
- // Associate input device with display
- service.addUniqueIdAssociationByDescriptor(
- inputDevice.descriptor,
- virtualDisplays[0].display.displayId.toString()
- )
-
- // Simulate 2 different KeyEvents
- val downEvent = createKeycodeAEvent(inputDevice, KeyEvent.ACTION_DOWN)
- val upEvent = createKeycodeAEvent(inputDevice, KeyEvent.ACTION_UP)
-
- // Create a mock OnKeyListener object
- val mockOnKeyListener = mock(OnKeyListener::class.java)
-
- // Verify that the event went to Display 1 not Display 2
- service.injectInputEvent(downEvent, InputEventInjectionSync.NONE)
-
- // Call the onKey method on the mock OnKeyListener object
- mockOnKeyListener.onKey(mockSurfaceView1, /* keyCode= */ KeyEvent.KEYCODE_A, downEvent)
- mockOnKeyListener.onKey(mockSurfaceView2, /* keyCode= */ KeyEvent.KEYCODE_A, upEvent)
-
- // Verify that the onKey method was called with the expected arguments
- verify(mockOnKeyListener).onKey(mockSurfaceView1, KeyEvent.KEYCODE_A, downEvent)
- verify(mockOnKeyListener, never()).onKey(mockSurfaceView2, KeyEvent.KEYCODE_A, downEvent)
-
- // Remove association
- service.removeUniqueIdAssociationByDescriptor(inputDevice.descriptor)
-
- // Associate with Display 2
- service.addUniqueIdAssociationByDescriptor(
- inputDevice.descriptor,
- virtualDisplays[1].display.displayId.toString()
- )
-
- // Simulate a KeyEvent
- service.injectInputEvent(upEvent, InputEventInjectionSync.NONE)
-
- // Verify that the event went to Display 2 not Display 1
- verify(mockOnKeyListener).onKey(mockSurfaceView2, KeyEvent.KEYCODE_A, upEvent)
- verify(mockOnKeyListener, never()).onKey(mockSurfaceView1, KeyEvent.KEYCODE_A, upEvent)
- }
-
- @Test
- fun addUniqueIdAssociationByPort_verifyAssociations() {
- // Overall goal is to have 2 displays and verify that events from the InputDevice are
- // sent only to the view that is on the associated display.
- // So, associate the InputDevice with display 1, then send and verify KeyEvents.
- // Then remove associations, then associate the InputDevice with display 2, then send
- // and verify commands.
-
- // Make 2 virtual displays with some mock SurfaceViews
- val mockSurfaceView1 = mock(SurfaceView::class.java)
- val mockSurfaceView2 = mock(SurfaceView::class.java)
- val mockSurfaceHolder1 = mock(SurfaceHolder::class.java)
- `when`(mockSurfaceView1.holder).thenReturn(mockSurfaceHolder1)
- val mockSurfaceHolder2 = mock(SurfaceHolder::class.java)
- `when`(mockSurfaceView2.holder).thenReturn(mockSurfaceHolder2)
-
- val virtualDisplays = createVirtualDisplays(2)
-
- // Simulate an InputDevice
- val inputDevice = createInputDevice()
-
- // Associate input device with display
- service.addUniqueIdAssociationByPort(
- inputDevice.name,
- virtualDisplays[0].display.displayId.toString()
- )
-
- // Simulate 2 different KeyEvents
- val downEvent = createKeycodeAEvent(inputDevice, KeyEvent.ACTION_DOWN)
- val upEvent = createKeycodeAEvent(inputDevice, KeyEvent.ACTION_UP)
-
- // Create a mock OnKeyListener object
- val mockOnKeyListener = mock(OnKeyListener::class.java)
-
- // Verify that the event went to Display 1 not Display 2
- service.injectInputEvent(downEvent, InputEventInjectionSync.NONE)
-
- // Call the onKey method on the mock OnKeyListener object
- mockOnKeyListener.onKey(mockSurfaceView1, /* keyCode= */ KeyEvent.KEYCODE_A, downEvent)
- mockOnKeyListener.onKey(mockSurfaceView2, /* keyCode= */ KeyEvent.KEYCODE_A, upEvent)
-
- // Verify that the onKey method was called with the expected arguments
- verify(mockOnKeyListener).onKey(mockSurfaceView1, KeyEvent.KEYCODE_A, downEvent)
- verify(mockOnKeyListener, never()).onKey(mockSurfaceView2, KeyEvent.KEYCODE_A, downEvent)
-
- // Remove association
- service.removeUniqueIdAssociationByPort(inputDevice.name)
-
- // Associate with Display 2
- service.addUniqueIdAssociationByPort(
- inputDevice.name,
- virtualDisplays[1].display.displayId.toString()
- )
-
- // Simulate a KeyEvent
- service.injectInputEvent(upEvent, InputEventInjectionSync.NONE)
-
- // Verify that the event went to Display 2 not Display 1
- verify(mockOnKeyListener).onKey(mockSurfaceView2, KeyEvent.KEYCODE_A, upEvent)
- verify(mockOnKeyListener, never()).onKey(mockSurfaceView1, KeyEvent.KEYCODE_A, upEvent)
- }
}
private fun <T> whenever(methodCall: T): OngoingStubbing<T> = `when`(methodCall)
diff --git a/wifi/wifi.aconfig b/wifi/wifi.aconfig
index 6c4e4c3..3c734bc 100644
--- a/wifi/wifi.aconfig
+++ b/wifi/wifi.aconfig
@@ -1,4 +1,5 @@
package: "android.net.wifi.flags"
+container: "system"
flag {
name: "get_device_cross_akm_roaming_support"